Mit dem Computer-Algebrasystem Maxima lösen Sie im Handumdrehen Kalkulationen – von der einfachen Schulaufgabe bis zur komplizierten mathematischen Gleichung.
Das freie CAS Maxima [1] blickt auf eine lange Geschichte zurück: Seine Entwicklung begann in den späten 1960er-Jahren am Massachusetts Institute of Technology (MIT) unter dem Namen Macsysma. Später entwickelte William Shelter vom US-Energieministerium (Department of Energy) es unter dem Namen DOE Macsyma weiter. 1998 erhielt Shelter die Erlaubnis, den Quellcode unter einer Open-Source-Lizenz zu veröffentlichen. Das resultierende Projekt erhielt den Namen Maxima.
Die Software steht in den Repositories der meisten Distributionen zum Abruf bereit. Unter Ubuntu installieren Sie es beispielsweise über die Pakete maxima und maxima-doc. Darüber hinaus existieren auch Versionen für Windows und MacOS. Alternativ gibt es Maxima als Online-Dienst, den Sie im Browser verwenden. Grafische Umgebungen wie Cantor oder wxMaxima erleichtern das Bedienen. Maxima bildet einen Teil des auf Python basierenden Mathematikprogramms Sage, das die Fähigkeiten vieler freier Mathematikanwendungen vereint.
Maxima auf der Kommandozeile
Nach der Installation starten Sie die Software mit dem Aufruf maxima. Es erscheint ein Input-Prompt (%i1), hinter dem Sie ein Kommando eingeben. Nach einem Drücken auf die Eingabetaste nimmt die Software die Berechnungen vor und gibt das Ergebnis hinter dem zugehörigen Output-Prompt (%o1) aus. Anschließend wartet Maxima am nächsten, fortlaufend nummerierten Input-Prompt (%i2) auf eine erneute Eingabe. Listing 1 zeigt eine Maxima-Session mit einigen einfachen Rechenbeispielen.
Listing 1
$ maxima (%i1) 4+4; (%o1) 8 (%i2) 2^50; (%o2) 1125899906842624 (%i3) 6/18; 1 (%o3) - 3 (%i4) 6/18,numer; (%o4) 0.3333333333333333 (%i5) sqrt(-1); (%o5) %i (%i6) a:5; (%o6) 5 (%i7) b:6$ (%i8) a+b; (%o8) 11 (%i9) integrate(1/x^n,x); Is - n equal to - 1? y; (%o9) log(x) (%i10) integrate(1/x^n,x); Is - n equal to - 1? n; 1 - n x (%o10) ------ 1 - n (%i11) fpprintprec:15; bfloat(%pi); (%o11) 15 (%o12) 3.14159265358979b0 (%i13) quit();
Nach der Startmeldung geben Sie am ersten Input Prompt %i1 die Aufgabe 4+4; ein. Das Semikolon schließt die Eingabe ab, und Maxima gibt das Ergebnis 8 aus. Da Maxima mit beliebig vielen Stellen rechnet, löst es auch Aufgaben wie 2^50;, an der schon viele Taschenrechner wegen ihrer begrenzten Rechengenauigkeit scheitern.
Wie die Software mit Brüchen umgeht, zeigt die Eingabe 6/18; am Prompt %i3: Maxima liefert als Ergebnis den Bruch 1/3, ohne das dezimale Ergebnis 0,333333 auszugeben. Das CAS rechnet mit exakten Werten, der dezimale Wert wäre nur eine Näherung. Um einen solchen zu erhalten, ergänzen Sie die Eingabe mit dem Flag numer.
Am Prompt %i3 soll Maxima die Quadratwurzel aus -1 berechnen, was keiner reellen Zahl entspricht. Da Maxima aber auch mit komplexen Zahlen umgehen kann, gibt es die imaginäre Einheit i zurück – um sie von der normalen Variablen i zu unterscheiden, hier als %i.
Anschließend weisen Sie am sechsten Prompt der Variablen a den Wert 5 zu. Die Wertzuweisung erfolgt hier nicht mit dem Gleichheitszeichen, sondern mit dem eher unüblichen Doppelpunkt. Das liegt daran, dass die Mathematik = für Gleichungen benötigt. Mit dem Doppelpunkt als Zuweisungszeichen lässt sich einer Variablen eine komplette Gleichung zuweisen, etwa eq1 : x^2-4*x+1=0;, die dann später das Kommando solve(eq1, x); löst.
Neben dem Semikolon kann auch das Dollarzeichen $ als Abschluss dienen. In diesem Fall zeigt Maxima das Ergebnis nicht an, wie am Prompt %i7 bei der Variablenzuweisung b:6$ zu sehen.
Erscheint eine Aufgabe nicht lösbar, kommt es vor, dass Maxima wie an den Prompts %i9 und %i10 weitere Fragen stellt. Im konkreten Fall liefert das Integral für einen Exponenten von 1 Ergebnisse, die sich von jenen für einen abweichenden Exponenten unterscheiden.
Neben beliebig großen Integerzahlen beherrscht Maxima auch beliebig genaue Fließkommazahlen. Standardmäßig verwendet es dafür Zahlen doppelter Genauigkeit, bfloat() jedoch gibt eine Bigfloat-Zahl aus. Dabei lässt sich die Anzahl der gewünschten Kommastellen mit der Variablen fpprintprec einstellen.
Der Befehl am Prompt %i11 liefert beispielsweise die ersten 15 Stellen der Konstanten Pi (in Maxima: %pi) aus. Wie in anderen Programmiersprachen trennt auch hier ein Semikolon mehrere Kommandos einer Zeile. Der Befehl quit(); beendet Maxima.
Mathematische Aufgaben
Für ein Programm wie Maxima, dessen Handbuch mehr als 1100 Seiten umfasst, lassen sich nicht alle Funktionen in einem Artikel darstellen. Jedoch folgen einige Beispiele, die Ihnen zeigen, was Maxima alles ermöglicht. Dazu zählen das Lösen von Gleichungen, Umformungen sowie Differential- und Integralrechnungen. Anhaltspunkte für weitere Möglichkeiten liefern die Dokumentation sowie die Maxima-Hilfe (siehe Kasten “Maxima: Hilfesystem”).
Maxima: Hilfesystem
Maxima bietet ein sehr umfangreiches Hilfesystem. Mit dem Befehl ? Funktion oder alternativ describe(Funktion); rufen Sie die Hilfe zur jeweiligen Funktion auf. Kennen Sie deren Namen nicht genau, hilft ?? Funktion oder alternativ apropos(Funktion); weiter. Ähnlich wie in der Shell aktivieren diese Befehle eine Suche, die Funktionen ausgibt, in deren Beschreibung das Schlüsselwort vorkommt. Daneben bietet die Software für einige Funktionen noch Demos beziehungsweise Beispiele, die Sie mit demo() beziehungsweise example() aufrufen, etwa demo("trgsmp"); oder example("integrate");.
Darüber hinaus bietet das grafische Frontend wxMaxima Hilfe sowohl über das Menü als auch über den Kontext an: Drücken Sie [F1] über einem Schlüsselwort, öffnet sich ein Hilfefenster mit einer Erklärung (Abbildung 1). Das umfangreiche Handbuch (PDF, HTML, EPUB [4]) lässt sich ebenfalls über die wxMaxima-Hilfe abrufen.

