JacquesC

Prof. Jacques Carette

2401 Reputation

17 Badges

20 years, 86 days
McMaster University
Professor or university staff
Hamilton, Ontario, Canada

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.

MaplePrimes Activity


These are replies submitted by JacquesC

The other possibility (which is what sqrt does anyways) is to use isqrt directly.  The advantage of that is that it always returns an integer, and you can check if it is 'exact' by squaring (which is very fast).

The other possibility (which is what sqrt does anyways) is to use isqrt directly.  The advantage of that is that it always returns an integer, and you can check if it is 'exact' by squaring (which is very fast).

It is really disappointing that jpmay's post is still messed up.  The quality of the displayed mathematics on mapleprimes has degraded, while a recent blog post over at Wolfram brags of the improvement to typesetting on their site!

Right now, there is no algorithm of the same generality as Risch's algorithm (which finds 'an' anti-derivative) for finding continuous anti-derivatives.  Some tricks help, like the well-known Lazard-Rioboo improvementDavid Jeffrey (and many co-authors) have written a number of papers on special classes of integrals for which this can be done.

The fundamental issue, at least in my eyes, is that the problem of computing an anti-derivative is a problem in algebra, while computing a continuous anti-derivative is a problem in analysis.  We know how to automate algebra, we don't know how to automate any parts of analysis which are not (somehow) reducible to algebra.

If Microsoft decides to compete in this space, things are likely to get quite interesting!  Already what they show as their sample plot looks gorgeous.

If Microsoft decides to compete in this space, things are likely to get quite interesting!  Already what they show as their sample plot looks gorgeous.

My mother tongue is French...  well, Quebecois to be precise on which dialect.  For the first year we knew each other, I could not properly pronounce my (now) wife's name as it has a 'th' in it, which is a sound that does not exist in French.

While I had no doubt that you knew what a kitchen sink was, I was less sure of the expression.  As Wikipedia says, when you "throw in the kitchen sink", it means that you add all sorts of stuff that is way over the top, in other words, something extravagant that does not really belong.  A kitchen sink in Maple is a piece of functionality which is more a curiosity than something actually useful.  Something that might make an interesting worksheet, but not really 'core' functionality.

My mother tongue is French...  well, Quebecois to be precise on which dialect.  For the first year we knew each other, I could not properly pronounce my (now) wife's name as it has a 'th' in it, which is a sound that does not exist in French.

While I had no doubt that you knew what a kitchen sink was, I was less sure of the expression.  As Wikipedia says, when you "throw in the kitchen sink", it means that you add all sorts of stuff that is way over the top, in other words, something extravagant that does not really belong.  A kitchen sink in Maple is a piece of functionality which is more a curiosity than something actually useful.  Something that might make an interesting worksheet, but not really 'core' functionality.

First, I hope you knew of the standard english phrase that refers to kitchen sinks?

There are various routines in Maple's standard library which seem outlandish.  My personal favourite is MOLS.  There a number of pieces of code on the Application Center as well as here on primes that should be included in Maple's standard library before that one!

The other category is the "routine that does everything".  There are 3 prime candidates for that: solve, is and pdsolve.  There are a large number of problems that can be 'encoded' into what any of those 3 commands can do.  Obviously you can coerce pdsolve to solve algebraic problems, ODEs and integration problems, but also you can use it to factor polynomials, decide if some expressions are zero [though solve is even better at that], simplify expressions, compute Groebner bases (and so row-reduce a matrix and compute GCDs), and even solve some classes of optimization problems.  And sometimes weird things happen: for certain classes of expressions solve is better at figuring if that expression is equal to zero than simplify is!

First, I hope you knew of the standard english phrase that refers to kitchen sinks?

There are various routines in Maple's standard library which seem outlandish.  My personal favourite is MOLS.  There a number of pieces of code on the Application Center as well as here on primes that should be included in Maple's standard library before that one!

The other category is the "routine that does everything".  There are 3 prime candidates for that: solve, is and pdsolve.  There are a large number of problems that can be 'encoded' into what any of those 3 commands can do.  Obviously you can coerce pdsolve to solve algebraic problems, ODEs and integration problems, but also you can use it to factor polynomials, decide if some expressions are zero [though solve is even better at that], simplify expressions, compute Groebner bases (and so row-reduce a matrix and compute GCDs), and even solve some classes of optimization problems.  And sometimes weird things happen: for certain classes of expressions solve is better at figuring if that expression is equal to zero than simplify is!

The main point is that although this function is indeed simple, there are way too many bad ways to code it.  Furthermore, the way the current learning material on Maple is done, the bad ways are encouraged, and only a somewhat advanced Maple programmer will actually have learned enough to do it right!  This ends up being good software engineering too, since the 'best' way to do this has evolved and will continue to do so, and thus it is best to enshrine that in one place.  Otherwise there is sub-optimal code all over the library, and that is too high a maintenance cost to 'fix', so it bit rots.

Another point is that Maple's library already contains at least 3 kitchen sinks, so what's another little function, especially one that is complimentary to one that already exists?

You do have a good point that such a function should (optionally) deal with polynomials in different bases, that would be useful.

 

The main point is that although this function is indeed simple, there are way too many bad ways to code it.  Furthermore, the way the current learning material on Maple is done, the bad ways are encouraged, and only a somewhat advanced Maple programmer will actually have learned enough to do it right!  This ends up being good software engineering too, since the 'best' way to do this has evolved and will continue to do so, and thus it is best to enshrine that in one place.  Otherwise there is sub-optimal code all over the library, and that is too high a maintenance cost to 'fix', so it bit rots.

Another point is that Maple's library already contains at least 3 kitchen sinks, so what's another little function, especially one that is complimentary to one that already exists?

You do have a good point that such a function should (optionally) deal with polynomials in different bases, that would be useful.

 

My main point, and the reason why I put this in a separate blog post, was that there were a lot of possible variants.  And that, past some point, the only thing to choose between the variants was a matter of personal taste.  The version you have chosen is very clean indeed, and may well be the version I might have chosen for production code.

The only improvement I can think of right now is to change the first line to

posMaps,negMaps := seq(map((perm::list) -> unapply([seq(x[perm[i]],i=1..nops(perm))],x),perms),perms in [posPerms,negPerms]);

which basically just makes things faster for large permutations. Use printlevel := 10 to see the change this makes. I am basically using Maple's expression manipulation tools as a cheap partial evaluator to generate inline code instead of going through lexical scoping to achieve the same ends.

Perhaps we should use this thread to put links to newly released software and packages in computer algebra?  Note that you might also want to create a book page with links to all these systems.

First 32 33 34 35 36 37 38 Last Page 34 of 119