Maxima [L1 ] is an open-source work-(much-)alike to Mathematica [L2 ]. It descends from Macsyma [L3 ]. Its default interface is constructed with Tk.
It's also: 1) a car, 2) a princess, 3) the plural of the Latin & Dutch "maximum"
and the name of an ancient place, e.g. Cloaca Maxima [L4 ]
TV I'm looking into maxima for reasons of lack of mathematica license, and because there are at leasthalf a dozen applications I find interesting for mathematical symbolic manipulation, including a tcl formula manipulator, physics problems, maybe my string simulator, (electronic) network analysis, maybe drawing certain graphs, etc, and a bit of mathematical recreation of course.
I've downloaded the windows version, (see above) june 2004, which works fine, and shows for isntance these pictures by just a few clicks:
The welcome screen
A Riemann surface 3D plot from the examples
In the bottom window, double click on the blue links to make them work.
The 3D plot is not a perspective projection with fixed aspect ratio, it is not in that way correct, but it works interactive (clicking the mouse on it and translating makes it sort of rotate. Use a menu option to chose a seperate plot window.
There might be a version with a nicer special fonts prettyprinter, maybe on linux, I didn't try (yet).
A bit of a tutorial
Lets say as excercise we want to find the roots to the equation
[expr {$x*$x-1}]
I typed the stuff after the CX cursor (where X is the number of the line in the history), and pressed return, to define the function f of x:
(C5) f(x):=x^2-1; 2 (D5) f(x) := x - 1
The := defines the function, and it is printed in more or less normal mathematical form as a return value.
The semicolumn ';' at the end is obligatory, otherwise the parser will not recognize 'end of input', so one can enter more than one line as one command, ended by a ; and <Return>.
Now lets check for zeros in our function, by using the 'solve()' function, equating our function to zero, and solving that equation ofr 'x', type the stuff after the (C^), and Maxima returns the answer:
(C6) solve(f(x)=0,x); (D6) [x = - 1, x = 1]
Some special keys:
^G break the maxima interpreter, resume with :q to get back the normal prompt that also holds for resuming after an error alt-p scroll up to previous command. %pi short for PI in computations.
Maybe more interesting, we can solve the equations inverse symbolically:
(C8) solve(f(x)=y,x); (D8) [x = - SQRT(y + 1), x = SQRT(y + 1)]
Symbolic integration of our function:
(C13) integrate(f(x),x); 3 x (D13) -- - x 3
The second argument of the function is the integration variable. The same for differentiation:
(C14) diff(f(x),x); (D14) 2 x
lets see how invertable this is:
(C15) integrate(diff(f(x),x),x); 2 (D15) x (C16) diff(integrate(f(x),x),x); 2 (D16) x - 1
When differentiating first, we lose the constant!
Fractions are handy:
(C10) 1/6+1/4; 5 (D10) -- 12
as are 'infinite' or arbitrary precision numbers:
(C19) block([FPPREC:30],bfloat(10/6)); (D19) 1.66666666666666666666666666667B0
30 is the number of computation digits, 10/6 is what we are computing, and the B0 inthe result appears to be the exponent, so pow(10,0) in this case.