Programmieren mit MATLAB - Programmiersprache, Grafische Benutzeroberflächen, Anwendungen

Ulrich Stein

Programmieren mit MATLAB

Programmiersprache, Grafische Benutzeroberflächen, Anwendungen

2017

355 Seiten

Format: PDF, ePUB, Online Lesen

E-Book: €  31,99

E-Book kaufen

E-Book kaufen

ISBN: 9783446454231

 

2.  Programmstrukturen

In Kapitel 1 haben wir ein wenig in MATLAB herumgeschnüffelt, und Sie haben auch bereits einige Möglichkeiten des Programms kennen gelernt. Nun, in Kapitel 2, sollen systematisch die zentralen Bereiche der MATLAB-Programmiersprache vorgestellt werden. Für eine vollständige Beschreibung aller Möglichkeiten, die MATLAB bietet, reicht der Umfang dieses Buches jedoch bei Weitem nicht aus. Deshalb wurden für dieses Kapitel speziell die Aspekte ausgewählt, die typischerweise auch in anderen Programmiersprachen, wie in C oder Java, die Basis der Programmierung bilden. Dazu gehören

  • die zentralen Ablauf-Konstrukte: Funktion, Verzweigung, Schleife,

  • die Kommunikation mit der Außenwelt: Ein- und Ausgabe von Zahlen und Text, Grafikerstellung, Dateioperationen,

  • die erweiterten Datentypen: Feld, Struktur, Klasse, String.

2.1 Funktionen

Funktionen dienen dazu, Teilprobleme zu lösen. Dazu übergibt man ihnen eine Anzahl von Daten, aus denen die Funktion die nötigen Ergebnisse berechnet und diese dem Aufrufer zurückgibt.

2.1.1 Eine Black Box

Sie (ich spreche mal die männlichen Leser an) besuchen Ihre Freundin und bringen Eier, Milch, Mehl, Zucker, Butter und Salz mit. Ihre Liebste verschwindet mit den Sachen in der Küche, während Sie im Zimmer warten müssen. Nach einiger Zeit kommt Ihre Freundin mit frischen Pfannkuchen zurück.

Diesen Vorgang kann man als „Black Box“ ansehen – eine „schwarze Schachtel“, in der abgedunkelt etwas passiert, was Sie von außen nicht beobachten können.

 

Bild 2.1 Black Box Pfannkuchen

Die Black Box hat Eingangswerte, alles was in die Box hineingelangt, in unserem Fall Eier, Milch, Mehl, Zucker, Butter und Salz – und Rückgabewerte, die Pfannkuchen, die in der Box auf geheimnisvolle Art entstehen (der Zutritt zur Küche wurde Ihnen nach leidvollen Erfahrungen bei der letzten Party verboten).

Auch Funktionen sind so eine Art Black Box. Nur beschickt man sie nicht mit Eiern, sondern mit Zahlen oder Texten, also unseren Daten. Aus dem Mathematik-Unterricht sollten Ihnen bereits mathematische Funktionen bekannt sein, wie Sinus, Kosinus oder die Wurzelfunktion, die man in Programmiersprachen oft mit sqrt (Square Root) bezeichnet. Wie bei der Black Box für die Pfannkuchen gibt es auch bei den Funktionen Eingangs- und Rückgabewerte – beispielsweise kann man die Zahl 9 als Eingabe an die sqrt-Funktion geben, die dann als Rückgabe hoffentlich die Zahl 3 liefert.

 

Bild 2.2 Black Box sqrt-Funktion

In MATLAB lautet dieser Aufruf, wie wir bereits gesehen haben, folgendermaßen:

>> sqrt( 9 ) ans = 3

Oder falls man sich das Ergebnis in der Variablen y merken möchte:

>> y = sqrt( 9 ) y = 3

Wie MATLAB oder eine andere Programmiersprache die Wurzel von 9 berechnet, das wird dem Anwender im Allgemeinen nicht mitgeteilt. Auch hier dürfen wir die Küche der Programmierer nicht betreten und müssen darauf vertrauen, dass MATLAB einen zuverlässigen Algorithmus zur Wurzelberechnung verwendet.

2.1.2 Eingangs- und Rückgabeparameter

Bleiben wir noch etwas bei den Eingangs- und Rückgabewerten bzw. den dafür vorgesehenen formalen Parametern. Die meisten Funktionen haben eine fest vorgegebene Zahl von Eingangs- und Rückgabeparametern, bei der sqrt-Funktion sind es ein Eingangs- und ein Rückgabeparameter. Daneben sind die Reihenfolge der Parameter und deren Datentyp wichtig. Es gibt aber auch Funktionen, bei denen die Zahl und der Datentyp der Eingangswerte (Argumente) variabel ist und erst beim Aufruf der Funktion, also zur Laufzeit, bestimmt wird – durch den so genannten varargs-Mechanismus .