Abbildung 1: Das Hilfefenster von wxMaxima zeigt hier alle Fundstellen zum Suchbegriff solve (links) sowie die Erklärung zum ersten Treffer (rechts).
Gleichungen und Gleichungssysteme löst Maxima problemlos. Listing 2 zeigt Beispiele für die Suche nach einer quadratischen Gleichung (auch symbolisch), einem linearen Gleichungssystem und schließlich nach den Nullstellen einer Polynomgleichung. Es folgen die Differenzierung eines Ausdrucks sowie die Berechnung eines unbestimmten Integrals und einer bekannten Taylor-Reihenentwicklung.
Am Input-Prompt %i9 sehen Sie ein Beispiel, in dem Maxima Umformungen vornimmt, also konkret im Ausdruck x+y+z die Variable x durch y+1 ersetzt. Anschließend expandiert das CAS einen Ausdruck (multipliziert ihn also aus) und berechnet die Faktoren eines Polynoms. Für umfangreichere Vereinfachungen stellt Maxima unter anderem die Funktionen ratsimp() für rationale Ausdrücke sowie trigsimp() für trigonometrische Vereinfachungen zur Verfügung.
Listing 2
(%i1) eq1:x^2+x+c=0; 2 (%o1) x + x + c = 0 (%i2) solve(eq1,x); 1 + sqrt(1 - 4 c) sqrt(1 - 4 c) - 1 (%o2) [x = - -----------------, x = -----------------] 2 2 (%i3) solve([x+y+z=4,3*x+4*y=z,x+z=4],[x,y,z]); (%o3) [[x = 1, y = 0, z = 3]] (%i4) p: (1 + 2*x)^3 = 13.5*(1 + x^5); 3 5 (%o4) (1 + 2 x) = 13.5 (x + 1) (%i5) allroots(p); (%o5) [x = 0.8296749902129361, x = - 1.015755543828121, x = 0.9659625152196369 %i - 0.4069597231924075, x = (- 0.9659625152196369 %i) - 0.4069597231924075, x = 1.0] (%i6) diff(a^x+x^a,x); a - 1 x (%o6) a x + a log(a) (%i7) integrate(x^5+x*sin(x),x); 6 x (%o7) sin(x) - x cos(x) + -- 6 (%i8) taylor(sin(x), x, 0, 7); 3 5 7 x x x (%o8)/T/ x - -- + --- - ---- + . . . 6 120 5040 (%i9) subst(y+1, x, x+y+z); (%o9) z + 2 y + 1 (%i10) expand((x+1)*(x-1)); 2 (%o10) x - 1 (%i11) factor(x^2-1); (%o11) (x - 1) (x + 1) (%i12) plot3d (sin(x)*cos(y), [x, 0, 2*%pi], [y, 0, 2*%pi]); (%o12) [/home/jluther/maxout.gnuplot_pipes] (%i13)
Grafische Darstellungen gibt die Software mit 2D/3D-Plot-Befehlen aus. So generiert etwa die Eingabe am Prompt %i12 die Grafik aus Abbildung 2. Standardmäßig nutzt Maxima dabei Gnuplot; Sie können also beispielsweise mit der Maus ins Bild zoomen oder es rotieren. Mit einem Druck auf [Q] beenden Sie die grafische Darstellung wieder.
Daneben bietet das CAS unter anderem 2D-Plots (plot2d()), Contour-Plots (Höhenschichtenlinien) und Plotten von Richtungsfeldern (plotdf()). Die Maxima-Hilfe listet bei der Eingabe von ?? plot; die mehr als 40 verschiedenen Plot-Funktionen auf.

