Matlab oder Python für den Einstieg ins numerische Rechnen? Ingenieurwissenschaften

Die folgende Gegenüberstellung soll keine Fanboy-Debatte à la Xbox ist besser als Playstation oder PC befeuern. Generell spricht nichts dagegen, sowohl Matlab als auch Python parallel zu verwenden. Ganz nach dem Motto, für jede Aufgabe das passende Werkzeug. Aber das Motto gilt natürlich nur für den, der die Werkzeuge kennt. Mit irgendeinem Programm muss man ja schließlich anfangen.

Mit beiden Programmen ist man für den Einstieg ins numerische Rechnen gut aufgehoben, denn sowohl Python als auch Matlab sind Programme, die von Einsteigern und Profis für vielseitige numerische Fragestellungen eingesetzt werden können, da sie umfangreiche Funktionsbibliotheken bieten und einfach zu programmieren sind. Sie sind dafür in den jeweiligen Anwendungen unter Umständen aber nicht besonders effizient.

Der Gedanke des passenden Werkzeugs für den jeweiligen Anwendungsfall wird deshalb von Profis weitreichender verfolgt. Je nach Algorithmus wird dann hardwarenah auf Clustern, Grafikkarten oder FPGA programmiert. Prinzipiell lautet die Frage also nicht, ob man mit Excel, Matlab/Python, Java, C/C++, Fortran oder Assembler in die numerische Programmierung einsteigen sollte. Im Vergleich zu diesen Unterschieden können Sie bei der Entscheidung zwischen Python oder Matlab fast schon eine Münze werfen.

Als Einsteiger muss man sich in Python und Matlab nicht mit programmiertechnischen Dingen rumschlagen, von denen man als Einsteiger in der Regel verschont bleiben möchte. Als Einsteiger hat man häufig das Ziel, etwas zu berechnen, das für eine Handrechnung zu aufwendig ist. Man will vielleicht etwas Nichtlineares berechnen, was man bisher aus dem Lehrbuch nur für den linearen Fall konnte. Man will eine Gleichung berechnen und nicht gleich das effizientestes Lösungsverfahren dafür entwickeln. Effizienz ist nicht entscheidend – solange es über Nacht läuft. Man will sich jedoch auf keinen Fall mit Speicheradressierung, Datenformaten etc. beschäftigen.

Also, bei der Frage, ob man nun Matlab oder Python als Einstieg ins numerische Rechnen verwenden sollte, geht es nicht um die Frage, was generell für numerische Berechnungen optimal ist.

Kosten
Matlab kostet inkl. der guten Toolboxen einige tausend Euro an Lizenzgebühren. Python ist generell kostenfrei. An den meisten Technischen Hochschulen gibt es jedoch akademische Lizenzen für Matlab inkl. aller Toolboxen.

Einstieg
Hier ist zu unterscheiden, ob man Erfahrungen im Programmieren hat oder nicht. Wer keine Erfahrungen im Umgang mit objektorientierter Programmierung hat, der wird sich in Matlab mit dem konsequenten Vektoren- und Matrizenansatz schneller zurechtfinden. Hinzukommt, dass Matlab eine Entwicklungsumgebung, also ein Hauptprogramm bietet, in dem man arbeitet, bei der neben dem Code auch die Variablen und Plots im ständigen Blick sind und sogar interaktiv verändern werden können. Neben interaktiven Datenimport oder Plot-Funktion gibt es für viele Anwendungen außerdem  kleine, vorgefertigte Apps wie z.B. die Curve-Fitting App oder die Distribution-Fitting App. Man kann also zunächst Auswertungen etc. einfach zusammenklicken und anschließend den entsprechenden Matlab-Code dafür erstellen lassen. Man kann so recht schnell verstehen, wie Funktionalitäten programmtechnisch umgesetzt werden können. Man kann den Code dann automatisch wiederholt ausführen oder individuell erweitern. Jedenfalls fängt man nicht mit einem leeren Bildschirm an, sondern mit lauffähigen Code, und sei es nur mit einem Beispiel aus der Dokumentation oder den Tutorials, die es für viele wissenschaftliche Disziplinen gibt.

