## JacquesC

Prof. Jacques Carette

## 2396 Reputation

19 years, 127 days
McMaster University
Professor or university staff

## Social Networks and Content at Maplesoft.com

From a Maple perspective: I first started using it in 1985 (it was Maple 4.0, but I still have a Maple 3.3 manual!). Worked as a Maple tutor in 1987. Joined the company in 1991 as the sole GUI developer and wrote the first Windows version of Maple (for Windows 3.0). Founded the Math group in 1992. Worked remotely from France (still in Math, hosted by the ALGO project) from fall 1993 to summer 1996 where I did my PhD in complex dynamics in Orsay. Soon after I returned to Ontario, I became the Manager of the Math Group, which I grew from 2 people to 12 in 2.5 years. Got "promoted" into project management (for Maple 6, the last of the releases which allowed a lot of backward incompatibilities, aka the last time that design mistakes from the past were allowed to be fixed), and then moved on to an ill-fated web project (it was 1999 after all). After that, worked on coordinating the output from the (many!) research labs Maplesoft then worked with, as well as some Maple design and coding (inert form, the box model for Maplets, some aspects of MathML, context menus, a prototype compiler, and more), as well as some of the initial work on MapleNet. In 2002, an opportunity came up for a faculty position, which I took. After many years of being confronted with Maple weaknesses, I got a number of ideas of how I would go about 'doing better' -- but these ideas required a radical change of architecture, which I could not do within Maplesoft. I have been working on producing a 'better' system ever since.

## Equations are not points...

The thing is that your T function above returns `T = ...` as its value. In other words, it is a function call (to the function =) with 2 arguments. You need to wrap a call to `rhs` in your definition of T and L and all should work. ie `T := (w, r) -> rhs(Maximize(Profit(T, L, w, r), assume = nonnegative)[2][1]);` One minor point: for long-term maintainability of your code, I suggest you use Optimization:-Maximize rather than relying on having a 'with' being done first.

When you make a mistake in a post, please edit the previous one instead of simply creating a new one! With R=10, r=2, n=11, I get a nice picture from `plots[spacecurve]([R + r*cos(n*theta), theta, r*sin(n*theta)], theta=0..2*Pi, coords=cylindrical, numpoints=200,scaling=constrained);`

## An example...

I will attempt to use your formulas above to show what I mean. First, I would define the main formula as `a1f := -(PSX*sin(s1)*tr-RT_FR+mb*tr*vHn*v1)/(mb*tr^2+Ic);` Then, if I have values for some of the parameters, I would go `a1_1 := eval(a1f, {s1=...,tr=...,Ic=...}):` and use a1_1 from now on. If you then want to instantiate RT_FR, you can do `a1_2 := eval(a1_1, RT_FR = RTFR(v1));`

## evaluation order matters...

In the first case, when a1 is created, RT_FR has a value, and so this value is used in a1. In the second case, when a1 is created, RT_FR has no value, so the expression for a1 contains a reference for RT_FR. Now, when the value of a1 is printed, the value of RT_FR is looked up and used. In certain procedures that use non-standard evaluation rules, the difference between an expression and its value starts to be noticeable (and indeed confusing). Personally I use assignment to define abbreviations (ie give names to formulas), and always use 2-argument eval to give values to parameters in formulas (when they are expressions). Counting on the side-effects of assignment to ``do the right thing'' fails just often enough to be irritating. That and I am a bit of a purist: assignment is a CS thing, while formulas and evaluation are mathematical concepts.

## Look at ``define''...

Take a look at ?define. Also, depending on whether you want general non-commutativity or if you're in a semi-classical setting (like Weyl, Ore or Clifford) algebras, then there are specific packages that exist for those cases.

## Expressions vs functions...

Maple likes to see "inside" a function, to know how many variables it depends on and much more. What are called functions in Maple (really a special case of procedures) is ``supposed'' to be a black box[1], and you are not supposed to look inside. So, in Maple, most things work best with expressions, as those are completely transparent. Some things require functions, but those are easy to create (via `unapply`). If it happens that your students already know some logic, you can explain it to them as the difference between syntax and semantics: expressions are purely syntactic, while ``functions'' are (semi-)semantic. The various manipulations are correspondingly different. [1] that functions in Maple are not pure black boxes is one of the features that Maple has borrowed from Lisp. This is both wonderful and annoying, all at the same time. It makes writing program manipulation code very easy, but also makes explaining Maple to beginners very tricky, at least if you do not want to lie and/or over-simplify things.

## Mgfun, etc...

[I am not reply-ing to the above message, because things have gotten too squeezed onto the RHS of the screen]. You need to set the variable 'libname' to include that directory. Take a look at the help pages for `libname` and `LibraryTools`.

## Numerical evaluation of EllipticE...

Axel's recommendation is a good one. I would also look in ToMS (Transactions on Mathematical Software), which publishes many numerical evaluation algorithms. In this particular case, a combination of series expansions at z=0, z=1 and asymptotic expansions at z=infinity will probably work well. Maple should be able to derive all of these (from the differential equation).

## Can you be more precise?...

From the title, it seems you are trying to combine Maple, Fortran and Elliptic integrals. This is a non-trivial endeavour (which Maple will not quite do automatically), but one which is well within reach. If you give us just a bit more details, I think we can help, and this can be done.

## Post cut off...

You used a raw < (or >) in your post, which causes it to be cut off (it is treated as html). You need to write &lt; for < and &gt; for >.

## Yes...

Using the context menus with the right options turned on, you should be able to create a Document (not a worksheet) that looks like that. Context menu usage implies that this is done by hand, by the user, and not automated.

## < and step-by-step...

You can use a raw < in a post, that is interpreted as HTML - use &lt; instead. Maple does not tend to say how it solves most problems (exception: the Student package). You can ask it to give you some information via `infolevel[all] := 1;` (or more), but 1) be prepared to be flooded with information 2) be prepared to be puzzled by the results. The way Maple solves a lot of problems uses far more advanced mathematics than is usually taught in undergraduate courses, even to solve simple problems. So the way Maple solves something may not enlighten you much, other than to tell you about some mathematics you might be interested in learning.

## 3 different answers to that question...

If you do it via the GUI in Standard, in Classic, or via a maple command, there are actually 3 completely different ways that this gets done (and so different results, with pros and cons to each). [And yes, 3 different ways to get the same thing done is, shall we say, sub-optimal!]

## Go for it in style!...

Do it via a book page posting -- you'll leap right over the magic 80. And it will force you to think of something that makes you happy to have passed that threshold.

## convert to a list of letters...

If you need to write NthWord yourself, then the answer to your question is
```> convert("abc", list);
["a", "b", "c"]```
 First 11 12 13 14 15 16 17 Last Page 13 of 23
﻿