Abbildung 2: Zum Erzeugen von 3D-Plots nutzt Maxima Gnuplot. Das Bild zeigt die Berechnung von sin(x)*cos(y).
Neben den Grundfunktionen bietet Maxima noch etliche Zusatzpakete, die Sie bei Bedarf über load(Paket); einbinden. So stellt etwa das Paket draw noch umfangreichere grafische Funktionen bereit; damit lässt sich neben Gnuplot unter anderem auch VTK für grafische Darstellungen verwenden. Das Paket newton1 berechnet mit der Newton-Methode näherungsweise numerische Nullstellen (Listing 3).
Listing 3
(%i1) load (newton1); (%o1) /usr/share/maxima/5.37.2/share/numeric/newton1.mac (%i2) newton(cos(x), x, 1, 1/100); (%o2) 1.57067527716125
Zu guter Letzt eignet sich Maxima auch zur Programmierung (siehe Kasten “Programmierung mit Maxima”) und für Shell-Skripting-Aufgaben (siehe Kasten “Maxima als Shell-Befehl”).
Programmierung mit Maxima
Maxima stellt einige Programmierfunktionen zur Verfügung. So lassen sich Maxima-Skripte in einer Datei speichern und mit dem Aufrufparameter --batch=filename.mac auswerten. Eigene Funktionen definieren Sie mit := oder declare() (Listing 4). Außerdem kennt Maxima Kontrollstrukturen wie If-Abfragen oder For-Schleifen. Erstere können Sie beispielsweise in Funktionsdefinitionen verwenden, um Funktionen stückweise zu definieren (Abbildung 3). Mit dem Schalter :lisp wertet Maxima Lisp-Code aus.
Listing 4
(%i1) hoch(x,y) := x^y; y (%o1) hoch(x, y) := x (%i2) hoch(2,4); (%o2) 16