Wer bereits weitreichende Kenntnis im Programmieren erwarb und in einer vollwertigen Entwicklungsumgebung bzw. in einem mächtigen Editor programmierte, wird sich eher mit Python zurechtfinden, wobei er dann die Qual der Wahl zwischen verschiedensten Umgebungen und Editoren hat. Wer sich einmal z.B. in Visual-Studio an das farbliche Hervorheben, die Autovervollständigung und das Codemanagement gewöhnt hat, für den ist die Entwicklungsumgebung von Matlab eher ein anachronistischer Rückschritt.

Matlab ist nach der Installation einer Datei sofort betriebsbereit. Für Python gibt es zwar auch installationsfertige Distributionen wie Anakonda, aber in der Regel muss man doch noch hier und da Umgebungsvariablen manuell setzen, PlugIns für die Entwicklungsumgebung installieren, Compiler einrichten etc.
Wer mit der numerischen Berechnung von wissenschaftlichen Algorithmen starten will und wenig Programmiererfahrung hat und auch nicht unbedingt erlangen möchte, ist mit Matlab sicherlich wesentlich schneller am Start als mit Python. Für Programmiererfahrene ist die vergleichsweise einfache Programmiereingewöhnung in Matlab jedoch kein großes Verkaufsargument.

Programmieren
Sowohl Matlab als auch Python sind hochentwickelte Sprachen. Das heißt, dass sie komplexe Datenstrukturen wie Arrays, Listen und Tabellen anbieten, in denen man seine Daten zur Verarbeitung speichern kann. Sie stellen entsprechende  Methoden (Funktionen) für die Datentypen zur Verfügung. Man muss sich also nicht darum kümmern, wie die Daten im Speicher organisiert werden und in vielen Fällen nicht einmal darum, den Datentyp der Variablen zu definieren. Integer und double werden z.B. automatisch bei Bedarf umgerechnet. Einzig bei Zeichen, also alles was nicht verrechenbare Zahlen sind, ist in beiden Sprachen eine Transformation nötig, die jedoch z.B. über double2str Befehle einfach und schnell zu bewerkstelligen sind. Was die Bearbeitung von Strings angeht, ist Python deutlich im Vorteil. Allerdings sind Textverarbeitung bzw. Bearbeitungen für das wissenschaftliche Rechnen von keiner großen Bedeutung.

Beide Sprachen sind Interpretersprache. Der Code wird zeilenweise kompiliert, man kann also auch zeilenweise den Code ausführen lassen und sich die Variablen in einem separaten Fenster anschauen und manipulieren, ohne Zwischenwerte umständlich per Code auszugeben oder zu debuggen. Interpretersprache bedeutet auch, dass man Skripte schreiben kann, die wiederum Skripte schreiben können, die dann ausgeführt werden. So können Varianten des Berechnungsmodells als verschiedene Funktionen automatisch per Script erstellt und dann in einer Stapelverarbeitung ausgeführt werden.

Matlab und Python (bzw. Python + numpy, denn erst diese Zusatzbibliothek integriert in Python die Arrayfunktionalität vergleichbar zu Matlab) unterscheiden sich leider im Umgang mit Vektoren und Matrizen .

Wenn man Werte aus einer Matrix auslesen oder speichern will, wird der erste Eintrag einer Zeile oder Spalte in Python als 0 angesprochen. Das ist für das wissenschaftliche Programmieren höchst irritierend und führt zu Fehlern, da es nicht dem entspricht, was man mit Stift und Zettel schreibt. Matlab fängt hier konsequent und intuitiv mit der 1 an. Andererseits nutzt man in Python in der Regel iterierbare Listen und schreibt dann einfach, dass der Befehl für alle Elemente der Liste durchgeführt werden soll. Man kommt in diesem Fall also gar nicht in die Lage, dass man das erste Element direkt per Integer ansprechen muss. Insgesamt ist die Python-Sprache, bis auf das Ärgernis mit der Null, etwas smarter bzw. der Code entspricht auf natürlichere Weise dem, was man dem Rechner in Englisch sagen würde, was er machen soll. Der Matlab-Code ist dafür insgesamt kompakter was rein numerische Operationen angeht.