Daneben gibt es Funktionen, die gar keine Eingangsparameter haben – die Analogie wäre der Fall des Pfannkuchenbackens, wobei Sie selbst keinerlei Zutaten mitbringen, sondern auch das der Freundin überlassen. Diese Black Box hätte dann nur den Rückgabeparameter Pfannkuchen. Analog gibt es Funktionen, die keine Rückgabeparameter haben, was auf den ersten Blick kurios klingt: Was soll eine Funktion, die nichts zurückgibt? Diese Funktion wird aber normalerweise trotzdem etwas tun, aber wir, als Auftraggeber, bekommen nichts zurück – die Analogie wäre zum Beispiel der Auftrag, während unseres Urlaubs die Haustiere zu füttern, wovon wir selbst jedoch keine Rückmeldung bekommen. In zuverlässigen Projekten sollte aber jede Funktion etwas zurückgeben, zum Beispiel eine E-Mail, dass die Aufgabe erledigt wurde – Vertrauen ist gut, Kontrolle des Vorgangs besser.

2.1.3 Funktionen in MATLAB

In MATLAB haben Funktionen folgende allgemeine Form:

% H-Line (Hilfe zur Funktion) function y = fname( x ) % Verarbeitung der Eingangsparameter . . . x % Zuweisung an den Rückgabeparameter y = . . . end % Ende der Funktions-Definition

Zeilen im Funktions-Code, die mit einem %-Zeichen beginnen, sind Kommentare , die bei der Programmausführung nicht berücksichtigt werden. Sie dienen alleine als Hilfe für die Programmierer. Von spezieller Bedeutung ist dabei eine Kommentarzeile, die vor der Funktionsdeklaration steht. Diese so genannte H-Line enthält einen Hilfetext zur Funktion und wird von MATLAB angezeigt, wenn Sie im Command-Window die Anweisung eintippen.

In der H-Line dürfen vor dem %-Zeichen keine Leerzeichen stehen! Ansonsten kann die H-Line auch mehrere Zeilen lang sein, solange sie nicht durch eine Leerzeile geteilt ist. Die H-Line darf auch unterhalb der function-Zeile stehen.

Der eigentliche Funktions-Code beginnt in MATLAB mit dem Schlüsselwort function. Diese Zeile, der Funktionskopf , enthält die Deklaration der Funktion. Hier werden der Name der Funktion und die Reihenfolge der Rückgabe- und Eingangsparameter festgelegt. Der Funktionsnamefname muss mit einem Buchstaben beginnen. Darauf kann jede beliebige Kombination von Buchstaben, Zahlen oder Unterstrichen („_“) folgen. Gibt es mehrere Eingangsparameter (Funktionsargumente), dann werden diese durch Kommas getrennt, zum Beispiel . Bei mehreren Rückgabeparametern verwendet man anstelle der einen Variablen y eine MATLAB-Liste, zum Beispiel , wie wir sie bereits von den Zeilenvektoren kennen. Gibt es keine Rückgabeparameter, dann entfällt in der Funktionsdeklaration der vordere Teil , oder man ersetzt y durch eine leere Liste, also beispielsweise .

Unterhalb der Zeile mit dem Funktionskopf folgt der Funktionskörper . Hier beginnt eine beliebige Anzahl von Anweisungen, in denen die Eingangsparameter verarbeitet werden. Hat die Funktion einen Rückgabewert, muss in der Funktion irgendwo eine Anweisung erscheinen, die den Rückgabewert setzt, also zum Beispiel in der Form . Der Programmablauf innerhalb einer Funktion erfolgt sequentiell , das heißt, der Programm-Code wird Zeile für Zeile nacheinander abgearbeitet – außer man trifft auf einen Verzweigungspunkt (Auswahl), eine Schleife (Iteration) oder auf eine Unterfunktion.

MATLAB kennt, im Gegensatz zur Programmiersprache C++, weder Zeiger noch Referenzen. Die Übergabe der Eingangsdaten an die Funktion erfolgt daher immer mittels Pass-by-value, das heißt, die in den Variablen gespeicherten Werte werden als Kopie an die Funktion übergeben. Sie können auf diesem Weg keine Daten an den Aufrufer zurückreichen. Auch wenn Sie die Daten innerhalb der Funktion verändern, hat dies keinerlei Einfluss auf die Variablen, mit denen die Funktion aufgerufen wurde. Eine Rückgabe erreichen Sie nur über die Zuweisung der Werte an einen Rückgabeparameter.

Für jede selbst geschriebene MATLAB-Funktion, die Sie vom Command-Window aus aufrufen möchten, erzeugen Sie im Arbeitsverzeichnis eine separate...

 

© 2009-2024 ciando GmbH