Abbildung 3: Eine Funktion stückweise definiert und geplottet: Zuerst verläuft sie linear, ab dem Wert x=3 geht es dann mit einer quadratischen Funktion weiter.
Maxima als Shell-Befehl
Auf Wunsch arbeitet Maxima Befehle auch nicht interaktiv ab. So können Sie auch auf der Kommandozeile symbolisch und mit beliebiger Genauigkeit rechnen. Maxima liest einerseits von STDIN, etwa aus einer Pipe. Andererseits kennt es Kommandozeilenoptionen, um Skripte oder Strings auszuwerten. Der Schalter --very-quiet vermeidet Startmeldungen sowie den Ein- und Ausgabeprompt (%i1), die beim Auswerten eines Shell-Skripts üblicherweise nur stören. Um etwa ein Polynom zu faktorisieren und das Ergebnis in eine Shell-Variable zu schreiben, genügt der Kommandozeilenbefehl aus Listing 5. Möchten Sie das Ergebnis in der Shell oder in einem Programm weiterverarbeiten, setzen Sie vor dem eigentlichen Ausdruck das Flag display2d:false$, um eine mehrzeilige Ausgabe etwa von Brüchen zu vermeiden (Listing 6).
Listing 5
$ RESULT=$(maxima --very-quiet --run-string="factor(x^3+6*x^2+11*x+6);") $ echo $RESULT (x + 1) (x + 2) (x + 3)
Listing 6
$ echo 'solve(4+3*x=y,x);' | maxima --very-quiet y - 4 [x = -----] 3 $ echo 'display2d:false$ solve(4+3*x=y,x);' | maxima --very-quiet [x = (y-4)/3]
Maxima Online
Mehrere Web-Services erlauben, Maxima sogar ohne Installation zu nutzen. Zu den bekanntesten davon zählen Maxima-online.org und Maxima.cesga.es (Abbildung 4). Beide bieten ein Eingabefenster, das die Eingabe mehrerer Maxima-Kommandos erlaubt; ein Klick auf Calculate beziehungsweise Clic wertet die Berechnung aus. Maxima-Befehle, mit denen sich Betriebssystemkommandos ausführen lassen, wie etwa system(), stehen jedoch nicht zur Verfügung.
Grafische Oberflächen
Für Maxima gibt es einige grafische Oberflächen, wie etwa das in der Skriptsprache Tcl/Tk direkt mitgelieferte Xmaxima. Fans des Texteditors Emacs führen Maxima direkt in einem Emacs-Buffer aus: [Alt]+[X] gefolgt von maxima startet den Maxima-Buffer (Abbildung 5). Maxima bildet auch einen Teil des sehr umfangreichen, auf Python basierenden Open-Source-Mathematikpakets Sage, das mehrere Programme unter einem Interface vereinigt.
Das KDE-Programm Cantor (Abbildung 6) unterstützt mehrere freie Mathematikprogramme, darunter auch Maxima. Beim Start fragt es ab, welches Backend es verwenden soll. Im Gegensatz zu Emacs und Xmaxima, die mehr oder weniger nur die Texteingaben auswerten, bietet Cantor ein an Maxima angepasstes Menü. Darin wählen Sie beispielsweise Funktionen zum Plotten, Integrieren oder Differenzieren aus. Plots stellt Cantor auf Wunsch direkt im Arbeitsblatt dar.
wxMaxima
Das bekannteste und leistungsfähigste grafische Maxima-Frontend heißt wxMaxima [2]. Nach dem Start zeigt es zunächst eine relativ spartanische Oberfläche. wxMaxima bietet jedoch etliche zusätzliche Toolbars, die Sie über den Menüpunkt View aktivieren. Diese Werkzeugleisten erscheinen teils freischwebend, teils angedockt (Abbildung 7).