Das Hantieren mit geschweiften Klammern (wie in C) bleibt einem in beiden Sprachen erspart. Python erkennt sogar Schleifen und Anweisungen alleine über das Einrücken der folgenden Zeilen. Ein bisheriger Nachteil von Matlab gegenüber Python war, dass sich Funktion nicht on-the-fly in Skripten definieren lassen. Das wurde aber mit R2016b vor Kurzem ein klein wenig egalisiert. Funktionen dürfen nun immerhin am Ende eines Scripts definiert werden. Darüber hinaus bietet Matlab ab R2016a das Livescriptformat an, mit dem sehr komfortabel und übersichtlich Code, Erläuterungen, Bilder, Links und mathematische Formeln (per Latex-Syntax) in einem Dokument aufbereitet werden können. Das erleichtert das Dokumentieren der wissenschaftlichen Arbeit ungemein und ist wesentlich übersichtlicher als das über Kommentare und extra Dokumente zu erledigen. Diese Funktionalität gibt es in Python zwar auch als Web-Interface schon eine Weile, ist allerdings nicht ganz so überzeugend umgesetzt.

Dokumentation und Hilfe
Hier ist die Sachlage wirklich einfach. Matlab bietet  im Gegensatz zu Python eine Dokumentation, die professioneller gestaltet, lesbarer, einheitlicher, quervernetzter und umfangreicher ist. In Python dokumentieren schließlich die Entwickler der einzelnen Module selbst auf verschiedenen Webseiten, was mal mehr und mal weniger gut gelingt. In der Matlabdokumentation und auf dem Internetportal der Firma gibt es unzählige Beispiele für die Anwendung der Funktionen. Dagegen scheint die Python Community im Internet wesentlich größer zu sein, allerdings auch heterogener und nicht nur auf wissenschaftliches Rechnen spezialisiert. Das lässt sich schwer quantifizieren. Hilfe aus dem Netz bekommt man für beide Programme sehr gut, würde ich sagen.

Mitgelieferte Funktionalität
Die typischen Grundfunktionalitäten für den Einstieg in das wissenschaftliche Rechnen liefern beide Programme. Die out-of-the-box Funktionalität von Matlab ist jedoch stark von den mit erworbenen Toolboxen abhängig, die dafür aber auch einiges bieten. Dagegen kann man in Python viele Bibliotheken gratis aus der Community auf Knopfdruck nachladen. Hier findet man dann vielleicht die ein oder andere Spezial-Funktion, die Matlab nicht bietet. In der Matlab-Community werden allerdings schon seit längerer Zeit umfängliche Spezialfunktionen oder zusammengestellte Toolboxen über ein Forum mit Rezensionssystem zum Download angeboten.

Ein Funktionsaspekt kann jedoch bei der Entscheidung zwischen Matlab und Python wirklich ausschlaggebend sein.

Es gibt in Python keinen adäquaten Ersatz zu der Simulink-Toolbox von Maltab. Simulink ist wirklich mächtig und durch seine visuelle Darstellung von Informationsflüssen und Operatoren sehr intuitiv für verschiedenste Anwendungen, zum Beispiel zum Lösen von nichtlinearen Differentialgleichungen und zur Modellierung von physikalischen Systemen inkl. dem Entwurf von passenden Regelstrategien z.B. als Hardware-in-the-loop auf einem RaspberryPi. Während man in allen Aspekten jederzeit von Matlab auf Python (und umgekehrt) wechseln kann, gilt das hier nicht. Wer Simulink kennen gelernt hat, wird es auf keinen Fall mehr missen wollen.

