User:A Seyfarth

Einführung in die Programmierung mit MATLAB
Autor: Andre Seyfarth (Uni Jena, Lauflabor)

Ziel dieses Matlab Wikis ist es, eine umfassende Einführung in die Programmiersprache von MATLAB zu geben. Dabei werden die Programmstrukturen und Anweisungen am Beispiel von einfachen Übungsaufgaben erklärt. Das Wiki ist als Begleitmaterial für eine gleichnamige Vorlesung an der Uni Jena gedacht und wird im Verlauf des Wintersemesters 2008/09 kontinuierlich ausgebaut.

Warum MATLAB?
MATLAB eignet sich hervorragend zum Erlernen des Programmierens, da die Sprache sehr einfach (ähnlich BASIC) aber auch sehr mächtig (ähnlich C oder PASCAL) ist. Gleichzeitig bietet MATLAB eine riesige Sammlung von Bibliotheken MATLAB toolboxes, welche eine Vielzahl von fachspezfischen Funktionen umfassen. Somit kann man mit MATLAB auch neue Fachgebiete erkunden und die aktuellsten numerischen Methoden kennenlernen. Eine wichtige Erweiterung in MATLAB ist Simulink, eine grafische Programmierumgebung zur Beschreibung von dynamischen Systemen. Auch für Simulink existieren zahlreiche Toolboxen.

Um die Beispiele in diesem Wiki auszuprobieren, empfiehlt es sich, eine aktuelle Version von MATLAB (z.B. Version 7.4 R2007a oder später) zu verwenden. Insbesondere an der Oberfläche und dem Editor hat sich mit Version 7 von MATLAB vieles verändert.

Tipp: Inzwischen gibt es eine sehr preiswerte Studentenversion von MATLAB R2007a für unter 50 Euro, welche sich bestens zum Kennenlernen dieser Programmierumgebung eignet: Angebote auf Amazon.de. Allerdings muss man für die Registrierung der Software Schüler oder eingeschriebener Student einer Hochschule sein.

Die MATLAB Oberfläche
Nach dem Start von MATLAB öffnet sich folgendes Programmfenster:



Das MATLAB Fenster (der sog. Desktop) unterteilt sich in verschiedene Teilfenster, von welchen das Kommandofenster Command Window auf der rechten Seite das wichtigste ist. Hier können ähnlich wie bei einem Taschenrechner MATLAB Anweisungen (z.B. 1+2) hinter dem '>>' Symbol direkt eingegeben werden. Weitere Teilfenster sind das aktuelle Verzeichnis Current Directory, der Arbeitspeicher für die MATLAB Variablen Workspace (beide links oben) sowie die Liste der bereits eingegebenen Anweisungen Command History (links unten).

Interessant ist, dass die Teilfenster beliebig ein- und ausgeblendet werden können (Menü Desktop) und auch übereinander gelegt werden können (wie ein Register). Es gibt auch die Möglichkeit, die Teilfenster aus dem MATLAB Fenster auszugliedern und somit ein eigenständiges Fenster zu erzeugen. Hierfür klickt man mit der Maus auf das Pfeilsymbol, welches nach oben rechts zeigt. Ein ausgegliedertes Teilfenster kann wieder über das Menü Desktop in das MATLAB Fenster eingeführt werden.

Über den Teilfenstern befindet sich eine Zeile Shortcuts, hier können Befehle oder auch ganze Programmabschnitte mit einem Tastendruck abgerufen werden. Mit dem ersten vorinstallierten Shortcut How to Add kann man sich kurz (auf Englisch) erklären lassen, wie das funktioniert: Man kann beliebige Programmzeilen markieren und in die Zeile Shortcuts ziehen. Danach kann man dem neuen Kurzbefehl einen Namen und Symbol zuweisen. Als Beispiel wurde bereits ein Kurzbefehl What's New in MATLAB eingerichtet. Dieser ruft Hilfe-Informationen zu Neuerungen in der genutzten MATLAB Version auf. Zu der Möglichkeiten, in MATLAB Hilfe zu erhalten, kommen wir im nächsten Abschnitt zu sprechen.

Unter der Menüzeile File Edit Debug Desktop Window Help befindet sich die Symbolleiste mit den typischen Symbolen für das Erstellen eines neuen Dokuments (hier für ein M-File, also ein Matlab Programm) bzw. zum Öffnen eines bestehenden M-Files. Neben dem Hilfesymbol (gelbes Fragezeichen) gibt es noch eine Angabe des aktuellen Arbeitsverzeichnis. Mit dem Symbol ... kann man das aktuelle Verzeichnis neu auswählen, bzw. mit dem Symbol in das übergeordnete Verzeichnis wechseln.

Hilfe finden
MATLAB zeichnet sich durch eine sehr gute Dokumentation und vielfältige Hilfemöglichkeiten aus. Im Programmfenster können per Menü Help unterschiediche Hilfestellungen gegeben werden, z.B. zur Benutzung der Oberfläche (Using the Desktop) oder zum Kommandofenster (Using the Command Window). Das Hilfefenster wird jederzeit durch Klicken auf das Hilfesymbol (gelbes Fragezeichen) aktiviert. Beim Start von MATLAB bietet auch das Kommandofenster in der obersten Infozeile Zugang zur MATLAB Hilfe (MATLAB Help) bzw. zu Beispielen (Demos). Teilweise kann man sich auch per Video in die Funktionen von MATLAB einführen lassen, z.B. in die Oberfläche von MATLAB.

