MATLAB
Das Softwarepaket MATLAB der Firma Mathworks
[2] gehört weltweit zu den bekanntesten Tools zur Berechnung und Simulation komplexer mathematischer und technischer Probleme sowie zur grafischen Darstellung der Ergebnisse. In der Industrie und an Hochschulen wird MATLAB für vielfältige Aufgaben eingesetzt, insbesondere in der Regelungstechnik und der technischen Mechanik. Zusätzlich zum Basismodul ist eine ganze Reihe von Erweiterungen für MATLAB erhältlich, die so genannten Toolboxen™. Dazu gehört Simulink®, eine grafische Oberfläche, mit der man interaktiv Systeme modellieren und simulieren kann. An numerischen Verfahren bietet MATLAB nahezu alles, was das Herz begehrt: Angefangen von Standardverfahren, wie der Lösung linearer Gleichungssysteme, Nullstellenberechnung für beliebige Funktionen oder numerischer Integration, über Solver für Differentialgleichungen oder symbolisches Rechnen mit Hilfe des Moduls MuPAD®, bis zu sehr speziellen Anwendungen, wie der Simulation von Verbrennungsmotoren oder der Ansteuerung von Robotern.
Die Funktionalität von MATLAB kann auf zwei Arten genutzt werden: Zum einen als interaktive Berechnungs- und Simulationsumgebung und zum anderen über den Aufruf von selbst geschriebenen MATLAB-Funktionen, die die numerischen Methoden von MATLAB benutzen.
Die Programmiersprache
[3] von MATLAB verwendet weitgehend die bekannte mathematische Notation. Kontroll- und Datenstrukturen sind ähnlich definiert wie in der Sprache C. Es gibt jedoch kleinere Unterschiede, wie die Verwendung des Zeichens "~" für die Negation (anstelle der C-Notation "!") und die Kennzeichnung eines Kommentars mit einem einleitenden %-Zeichen.
Variablen werden in MATLAB nicht explizit deklariert. Der Datentyp einer Variablen wird erst durch die Initialisierung mit einem Wert eindeutig festgelegt, z.B. "rot = uint8(255)", wobei die primären Datentypen im Großen und Ganzen denen von C entsprechen, also z.B. double und char. Für selbst deklarierte Typen gilt dies ebenso. Beispielsweise erzeugen Sie ein Objekt meiner Rechteck-Klasse ShRect durch folgenden Konstruktor-Aufruf, der die Werte für Breite (10) und Höhe (8) übernimmt: "obj = ShRect(10,8)". MATLAB hat dem Anwender aber einige "Arbeit" abgenommen und erledigt gewisse Aufgaben automatisch, falls der Anwender dies nicht explizit selbst vornimmt. Wenn Sie zum Beispiel eine Variable mit einer Zahl initialisieren, ohne den Datentyp anzugeben, wie bei "y = 8", dann erhält die Variable, hier y, automatisch den Typ double. Analoges gilt bei der Initialisierung mit einem Text, wie bei "t = 'Hello, world'", wo der Typ char (bzw. char-Array) vergeben wird.
Funktionen (und damit auch die Methoden einer Klasse) sind in MATLAB jedoch nicht typisiert, d.h. der Funktionskopf enthält nur die formalen Parameter, nicht aber deren Datentyp. Der Funktionskopf startet mit dem Schlüsselwort
function. Der Funktionsrumpf geht bis zum abschließenden Schlüsselwort
end. Eine Funktion
rechteck, die aus den übergebenen Werten
a und
b (für die Breite und Höhe) die Rechteckfläche
f = a*b berechnet, sieht in MATLAB wie folgt aus:
function f = rechteck(a,b)
f = a*b;
end
Durch die Deklaration
"f = " wird festgelegt, was die Funktion zurückgibt - also auch hier ohne Datentyp und auch ohne eine Anweisung, wie "
return(f)".
Wenn Sie eine Typüberprüfung der Eingangswerte wünschen, dann müssen Sie dies am Anfang des Funktionsrumpfes explizit selbst mittels der Funktion
isa ("ist ein" = besitzt den Typ) durchführen. Wenn Sie für die Eingangswerte und die Rückgabe den varargs-Mechanismus verwenden, können Sie mittels der selbst durchgeführten Typüberprüfung sogar mehrere Methoden mit demselben Namen aber unterschiedlicher Signatur realisieren - was so in MATLAB nicht direkt vorgesehen ist.
Beim Aufruf einer Funktion wird der Programm-Code zeilenweise interpretiert. Als Syntax-Checker ist eine LINT-Variante integriert, die Sie bereits beim Editieren unterstützt und die Sie, zumindest bei größeren Programmen, vor der Programmausführung explizit verwenden sollten. Es gibt aber auch die Möglichkeit, den Code (mit Hilfe eines Zusatzmoduls) zu kompilieren, wobei der Syntax-Check automatisch aufgerufen wird. Das direkt ausführbare Programm sollte dann um einiges schneller ablaufen.
Der Basis-Datentyp in MATLAB ist die Matrix, also ein ein- oder mehrdimensionales Feld. Matrizenrechnungen sind deshalb eine der Stärken von MATLAB. Sie müssen die Länge der Felder vorher nicht explizit deklarieren. Beim Initialisieren der benötigten Komponente passt MATLAB selbst die Feldlänge an. Bei größeren Feldern empfiehlt es sich jedoch, die Feldlänge vor dem ersten Zugriff festzulegen, da auch MATLAB für die (automatisch vorgenommene) Re-Alloziierung des Speicherplatzes Zeit braucht.
In MATLAB gibt es weder Zeiger noch Referenzen - jedenfalls nicht für Variable mit den primären Datentypen. Durch die Einführung der Handle-Klassen verhalten sich deren Objekte jedoch sehr ähnlich wie Referenzen. Außerdem gibt es Zeiger auf Funktionen (Function-Handles), was beispielsweise beim Lösen von Anfangswertproblemen für gewöhnliche Differentialgleichungen (ode = ordinary differential equations) mittels eines ODE-Solvers Anwendung findet, hier für den Solver
ode45 für ein Runge-Kutta (4,5)-Verfahren:
sol = ode45( @fun, [0,2], x0 );
Der Aufruf
ode45 erhält als ersten Wert den Zeiger auf die Funktion
fun, durch die die Differentialgleichung definiert. ist. Mit "
@fun" wird also der Zeiger auf die Funktion
fun bestimmt. Die weiteren Übergabewerte legen das Zeitintervall (0 bis 2 Sekunden) und den Anfangswert
x0 fest.
Zur prozeduralen Programmierung mit MATLAB gibt es eine ganze Reihe von Online-Tutorials und einige Lehrbücher, beispielsweise auch ein Buch von mir
[4]. Deshalb werde ich in diesem Beitrag auf dieses Thema nicht näher eingehen.