As part of a presentation to students, I will have to support the
claim that "Mathematica is better than other systems when it comes to
symbolic computations". Some experts in other systems will be
giving a 15 min presentation to convince the audience of the contrary,
and then it will be my turn.
At this point I am quite clueless on how to make my point across.
First of all, I am not at all familiar with any other system's
symbolic toolboxes, so I don't know what are the weaknesses. Also, I
am not sure what kind of demo could really make an impression on
graduate students and colleagues.
Has any of you any experience on this? Ideas? Suggestions?
Thank you!
--
Prof. Paolo Bientinesi, Ph.D.
RWTH Aachen University, AICES
pau...@aices.rwth-aachen.de
pau...@alumni.cs.utexas.edu
I'm not sure direct comparison and discussion of other products
is encouraged in this forum.
It might be better to ask experts directly?
Peter
2008/9/30 Paolo Bientinesi <pau...@aices.rwth-aachen.de>
I think he''s looking for help from the Mathematica inclined people in
this newsgroup, so he can give a good presentation about Mathematica,
so this particular line of discussion should be encouraged, IMO. So
anyone who has something to suggest should be encouraged to help him
out so that he can present a good argument about the benefits of
choosing Mathematica as a solution.
-Bob
As part of a presentation to students, I will have to support the
claim that "Mathematica is better than other systems when it comes to
symbolic computations". Some experts in other systems will be
giving a 15 min presentation to convince the audience of the contrary,
and then it will be my turn.
At this point I am quite clueless on how to make my point across.
First of all, I am not at all familiar with any other system's
symbolic toolboxes, so I don't know what are the weaknesses. Also, I
am not sure what kind of demo could really make an impression on
graduate students and colleagues.
Has any of you any experience on this? Ideas? Suggestions?
Thank you!
--
Prof. Paolo Bientinesi, Ph.D.
RWTH Aachen University, AICES
pau...@aices.rwth-aachen.de
pau...@alumni.cs.utexas.edu
Hello Paolo!
Suggestion one: if the other experts presenting are willing to cooperate to
some extent, to prevent the presentation from becoming an apples vs. oranges
presentation; you may wish to ask them what sort of problems they are
addressing. With that information, if it is possible to get it, you may
wish to ask this group what examples they have on hand or have seen that
would be good to show grad students and colleagues.
Suggestion two: you could consider using the demonstration of Mathematica
used by Heikki Ruskeepaa in Chapter 1 of the Mathematica Navigator because
it is a visually impressive, fast paced look at the range and capability of
Mathematica by looking at Merseene numbers. The usefulness of this
suggestion depends a lot on whether the audience already knows anything
about Mathematica or not.
Suggestion three: you may well be obligated to give the entire
presentation, however, if time permits, you might be able to ask a graduate
student to either make the presentation or assist with the presentation. If
possible this should be an articulate, beautiful woman. If any of the grad
students I know heard a beautiful woman say something good about
Mathematica, they would embrace Mathematica as the best of all possible
symbolic computational tools.
Suggestion four: share this challenge with your Mathematica representative.
With a challenge like this coming up, they might be willing to offer some
ideas, assistance, presentation examples, etc.
Comment: actually, I am so happy with Mathematica that I know either
nothing or next to nothing about any competing systems.
Good Luck!
Bill Bohrer
boh...@hughes.net
I expect that you already got several replies off-list, but here are a
few more random tips (I won't attempt *comparing* Mathematica with other
programs, I'll just highlight its strong points):
1. Don't present Mathematica as simply a computer algebra system. There
are other areas it is very good at.
In particular, it is very good at processing/transforming complex data
sets, and it has very good plotting capabilities.
Here's a non-CAS oriented comparison of programs that also includes some
benchmarks: http://www.scientificweb.com/ncrunch/
2. Make sure that you focus on Mathematica's powerful pattern matching
capabilities. This is equally useful for both data processing and
computer algebra.
Here's a demo on the latter:
http://reference.wolfram.com/mathematica/tutorial/AnExampleDefiningYourOwnIntegrationFunction.html
You can also mention that Mathematica primarily (but not exclusively)
uses the functional programming paradigm. But 15 minutes are just not
enough to explain what this means and why it is advantageous for certain
tasks.
3. Talk about how easy it is to create custom graphics.
Unlike in some other systems, where one uses instructions such as "draw
a line from point 1 to point 2", graphics are defined declaratively.
Just list a set of graphics primitives. Here's a demo:
rotate90[{x_, y_}] := {-y, x}
koch[p1_, p2_, n_] :=
{koch[p1, p1 + (p2 - p1)/3, n - 1],
koch[p1 + (p2 - p1)/3, (p1 + p2)/2 + Sqrt[3]/6 rotate90[p2 - p1],
n - 1],
koch[(p1 + p2)/2 + Sqrt[3]/6 rotate90[p2 - p1], p2 - (p2 - p1)/3,
n - 1],
koch[p2 - (p2 - p1)/3, p2, n - 1]}
koch[p1_, p2_, 0] := Line[{p1, p2}]
Manipulate[
Graphics[koch[{0, 0}, {1, 0}, n]],
{n, 1, 5, 1}
]
Graphics are expressions, too. They can be transformed like any other
expression:
Graphics[koch[{0, 0}, {1, 0}, 3]] /.
Line[{p1_, p2_}] :> Circle[(p1 + p2)/2, Norm[p2 - p1]]
4. Depending on your audience it might be a good or a bad idea to show
that Mathematica is a fun program: It can generate sounds as waveforms
or even MIDI music:
http://demonstrations.wolfram.com/topic.html?topic=Music&limit=100
5. And of course browse the demonstrations to come up with ideas!
http://demonstrations.wolfram.com/
I am sure that everyone will appreciate Manipulate[].
Transpose[
Sort[Transpose[Eigensystem[RandomReal[{-1, 1}, {6, 6}]]],
Re[#2[[1]]] < Re[#1[[1]]] ||
Re[#2[[1]]] == Re[#1[[1]]] && Im[#2[[1]]] < Im[#1[[1]]] &]]
I think this also is a good example of the use of functional programming,
and it helped me to get in to it.
In Mathematica we are thus able to sort any kind of "objects" with any kind
of sorting criteria, thanks to the generality of the language.
Best regards
Ingolf Dahl
Sweden
-----Original Message-----
From: Paolo Bientinesi [mailto:pau...@aices.rwth-aachen.de]
Sent: 30 September 2008 13:34
Subject: Comparison between Mathematica and other symbolic systems
Hi everybody,
As part of a presentation to students, I will have to support the claim that
"Mathematica is better than other systems when it comes to symbolic
computations". Some experts in other systems will be giving a 15 min
presentation to convince the audience of the contrary, and then it will be
my turn.
At this point I am quite clueless on how to make my point across.
First of all, I am not at all familiar with any other system's symbolic
toolboxes, so I don't know what are the weaknesses. Also, I am not sure what
kind of demo could really make an impression on graduate students and
colleagues.
Has any of you any experience on this? Ideas? Suggestions?
Thank you!
> As part of a presentation to students, I will have to support the
> claim that "Mathematica is better than other systems when it comes to
> symbolic computations".
isn't this quite a stupid claim? Wouldn't it be necessary to have
information on what exactly people try to achieve to choose a "best"
system? And in many cases, you probably will need more than one system
to get a result: e.g. I know from other posts that there are integrals
that mathematica can't do, but another system can. Of course there are
other integrals (I'm sure a lot more :-) that mathematica can do but the
other system can't. So depending on which one you want to solve, your
rating might vary...
> Some experts in other systems will be
> giving a 15 min presentation to convince the audience of the contrary,
> and then it will be my turn.
If it is about symbolic computations only, I think it will always be
possible to find examples that another, probably more specialiced,
system can do better. If the students work on a specialiced field, e.g.
all they do is finding Groebner bases of huge polynomial systems or
solving multiloop integrals in quantum field theory by recursion, they
will probably need specialized systems. The strength of mathematica is
that it is an all purpose system which integrates all kind of algorithms
and functionalities - not only symbolic ones - in a very consistent way.
It is very good at almost everything, but probably not the best for
every single specific task.
> At this point I am quite clueless on how to make my point across.
> First of all, I am not at all familiar with any other system's
> symbolic toolboxes, so I don't know what are the weaknesses. Also, I
> am not sure what kind of demo could really make an impression on
> graduate students and colleagues.
>
> Has any of you any experience on this? Ideas? Suggestions?
I would concentrate on the strong parts of mathematica, which are in my
opinion:
* It is a (well) integrated all purpose system
* I think it has an extraordinary strong language design
* It has a strong pattern matcher
* The well known symbolic algorithms are probably all
implemented, and in some areas there might be (much) more than just
the common standard.
* Notebooks are a very powerful way to store all kind of scientific
information in one place along with the calculations and can even be
a starting point for publications. Some, but not all systems have
something comparable.
* Unlike most other CAS Mathematica is quite strong in Numerics, so you
won't need to switch to something else when "filling in the numbers"
* Powerful visualization with Graphics(3D) and Dynamic/Manipulate in
Version 6
When choosing a system, I think one needs to answer these questions:
1) can the system solve the problem at hand
2) how much effort is it to feed the problem to the system
3) how efficient is the system in calculating the solution
when the answer to question one is true for mathematica (which I think
is true for all but some very special cases), I think it will
outperform other systems considering question 2 in almost every case
(assuming some familiarisation with its concepts). Considering question
3 the mileage may vary, but usually the skills of the person
implementing the solution are much more important than the pure
performance of the system...
hth,
albert
Ingolf Dahl wrote:
> I do not know how this is example is interesting or how it is done in other
> systems, but once, 14 years back, it convinced me that I should use
> Mathematica for a specific problem. I wanted to sort the eigenvectors of a
> real matrix according to decreasing size of the real part of the
> eigenvalues. For complex eigenvalue pairs I wanted the eigenvalue with
> positive imaginary part sorted first. I just wanted to specify the sorting
> rule, and did not feel for writing the sorting algorithm from scratch. This
> is how I solved it in Mathematica
>
> Transpose[
> Sort[Transpose[Eigensystem[RandomReal[{-1, 1}, {6, 6}]]],
>
> Re[#2[[1]]] < Re[#1[[1]]] ||
> Re[#2[[1]]] == Re[#1[[1]]] && Im[#2[[1]]] < Im[#1[[1]]] &]]
>
> I think this also is a good example of the use of functional programming,
> and it helped me to get in to it.
> In Mathematica we are thus able to sort any kind of "objects" with any kind
> of sorting criteria, thanks to the generality of the language.
--
Murray Eisenberg mur...@math.umass.edu
Mathematics & Statistics Dept.
Lederle Graduate Research Tower phone 413 549-1020 (H)
University of Massachusetts 413 545-2859 (W)
710 North Pleasant Street fax 413 545-1801
Amherst, MA 01003-9305
>When choosing a system, I think one needs to answer these questions:
>1) can the system solve the problem at hand
>2) how much effort is it to feed the problem to the system
>3) how efficient is the system in calculating the solution
>when the answer to question one is true for mathematica (which I
>think is true for all but some very special cases), I think it will
>outperform other systems considering question 2 in almost every case
>(assuming some familiarisation with its concepts). Considering
>question 3 the mileage may vary, but usually the skills of the
>person implementing the solution are much more important than the
>pure performance of the system...
Which really says 2) is the most important consideration. But I
would expand 2) to be the amount of time to input the problem
*and* verify the input has been done correctly. In my
experience, the time to verify/debug input is by far where most
of the effort is spent.
2008/10/3 Murray Eisenberg <mur...@math.umass.edu>
I'm really not attempting to re-open the functional vs procedural
programming battle here, but I'd offer a couple or three observations on
the above:
1) Commands like Sort[ ], Transpose[ ], Re[ ] are evidently "functions"
and I suppose these functions contain massive levels of sophisticated
functional programming (and pattern matching) in their internals -- --
but just using them as functions doesn't, it seems to me, really
constitute hard-core "functional programming" by those users who do
this.
Their names are ordinary English or mathematical terms; what they do (or
are likely to do) will seem obvious to even the most unsophisticated
user; and they can be readily used even by unsophisticated (or entirely
procedurally oriented) users, at least in their default modes, without
even knowing what functional programming is -- that is, without such
users learning (or having to remember) any kind of arcane symbols or
functional programming notations or structures, and especially any
symbols and notations that are not used in and familiar from, say,
elementary algebra or calculus.
Just using -- or even defining for yourself -- a named function (macro,
subroutine, whatever) doesn't seem to me "functional programming" at any
very meaningful level; and doing this certainly doesn't depend on the
"generality" of Mathematica as a language. These same capabilities are
certainly present, and commonplace, in what I believe are labeled as
crudely "procedural languages" (FORTRAN, BASIC, etc).
2) Now it's certainly true that if you want to modify the default
behavior of Sort[ ], you do indeed have to be able to do (or more likely
copy and modify) what I'd agree is some very modest level of procedural
programming, as well illustrated in the example above:
Re[#2[[1]]] < Re[#1[[1]]] ||
Re[#2[[1]]] == Re[#1[[1]]] && Im[#2[[1]]] < Im[#1[[1]]] &]]
But even I (a resolutely procedural type) would have little trouble with
this particular example, since the level of 'arcanity' is really pretty
limited: The "#n" notation for arguments is familiar from TeX (and what
other languages?); the "||" and "&&" notations are familiar from
low-level logic classes; and the "==" and "[[ ]]" notations are pretty
basic Mathematica. The only 'arcane' thing (for me) is the single "&"
at the end, which I have no idea why is there, but I'll dutifully copy
it.
3) As a fallout from this, I'll continue to argue that if Mathematica
really wants to expand and serve the widest possible customer base --
e.g., high school math and physics students, college students (and grad
students) in nontechnical fields, working engineers in industry, etc. --
for those audiences (aka customers) it should:
1) Substantially sharpen its focus on making and keeping Mathematica
simpler and easier to use and much easier to learn for those audiences,
including a focus on better documentation and fewer complexities and
"gotchas" (which is not imply taking away any of the pattern matching
and functional programming underpinnings that are so crucial to other,
more sophisticated users of Mathematica); and
1) Drastically reduce its prices.
--AES, Oct 2008
> On 10/3/08 at 6:41 AM, aw...@gmx-topmail.de (Albert Retey) wrote:
>
> >When choosing a system, I think one needs to answer these questions:
>
> >1) can the system solve the problem at hand
> >2) how much effort is it to feed the problem to the system
> >3) how efficient is the system in calculating the solution
>
> Which really says 2) is the most important consideration. But I
> would expand 2) to be the amount of time to input the problem
> *and* verify the input has been done correctly. In my
> experience, the time to verify/debug input is by far where most
> of the effort is spent.
No mention at all of "how easy it is to learn to use the system" (and
remember how to use it between infrequent uses) ?!?!?!?
AES wrote:
> In article <gc7fsf$eo7$1...@smc.vnet.net>,
> Bill Rowe <read...@sbcglobal.net> wrote:
>
>> On 10/3/08 at 6:41 AM, aw...@gmx-topmail.de (Albert Retey) wrote:
>>
>>> When choosing a system, I think one needs to answer these questions:
>>> 1) can the system solve the problem at hand
>>> 2) how much effort is it to feed the problem to the system
>>> 3) how efficient is the system in calculating the solution
>> Which really says 2) is the most important consideration. But I
>> would expand 2) to be the amount of time to input the problem
>> *and* verify the input has been done correctly. In my
>> experience, the time to verify/debug input is by far where most
>> of the effort is spent.
>
> No mention at all of "how easy it is to learn to use the system" (and
> remember how to use it between infrequent uses) ?!?!?!?
>
--
complexGreater[z_, w_] :=
(Re[z] > Re[w]) || (Re[z] == Re[w] && Im[z] > Im[w])
evalGreater[edata1_, edata2_] :=
complexGreater[First@edata1, First@edata2]
esys = Eigensystem[RandomReal[{-1, 1}, {6, 6}]]
Transpose[Sort[Transpose[esys], evalGreater]]
That separates the data and operation upon the data from the definition
of the underlying comparison functions. And yes, in complexGreater I'd
put in the redundant parentheses, or at least the second pair.
Once I did that, I _might_ condense the whole thing if I were going to
do it just once, but certainly not if it were going to be re-used.
Then, of course, I'd define a function...
sortByEigenvalues[esys_]:=
Transpose[Sort[Transpose[esys], evalGreater]]
and then probably redo it so as to eliminate the need for evalGreater:
sortByEigenvalues[esys_]:=
Transpose[Sort[Transpose[esys],complexGreater[First@#1,First@#2]&]]
I'd still surely want to keep the complexGreater function, as that seems
a separate "chunk".
One thing I would still _not_ want to do would be to use the #1[[1]] and
#2[[1]] forms, which my eye finds too difficult to understand at a
glance -- too hard to separate the argument number from the Part number.
AES wrote:
>>>> Transpose[
>>>> Sort[Transpose[Eigensystem[RandomReal[{-1, 1}, {6, 6}]]],
>>>>
>>>> Re[#2[[1]]] < Re[#1[[1]]] ||
>>>> Re[#2[[1]]] == Re[#1[[1]]] && Im[#2[[1]]] < Im[#1[[1]]] &]]
>>>>
>>>> I think this also is a good example of the use of functional programming,
>>>> and it helped me to get in to it.
>>>> In Mathematica we are thus able to sort any kind of "objects" with any
>>> kind
>>>> of sorting criteria, thanks to the generality of the language.
>
> Re[#2[[1]]] < Re[#1[[1]]] ||
> Re[#2[[1]]] == Re[#1[[1]]] && Im[#2[[1]]] < Im[#1[[1]]] &]]
>
> But even I (a resolutely procedural type) would have little trouble with
> this particular example, since the level of 'arcanity' is really pretty
> limited: The "#n" notation for arguments is familiar from TeX (and what
> other languages?); the "||" and "&&" notations are familiar from
> low-level logic classes; and the "==" and "[[ ]]" notations are pretty
> basic Mathematica. The only 'arcane' thing (for me) is the single "&"
> at the end, which I have no idea why is there, but I'll dutifully copy
> it.
>
> 3) As a fallout from this, I'll continue to argue that if Mathematica
> really wants to expand and serve the widest possible customer base --
> e.g., high school math and physics students, college students (and grad
> students) in nontechnical fields, working engineers in industry, etc. --
> for those audiences (aka customers) it should:
>
> 1) Substantially sharpen its focus on making and keeping Mathematica
> simpler and easier to use and much easier to learn for those audiences,
> including a focus on better documentation and fewer complexities and
> "gotchas" (which is not imply taking away any of the pattern matching
> and functional programming underpinnings that are so crucial to other,
> more sophisticated users of Mathematica); and
>
> 1) Drastically reduce its prices.
>
> --AES, Oct 2008
>
--
Albert,
yes it is, but that's an edited version, necessary for the post to
appear on this list. Still, I have to disagree with you, as only a
minority of the users switch from system to another depending on their
needs. Most of us probably master one or at most two systems. That's
it.
Paolo
> I agree. The object is to persuade people how accessible Mathematica is, not
> how incredibly learned and expert the users need to be.
> Peter
Not certain what earlier words Peter is agreeing with, but I agree with
what Peter himself said -- perhaps edited to say:
"The [primary objectives should be] to persuade people how accessible
Mathematica [can be], not how incredibly learned and expert [its]
users need to be -- **and then to make it that accessible**."
>In article <gc7fsf$eo7$1...@smc.vnet.net>,
>Bill Rowe <read...@sbcglobal.net> wrote:
>>On 10/3/08 at 6:41 AM, aw...@gmx-topmail.de (Albert Retey) wrote:
>>>When choosing a system, I think one needs to answer these
>>>questions:
>>>1) can the system solve the problem at hand 2) how much effort is
>>>it to feed the problem to the system 3) how efficient is the
>>>system in calculating the solution
>>Which really says 2) is the most important consideration. But I
>>would expand 2) to be the amount of time to input the problem *and*
>>verify the input has been done correctly. In my experience, the
>>time to verify/debug input is by far where most of the effort is
>>spent.
>No mention at all of "how easy it is to learn to use the system"
>(and remember how to use it between infrequent uses) ?!?!?!?
The current version of Mathematica has more than 2900 built-in
symbols, with many of these having long lists of options. I
would expect any other system with capabilities equivalent to
Mathematica to have a similarly long list of built-in commands
and options. This number of commands and options is far too long
for infrequent users to remember. It would require a significant
reduction in this number to enable easy recall by infrequent
users. But that also implies a significant reduction in capability.
It is very hard to see how another system with equivalent
capability to Mathematica could be significantly easier for
infrequent users.
>2) Now it's certainly true that if you want to modify the default
>behavior of Sort[ ], you do indeed have to be able to do (or more
>likely copy and modify) what I'd agree is some very modest level of
>procedural programming, as well illustrated in the example above:
>Re[#2[[1]]] < Re[#1[[1]]] || Re[#2[[1]]] == Re[#1[[1]]] &&
>Im[#2[[1]]] < Im[#1[[1]]] &]]
But this need not have been done this way. It could have been done:
Ordering@(Re/@{##}) || Equal@@(Re/@{##}) && Ordering@(Im/@{##})&
From the perspective of someone not familiar with Mathematica
and its notation, this version is undoubtedly more opaque. But
for me, this is much clearer and easier to read. The issue of
determining what is being grouped by the numerous square
brackets has been eliminated.
Sort strings into dictionary order:
Sort[{"cat", "fish", "catfish", "Cat"}]
Sort by string length
SortBy[{"cat", "fish", "catfish", "Cat"}, StringLength]
but such things maybe are easily done in the other systems also? Sorting
playing-card is another possibility to illustrate the capability of
Mathematica. Some persons, able to generalize, would get the point, while
other would think that they never would desire to sort playing cards by a
CAS system.
(I just have to mention that I googled on the Sort command in another CAS
system, and found a discussion on how to avoid getting variables sorted
according to their machine addresses. I found that quite scaring!)
The topic of the thread was to compare Mathematica with other CAS systems,
not to persuade newbies to use a CAS system. Then Paolo B. should
concentrate on the strong sides of Mathematica.
The strong side of Mathematica is not that it is easily accessible, the
strong side is that it is useful and from start designed in a clever, logic
and systematic way to provide a unified approach to both symbolic and
numerical math, wiith a design which provides freedom and power to the user.
New and occasional users could find their way into the system via the
numerous live examples in the help system. Do not forget the arbitrary
numerical precision, the huge number range, the freedom to choose
programming style and the pattern matching!
And do not forget to mention MathGroup, with 92576 letters and almost always
pleasant answers: "We should not do YOUR homework, but anyway the answer
is..."
I do not think neither my wife, my daughter nor I would have been impressed
by a beautiful woman recommending Mathematica. And manipulate is a nice
command, the cream on the top, but it was not our reason to choose
Mathematica from the beginning. Or?
Ingolf Dahl
Sweden
> -----Original Message-----
> From: peter lindsay [mailto:pl...@me.com]
> Sent: den 4 oktober 2008 12:17
> To: math...@smc.vnet.net
> Subject:
> Comparison between Mathematica and other
>
> I agree. The object is to persuade people how accessible
> Mathematica is, not how incredibly learned and expert the
> users need to be.
> Peter
>
> > > Transpose[
> > > Sort[Transpose[Eigensystem[RandomReal[{-1, 1}, {6, 6}]]],
> > >
> > > Re[#2[[1]]] < Re[#1[[1]]] ||
> > > Re[#2[[1]]] == Re[#1[[1]]] && Im[#2[[1]]] < Im[#1[[1]]] &]]
> > >
> > > I think this also is a good example of the use of functional
> > > programming, and it helped me to get in to it.
> > > In Mathematica we are thus able to sort any kind of
> "objects" with
> > > any
> > kind
> > > of sorting criteria, thanks to the generality of the language.
> >
The single '&' to which you refer, makes what precedes is into a pure
function!
David Bailey
http://www.dbaileyconsultancy.co.uk