Durch meine Nachhilfe für Mathematik habe ich den Taschenrechner TI nspire kennengelernt und bin total beeindruckt, was heute die »Technik in der Hosentasche« kann. Der Inhalt des Mathematikunterrichts hat sich (oder besser: sollte sich) dadurch stark verändert (haben), denn was ich in den 1990er Jahren noch mühsam per Hand berechnet habe, lässt sich heute durch den Taschenrechner blitzschnell beantworten.
Da ich selbst keinen solchen Taschenrechner besitze, aber dennoch einige Aufgaben berechnen musste, habe ich nach einem Programm unter Linux gesucht und bin mit Maxima auch fündig geworden.
Installation bei Debian
Das Hauptpaket mit dem Kommandozeilenprogramm heißt bei Debian maxima und als grafische Bedienoberfläche gibt es das Programm wxmaxima. In dem Zusatzpaket maxima-share sind noch diverse Erweiterungen für Maxima enthalten, die man zur Laufzeit laden kann.
Zum Paket wxmaxima sollte noch das Paket fonts-jsmath für eine bessere Darstellung der Ausgabe installiert werden.
apt install wxmaxima maxima-share fonts-jsmath
Für die Emacs-Nutzer gibt es auch das Paket maxima-emacs mit dem entsprechenden Modus.
Das Paket xmaxima bietet eine weitere grafische Oberfläche mit Tk/Tcl, die jedoch nicht so umfangreich wie wxmaxima ist und mehr wie eine Kommandozeile im Fenster wirkt.
Noch ein Wort zu wxmaxima: Bei mir ist (in der Version 19.07) die Symbolleiste übermäßig groß, was an meinem High-Res-Display liegen könnte. Andere Beeinträchtigungen sind mir bisher nicht aufgefallen.
Integration und Differentiation von Gleichungen
Grundlegende Bedienung
Maxima bietet Unterstützung für TeX, unter anderem die Ausgabe von
TeX-Code, weshalb wxmaxima die Strukturierung von TeX-Dokumenten
beherrscht. Über das Menü Zellen kann man diverse Gliederungen wie
Überschriften und Textblöcke einfügen. Alle anderen Eingaben werden als
Anweisung für Maxima verstanden. In einer (Eingabe-)Zelle können mehrere
Anweisungen stehen, die mit Semikolon ;
getrennt werden müssen, weshalb ein
Druck auf Enter nicht zur Auswertung der Anweisung, sondern führt zu einem
Zeilenumbruch führt. Die Auswertung erfolgt mit Shift+Enter
, was sich aber
in den Einstellungen auch umschalten lässt.
Mit Alt
und den Cursor-Tasten Hoch
und Runter
kann man für die aktuelle
Eingabe durch die Historie der Eingaben wandern und diese gegebenenfalls
bearbeiten. Mit der Kombination Strg+K
kann man sich für die aktuelle Eingabe
eine Vervollständigung anzeigen lassen.
Funktionsdefinition
Definieren wir zuerst eine Funktion. Die Syntax ist sehr ähnlich zur TeX-Mathematiksyntax:
g(x) := x^2/(2 * %e^2);
Zur Definition einer Gleichung muss man :=
verwenden, denn =
ist der
Vergleichsoperator. Auch ohne die Angabe der Argumente betrachtet Maxima alle
Buchstabenfolgen als Variablennamen, weshalb speziellen Zahlen wie der
eulerschen Zahl e, der imaginären Einheit i oder der Zahl pi ein
Prozentzeichen %
vorangestellt werden muss.
Als Reaktion auf eine Anweisung liefert Maxima immer ein Ergebnis. Bei der
obigen Zuweisung ist dies die Gleichung selbst. Die Rückmeldung des Ergebnisses
kann auch unterdrückt werden, indem man die Anweisung mit dem Dollarzeichen $
,
anstatt des Semikolons abschließt.
»Gegeben ist noch die Funktion f mit dem Parameter t, wobei dieser größer Null seien muss.« Diese Einschränkung lässt sich mit assume Maxima vermitteln.
assume(t > 0)$
f(t,x):= x^2/2 * %e^-(x/t)$
Ableitungen und Extremwerte
»Von der Funktion f sind die Extremstellen in Abhängigkeit von t gesucht.« Hierfür benötigen wir die erste Ableitung und möchten wissen, für welche x diese null ist. Mit der Funktion diff können wir die Ableitung (der 3. Parameter bestimmt die Ordnung) einer Funktion berechnen lassen, wobei der zweite Parameter die Variable für die Ableitung bestimmt, und die Funktion solve löst eine Gleichung nach der Variablen auf, die im zweiten Parameter angegeben ist:
solve(diff(f(t,x), x) = 0, x);
Verzögerte Berechnung
Da Maxima intern eine symbolische Repräsentation für die Ausdrücke nutzt, kann
man die Auswertung dieser Ausdrücke mit dem Apostroph '
auch verhindern.
Stellt man einem kompletten Term (oder nur einem Teil) einen Apostroph voran, so
bleibt dieser als Formel stehen und wird nicht berechnet:
diff(f(1, x) - 'g(x), x);
diff('f(1, x) - 'g(x), x);
Bei Maxima werden die Begriffe noun für eine Formel und verb für ein berechnetes Ergebnis verwendet.
Am Ende einer Anweisung können verschiedene Parameter stehen, die die Ausführung beeinflussen. Ein solcher Parameter ist nouns, der bewirkt, dass alle noun-Terme (Formeln) in verb-Terme (Werte) überführt werden.
Praktisch bei Maxima ist auch, dass man auf frühere Eingaben und Ergebnisse mit
%iNUM
bzw. %oNUM
zugreifen kann, wobei _
eine Abkürzung für die letzte
Eingabe und %
eine Abkürzung für das letzte Ergebnis ist. Damit lässt sich
leicht schrittweise eine Berechnungsfolge durchgehen:
'diff(x^2, x);
%,nouns;
'f(1, 2), nouns;
Gleichheitstest
Als nächstes soll gezeigt werden, dass die Extrempunkte von f auch auf g
liegen. Ein Ausdruck 1 = 3
ist für Maxima jedoch eine Gleichung, die nicht
ausgewertet wird. Dies kann man mit der Funktion is oder dem
Ausführungsparameter pred erreicht werden.
is(g(0) = f(t,0));
g(2*t) = f(t, 2*t), pred;
Für beide Ausdrücke kommt das Ergebnis true
heraus.
Integration
Nun soll die Fläche (in Abhängigkeit von t) zwischen von beiden Graphen zwischen den Extremstellen bestimmt werden.
An dieser Stelle wäre zu meiner Schulzeit Schluss gewesen, denn das Integral von f lässt sich nicht so leicht bestimmen. Aber Maxima bietet die Funktion integrate. In der ersten Anweisung soll noch nicht das Ergebnis berechnet werden, was mithilfe des Apostrophs erreicht wird. In der zweiten Anweisung soll das Ergebnis berechnet und in die Variable A gespeichert werden, da wir es später noch brauchen.
integrate('f(t,x) - 'g(x), x, 0, 2*t);
A: %,nouns;
Auswertung von Ausdrücken
Nun lautet die Frage, wie das Verhältnis des Flächeninhalts bei der Verdoppelung
von t zum Ursprung ist. Hierfür muss der Term in A mit t=2*t
ausgewertet
werden, was mit der Funktion ev möglich ist. Als Parameter akzeptiert diese
Funktion Ausdrücke der gewünschten Form und die Berechnung ev(A, t=2*t) / A
ergibt 8
.
Die Funktion ev
ist es auch, die hinter der Auswertung aller Ausdrücke steckt. So erklärt sich
auch die ungewöhnliche Syntax, dass man bei einem Ausdruck noch
Auswertungsparameter angeben kann. Unter anderem bietet die Funktion ev auch
einen Parameter numer für die numerische Auswertung, womit Werte wie %e oder
%pi als Zahlen berechnet werden. Somit ergibt die Anweisung A, t=3, numer;
das Ergebnis 3.857666566539228
.
Ableitung
Eine typische Extremwertaufgabe bei Funktionen ist: Von einem zu bestimmenden Punkt U auf dem Graphen von f mit t=2 und dem Koordinatenursprung entsteht ein Rechteck. Für welchen Punkt U entsteht das größte Rechteck?
Auch diese lässt sich leicht mit Maxima lösen:
rect: f(2, x) * x$
solve(diff(rect, x) = 0, x);
Es gibt zwei Lösungen dieser Gleichung: [x = 0, x = 6]
. Damit diese
Extremstellen auch ein Maximum sind, muss die zweite Ableitung an der Stelle
negativ sein:
is(at(diff(rect, x, 2), x=0) < 0);
is(at(diff(rect, x, 2), x=6) < 0);
Somit ergibt sich, dass sich nur an der Stelle x=6 das größte Rechteck mit der
Fläche von rund 5,3 (rect, x=6, numer;
) befindet.
Weiterführende Funktionen von Maxima
Bei Maxima gibt es auch eine eingebaute Dokumentation. Mit ? …
kann man für
diverse Terme eine Information erfragen (wichtig ist das Leerzeichen hinter dem
Fragezeichen): ? %
oder ? integrate
. Mit zwei Fragezeichen kann man nach
Fragmenten suchen: ?? integr
.
Ein komplettes Handbuch
gibt es auch in der Shell mit info maxima
.
MathML
Mit wxmaxima bekommt man bereits schön formatierte Ausgaben, was das Arbeiten erleichtert. Im Datei-Menü gibt es auch die Funktion, die aktuelle Sitzung als HTML zu exportieren. Ich habe aber auch das Paket alt-display gefunden, mit dem man auch MathML exportieren kann, so dass ich es hier in den Markdown-Text einbetten kann.
Über die Kommandozeile konnte ich so die Ausgaben von Maxima mit dem folgendem Programm generieren:
maxima -q --batch =(
echo 'load("alt-display.mac")$ set_alt_display(2,mathml_display)$';
sed '/^ /!d; s///; /apt/d' Maxima.md
) |sed '/<math/,/<\/math>/ { N;N;N;N;
s/ *<math /<math display=block /; s+ML">.*,</mo>+ML">\n +;
s, </mfenced> </math>,\n</math>,;
}; s/ *$//'
Der sed-Aufruf am Ende dient nur zum Aufhübschen des MathML, weil ich die
Ausgabenummerierung nicht haben will. Hilfreich ist aber <math display=block
zur abgesetzten Formatierung der Formeln.
Alternativen und Erweiterungen zu Maxima
MaximaOnAndroid
Von Maxima gibt es auch eine Android-App MaximaOnAndroid, aber leider nur im Play-Store, auch wenn der Quelltext bei Github zu finden ist, wird für F-Droid kein Paket gebaut, da die Abhängigkeiten zu groß sind.
Octave
Octave kannte ich als als Nachbau von Matlab zur Berechnung mit Vektoren und Matrizen. Früher habe ich es für die Algebra- und die Numerikvorlesungen genutzt. Es gibt für Octave aber auch ein Paket für symbolisches Rechnen, mit dem man Ableitungen oder Integrale bestimmen kann. Ausprobiert habe ich es jedoch nicht.
Cantor
Als grafische Oberfläche zu Maxima gibt es noch das Programm Cantor (im gleichnamigen Paket cantor). Dieses ist eine KDE-Oberfläche und sieht etwas ansprechender aus als wxmaxima, aber bietet nicht so viele Funktionen über das Menü. Die Eingabevervollständigung gibt es mit der Tabulatortaste.
Cantor ist eine Oberfläche für verschiedene Systeme und kann mit mehr als mit Maxima arbeiten. Es unterstützt zum Beispiel auch Octave, Python und R. Diese Backends müssen gezielt über die entsprechenden Pakete cantor-backend-… installiert werden.
Ich habe jedoch nur rudimentär damit experimentiert, so dass ich keine tiefer gehenden Erfahrungen schildern kann.
SageMath
SageMath ist ebenso wie Cantor ein Aufsatz, der verschiedene Mathematiksysteme (Maxima, Octave, Python, R) nutzen kann. Der Vortrag »System for Algebra and Geometry Experimentation (SageMath)« von den Grazer Linuxtagen 2019 wirkt beeindruckend, aber bei meinen Versuchen, die obigen Aufgaben zu lösen, bin ich nur auf Syntaxfehlermeldungen gestoßen. Bei einem anderen Anlass würde ich es jedoch noch einmal probieren.
Neben dem Schnelleinstieg habe ich von der Hochschule Mittweida noch eine Einführung in Sage gefunden, die zwar auf einer veralteten Oberfläche beruht, aber die grundlegende Arbeitsweise vermittelt. Weiterhin gibt es noch vom Initiator des Projekts eine englische Einführung in Sage mit der Geschichte, den Zielen und Beispielen (interessant ab der 38. Minute) und andere Videos.
Das Praktische an Sage ist die Weboberfläche. Da Sage von Beginn an als eine Webanwendung entwickelt wurde, lässt es sich auch ohne Installation (das Debian-Paket zieht massig Abhängigkeiten von über 1 GB hinterher) nutzen: