Documentos de Académico
Documentos de Profesional
Documentos de Cultura
MATLAB
http://www.mathematik-online.org/
2 http://www.mathematik-online.org/
MathematikOnlineKurs
MATLAB
Stand: 27. Marz 2007
Konzipiert von J. Horner und J. Wipper
c 2007 Mathematik-Online
Diese Veroentlichung ist urheberrechtlich gesch utzt.
Weder Mathematik-Online noch einer der Autoren
ubernehmen Haftung f ur die Aktualitat, Korrektheit,
Vollstandigkeit oder Qualitat dieser Veroentlichung. Haf-
tungsanspr uche, welche sich auf Schaden materieller oder
ideeller Art beziehen, die durch die Nutzung oder Nichtnut-
zung der dargebotenen Informationen bzw. durch die Nut-
zung fehlerhafter und unvollstandiger Informationen ver-
ursacht wurden, sind grundsatzlich ausgeschlossen.
http://www.mathematik-online.org/
4 http://www.mathematik-online.org/
Vorwort
Das kommerzielle Programmpaket Matlab dient zur Durchf uhrung numerischer Berechnun-
gen, Visualisierung von Daten und der Entwicklung von Programmen und graphischen Benut-
zeroberachen. Eine umfassenden Sammlung von Funktionen und Algorithmen in Verbindung
mit einer einfach zu erlernenden Programmiersprache ermoglicht es, mit vergleichbar geringem
Aufwand komplexe numerische Probleme zu losen. Dies legt den Einsatz von Matlab in der
Lehre nahe. Hier besitzt auch dieser Kurs seine Wurzeln, dessen Grundlagen im Rahmen von
Vorlesungen zur Numerischen Mathematik und von Seminaren als Matlab-Einf uhrungskurs
von uns konzipiert wurden.
Neben den elementaren Grundlagen und Datenstrukturen behandelt dieser Kurs die Visualisie-
rung von Daten und die Grundz uge der Programmiersprache von Matlab. Diese Brosch ure ist
f ur Einsteiger gedacht und soll einen
Uberblick uber die Moglichkeiten geben, ohne sich dabei
zu sehr in Details zu verlieren. Zahlreiche elementare Beispiele bilden dabei den Ausgangspunkt
f ur eigene erste Schritte bei der Verwendung von Matlab.
Stuttgart, im September 2006
Jorg Horner und Joachim Wipper
http://www.mathematik-online.org/ 5
6 http://www.mathematik-online.org/
Inhaltsverzeichnis
1 Grundlagen 9
1.1 Was ist MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2 Die Benutzeroberache von MATLAB . . . . . . . . . . . . . . . . . . . . . . . 9
1.3 Das Hilfe-System von MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.4 Zahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.5 Ausgabeformatierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.6 Elementare Operatoren und Funktionen . . . . . . . . . . . . . . . . . . . . . . 15
1.7 Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.8 Speichern und Laden von Variablen . . . . . . . . . . . . . . . . . . . . . . . . . 19
2 Matrizen 21
2.1 Matrizen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2 Spezielle Matrizen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.3 Spezielle Vektoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.4 Indizierung von Matrixelementen . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.5 Groe von Matrizen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.6 Matrix-Operationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.7 Matrixfunktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.8 Datenanalyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.9 Matrixumwandlung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3 Weitere Datentypen 35
3.1 Zeichenketten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.2 Logische Matrizen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.3 D unn besetzte Matrizen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.4 Mehrdimensionale Felder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.5 Cell Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.6 Strukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4 Grak 49
4.1 Darstellung ebener Graphen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.2 Darstellung dreidimensionaler Graphen . . . . . . . . . . . . . . . . . . . . . . . 54
4.3 Schnittbilder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.4 Visualisierungen f ur Vektorfelder . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.5 Diagramme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.6 Bilder und Animationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.7 Modikation des Koordinatensystems und dessen Darstellung . . . . . . . . . . . 62
4.8 Beschriftung von Graken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.9 Speichern und Drucken von Graken . . . . . . . . . . . . . . . . . . . . . . . . 64
http://www.mathematik-online.org/ 7
INHALTSVERZEICHNIS
4.10 Grakfenster und Koordinatensysteme . . . . . . . . . . . . . . . . . . . . . . . 65
4.11 Objektstruktur von Graken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
4.12 Erstellung graphischer Benutzeroberachen . . . . . . . . . . . . . . . . . . . . . 68
5 Programmierung 71
5.1 Skripten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.2
Ubersicht der Kontrollstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.3 if-Abfrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.4 switch-Anweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.5 for-Schleife . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.6 while-Schleife . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
5.7 Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
5.8 Ein- und Ausgabeparameter von Funktionen . . . . . . . . . . . . . . . . . . . . 80
5.9 Datenpfad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
5.10 Globale und persistente Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . 82
5.11 Befehle zur Benutzerinteraktion . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
A Downloads 85
8 http://www.mathematik-online.org/
Kapitel 1
Grundlagen
1.1 Was ist MATLAB
Das kommerzielle Programmpaket Matlab der Firma MathWorks dient zur Durchf uhrung
numerischer Berechnungen, Visualisierung von Daten und der Entwicklung von Algorithmen
und graphischen Benutzeroberachen. Der Name des Programmpakets ist aus
MATrix LABo-
ratory abgeleitet und deutet darauf hin, dass Matrizen die zentrale Datenstruktur bilden.
Vorteile von Matlab sind unter anderem:
groer Funktionsumfang
einfach zu erlernende und machtige Programmiersprache
auf den wichtigsten Rechnersystemen verf ugbar
ausf uhrliche Dokumentation
1.2 Die Benutzeroberache von MATLAB
Beim Start von Matlab in der Standardkonguration wird ein dreiteiliger Desktop angezeigt.
http://www.mathematik-online.org/ 9
KAPITEL 1. GRUNDLAGEN
Links oben bendet sich ein Browser f ur das aktuelle Verzeichnis (Reiter
Current Directory)
bzw. die im Arbeitsspeicher denierten Variablen (Reiter
Uberlauf
nan (not a number): entsteht als Ergebnis mathematisch nicht denierter Operationen
Die Darstellung der genannten Zahlen erfolgt mit Hilfe der folgenden Befehle:
Befehl Ausgabe
realmin 2.2251e-308
realmax 1.7977e+308
eps 2.2204e-16
inf Inf
-inf -Inf
nan NaN
http://www.mathematik-online.org/ 13
KAPITEL 1. GRUNDLAGEN
Die Eingabe von Zahlen in Matlab erfolgt im Dezimalformat. Hierbei sind die Angabe eines
Vorzeichens bzw. des Dezimalpunktes optional. Durch Anhangen des Buchstabens e und An-
gabe eines Exponenten erfolgt eine Skalierung mit der zugehorigen Zehnerpotenz. Durch das
Anhangen des Buchstabens i bzw. j werden imaginare Zahlen gekennzeichnet.
Beispiel:
Eingabe von (komplexen) Zahlen:
>> 123 >> 1.23 >> .000123
ans = ans = ans =
123 1.2300 1.2300e-04
>> 1.23e-4 >> 12i >> 12+3i
ans = ans = ans =
1.2300e-04 0 +12.0000i 12.0000 + 3.0000i
>> 1.23+4.56e-3i >> 4j-123
ans = ans =
1.2300 + 0.0046i -1.2300e+02 + 4.0000e+00i
1
.6
6
3
7
1.6637
1
.6
6
3
7
1
.
6
6
3
7
1
.6
6
3
7
0
.
0
3
7
6
7
6
0
.0
3
7
6
7
6
0
.0
3
7
6
7
6
0
.
0
3
7
6
7
6
0
.0
3
7
6
7
6
0
.0
3
7
6
7
6
1
.5
8
8
4
1
.5
8
8
4
1
.5
8
8
4
1.5884
1
.
5
8
8
4
1
.5
8
8
4
1.5884
3
.
2
1
4
4
3
.2
1
4
4
3
.
2
1
4
4
3
.2
1
4
4
3
.2
1
4
4
4.8405
4.8405
6
.
4
6
6
5
3 2 1 0 1 2 3
3
2
1
0
1
2
3
Der Parameter 8 beim Aufruf von contour bewirkt, dass die Schnittlinien zu 8 verschiede-
nen Hohen dargestellt werden. Die R uckgabeparameter c und h werden zur Einblendung der
zugehorigen Hohenwerte in die Niveaulinien mittels clabel verwendet.
Darstellung von Hohenlinien mit gef ullten Flachen:
>> [X,Y,Z]=peaks(100);
>> [c,h]=contourf(X,Y,Z,-6:2:8);
>> clabel(c);
0
2
2
4
4
2
6
2
6
0
8
3 2 1 0 1 2 3
3
2
1
0
1
2
3
Der Parameter -6:2:8 beim Aufruf von contourf bewirkt, dass die Schnittlinien zu den Hohen
z {6, 4, . . . , 6, 8} dargestellt werden. Der Aufruf von clabel zur Beschriftung der Niveau-
linien ohne den Parameter h f uhrt dazu, dass die Hohenangaben horizontal und nicht in die
Niveaulinie eingedreht dargestellt werden.
Kombinierte Darstellung einer Flache und deren Hohenlinien:
http://www.mathematik-online.org/ 57
KAPITEL 4. GRAFIK
>> [X,Y,Z]=peaks;
>> surfc(X,Y,Z);
3
2
1
0
1
2
3
3
2
1
0
1
2
3
10
5
0
5
10
Darstellung von Funktionswerten entlang von Schnittachen:
>> [X,Y,Z]=meshgrid(-1:.05:1);
>> V=sqrt(X.^2+Y.^2+Z.^2);
>> slice(X,Y,Z,V,0,0,0)
1
0.5
0
0.5
1
1
0.5
0
0.5
1
1
0.5
0
0.5
1
Zu jedem Punkt des durch X, Y, Z gegebenen dreidimensionalen Gitters werden in V die zu-
gehorigen volumentrischen Daten abgespeichert. Die Visualisierung dieser radialsymmetrischen
Daten erfolgt entlang der zu den Koordinatenebenen parallelen Schnittebenen mit den gegebe-
nen Achsenabschnitten in x-, y- und z-Richtung. Der dreifache Parameter 0 kennzeichnet hier
die Verwendung der Koordinatenebenen.
Darstellung von Niveaulinien entlang von Schnittachen:
>> [X,Y,Z]=meshgrid(-1:.05:1);
>> V=sqrt(X.^2+Y.^2+Z.^2);
>> V(V>1)=nan;
>> contourslice(X,Y,Z,V,0,0,[])
>> view(3)
1
0.5
0
0.5
1
1
0.5
0
0.5
1
1
0.5
0
0.5
1
Aus kosmetischen Gr unden erfolgt die Visualisierung nur f ur Punkte innerhalb der Einheits-
spahre. Dies wird mittels V(V>1)=nan erzielt. Dargestellt sind die Niveaulinien entlang der
Schnittachen x = 0 und y = 0. Zur ubersichtlicheren Darstellung wurde mittels view(3)
zusatzlich der Standard-Betrachtungswinkel f ur dreidimensionale Graken gewahlt.
58 http://www.mathematik-online.org/
4.4. VISUALISIERUNGEN F
UR VEKTORFELDER
4.4 Visualisierungen f ur Vektorfelder
Ebene bzw. raumliche Vektorfelder konnen in Matlab mit Hilfe der Funktionen
quiver bzw. quiver3
visualisiert werden. Stromungslinien lassen sich mittels
streamline
berechnen und darstellen.
Als Hilfsfunktionen f ur diskrete Daten konnen dabei die Funktionen
gradient, curl, surfnorm
zur Berechnung des Gradienten, der Rotation bzw. von Flachennormalen herangezogen werden.
(Online-Version enthalt Download, siehe Anhang A)
Beispiel:
Darstellung eines Gradientenfelds:
>> [xx,yy,zz]=peaks(25);
>> hx=xx(1,2)-xx(1,1);
>> hy=yy(2,1)-yy(1,1);
>> [gx,gy]=gradient(zz,hx,hy);
>> quiver(xx,yy,gx,gy)
>> streamline(xx,yy,gx,gy,...
[-2 2 2 -2],[-2 -2 2 2])
>> axis equal
>> axis tight
3 2 1 0 1 2 3
3
2
1
0
1
2
3
Dargestellt ist das mit Hilfe von gradient berechnete Gradientenfeld der peaks-Funktion.
Dieses gibt in jedem Punkt des Auswertungsgitters die Richtung des steilsten Abstiegs wieder.
Mit Hilfe der streamline-Funktion wurde anschlieend die Wege von vier Objekten in den
Punkten (2, 2) dargestellt, welche sich jeweils in Richtung des steilsten Abstiegs bewegen,
bis sie in einer Senke zum Stillstand kommen.
Darstellung einer Flache und ihrer Normalen:
>> [xx,yy,zz]=ellipsoid(0,0,0,3,2,1,20);
>> [nx,ny,nz]=surfnorm(xx,yy,zz);
>> surf(xx,yy,zz)
>> hold on
>> quiver3(xx,yy,zz,nx,ny,nz)
>> axis equal
>> axis off
http://www.mathematik-online.org/ 59
KAPITEL 4. GRAFIK
Mit Hilfe der Matlab-Funktion ellipsoid wurden die Daten des Ellipsoids um (0, 0, 0) mit
den Halbachsenlangen 3, 2 und 1 ermittelt und anschlieend die zugehorigen Flachennormalen
mit surfnorm berechnet. Die Visualisierung der Normalen erfolgt mit Hilfe der Funktion
quiver3.
4.5 Diagramme
F ur die Darstellung von Diagrammen stehen unter anderem die folgenden Matlab-Funktionen
zur Verf ugung:
bar, bar3 vertikale Balkendiagramme
barh, bar3h horizontale Balkendiagramme
pie, pie3 Tortendiagramme
stem, stem3 Darstellung diskreter Daten
stairs Stufendiagramme
hist Histogramme
Beispiel:
Darstellung kummulierter Daten in einem Balkendiagramm:
bar(rand(8,3),stacked)
1 2 3 4 5 6 7 8
0
0.5
1
1.5
2
2.5
3
Dargestellt sind die Daten einer (8 3)-Matrix von Pseudozufallszahlen. F ur jede der 8 Zeilen
wird ein Balken dargestellt, dessen Hohe der Zeilensumme entspricht. Die farbige Unterteilung
eines Balkens erfolgt im Verhaltnis der drei Zeilenelemente.
Darstellung eines dreidimensionalen Tortendiagramms:
>> studierende=[485 831 513 661];
>> faecher={Chemie,Informatik,...
Mathematik,Physik};
>> pie3(studierende,[0 0 1 0],faecher)
Mathematik
Physik
Informatik
Chemie
Dargestellt ist der prozentuale Anteil f ur die in studierende angegebenen Studierendenzahlen
f ur die in faecher angegebenen Fachrichtungen (Daten vom Sommersemester 2006 an der
60 http://www.mathematik-online.org/
4.6. BILDER UND ANIMATIONEN
Universitat Stuttgart). Der Parameter [0 0 1 0] bewirkt, dass das dritte Segment abgesetzt
dargestellt wird.
Darstellung diskreter Daten:
>> x=linspace(0,pi,50);
>> stem(sin(3*x).*cos(2*x))
0 5 10 15 20 25 30 35 40 45 50
0.2
0
0.2
0.4
0.6
0.8
1
1.2
Darstellung von Daten in einem Histogramm:
>> noten=[1 3 4 2 3 5 2 1 3 4 3 2];
>> hist(noten,1:5)
1 2 3 4 5
0
0.5
1
1.5
2
2.5
3
3.5
4
Dargestellt ist die Verteilung von 12 Noten. Der Parameter 1:5 gibt dabei die zu verwendenden
f unf Notenklassen an.
4.6 Bilder und Animationen
F ur die Bearbeitung von Bildern (Rastergraken) und Animationen stellt Matlab unter an-
derem die folgenden Funktionen zur Verf ugung:
Funktionen zur Bildverarbeitung:
imread, imwrite Lesen und Schreiben von Grakdateien
image Darstellung von Bildern
imfinfo Ausgabe von Informationen zu einem Bild
Animationen:
getframe Speichern von Animationsframes
movie Abspielen gespeicherter Frames
im2frame, frame2im Konvertierung zwischen Bildern und Movie-Frames
movie2avi Konvertiert Matlab-Movie in eine AVI-Datei
aviread Einlesen eines AVI-Films
http://www.mathematik-online.org/ 61
KAPITEL 4. GRAFIK
Mit imread eingelesene Bilder werden in Form einer Matrix bzw. eines mehrdimensionalen Fel-
des zur uckgegeben. Diese lassen sich anschlieend mit Hilfe der ublichen Matlab-Funktionen
bearbeiten.
4.7 Modikation des Koordinatensystems und dessen
Darstellung
Das Koordinatensystem und dessen Darstellung kann mit Hilfe der folgenden Befehl beeinusst
werden:
Kontrolle des Achsensystems:
axis Grenzen, Skalierung und Darstellung der Achsen
grid, box Darstellung von Gitterlinien
zoom Vergroerung von Bereichen
pbaspect Verhaltnis der Achsenlangen festlegen
xlim, ylim, zlim Einstellung der Darstellungsbereiche
Kontrolle des Blickwinkels:
view Einstellung des Blickwinkels
rotate3d interaktives Drehen der Grak
Die Einstellung der Koordinatengrenzen im zweidimensionalen Fall erfolgt beispielsweise durch
axis([xmin xmax ymin ymax])
F ur den dreidimensionalen Fall ist der Argumentvektor um die Werte f ur zmin und zmax zu
erganzen. Dar uber hinaus gibt es viele Darstellungsmodi, die mittels
axis modus
aktiviert werde konnen. Mogliche Werte f ur modus sind dabei unter anderem:
auto automatische Steuerung (Voreinstellung)
manual keine automatische Anpassung des Darstellungsbereichs
tight enges Anlegen der Achsen an die dargestellten Objekte
equal gleiche Skalierung f ur alle Achsen
square Kanten des dargestellten Koordinatensystems sind gleichlang
on, off Darstellung der Achsen ein- bzw. ausschalten
Die Einstellung des Blickwinkels erfolgt mit Hilfe von
view(az,el )
wobei az (azimuth horizontale Komponente) und el (elevation vertikale Komponente) die in
Grad gegebenen Winkel der Blickrichtung sind. Alternativ kann mittels view(2) bzw. view(3)
der Standardblickwinkel f ur zwei- bzw. dreidimensionale Graken gewahlt werden.
62 http://www.mathematik-online.org/
4.8. BESCHRIFTUNG VON GRAFIKEN
Beispiel:
Die folgenden Graken zeigen die Darstellung von konzentrischen Ellipsen mit den Halbach-
senlangen 2k und k f ur k {1, . . . , 10}:
>> t=linspace(0,2*pi); >> axis equal >> axis square
>> r=1:10; >> box off >> box on
>> plot(cos(t)*2*r,sin(t)*r) >> grid off >> grid on
20 15 10 5 0 5 10 15 20
10
8
6
4
2
0
2
4
6
8
10
15 10 5 0 5 10 15 20
15
10
5
0
5
10
15
20 15 10 5 0 5 10 15 20
10
8
6
4
2
0
2
4
6
8
10
Die linke Spalte enthalt dabei die Matlab-Befehle zur Erzeugung des Bildes. Darunter dar-
gestellt ist die resultierende Grak mit den von Matlab gewahlten Standardeinstellungen
f ur die Koordinatenachsen. Die darauf folgenden Spalten zeigen die Auswirkungen der jeweils
angegebenen Formatierungsbefehle. So bewirkt beispielsweise axis equal, dass die Ellipsen
im korrekten Verhaltnis dargestellt sind. Im Gegensatz dazu erscheinen sie bei axis square
aufgrund des quadratischen Koordinatensystems als Kreise.
Die folgenden Abbildungen zeigen einige Modikationsmoglichkeiten f ur dreidimensionale Gra-
ken:
>> surfl(peaks(100)) >> pbaspect([4 3 2]) >> pbaspect([3 3 2])
>> colormap(gray(1000)) >> box on >> axis off
>> shading interp >> grid off >> view(-25,6)
Der Befehl pbaspect([4 3 2]) bewirkt dabei, dass die Langen der x-, y- und z-Achse im
Verhaltnis 4 : 3 : 2 stehen.
4.8 Beschriftung von Graken
Graken konnen in Matlab unter anderem mit den folgenden Befehlen beschriftet werden:
title
Uberschrift der Grak
xlabel, ylabel, zlabel Achsenbeschriftungen
text beliebig positionierbarer Text
gtext graphische Textpositionierung (z.B. mit einer Maus)
legend Legende
colorbar Farblegende
http://www.mathematik-online.org/ 63
KAPITEL 4. GRAFIK
Bei der Beschriftung mit den Matlab-Befehlen kann eine stark eingeschrankte L
A
T
E
X-Notation
verwendet werden. Die volle Funktionalitat von L
A
T
E
X zur Beschriftung von Matlab-Graken
erschliet das MTP-Paket, das unter
http://www.imng.uni-stuttgart.de/LstNumGeoMod/artikel.html
verf ugbar ist.
Beispiel:
Die Matlab-Befehlsfolge
>> x=linspace(0,2*pi);
>> plot(x,[sin(x);cos(x)])
>> title(Trigonometrische Funktionen)
>> xlabel(Winkel \alpha)
>> ylabel(Funktionswerte)
>> text(pi/4,sin(pi/4), sin \pi/4=cos \pi/4)
>> legend({sin \alpha,cos \alpha},Location,EastOutside)
>> axis equal
>> axis tight
erzeugt die folgende beschriftete Grak:
0 1 2 3 4 5 6
0.5
0
0.5
1
Trigonometrische Funktionen
Winkel
F
u
n
k
t
i
o
n
s
w
e
r
t
e
sin /4=cos /4
sin
cos
Bei der Beschriftung konnen insbesondere griechische Buchstaben in der zugehorigen L
A
T
E
X-
Notation (\alpha f ur , \beta f ur , . . . ) verwendet werden.
4.9 Speichern und Drucken von Graken
Zum Speichern und Drucken von Graken stehen in Matlab die folgenden Funktionen zur
Verf ugung:
print Drucken und Speichern von Graken
orient Einstellen der Papierorientierung
prindlg onet Dialogfenster mit Druckeinstellungen
pagesetupdlg onet Dialogfenster mit Seiteneinstellungen
printpreview Vorschau der Druckausgabe
Der Befehl print ohne Angabe von Parametern sendet die aktuelle Grak an den Standard-
drucker. Alternativ kann durch den Aufruf
print -dFormat Dateiname
die Grak unter dem gegebenen Format und Dateinamen abgespeichert werden. Gebrauchliche
Werte f ur Format sind dabei bmp, epsc, jpeg, pdf, png, tiff.
64 http://www.mathematik-online.org/
4.10. GRAFIKFENSTER UND KOORDINATENSYSTEME
4.10 Grakfenster und Koordinatensysteme
Grakfenster und die darin dargestellten Koordinatensysteme konnen in Matlab mittels der
folgenden Funktionen kontrolliert werden:
figure onet ein neues oder aktiviert ein bestehendes Grakfenster
clf loscht den Inhalt des aktiven Grakfensters
shg bringt das aktuelle Grakfenster in den Vordergrund
close schlieen von Grakfenstern
refresh erneute Darstellung von Grakfenstern
axes erzeugt ein Koordinatensystem
cla loscht den Inhalt des aktiven Koordinatensystems
subplot Darstellung mehrerer Achsensysteme in einem Grakfenster
hold Darstellung mehrerer Grakobjekte in einem Koordinatensystem
Grakfenster und Koordinatenachsen werden beim ersten Aufruf eines Grakbefehls automa-
tisch von Matlab erstellt. In der Standardeinstellung ersetzt jedes nachfolgend erzeugte Gra-
kobjekt seinen Vorganger. Die Anzeige mehrerer Grakobjekte in einem Koordinatensystem
kann mittels
hold on bzw. hold off
ein- bzw. ausgeschaltet werden.
Beispiel:
Matlab-Grakfenster mit subplot] Die Matlab-Befehlsfolge
>> subplot(2,2,[1 2])
>> t=linspace(0,8*pi);
>> x=t+cos(2*t);
>> y=sin(t);
>> plot(x,y);
>> title((x,y)=(t+cos 2t, sin t) mit t \in [0,2\pi])
>> axis tight
>> subplot(2,2,3)
>> plot(x)
>> axis tight
>> title(Verlauf der x-Koordinate)
>> subplot(2,2,4)
>> plot(y)
>> axis tight
>> title(Verlauf der y-Koordinate)
ergibt die Grak
http://www.mathematik-online.org/ 65
KAPITEL 4. GRAFIK
5 10 15 20 25
0.5
0
0.5
(x,y)=(t+cos 2t, sin t) mit t [0,2]
20 40 60 80 100
5
10
15
20
25
Verlauf der xKoordinate
20 40 60 80 100
0.5
0
0.5
Verlauf der yKoordinate
Mit Hilfe des Befehls subplot(2,2,[1 2]) wird zunachst ein (2 2)-Raster f ur Koordina-
tensysteme erstellt, von denen die beiden der ersten Zeile zu einem zusammengefasst werden
(Parameter [1 2]). Die Ausgabe des nachfolgenden Grakbefehls erfolgt in diesem Koordina-
tensystem. Analog werden durch subplot(2,2,3) bzw. subplot(2,2,4) die Ausgaben in das
linke untere bzw. rechte untere Koordinatensystem umgeleitet.
4.11 Objektstruktur von Graken
Wie die nachfolgende Abbildung zeigt, werden in Matlab Graken mit Hilfe einer hierarchi-
schen Objektstruktur verwaltet.
root
gure
axes
uicontrol uimenu uicontextmenu
image light
line
patch rectangle
surface text
Die einzelnen Objekte bilden eine verkettete Liste, an deren Anfang das Root-Objekt steht,
welches dem Kontrollfenster entspricht. Die nachfolgenden Figure-Objekte entsprechen den
66 http://www.mathematik-online.org/
4.11. OBJEKTSTRUKTUR VON GRAFIKEN
Grakfenstern von Matlab denen wiederum Koordinatenachsen oder Elemente graphischer
Benutzeroberachen wie Men us oder Schaltachen untergeordnet sind. Die eigentlichen graphi-
schen Objekte wie Linien, Flachen, usw. werden an die jeweiligen Koordinatenachsen angehangt.
Jedes Objekt der Verwaltungsstruktur bekommt eine eindeutige Nummer, in Matlab als Hand-
le bezeichnet. Mit Hilfe dieser Nummer konnen die Objekte angesprochen und deren Eigenschaf-
ten ausgelesen oder modiziert werden. Hierzu stehen unter anderem die folgenden Befehle zur
Verf ugung:
get auslesen von Objekteigenschaften
set setzen von Objekteigenschaften
reset zur ucksetzen von Objekteigenschaften
delete loschen von Objekten
gca Handle des aktiven Achsensystems
gcf Handle des aktiven Grakfensters
gco Handle des aktiven Objekts
findobj Handles der Objekte mit vorgegebenen Eigenschaften
Viele Matlab-Funktionen wie etwa plot geben das Handle des erzeugten graphischen Objekts
zur uck:
>> h=plot([5 1 3 2 4]);
>> get(h)
Color: [0 0 1]
EraseMode: normal
LineStyle: -
LineWidth: 0.5000
Marker: none
MarkerSize: 6
MarkerEdgeColor: auto
MarkerFaceColor: none
XData: [1 2 3 4 5]
YData: [5 1 3 2 4]
ZData: [1x0 double]
...
Mittels get(h) kann f ur dieses Objekt anschlieend eine Liste der Eigenschaften und deren
Werte angezeigt werden. So kennzeichnet im obigen Beispiel der Wert 0.5 bei LineWidth die
Strichstarke der Linie. Diese kann mittels
>> set(h,LineWidth,2)
vervierfacht werden. Alternativ konnen bei den meisten Grakbefehlen diese Paare von Eigen-
schaftsnamen und zugehorigem Wert direkt an die Prameterliste angehangt werden:
>> plot([5 1 3 2 4],LineWidth,2).
Auf diese Art lasst sich auch die Schriftgroe f ur das aktive Koordinatensystem mittels
>> set(gca,FontSize,20)
auf 20 Punkte vergroern.
Einen interaktive Zugri auf die Objekteigenschaften bietet der Befehl plottools. Er blendet
in das aktive Grakfenster ein Benutzeroberache ein, die ein komfortables Bearbeiten der
gesetzten Eigenschaften ermoglicht.
http://www.mathematik-online.org/ 67
KAPITEL 4. GRAFIK
4.12 Erstellung graphischer Benutzeroberachen
Zur Erstellung von graphischen Benutzeroberachen stehen in Matlab die folgenden Befehle
zur Verf ugung:
uicontrol Erzeugung von Kontrollelementen
uimenu Erzeugung von Benutzermen us
uicontextmenu Erzeugung von Kontextmen us
Die Darstellung von Kontrollelementen erfolgt beispielsweise in der Form
uicontrol(Style,Stil,. . . ) ,
wobei f ur Stil die folgenden Kontrollelementtypen gewahlt werden konnen:
checkbox Anwahlfeld
edit Textfeld editierbar
frame Rahmen
listbox Textauswahl
popupmenu Aufklappmen u
pushbutton Druckknopf
radiobutton Auswahlfeld
slider Rollbalken
text Textfeld (nicht editierbar)
togglebutton Umschalter
Die Parameterliste von uicontrol wird erganzt um Paare von Eigenschaften und Werten zur
Festlegung der Gestalt und Funktionalitat des Kontrollelements.
Alternativ zur Erstellung von graphischen Benutzeroberachen mit Hilfe der zuvor genannten
Befehle konnen mit Hilfe des Matlab-Programms guide diese auch interaktiv gestaltet werden.
68 http://www.mathematik-online.org/
4.12. ERSTELLUNG GRAPHISCHER BENUTZEROBERFL
ACHEN
Beispiel:
Die folgenden Matlab-Befehle erzeugen eine einfache graphische Benutzeroberache zur Er-
zeugung von Zufallstortendiagrammen.
>> figure
>> set(gcf,menubar,none,units,normalized)
>> uimenu(label,&Fenster schliessen,callback,close)
>> set(gca,position,[.4 .1 .5 .8])
>> uicontrol(style,pushbutton,string,Tortengrafik,...
units,normalized,position,[.1 .8 .2 .1],...
callback,pie(rand(1,5)); axis on; box on;)
>> uicontrol(style,pushbutton,string,Grafik loeschen,...
units,normalized,position,[.1 .6 .2 .1],...
callback,cla)
>> uicontrol(style,text,string,Der Tortenbaecker,...
units,normalized,position,[.1 .1 .2 .4])
Zunachst wird mittels figure ein neues Grakfenster geonet und dessen Men u modiziert.
Anschlieend werden mit den nachfolgenden uicontrol-Anweisungen zwei Schaltachen und
ein Textfeld erzeugt.
Mit Hilfe der Eigenschaft callback kann eine Funktion festgelegt werden, die bei Aktivierung
des zugehorigen Men ueintrags oder Kontrollelements ausgef uhrt wird. Im Falle der Druckknopfe
wird so durch pie(rand(1,5)) ein Zufallsdiagramm generiert bzw. mittels cla geloscht.
Abbildung der erzeugten graphischen Benutzeroberache:
http://www.mathematik-online.org/ 69
KAPITEL 4. GRAFIK
70 http://www.mathematik-online.org/
Kapitel 5
Programmierung
5.1 Skripten
Statt der direkte Eingabe von Matlab-Befehlen in der Kommandozeile konnen diese auch in
einer Textdatei mit der Namensendung .m gesammelt werden. Diese wird als Skript bezeichnet
und durch Angabe des Dateinamens ohne Endung .m auf der Kommandozeile ausgef uhrt.
Skripte operieren innerhalb der Befehlsumgebung, d.h. sie haben direkten Einuss auf die dort
denierten Variablen. Im Gegensatz zu Funktionen haben Skripten keine Ein- bzw. Ausgabe-
parameter. Das Zeichen % kennzeichnet einen Kommentar und bewirkt, dass Matlab bei der
Ausf uhrung den Rest der Zeile nicht interpretiert. Die Kennzeichnung eines mehrzeiligen Kom-
mentars erfolgt durch Angabe von %{ vor der ersten Kommentarzeile und %} nach der letzten
Kommentarzeile. Auer diesen beiden Kennzeichnern darf die jeweilige Zeile keinen weiteren
Text enthalten.
Beispiel:
Bestimmt werden sollen die Koezienten m, c der Ausgleichsgeraden y = mx + c durch
die Punkte P
i
= (x
i
, y
i
) f ur i {1, . . . , n}. Diese ergeben sich als Ausgleichslosung des
uberbestimmten linearen Gleichungssystems
_
_
_
x
1
1
.
.
.
.
.
.
x
n
1
_
_
_
_
m
c
_
=
_
_
_
y
1
.
.
.
y
n
_
_
_
.
Die Befehle zur Berechnung werden in der Skript-Datei ausgleichsgerade.m mit dem folgen-
den Inhalt abgelegt:
%{
Skript zur Berechnung einer Ausgleichsgeraden
Die Datenvektoren X und Y mussen vorab definiert werden
%}
% Ausgleichsgerade berechnen
K=[X(:),ones(length(X),1)]\Y(:);
m=K(1)
c=K(2)
http://www.mathematik-online.org/ 71
KAPITEL 5. PROGRAMMIERUNG
% Ausgleichsgerade visualisieren
figure
plot(X,Y,ro)
hold on
plotx=[min(X),max(X)];
plot(plotx,m*plotx+c);
title(sprintf(y=%gx+%g,m,c))
box on
Zur Durchf uhrung der Berechnung m ussen zunachst die Daten bereitgestellt werden. Anschlie-
end erfolgt der Aufruf der Skript-Datei:
>> X=rand(1,10);
>> Y=rand(1,10);
>> ausgleichsgerade
m =
-0.7209
c =
0.8776
Beispiel der graphischen Ausgabe:
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
y=0.720861x+0.877642
5.2
Ubersicht der Kontrollstrukturen
Bei der Programmierung in Matlab stehen unter anderem die folgenden Kontrollstrukturen
zur Verf ugung:
if-Abfrage: Bedingte Verzweigung.
Ausf uhrung unterschiedlicher Befehlssequenzen in Abhangigkeit des Wahrheitswertes lo-
gischer Ausdr ucke.
switch-Anweisung: Fallunterscheidung.
Ausf uhrung von Befehlssequenzen in Abhangigkeit des Wertes einer Variablen. Diskreten
Wertemengen werden entsprechende Befehlssequenzen zugeordnet.
72 http://www.mathematik-online.org/
5.3. IF-ABFRAGE
for-Schleife: n-fache Ausf uhrung einer Befehlssequenz.
Bei der for-Schleife wird einer im Schleifenkopf gekennzeichneten Variablen bei jedem
Schleifendurchlauf ein neuer Wert zugewiesen. Anschlieend werden die im Schleifenrumpf
angegebenen Anweisungen ausgef uhrt.
while-Schleife: Wiederholte Ausf uhrung einer Befehlssequenz.
Die Schleife wird solange durchlaufen, bis ein im Schleifenkopf stehender logischer Aus-
druck den Wert falsch annimmt oder im Schleifenrumpf eine Abbruchanweisung aus-
gef uhrt wird.
Einen
Uberblick der verf ugbaren Kontrollstrukturen und Konzepte der Programmiersprache
von Matlab kann mittels
>> help matlab/lang
angezeigt werden.
5.3 if-Abfrage
Die if-Abfrage zur Durchf uhrung einer bedingten Verzweigung besitzt die folgende Syntax:
if Ausdruck
Befehle
elseif Ausdruck
Befehle
else
Befehle
end
Ist der Ausdruck wahr, d.h. sind alle Realteile der Eintrage von 0 verschieden, werden die
unmittelbar folgenden Befehle ausgef uhrt. Andernfalls wird der Ausdruck der nachfolgenden
elseif-Anweisung gepr uft usw. Sind alle logischen Ausdr ucke falsch, werden die Befehle des
else-Zweigs ausgef uhrt.
Die Anzahl der elseif-Zweige ist beliebig. Deren Angabe kann ebenso wie der else-Zweig ent-
fallen. Zur Konstruktion der Ausdr ucke kann oft auf geeignete Indikatorfunktionen wie isempty,
isstr, ischar, isinf, isnan, isfinite, usw. zur uckgegrien werden.
Soll anhand einer uberschaubaren Menge diskreter Werte entschieden werden, ist switch der
Verwendung von if vorzuziehen
Beispiel:
Das Signum
s(x) =
_
_
1 f ur x > 0,
0 f ur x = 0,
1 f ur x < 0
einer rationalen Zahl x lasst sich in Matlab mit Hilfe der folgenden if-Abfrage bestimmen:
http://www.mathematik-online.org/ 73
KAPITEL 5. PROGRAMMIERUNG
if x>0
s=1;
elseif x<0
s=-1;
else
s=0;
end
Alternativ dazu lasst sich s auch ohne die Verwendung einer if-Abfrage mittels
s=(x>0)-(x<0);
berechnen. Hier ergibt sich s durch Subtraktion der logischen Werte der beiden geklammerten
Vergleiche.
5.4 switch-Anweisung
Die switch-Anweisung zur Fallunterscheidung besitzt die folgende Syntax:
switch Ausdruck
case Wert
Befehle
case {Wert1,Wert2,...,Wertn}
Befehle
otherwise
Befehle
end
Der Wert von Ausdruck muss eine skalare Groe oder eine Zeichenkette sein. Dieser Wert wird
mit den in den case-Zweigen gegebenen Werten vergleichen. Im Falle einer
Ubereinstimmung
werden die Befehle des ersten zugehorigen case-Zweigs ausgef uhrt. Sofern der Wert bei keinem
case-Zweig angegeben ist, werden die otherwise-Befehle ausf uhrt. Die Anzahl der case-Zweige
ist beliebig und die Angabe des otherwise-Zweigs optional.
Beispiel:
Switch-Anweisung zur Ausgabe von Informationen uber eine Zahl n:
switch n
case {1,4,9}
fprintf(%d ist eine Quadratzahl\n,n);
case {2,3,5,7}
fprintf(%d ist eine Primzahl\n,n);
case 6
fprintf(%d hat zwei Primfaktoren: 2 und 3\n,n);
case 8
fprintf(%d ist eine Kubikzahl\n,n);
case {1,7}
% Dieser Zweig wird nie erreicht, da die Falle
% 1 und 7 bereits zuvor definiert wurden
74 http://www.mathematik-online.org/
5.5. FOR-SCHLEIFE
otherwise
disp(n muss naturliche Zahl zwischen 1 und 9 sein.);
end
5.5 for-Schleife
Die for-Schleife zur n-fachen Ausf uhrung einer Befehlssequenz besitzt die folgende Syntax:
for Variable = Matrix/Cell/Feld
Befehle
end
Der Variablen werden nacheinander die Spalten der Matrix bzw. der Cell zugewiesen. Im Falle
mehrdimensionaler Felder werden analog die Spalten aller Teilmatrizen durchlaufen. F ur jede
Spalte werden die Befehle einmal ausgef uhrt.
Ein n-facher Schleifendurchlauf kann mittels for zaehler=1:n realisiert werden. Im Gegensatz
dazu wird der Rumpf der Schleife for zaehler=[1:n] nur einmal durchlaufen, da es sich
bei [1:n] um einen Spaltenvektor handelt. Ein vorzeitiger Abbruch der Schleife ist durch
Angabe des Befehls break moglich (z.B. innerhalb einer if-Abfrage). Oft konnen for-Schleifen
durch geeignete Vektor-/Matrixoperationen ersetzt werden. Diese sind in der Regel wesentlich
ezienter.
Beispiel:
Mit Hilfe eines Monte-Carlo-Verfahrens soll eine Naherung der Kreiszahl 3.1416 bestimmt
werden. Hierzu werden n Zufallspunkte in [0, 1]
2
bestimmt. Bezeichnet l die Anzahl jener Zufall-
spunkte p = (p
1
, p
2
), die in dem Viertelkreises p
2
1
+p
2
2
< 1 liegen, so gilt f ur hinreichend groe n
die Naherung 4l/n. Der Faktor 4 ergibt sich aus der Tatsache, dass aus Symmetriegr unden
nur ein Viertelkreis betrachtet wird.
Nachfolgend werden drei unterschiedliche Implementierungen angegeben, deren Laufzeit mit
Hilfe der Befehle tic (Start einer Stoppuhr) und toc (Anhalten der Stoppuhr) gemessen wird:
Implementierung mit einer for-Schleife uber die Anzahl der Tests:
tic
n=10^6;
l=0;
for k=1:n
p=rand(2,1);
l=l+(p(1).^2+p(2).^2<1);
end
pi=4*l/n
toc
Ausgabe:
pi =
3.1432
Elapsed time is 18.367863 seconds.
http://www.mathematik-online.org/ 75
KAPITEL 5. PROGRAMMIERUNG
Die Schleife wird n = 10
6
mal durchlaufen. Dabei wird jeweils ein Zufallspunkt generiert und l
um 1 erhoht, sofern dessen quadrierter Betrag kleiner als 1 ist.
Implementierung mit einer for-Schleife uber die Spalten einer Zufallspunktematrix:
tic
n=10^6;
l=0;
for p=rand(2,n)
l=l+(p(1).^2+p(2).^2<1);
end
pi=4*l/n
toc
Ausgabe:
pi =
3.1453
Elapsed time is 11.304552 seconds.
Im Gegensatz zur ersten Implementierung werden alle 10
6
Zufallspunkte mit einem Aufruf der
Funktion rand generiert. Die zugehorigen Spaltenvektoren werden anschlieend innerhalb der
for-Schleife abgearbeitet. Hieraus ergibt sich eine deutliche Laufzeitverk urzung.
Implementierung ohne eine for-Schleife:
tic
n=10^6;
P=rand(2,n);
l=sum(P(1,:).^2+P(2,:).^2<1);
pi=4*l/n
toc
Ausgabe:
pi =
3.1403
Elapsed time is 0.388576 seconds.
Zunachst wird eine (2 10
6
)-Matrix P erstellt, deren Spalten die Zufallspunkte enthalten.
Mittels P(1,:).^2+P(2,:).^2 wird ein Vektor bestimmt, welcher die quadrierten Abstande
dieser Punkte vom Ursprung enthalt. Der Vergleich dieses Vektors mittels <1 ergibt einen
logischen Vektor, der bei Summation mittels sum die Anzahl l ergibt. Diese Implementierung
ist um den Faktor 47 bzw. 29 schneller als die beiden Varianten mit for-Schleifen.
5.6 while-Schleife
Die while-Schleife zur mehrfachen Ausf uhrung einer Befehlssequenz besitzt die folgende Syntax:
while logischer Ausdruck
Befehle
end
76 http://www.mathematik-online.org/
5.6. WHILE-SCHLEIFE
Die Befehle des Schleifenrumpfes werden ausgef uhrt, solange der logische Ausdruck wahr ist,
d.h. alle Elemente des Realteils von Null verschieden sind. Ein vorzeitiger Abbruch der Schlei-
fe ist durch die break-Anweisung moglich. Beim Auftreten des Befehls continue werden die
restlichen Befehle des Schleifenrumpfes ubersprungen und die nachste Iteration begonnen. End-
losschleifen konnen durch while 1 realisiert werden.
Beispiel:
Der Eigenvektor X zum betragsmaig groten Eigenwert einer Matrix A kann ausgehend von
einem (geeigneten) Startvektor Y mit Hilfe der von Mises-Iteration berechnet werden:
function [X,lambda]=mises(A,Y,tol)
lambda_old=inf;
lambda=0;
while (abs(lambda-lambda_old) > tol)
X=Y/norm(Y);
Y=A*X;
lambda_old=lambda;
lambda=X*Y;
end
Die while-Schleife wird dabei ausgef uhrt, solange die beiden aufeinanderfolgenden Naherung
lambda und lambda_old sich um einen Wert unterscheiden, der groer als die vorgegebene
Toleranz tol ist.
Der Aufruf
>> A =[ 1 -1 -3
-1 19 -3
-3 -3 11];
>> Y=[1 1 1];
>> [X,lambda]=mises(A,Y,10^-6)
ergibt die Ausgabe
X =
-0.0001
0.9487
-0.3161
lambda =
20.0000
Diese Daten entsprechen naherungsweise jenen in der letzten Spalte von U bzw. D bei der
Eigenwertberechnung
>> [U,D]=eig(A)
U =
-0.9535 0.3015 0.0000
-0.0953 -0.3015 -0.9487
-0.2860 -0.9045 0.3162
D =
0.0000 0 0
0 11.0000 0
0 0 20.0000
http://www.mathematik-online.org/ 77
KAPITEL 5. PROGRAMMIERUNG
5.7 Funktionen
Vergleichbar zu Skripten werden in Matlab Funktionen ebenfalls in Textdateien mit der En-
dung .m gespeichert. Im Gegensatz dazu beginnt eine Funktion jedoch mit einer Deklarations-
zeile der Bauart
function [R uckgabevariable, . . . ]=Funktionsname(Parameter, . . . )
Die Angabe einer Liste von R uckgabevariablen und Parametern ist dabei optional. Der Funk-
tionsname ist beliebig, sollte in der Praxis jedoch dem Dateinamen ohne die Endung .m ent-
sprechen.
In der Regel wird direkt nach dieser Funktionsdeklaration ein zugehoriger Hilfetext angegeben.
Eine besondere Rolle spielt dabei die erste Hilfezeile, die eine Kurzbeschreibung der Funk-
tion enthalten sollte. Sie wird als einzige bei der Stichwortsuche mit lookfor durchsucht.
Der erste zusammenhangende Block von Kommentarzeilen wird beim Aufruf der Hilfe mit
help Funktionsname ausgegeben.
Auf diesen optionalen Kommentarblock folgen die Matlab-Befehle zur Denition der Funk-
tion. Bei der Ausf uhrung wird die Funktion automatisch am Ende der Datei, beim Auftreten
des Befehls return oder bei Angabe einer neuen Deklarationszeile f ur eine weitere Funktion
verlassen.
Die in Funktionen denierten Variablen sind lokal, d.h. sie haben keinen Einuss auf die Varia-
blen der Befehlsumgebung. Ebenso werden die Parameter beim Aufruf kopiert. Die Denition
der R uckgabewerte erfolgt durch einfache Zuweisung innerhalb der Funktion.
Funktionen konnen sich selbst aufrufen. Jede Instanz operiert dabei auf eigenen Variablen,
insbesondere werden die Aufrufparameter kopiert. Die maximale Rekursionstiefe kann mittels
get(0,RecursionLimit)
abgefragt, bzw. mittels set modiziert werden.
Innerhalb der Matlab-Datei einer Funktion konnen weitere Funktionen deniert werden. Diese
stehen jedoch nur der zuerst angegebenen Funktion als lokale Hilfsfunktionen zur Verf ugung.
Der Quelltext einer Funktion kann mittels
type Funktionsnamen
angezeigt werden. Der Pfad, unter dem eine Funktion gespeichert ist, kann durch
which Funktionsnamen
abgefragt werden.
Beispiel:
Funktion zur Berechnung der Koezienten m, c der Ausgleichsgeraden y = mx + c f ur die
Punkte P
i
= (x
i
, y
i
), i {1, . . . , n}:
function [m,c]=ausgleichsgerade(X,Y)
%AUSGLEICHSGERADE Berechnung einer Ausgleichsgeraden
%
% Input : X,Y Vektoren mit Messpunktdaten
% Output: m,c Koeffizienten der Ausgleichsgeraden
78 http://www.mathematik-online.org/
5.7. FUNKTIONEN
% Ausgleichsgerade berechnen
K=[X(:),ones(length(X),1)]\Y(:);
m=K(1);
c=K(2);
% Ausgleichsgerade visualisieren
figure
plot(X,Y,ro)
hold on
plotx=[min(X),max(X)];
plot(plotx,m*plotx+c);
title(sprintf(y=%gx+%g,m,c))
box on
Aufrufvarianten f ur die in der Datei ausgleichsgerade.m gespeicherte Funktion:
>> X=rand(1,10);
>> Y=rand(1,10);
>> [m,c]=ausgleichsgerade(X,Y)
m =
-0.0759
c =
0.5486
>> ausgleichsgerade(rand(10,1),rand(10,1))
ans =
-0.1366
Darstellung der Kommentare im Funktionskopf mittels lookfor und help:
>> lookfor Ausgleichsgerade
AUSGLEICHSGERADE Berechnung einer Ausgleichsgeraden
>> help ausgleichsgerade
AUSGLEICHSGERADE Berechnung einer Ausgleichsgeraden
Input : X,Y Vektoren mit Messpunktdaten
Output: m,c Koeffizienten der Ausgleichsgeraden
Wiederkehrenden Aufgaben innerhalb einer Funktion konnen in lokale Funktionen ausgelagert
werden. Dieses Konzept kann auch zur besseren Strukturierung der Teilaufgaben verwendet
werden. Zu beachten ist jedoch der Mehraufwand bedingt durch das Kopieren der Parameter
beim Aufruf lokaler Funktionen.
Beispiel einer (nicht besonders sinnvollen) Strukturierung mittels lokaler Funktionen:
function [m,c]=ausgleichsgerade(X,Y)
%AUSGLEICHSGERADE Berechnung einer Ausgleichsgeraden
%
% Input : X,Y Vektoren mit Messpunktdaten
% Output: m,c Koeffizienten der Ausgleichsgeraden
http://www.mathematik-online.org/ 79
KAPITEL 5. PROGRAMMIERUNG
[m,c]=ag_berechnen(X,Y);
ag_visualisieren(X,Y,m,c);
% lokale Funktion zum Berechnen der Ausgleichsgeraden
function [m,c]=ag_berechnen(X,Y)
K=[X(:),ones(length(X),1)]\Y(:);
m=K(1);
c=K(2);
% lokale Funktion zur Visualisierung der Ausgleichsgeraden
function ag_visualisieren(X,Y,m,c);
figure
plot(X,Y,ro)
hold on
plotx=[min(X),max(X)];
plot(plotx,m*plotx+c);
title(sprintf(y=%gx+%g,m,c))
box on
5.8 Ein- und Ausgabeparameter von Funktionen
Zur Kontrolle der Ein- und Ausgabeparameter von Funktionen stellt Matlab unter anderem
die folgenden Funktion zur Verf ugung:
nargin Anzahl der Eingabeparameter
nargout Anzahl der Ausgabeparameter
exist pr uft, ob eine Variable existiert
varargin Eingabeparameterliste unbestimmter Lange (cell-array)
varargout Ausgabeparameterliste unbestimmter Lange
nargchk pr ufen der Eingabeparameteranzahl
nargoutchk pr ufen der Ausgabeparameteranzahl
Beispiel:
Berechnung einer Ausgleichsgeraden abhangig von der Zahl der Eingabeparameter:
function [m,c]=ausgleichsgerade(X,Y)
if nargin==0
error(Keine Daten vorhanden)
end
if ~exist(Y,var)
Y=X;
X=1:length(Y);
end
K=[X(:),ones(length(X),1)]\Y(:);
80 http://www.mathematik-online.org/
5.9. DATENPFAD
if nargout>0
m=K(1);
end
if nargout>1
c=K(2);
end
Analog zur Funktion plot werden bei
Ubergabe von nur einem Datenvektor diese als y-Werte
interpretiert und die x-Werte automatisch generiert. Die Zuweisung der R uckgabewerte erfolgt
nur, sofern diese auch beim Aufruf angegeben wurden.
Die Verwendung von exist zur Kontrolle, ob ein Parameter ubergeben wurde, besitzt gegen uber
der reinen Anzahlkontrolle mit nargin den Vorteil, dass der Code lesbarer und robuster ge-
gen uber
Anderungen der Parameterreihenfolge wird.
Ausgaben der Funktion:
>> X=rand(1,10);
>> Y=rand(1,10);
>> ausgleichsgerade
??? Error using ==> ausgleichsgerade
Keine Daten vorhanden
>> [m,c]=ausgleichsgerade(Y)
m =
0.0463
c =
0.2706
>> m=ausgleichsgerade(X,Y)
m =
-0.7209
>> ausgleichsgerade(X,Y)
Da beim letzten Aufr uf keine R uckgabevariablen angegeben wurden, besitzt nargout den Wert
0. In diesem Fall werden die Resultate nicht den Variablen m und c zugewiesen, weshalb die
Funktionen nichts zur uckgibt.
5.9 Datenpfad
Beim Aufruf von Skripten und Funktionen werden diese zunachst im aktuellen Arbeitsverzeich-
nis und dann im Matlab-Pfad gesucht. F ur die Arbeit mit Verzeichnissen und die Kontrolle
des Pfades stehen dabei unter anderem die folgenden Funktionen zur Verf ugung:
http://www.mathematik-online.org/ 81
KAPITEL 5. PROGRAMMIERUNG
Verzeichnisbefehle:
pwd Ausgabe des aktuellen Arbeitsverzeichnisses
cd Wechseln des Arbeitsverzeichnisses
dir Ausgabe des Verzeichnisinhalts
rmdir Verzeichnis loschen
mkdir Verzeichnis erstellen
Pfadbefehle:
path Ausgabe bzw. Durchsuchen des Matlab-Pfads
addpath Verzeichnis in den Pfad aufnehmen
rmpath Verzeichnis aus dem Pfad loschen
savepath aktuellen Pfad speichern
pathtool Interaktive Bearbeitung des Pfads
which Angabe des Pfads zu einer Funktion
5.10 Globale und persistente Variablen
Die innerhalb von Funktionen verwendeten Variablen haben lokalen Charakter, d.h. sie sind
f ur andere Funktionen nicht