Mathematica auf dem Raspberry Pi

Wenige Programme haben mich vor gut zwanzig Jahren so begeistert wie Mathematica. Mitten während meines Elektrotechniks-Studiums stand damit plötzlich ein Werkzeug zur Verfügung, das die gerade erlernten Mathematikgrundlagen mühelos, ja spielerisch beherrschte und visualisieren konnte. Meinem Naturell entsprechend schrieb ich umgehend ein Buch zu Mathematica, das immerhin fünf Auflagen erreichte, bevor sein Verkauf aufgrund mangelndem Leserinteresse eingestellt wurden musste. Vor rund 10 Jahren habe ich Mathematica zuletzt selbst verwendet; für die letzten zwei Auflagen meines Mathematica-Buchs hat Hans-Gert Gräbe alle inhaltlichen Arbeiten durchgeführt.

Ende 2013 überraschte die Firma Wolfram mit der Ankündigung, dass Mathematica und mit ihr die neue Programmiersprache, die Wolfram Language, ab sofort für den Raspberry Pi frei zur Verfügung steht. Mittlerweile ist Mathematica 10 integraler Bestandteil von Raspbian und wird standardmäßig installiert. Beachten Sie aber, dass Mathematica zwar kostenlos zur Verfügung steht, dass es sich aber nicht um Open-Source-Code handelt und dass nur die nicht-kommerzielle Nutzung erlaubt ist!

Mathematica kann über das Startmenü wahlweise im Grafik- oder im Textmodus gestartet werden. Aus dem Terminal heraus führen Sie dazu diese Kommandos aus:

mathematica &   # grafische Notebook-Version
wolfram         # Mathematica im Terminal verwenden

Mit Ausnahme der Dokumentation ist das Mathematica-Paket für den Raspberry Pi vollständig und entspricht den kommerziellen Mathematica-Versionen. Und auf die Dokumentation muss auch niemand verzichten — sie steht zur Gänze online zur Verfügung.

Die grafische Benutzeroberfläche von Mathematica
Die grafische Benutzeroberfläche von Mathematica

Geschwindigkeit

Wer Mathematica schon einmal auf einem Notebook oder Desktop-PC ausprobiert hat, wird sich fragen: Reichen die RAM-Größe und CPU-Geschwindigkeit des Raspberry Pi überhaupt aus, um Mathematica in einer angemessenen Geschwindigkeit auszuführen? Und wie so oft lautet die Antwort: Es kommt darauf an. Der erstmalige Start von Mathematica dauert länger als eine halbe Minute; im Textmodus läuft Mathematica dann aber zufriedenstellend, zumindest solange die Berechnungen nicht riesige Datenmengen erfordern. Spätestens bei der Bedienung der grafischen Notebook-Oberfläche zeigt sich aber, dass der Raspberry Pi an seine Grenzen stösst. Eingaben werden sehr träge verarbeitet, der Cursor läuft nach, das interaktive Verdrehen von 3D-Grafiken ist unmöglich etc.

Auf der Wolfram-Website ist nachzulesen, dass Mathematica auf dem Raspberry Pi etwa um den Faktor 10 bis 20 langsamer läuft als auf einem aktuellen Notebook. Machen Sie sich also keine falschen Erwartungen — aber werfen Sie auch nicht gleich die Flinte ins Korn! Mathematica lässt sich mit ein wenig Geduld durchaus zufriedenstellend nutzen; dies gilt umso mehr für die Verwendung von Mathematica im Textmodus bzw. für den Einsatz der Wolfram Language.

Mathematica im Textmodus

Um Mathematica im Textmodus zu verwenden, geben Sie in einem Terminalfenster das Kommando wolfram ein. Im Vergleich zur Notebook-Oberfläche gibt es einige Unterschiede:

  • Mathematica verarbeitet Eingaben viel schneller!

  • Eingaben werden einfach durch [Return] abgeschlossen. Mathematica erkennt dabei selbstständig, ob ein mathematischer Ausdruck abgeschlossen ist. Ist diese nicht der Fall, können Sie die Eingabe in der nächsten Zeile fortsetzen. Das wiederholt sich solange, bis alle Klammernebenen geschlossen sind. Sollten Sie sich in einem komplexen Ausdruck verirrt haben, können Sie die Eingabe mit [Strg]+[G] abbrechen. Dieses Tastenkürzel muss am Beginn einer Zeile eingegeben werden.

  • Zuvor durchgeführte Eingaben können einfach mit den Cursortasten [Cursor auf] und [Cursor ab] angesprochen und bei Bedarf korrigiert werden.

  • Die Ein- und Ausgabe mathematischer Formeln erfolgt ausschließlich im Textmodus. Auf die Darstellung griechischer Buchstaben, Integrale und Bruchstriche müssen Sie verzichten.

  • Es können keine Grafiken angezeigt werden.

Mathematica im Textmodus
Mathematica im Textmodus

Bleibt noch die Frage, wie Sie Mathematica wieder beenden. Eine Variante besteht darin, einfach das Terminalfenster zu schließen. Alternativ führen Sie das Kommando Quit aus oder drücken am Beginn eine Eingabezeile [Strg]+[D].

Grafiken im Textmodus anzeigen

Solange es nur darum geht, rasch einige Berechnungen durchzuführen, reicht ein Terminalfenster also vollkommen aus. Der Verzicht auf die Grafiken stösst aber bitter auf. Tatsächlich müssen Sie keineswegs ganz darauf verzichten, allerdings wird der Umgang mit Grafiken ein wenig umständlicher. Um eine Grafik anzusehen, speichern Sie das Ergebnis des Plot-Kommandos in einer Variablen. Der nachfolgende Strichpunkt bewirkt, dass der Mathematica-Interpreter auf die Ausgabe – Graphics – verzichtet. Anschließend können Sie die Grafik mit Export in einer Datei speichern:

p = Plot[Sin[x], {x, 0, 2 Pi}];
Export["bild.png", p]

bild.png wird in Ihrem Heimatverzeichnis gespeichert, standardmäßig also in /home/pi. Um die Grafik nun anzuzeigen, können Sie den Webbrowser Midori oder den Viewer gpiview verwenden. Beide Programme können Sie bei Bedarf direkt aus dem Mathematica-Terminal starten:

Run["midori test.png &"];
Run["gpicview test.png &"];

Standardmäßig ist die mit Export erstellte Grafikdatei nur 360 Pixel breit. Um eine höher aufgelöste Grafik zu erstellen, verwenden Sie das folgende Kommando:

Export["bild.png", p, ImageSize -> {800, 600}]

Alternativ können Sie die Grafik mit Export auch in einem auflösungsunabhängigen Format speichern, z.B. als EPS-, SVG- oder PDF-Datei.

Achtung: Export erfordert eine laufendes Grafiksystem. Sollten Sie via SSH arbeiten, müssen Sie das Kommando ssh -X aufrufen, damit via SSH auch das Grafikprotokoll X genutzt werden kann!

Die Wolfram Language

Mathematica war schon immer programmierbar. Große Teile von Mathematica, insbesondere die zahllosen Erweiterungspakete (Packages), sind selbst in Mathematica programmiert. Was ist nun die Wolfram Language? Im Prinzip nichts anderes als ein neuer Name für die Mathematica-Programmiersprache. Neu ist eigentlich nur, dass die Firma Wolfram nun erreichen will, dass diese Programmiersprache auch außerhalb der Kernanwenderschicht von Mathematica eingesetzt wird.

Um diese Ambitionen marketingmäßig zu unterstützten, hat man dem Kind einen neuen Namen gegeben — eben Wolfram Language — und das komplette Paket für alle Raspberry Pi-Anwender gleich verschenkt. Eine weitere Mathematica/Wolfram-Ausgabe für das Intel-Edison-System soll folgen. Unklar ist, ob Wolfram die neue Programmiersprache längerfristig auch auf vollwertigen Computern kostenlos zur Verfügung stellen will. Das ist insofern eine heikle Entscheidung, weil das darauf aufbauende Produkt Mathematica dann wohl kaum mehr verkäuflich wäre. Denn im Prinzip ist die Wolfram Language nichts anderes als Mathematica ohne dessen grafische Benutzeroberfläche.

Das klassische Hello-World-Programm lässt sich in der Wolfram Language in einer einzigen Zeile formulieren. Starten Sie einen Editor und speichern Sie die folgende Anweisung in einer Textdatei. Die vorgesehene Dateikennung lautet *.wl, an diese Vorgabe müssen Sie sich aber nicht halten.

Print["Hello World!"]

Dieses Miniprogramm führen Sie in einem Terminalfenster so aus:

wolfram -script hello-world.wl

Eine alternative Vorgehensweise besteht darin, die Textdatei in der ersten Zeile mit dem #! als Script zu kennzeichnen und den Pfad zum Kommando wolfram anzugeben. Die Hello-World-Datei sieht dann so aus:

#!/usr/bin/wolfram -script
Print["Hello World!"]

Außerdem setzen Sie mit chmod müssen das execute-Bit der Datei:

chmod a+x hello-world.wl

Damit können Sie das Programm nun etwas bequemer wie ein Bash- oder Python-Script ausführen:

./hello-world.wl

Echte Programme erfordern leider eine intensive Beschäftigung mit der Syntax und den Sprachkonzepten der Wolfram Language. Vorkenntnisse in anderen Programmiersprachen helfen dabei wenig: Die Stärken der Wolfram Language liegen in der funktionalen Programmierung sowie in der symbolischen Interpretation von Ausdrücken. Um beispielsweise eine Menge von Zahlen zu verarbeiten, benötigen Sie keine herkömmliche Schleife; stattdessen formulieren Sie die Daten als Liste ({element1, element2, ...}) und wenden darauf eine Funktion oder einen Operator an. Die folgenden Zeilen zeigen die Definition der Funktion f, die einen als Parameter übergebenen Ausdruck quadriert. Dabei kennzeichnet der nachgestellte Unterstrich in x_ das Symbol x als Parameter. Diese Funktion wird mit dem Postfix-Operator // auf alle Elemente der Liste angewendet.

f[x_]:=x^2                                                                                                        
lst = {1, 2, 3, a, b}
ergebnis = lst // f
Print[ergebnis]

(* Ausgabe *)

           2   2
{1, 4, 9, a , b }

Links

Eine umfassende Beschreibung der Wolfram Language finden Sie hier:

http://reference.wolfram.com/language/

Besonders hilfreich für Einsteiger sind die folgenden Seiten mit einer Syntaxübersicht:

Eine Menge Praxistipps zum konkreten Einsatz der Wolfram Language in Raspberry Pi-Projekten finden Sie im folgenden Diskussionsforum:

http://community.wolfram.com/content?curTag=raspberry%20pi

Eigenes Mathematica/Wolfram-Language-Kapitel! Unser Raspberry-Pi-Buch enthält übrigens ein 20-seitiges Kapitel, das sich eingehend mit Mathematica und der Wolfram Language auseinandersetzt.