Daten Im- und Export
Sowohl Matlab als auch Python bieten Schnittstellen zu allen möglichen Datenresourcen von lokalen CSV Dateien bis hin zu SQL Datenbanken etc. an.

Wer bisher mit Excel gearbeitet hat und vielleicht auch weiterhin seine Daten in Excel behalten möchte, für den ist eine einfache Funktionserweiterung von Excel vielleicht ein entscheidender Vorteil. Matlab bietet eine Excel-Schnittstelle als direktes Plugin für Excel an. Natürlich gibt es auch für Python Funktionen, um Exceldateien zu lesen und zu speichern, doch muss man das dann von Python aus machen.

Performance

In meinem Beitrag über den nichtparametrischen Signifikanztest erwies sich Matlab immerhin als doppelt so schnell wie Python. Das kann sich allerdings bei String-Verarbeitung oder anderen Operationen auch genau andersherum darstellen. Ohne einen ausgiebigen Performancetest zu machen, kann man zumindest sagen, dass die Matlab-Standard-Routinen regelmäßig auf den neusten Stand gebracht werden, wenn z.B. Intel seine Bibliotheken zum Ansprechen des Prozessors aktualisiert. Das bekommt der Benutzer in der Regel nicht mit. Die Unterstützung von Grafikkarten kam jedoch recht spät und die Intel-Phi-Boards werden bis heute nicht unterstützt. Und beides sind schließlich (neben FPGAs) die Optionen, um seine Algorithmen zu skalieren.

Für eine  flexible Parallelisierung auf mehreren Kernen sind beide Programme eher nicht so gut zu gebrauchen. Die Parallelisierung von Schleifen ist in Matlab (mit der entsprechenden Toolbox) trotzdem wesentlich einfacher als in Python umzusetzen. Vom Prinzip richtet man einmal die Parallelisierungseinstellung lokal ein und schreibt dann statt „for“ nur „parfor“. Allerdings ist es in der Praxis dann doch nicht ganz so einfach. Aber Parallelisierung auf mehreren Kernen ist auch etwas, was keinem Einstiegslevel in die Numerik entspricht.

Für numerische Berechnung war es lange Zeit ein Riesenvorteil, Schleifen durch Array-Operationen zu ersetzten. Das kann man sowohl in Matlab als auch in Python. Seit Matlab als auch Python Schleifeninhalte als iterierbare Objekte behandeln, ist dieser klare Performance-Vorteil der Code-Vektorisierung allerdings häufig nicht mehr vorhanden.

Erweiterter Nutzen
Häufig möchte man seine wissenschaftlichen Berechnungen anderen zur Verfügung stellen, ohne dass diese den Quellcode verstehen, lesen oder kompelieren müssen, also ohne dass diese eine Pythondistribution oder Matlabversion installiert haben müssen. In Python stellt sich diese Frage eher nicht, da Python so ausgelegt ist, dass der Code eigentlich überall ohne Installation einer Entwicklungsumgebung per Pythoninterpreter ausgeführt werden kann, also prinzipiell auf dem USB-Stick bis zum Web-Server läuft. Aus Matlab kann man zwar eigenständige Programme kompilieren (wieder einmal nur per separater Toolbox), der Anwender muss sich jedoch zusätzlich eine zur Matlabversion passende, mehrere hundert Megabyte große Datei installieren.