Eine wichtige Ergänzung zum Hilfesystem von MATLAB ist auch das deutschsprachige Webportal von Mathworks, der amerikanischen Firma, welche MATLAB vertreibt und weiterentwickelt. Hier kann man sich u.a. über Forschungsprojekte (z.B. über Newsletter) informieren, welche mit Hilfe von MATLAB durchgeführt werden, Newsgroups und Blogs kennenlernen oder aber auch MATLAB Programme (z.B. M-Files) von anderen Nutzern herunterladen.

Im Kommandofenster kann man leicht Hilfe zu einer beliebigen MATLAB Funktion erhalten. Z.B. für den plot Befehl schreibt man einfach: >> help plot

Mit dem Befehl doc wird ein separates Fenster geöffnet, indem die Hilfe sehr übersichtlich dargestellt wird: >> doc >> doc plot

Rechnen im Command Window
Das Kommandofenster kann wie ein Taschenrechner verwendet werden:

>> 4+6+12 ans = 22

>> 4*25 + 6*52 + 2*99 ans = 610

Die Ergebnisse der Anweisungen werden jeweils mit ans bezeichnet. Um einen Wert dauerhaft zu speichern, können MATLAB Variablen verwendet werden. Als Beispiel soll nun der Variablen a der Wert 4 zugewiesen werden:

>> a=4 a = 4

Die Variable a ist nun im MATLAB Workspace (siehe Teilfenster) gespeichert. Um die Ausgabe zu unterdrücken, wird die Anweisung mit einem Semikolon abgeschlossen:

>> b=5;

Die wichtigsten Operationen sind Addition (a+b), Subtraktion (a–b), Multiplikation (a*b), Division (a/b) und Exponent (a^b, sprich a hoch b). Nehmen wir die Addition von a+b und weisen wir das Ergebnis der Variablen c zu:

>> c=a+b c = 9

Mit dem Befehl whos erfahren wir, welche Variablen inzwischen definiert wurden:

>> whos Name Size  Bytes  Class  Attributes a    1x1   8      double b    1x1   8      double c    1x1   8      double

Tipp: Mit den Pfeiltasten ↑↓ können vorherige Zeilen erneut aufgerufen und bearbeitet werden.

MATLAB Variablen
Verschiedenste Namen können für MATLAB Variablen verwendet werden. Folgende Regeln sind dabei zu beachten:


 * die Variable muss ein zusammenhängendes Wort ohne Leerzeichen darstellen
 * es wird nach Groß- und Kleinschreibung unterschieden (kuchen <> Kuchen)
 * die ersten 63 Zeichen sind entscheidend (Zeichen danach werden ignoriert)
 * muss mit Buchstaben beginnen, danach können beliebig auch Zahlen und Unterstriche "_" vorkommen (z.B. X51, A_2)

Es gibt einige besondere Variablen in Matlab, welche möglichst nicht in eigenen Programmen oder Anweisungen verwendet werden sollten.

Folgende Variablen haben vordefinierte Bedeutungen:
 * ans beinhaltet das Ergebnis der letzten Berechnung
 * pi die Zahl π, also das Verhältnis von Kreisumfang zum Durchmesser
 * eps die kleinste bei der Addition zu 1 noch erfassbare Zahl
 * inf repräsentiert Unendlich, z.B. 1/0
 * nan eine nicht darstellbare Zahl, z.B. 0/0
 * i und j stehen für die imaginäre Einheit, d.h. Wurzel aus -1

Es kann aber auch sein, dass ein Variablennamen bereits für eine Matlab-Funktion (z.B. sin) vergeben wurde. Mit folgender Anweisung kann man testen, ob der Variablenname float bereits vergeben wurde: >> which -all float /Applications/toolbox/simulink/fixedandfloat/float.m

In der Tat, eine Funktion mit dem Namen float existiert und daher sollte dieser Name nicht als Variablenname verwendet werden.

Variablen in MATLAB können nicht nur einfach Zahlen sein, sondern auch
 * Vektoren (z.B. eine Reihe von Zahlen),
 * Matrizen (z.B. eine Tabelle mit Reihen und Spalten),
 * Zeitangaben (z.B. ein Datum)
 * Texte (z.B. ein Satz).

Vektoren und Matrizen
Wir können z.B. eine Variable t definieren als Zeilenvektor mit den Zahlen 0, 2, 4, 6, 8, 10, indem wir schreiben >> t=0:2:10 t = 0    2     4     6     8    10

Der Doppelpunkt-Operator ":" dient in MATLAB für Aufzählungen, zB. hier für alle Werte von 0 in 2er-Schritten bis 10.

Mit dem Befehl whos erfahren wir Details über alle oder ausgewählte Variablen:

>> whos t Name Size  Bytes  Class  Attributes t    1x6   48     double