Abbildung 7: Die grafische Maxima-Oberfläche wxMaxima erlaubt nicht nur bequemen Zugriff auf die Funktionen des Konsolenprogramms, sondern stellt auch eigene zur Verfügung.
Die Software bietet über die Toolbar und die Werkzeugleisten komfortablen Zugriff auf viele Maxima-Funktionen. Als zusätzlichen Effekt generiert sie den zugehörigen Maxima-Befehl – eine gute Möglichkeit also, dessen Funktionen kennenzulernen. Neben Mathematik-Feldern – also Ein- und Ausgabefeldern, wie man sie vom Kommandozeilen-Maxima kennt – bietet wxMaxima noch weitere Zelltypen, die sich einfügen lassen: Titel, drei Kapitel-Ebenen, Text, Bild und Seitenumbruch.
Damit erweitern Sie eine Maxima-Berechnung bei Bedarf um Erklärungen und Erläuterungen, etwa um ein Übungs- oder Aufgabenblatt für Schüler und Studenten zu gestalten. Sie exportieren entweder das gesamte Arbeitsblatt als TeX-Datei oder HTML-Seite oder einzelne Formeln als TeX-Code, HTML, MathML (für Office-Programme) oder Bild.
Der Start einer Berechnung erfolgt in wxMaxima nicht mit der Eingabetaste, sondern mit [Strg]+[Eingabe]. wxMaxima sendet den eingegebenen Befehl an Maxima und gibt das Ergebnis dann aus. Um Inhalte zu ändern, können Sie zwar mit den Cursor im Arbeitsblatt beliebig platzieren, doch startet die Software nur über den Menüpunkt Zellen | Evaluate all Cells eine Neuauswertung. Zusätzlich sollten Sie den Maxima-Prozess mit Maxima | Maxima neu starten frisch aufrufen: Andernfalls kommt es vor, dass beispielsweise alte Variablenzuweisungen erhalten bleiben.
wxMaxima bietet noch zusätzliche, exklusive Befehle. Diese beginnen mit “wx” und stellen Ergänzungen zu Maxima-Befehlen dar. So gibt es den Maxima-Befehl plot2d(), der eine Funktion plottet, und das Pendant wxplot2d(), das die Grafik aber nicht in einem externen Gnuplot-Fenster darstellt, sondern direkt im wxMaxima-Worksheet einbettet. Die Variable wxplot_size stellt die Größe der eingebetteten Grafik ein, zum Beispiel wxplot_size:[1200,800];
Maxima als App
Maxima steht auch für Android als App bereit [3], auch hier mit Plotfunktion und sauber gerenderten Formeln mittels Mathjax (Abbildung 8). Die Eingabe erfolgt in einer fixen Eingabezeile unter dem Ein- und Ausgabefenster. Sowohl die Eingabezeile als auch das Ergebnis werden danach ausgedruckt.

Abbildung 8: Berechnungen mit der Maxima-App für Android. Wie ihr Desktop-Verwandter beherrscht sie das Erstellen von Plots.
Fazit
Maxima braucht den Vergleich mit teuren kommerziellen Computer-Algebrasystemen nicht zu scheuen. Es bietet nicht nur umfangreiche Funktionen, sondern auch eine ausgezeichnete Dokumentation – keine Selbstverständlichkeit bei freier Software.
Der Autor
Wolfgang Dautermann arbeitet als Systemadministrator an der FH Joanneum im österreichischen Graz und zählt zu den Organisatoren der dortigen Linuxtage. Für das Maxima-Projekt erstellt er Nightly Builds und Tests sowie – per Crosscompiling unter Linux – den Windows-Installer.
Glossar
- CAS
- Als Computer-Algebrasystem bezeichnet man ein Mathematikprogramm mit der Fähigkeit, auch mit Variablen zu rechnen, statt nur numerische Berechnungen vorzunehmen. Wurde etwa die Variable x noch nicht mit einem Wert belegt, ergibt x+x+x daher 3x und nicht 0.
- Zahlen doppelter Genauigkeit
- Englisch: double precision oder kurz double. Ein Gleitkomma-Zahlenformat, das 64 Bit (8 Byte) umfasst (52 Bit Zahlendarstellung, 11 Bit Exponent, 1 Bit Vorzeichen). Es belegt damit doppelt so viel Speicher wie Gleitkommazahlen einfacher Genauigkeit.
- Bigfloat
- Langzahlarithmetik mit Werten, die den Platz in den Rechenregistern der CPU überschreiten. Dabei minimieren möglichst effiziente Algorithmen die Berechnungszeiten. Sie zerlegen typischerweise den Vorgang in einzelne Rechenschritte mit kleineren Zahlen.
- Mathjax
- Ein Javascript-Framework, welches es erlaubt, Formeln in TeX-Notation in HTML darzustellen. Auch wxMaxima nutzt das Framework für den HTML-Export.
Infos
- Maxima: http://maxima.sourceforge.net
- wxMaxima: https://andrejv.github.io/wxmaxima/
- Maxima on Android: https://play.google.com/store/apps/details?id=jp.yhonda
- Maxima Dokumentation: http://maxima.sourceforge.net/documentation.html