Matlab bietet über den App-Designer eine recht komfortable Lösung, um sich interaktive Anwendungen in einem Fenster zu erstellen, ähnlich wie dies z.B. VBA bietet. In Python und anderen Sprachen ist hier natürlich wesentlich mehr und Flexibleres möglich, nur erfordert das auch deutlich mehr Programmierkenntnisse. Die Erstellung eines interaktiven Fensters veranschlagt dadurch unter Umständen mehr Einarbeitung, als das eigentliche wissenschaftliche Programmieren. Der App-Designer von Matlab geht da einen guten Mittelweg. Man kann hier sogar bequem mehrere Programme über Variablen im Workspace zusammenarbeiten lassen, ohne sich mit Schnittstellenprogrammierung zwischen verschiedenen Applikationen zu beschäftigen. Hier zahlt sich der einheitliche in-the-box Ansatz von Matlab besonders aus. Schön und individuell werden die Anwendungen in Matlab zwar nicht unbedingt, aber gutes Design macht das wissenschaftliche Ergebnis ja bekanntlich nicht besser.

Wer seine entworfenen Algorithmen in einem professionellen Maßstab später ausrollen will, findet sowohl in Matlab als auch in Python Möglichkeiten zum C Transfer. Hier sprechen wir allerdings nicht mehr über einen Einstieg ins wissenschaftliche Programmieren, sondern von einem fortgeschrittenen Einsatz. Grundsätzlich spricht in solch einem Fortschritt nichts dagegen, sowohl Python als auch Matlab weiterhin zu verwenden. Wenn man sich bereits in eine von beiden eingearbeitet hat, fällt der Umstieg in die andere Sprache ebenfalls nicht schwer.
In Matlab gibt es sowohl eine direkte Python-Schnittstelle, als auch für Python ein Matlabinterface. Darüber hinaus lassen sich in Matlab gespeicherte Dateien in Python öffnen und speichern. Die Programme können also durchaus Hand in Hand arbeiten.

Apropos Schnittstelle. Ein großer Vorteil von Python gegenüber Matlab ist, dass inzwischen viele wissenschaftliche Spezialprogramme (zum Beispiel die FEM-Software Abaqus, aber auch das DataScience Programm RapidMiner) Python nutzen, um die Funktionalitäten der jeweiligen Programme individuell zu erweitern, fernzusteuern und zu automatisieren. Wer mehr als wissenschaftliche Gleichungen numerisch berechnen will, ist mit Python wohl am besten und flexibelsten in allen Richtungen als Einstieg in die Programmierung aufgestellt. Große Universitäten wie das MIT oder Harvard setzten nicht ohne Grund inzwischen auf die Vermittlung von Python als Einstieg in die Programmierung.

Python ist in vielen Bereichen und Schnittstellen auf dem Vormarsch und hat eine immer größer werdende Community. Dagegen ist die Matlab Community schon länger aktiv und vielleicht breiter in den Wissenschaften aufgestellt, in denen numerisch gerechnet wird. Aber auch wenn Matlab momentan sehr viele wissenschaftliche Disziplinen abdeckt, stellt sich die Frage, ob Matlab auf Dauer mit der Aktualität von Python-Erweiterungen und OpenSource-Ansätzen mithalten kann. Für besonders gehypte Themen mit wirtschaftlichen Interesse, wie aktuell Data Science, zeigt Matlab aber momentan keine Blöße.

Zusammenfassung
Wer allgemein Interesse an Programmierung hat, ist generell mit dem Einstieg in Python gut beraten und damit für die verschiedensten Anwendungen, auch abseits von numerischen Berechnungen, gut vorbereitet. Wer hingegen rein auf wissenschaftliche oder ingenieurmäßige Berechnungen setzt, findet in Matlab sowohl den einfacheren Einstieg, als auch die bessere in-the-box Erfahrung – natürlich nur, wenn der Kostenaspekt von Matlab kein Ausschlusskriterium darstellt. Grundsätzlich lassen sich die Berechnungen mit beiden Programmen realisieren. Neben Komfortaspekten und ein paar technischen Details besteht das wesentliche Entscheidungskriterium zwischen beiden Programmen in der Simulink-Funktionalität, die es nur in Matlab gibt.

Matlab oder Python für den Einstieg ins numerische Rechnen?
5 (100%) 4 votes

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.