Mit einer Anweisung können wir nun alle Werte von t halbieren:

>> t/2 ans = 0    1     2     3     4     5

Wenn die Werte einer Variablen nicht eine einfache Aufzählung sind, verwendet man die eckigen Klammern "[" und "]", um einen beliebigen Vektor zu definieren:

>> t=[0 2 5 10] t = 0    2     5    10

Der Übergang von einem Zeilenvektor zu einer Matrix ist einfach:

>> t=[0 2; 6 8] t = 0    2     6     8

Hier trennt das Semikolon ';' die einzelnen Zeilen. Neben dem Befehl whos kann auch die Funktion size genutzt werden, um die Größe einer Variablen zu erfahren:

>> size(t) ans= 2    2

Variablen können einzelnen oder auch zusammen mit dem Befehl clear gelöscht werden.

Um die Variable t zu löschen schreibt man: >> clear t

Um alle Variablen zu löschen: >> clear

Wissenschaftliche Funktionen
In MATLAB stehen vielfältige mathematische Funktionen zur Verfügung. Die wichtigsten Funktionen sind hier zusammengefasst:
 * abs Absolutbetrag einer Zahl: abs(−5)=5
 * cos, sin Winkelfunktionen Kosinus, Sinus
 * acos, asin Umkehr-Winkelfunktionen Arkuskosinus, Arkussinus
 * exp Exponentialfunktion
 * log Natürlicher Logarithmus
 * rand erzeugt eine Zufallszahl zwischen 0 und 1
 * round Runden auf die nächste ganze Zahl: round(1.7)=2
 * sign Vorzeichen einer Zahl: sign(−5.2)=−1
 * sqrt Quadratwurzel einer Zahl: sqrt(9) = 3
 * tan, atan Winkelfunktion Tangens

Weitere Informationen zu den wichtigsten mathematischen Funktionen in MATLAB findet man mit folgender Anweisung >> help elfun

Funktionen graphisch darstellen
Um sich eine Funktion zu veranschaulichen, werden oft Diagramme gezeichnet, welche den Verlauf der Funktion über einen bestimmten Wertebereich darstellt. In MATLAB wird hier der Befehl plot verwendet.

Beispiel: Nehmen wir an, dass die zeitliche Bewegung einer Welle durch die Sinusfunktion beschrieben wird. Die Zeit wird als Variable t von 0 bis 10s in Schritten von 0.1s definiert:

>> t=0:0.1:10;

Die Bewegung der Welle wird durch zugehörige Werte der Variable x beschrieben und mit dem MATLAB Befehl plot dargestellt:

>> x=sin(t); >> plot(x) >> shg

Die Anweisung shg steht für show graph und stellt sicher, dass das Diagrammfenster sichtbar wird (falls es verdeckt sein sollte). Das Ergebnis sollte wie folgt aussehen:



Um die Darstellung von x über der Zeit t zu erhalten, schreibt man: >> plot(t,x) >> shg

Nehmen wir an, eine zweite Welle y(t) schwingt doppelt so schnell: >> y=sin(2*t);

Beide Wellen x(t) und y(t) können nun in einem Diagramm zusammengefasst werden: >> plot(t,x, t,y) >> shg

Übungsaufgabe 1
Hinweis: Die Übungsaufgaben müssen vor der nächsten Stunde mit kurzer Beschreibung (max. 10 Zeilen) per Email an Georg geschickt werden. Die Lösungen werden mit max. 6 Punkten bewertet. Zur Teilnahme an der Klausur sind 50% der Punkte von den Übungsaufgaben notwendig. Verspätet abgegebene Lösungen führen zu Punktabzug.

1. Suche ein Bild eines Sportlers in einer typischen Haltung und trage folgende Gelenkpunkte (jeweils links/rechts) ein:


 * Zehe
 * Sprunggelenk
 * Kniegelenk
 * Hüftgelenk
 * Schulter
 * Ellenbogen
 * Hand

2. Übertrage die (x,y)-Koordinaten (z.B. mit einem Lineal) in eine Tabelle und erstelle die enstsprechenden MATLAB Variablen x und y!

3. Erstelle mit dem Befehl plot eine Strichfigur, welche die Gelenkpunkte verbindet und daraus die Segmente darstellt!

4. Vergleiche die Strichfigur mit dem ursprünglichen Bild!

Beispiel einer Strichfigur.

Tipp: Für Fragen zu der Hausaufgabe kann die Seite discussion genutzt werden. Diese findet sich neben der Schaltfläche artice über diesem Dokument. Wir werden die Fragen für alle sichtbar im Diskussionsteil beantworten. Aber auch andere Studenten können bei Fragen ihre Lösungen mit vorstellen oder Anregungen geben.

Mögliche Erweiterung:  Als Erweiterung der Übungsaufgabe kann ein Bild vom Internet (z.B. im Format JPG) in MATLAB geladen werden (Tipp: Befehle imread und image). Dann können die Gelenkpunkte per Mausklick ausgewählt werden (Tipp: Befehl ginput). Mann kann damit die Digitalisierung des Bildes sehr vereinfachen und sogar ganze Filme digitalisieren und eine Animation erstellen.