Está en la página 1de 88

MathematikOnlineKurs

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

Workspace). Darunter werden im


Fenster

Command History die zuletzt eingegebenen Befehle angezeigt.


Auf der rechten Seite bendet sich das Kommandofenster. Es dient zur Eingabe von Daten und
Befehlen sowie zur Ausgabe von Resultaten.
Eingabezeilen werden durch die Zeichen >> gekennzeichnet. Mit Hilfe der Cursortasten (Pfeil
auf bzw. Pfeil ab) konnen die zuletzt eingegebenen Befehle angezeigt werden. Wurden zuvor
einige Zeichen eingegeben, so werden nur noch jene Befehle der Befehlshistorie angezeigt, die mit
diesen Zeichen beginnen. Die Tabulator-Taste ermoglicht die Vervollstandigung angefangener
Funktions-, Variablen- oder Verzeichnisnamen.
Beim Aufruf von Matlab mittels matlab -nodesktop wird nur das Kommandofenster bzw.
dessen Inhalt angezeigt. Matlab kann durch Eingabe von exit oder quit im Kommandofen-
ster beendet werden.
Beispiel:
Kurze Matlab-Session zum Losen eines linearen Gleichungssystems. Die Ausf uhrung erfolgt
innerhalb einer Linux-Shell:
user@host:~> matlab -nodesktop
< M A T L A B >
Copyright 1984-2005 The MathWorks, Inc.
Version 7.1.0.183 (R14) Service Pack 3
August 02, 2005
To get started, type one of these: helpwin, helpdesk, or demo.
For product information, visit www.mathworks.com.
>> A=[5 0 -2; 3 2 9; 6 1 4]
A =
5 0 -2
3 2 9
6 1 4
>> A\[-3; -6; -7]
ans =
-1.0000
3.0000
-1.0000
>> exit
user@host:~>
10 http://www.mathematik-online.org/
1.3. DAS HILFE-SYSTEM VON MATLAB
1.3 Das Hilfe-System von MATLAB
Der Befehl help dient zur Anzeige von Hilfetexten im Kommandofenster. Mogliche Aufrufarten
sind dabei:
help bzw. help Thema bzw. help Funktionsname
die eine

Ubersicht aller Hilfethemen bzw. die Hilfe zu einem Thema bzw. einer Funktion ausgibt.
Sofern der Funktionsname nicht bekannt ist, kann mittels
lookfor Text
nach den Funktionen gesucht werden, in deren Kurzbeschribung der gegebene Text enthalten
ist.
Ebenfalls verf ugbar ist eine Dokumentation in HTML-Format. Diese kann mit Hilfe des Befehls
helpbrowser
angezeigt werden. Einzelne Funktions- oder Themenbeschreibungen konnen analog zu help mit
Hilfe des Befehle
doc Thema bzw. doc Funktionsname
im Helpbrowser angezeigt werden.
Der Helpbrowser ermoglicht uber den Reiter

Demos auch den Zugang zu vielen Anwendungs-


beispielen. Diese konnen alternativ auch durch Eingabe von demo auf der Kommandozeile auf-
grufen werden.
Bei den Hilfe- und Dokumentationstexten ist darauf zu achten, dass Funktionsnamen zur bes-
seren Kennzeichnung mit Grobuchstaben dargestellt sind. Beim Aufruf der Funktion oder der
zugehorigen Hilfeseiten sind jedoch Kleinbuchstaben zu verwenden.
Beispiel:
Gesucht wird der Befehl zur Berechnung des Rangs (engl. rank) einer Matrix. Hierzu wird
zunachst mit Hilfe der Funktion lookfor nach jenen Funktionen gesucht, in deren Kurzbe-
schreibung die Zeichenkette rank vorkommt:
>> lookfor rank
CHOLUPDATE Rank 1 update to Cholesky factorization.
QRUPDATE Rank 1 update to QR factorization.
RANK Matrix rank.
SPRANK Structural rank.
GFRANK Compute the rank of a matrix over a Galois field.
FITSCALINGRANK Rank based fitness scaling.
GANGSTR Zero out small entries subject to structural rank.
FRANKE Frankes bivariate test function.
...
Jede Zeile der Ausgabe von lookfor enthalt den gro geschriebenen Namen und die Kurzbe-
schreibung einer Funktion. Die Anzeige der Hilfeseite zur Funktion rank erfolgt mit dem Befehl
help (auf Kleinschreibung des Funktionsnamens achten).
http://www.mathematik-online.org/ 11
KAPITEL 1. GRUNDLAGEN
>> help rank
RANK Matrix rank.
RANK(A) provides an estimate of the number of linearly
independent rows or columns of a matrix A.
RANK(A,tol) is the number of singular values of A
that are larger than tol.
RANK(A) uses the default tol = max(size(A)) * eps(norm(A)).
Class support for input A:
float: double, single
Overloaded functions or methods (ones with the same name in
other directories)
help gf/rank.m
help sym/rank.m
Reference page in Help browser
doc rank
Eine ausf uhrliche Beschreibung der Funktion rank im Hilfe-Browser kann durch Eingabe von
doc rank angezeigt werden:
Viele Matlab-Funktionen sind in der Programmiersprache von Matlab implementiert. Der
Quelltext kann in diesem Fall mit type Funktionsname angezeigt werden:
12 http://www.mathematik-online.org/
1.4. ZAHLEN
>> type rank
function r = rank(A,tol)
%RANK Matrix rank.
% RANK(A) provides an estimate of the number of linearly
% independent rows or columns of a matrix A.
% RANK(A,tol) is the number of singular values of A
% that are larger than tol.
% RANK(A) uses the default tol = max(size(A)) * eps(norm(A)).
%
% Class support for input A:
% float: double, single
% Copyright 1984-2004 The MathWorks, Inc.
% $Revision: 1.5 $ $Date: 2006/08/22 09:08:13 $
s = svd(A);
if nargin==1
tol = max(size(A)) * eps(max(s));
end
r = sum(s > tol);
Die mittels help ausgegebene Hilfe zur Funktion rank entspricht dabei dem ersten zusam-
menhangenden Block von Kommentarzeilen, die durch % gekennzeichnet sind. Die Funktion
lookfor durchsucht die jeweils erste Kommentarzeile.
1.4 Zahlen
Zahlen werden in Matlab im Gleitpunktformat gema dem IEEE-Standard double gespeichert.
In diesem Format sind nur endlich viele rationale Zahlen darstellbar, die betragsmaig im
Intervall [2.2251e-308,1.7977e+308] liegen. Die relative Genauigkeit betragt 2
53
1.1102e16.
Die Matlab-Funktion eps liefert den Abstand zwischen 1 und der nachstgroeren darstellbaren
Zahl, also das doppelte der relativen Genauigkeit.
Dar uber hinaus sind die folgenden speziellen Zahlen deniert:
inf (innity): dieser vorzeichenbehaftete Wert steht f ur und kennzeichnet einen

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

Uberlauf und mathematisch nicht denierte Operationen:


>> 1e400 >> 1-inf >> -1+inf >> inf+inf
ans = ans = ans = ans =
Inf -Inf Inf Inf
>> inf-inf >> 1/0 >> 0/0
ans = Warning: Divide by zero. Warning: Divide by zero.
NaN ans = ans =
Inf NaN
1.5 Ausgabeformatierung
Die Formatierung der ausgegebenen Resultate kann mit der Funktion
format Stil
gesteuert werden. Mogliche Stilparameter sind:
14 http://www.mathematik-online.org/
1.6. ELEMENTARE OPERATOREN UND FUNKTIONEN
Stil Beschreibung Ausgabe von exp(-1)
short skalierte Festpunktdarstellung mit 5
Stellen
0.3679
long skalierte Festpunktdarstellung mit 15
Stellen
0.36787944117144
short e Gleitpunktdarstellung mit 5 Stellen 3.6788e-01
long e Gleitpunktdarstellung mit 15 Stellen 3.678794411714423e-01
short g optimale Darstellung mit 5 Stellen 0.36788
long g optimale Darstellung mit 15 Stellen 0.367879441171442
short eng mindestens 5 Stellen und einen durch
drei teilbaren Exponenten
367.8794e-003
long eng 16 signikante Stellen und einen durch
drei teilbaren Exponenten
367.879441171442e-003
rat Naherung in Bruchdarstellung 536/1457
Die Anzeige von Leerzeilen zwischen den Ausgaben kann durch Angabe des Stils compact bzw.
loose aus bzw. eingeschaltet werden.
In der Standard-Einstellung gibt Matlab im Kommandofenster bei Eingabe eines Ausdrucks
dessen Wert zur uck. Sofern dies nicht erw unscht ist, kann die Ausgabe durch Anhangen des
Zeichens ; unterdr uckt werden.
1.6 Elementare Operatoren und Funktionen
Zahlen konnen mit den Operatoren
+, -, *, /, \ (a\b entspricht b/a), ^ (Potenz)
verkn upft werden. Dabei konnen Ausdr ucke mit Hilfe von ( ) geklammert werden. Die Auswer-
tung erfolgt in der Reihenfolge Potenzen, Punktrechnungen, Strichrechnungen. Gleichrangige
Ausdr ucke werden von links nach rechts ausgewertet.
Ebenfalls verf ugbar sind die ublichen mathematischen Funktionen, von denen nachfolgend eine
Auswahl angegeben ist:
http://www.mathematik-online.org/ 15
KAPITEL 1. GRUNDLAGEN
trigonometrische Funktionen (Winkelangaben in Bogenma)
cos, sin, tan Kosinus, Sinus, Tangens,
cot, sec, csc Cotangens, Secans, Cosecans
acos, asin, ... zugehorige inverse Funktionen
sinh, cosh, ... hyperbolische Funktionen
asinh, acosh, ... inverse hyperbolische Funktionen
Exponentialfunktionen
exp, pow2 Exponentialfunktion mit Basis e bzw. 2
log, log10, log2 Logarithmus zur Basis e, 10 bzw. 2
sqrt, realsqrt Quadratwurzel bzw. Einschrankung auf R
+
0
Rechnen mit komplexen Zahlen
abs, angle, conj Betrag, Argument (Winkel) und Konjugation
real, imag Real- bzw. Imaginarteil
Sonstige
round, floor, ceil runden, abrunden, aufrunden
mod, rem, sign Modul, Divisionsrest, Vorzeichen
Konstanten
pi, exp(1) , e
i, j imaginare Einheit
Eine

Ubersicht der verf ugbaren Operatoren bzw. elementaren Funktionen kann mit Hilfe des
Befehls
help matlab/ops bzw. help matlab/elfun
dargestellt werden.
(Online-Version enthalt Download, siehe Anhang A)
Beispiel:
Beispiele zur Reihenfolge bei der Auswertung von Operatoren:
>> 3^3^3 >> (3^3)^3 >> 3^(3^3)
ans = ans = ans =
19683 19683 7.6256e+12
>> 12/3/4 >> 3\12/4 >> 16^1/2-16^(1/2)
ans = ans = ans =
1 1 4
Bei der Durchf uhrung ist stets zu ber ucksichtigen, dass nur mit endlicher Prazision gerechnet
wird und auch bei den einfachsten Rechnungen wie e e/e
2
1 = 0 bereits Fehler auftreten
konnen:
>> exp(1)*exp(1)/exp(2)-1
ans =
2.2204e-16
16 http://www.mathematik-online.org/
1.7. VARIABLEN
Es ist darauf zu achten, dass Matlab stets die komplexen Erweiterungen der bekannten reellen
Funktionen verwendet, d.h. komplexe Zahlen konnen sowohl im Argument, als auch im Resultat
auftreten. Sofern dies nicht erw unscht ist kann bei ausgewahlten Funktionen mit Hilfe der real-
Variante eine explizite Fehlermeldung erzwungen werden:
>> i^i >> sqrt(-1) >> realsqrt(-1)
ans = ans = ??? Error using ==> realsqrt
0.2079 0 + 1.0000i Realsqrt produced complex result.
Ebenso konnen Rechnungen mit dem speziellen Wert bzw. Resultat inf () durchgef uhrt
werden:
>> sqrt(inf) >> sqrt(-inf) >> log(0)
ans = ans = Warning: Log of zero.
Inf 0 + Infi ans =
-Inf
1.7 Variablen
Variablennamen m ussen mit einem Buchstaben beginnen. Sie d urfen nur aus Buchstaben (keine
Umlaute), Ziern und dem Zeichen _ zusammengesetzt sein. Die maximal erlaubte Lange kann
mit Hilfe der Matlab-Funktion namelengthmax abgefragt werden. Sie ergibt f ur die Version
R14 den Wert 63. Variablen- und Funktionsnamen sind case sensitive, d.h. zwischen Gro- und
Kleinschreibung wird unterschieden.
Bei der Wahl der Variablennamen ist darauf zu achten, dass gleichnamige Funktionen uberdeckt
werden. Besonders gefahrdet sind hier die Funktionen i und j, welche die imaginare Einheit
zur uckliefern.
Die Zuweisung von Werten erfolgt in der Form Variable=Ausdruck. Die Typdeklaration erfolgt
dabei automatisch. Der jeweils letzte nicht zugewiesene R uckgabewert wird in der Variablen
ans (answer) gespeichert.
Eine Liste der denierten Variablen bzw. deren Langform kann mit Hilfe der Befehle
who bzw. whos
ausgegeben werden. Variablen lassen sich mit Hilfe des Befehls
clear Variablennamen
loschen. Mehrere Variablennamen sind dabei durch Leerstellen zu trennen. Sofern keine Varia-
blennamen angegeben sind, werden alle Variablen geloscht.
Beispiel:
In dem Beispiel
>> clear; Radius=4;
>> Flaeche=pi*radius^2
??? Undefined function or variable radius.
>> Flaeche=pi*Radius^2;
>> Flaeche
http://www.mathematik-online.org/ 17
KAPITEL 1. GRUNDLAGEN
Flaeche =
50.2655
>> who
Your variables are:
Flaeche Radius
>> sqrt(Flaeche)
ans =
7.0898
>> whos
Name Size Bytes Class
Flaeche 1x1 8 double array
Radius 1x1 8 double array
ans 1x1 8 double array
Grand total is 3 elements using 24 bytes
werden zunachst alle Variablen geloscht und anschlieend die Variable Radius mit dem Wert
4 deniert. Die darauf folgende Zuweisung ergibt aufgrund der falschen Gro-/Kleinschreibung
eine Fehlermeldung. Aufgrund der fehlenden Zuweisung des Resultats von sqrt(Flaeche) wird
dieses in der Variablen ans gespeichert, wie an der Ausgabe des Befehls whos zu sehen ist.
Beispiel:
Betrachtet wird das folgende Beispiel:
>> clear; z=3+4*i
z =
3.0000 + 4.0000i
>> i=0;
>> z=3+4*i
z =
3
>> z=3+4i
z =
3.0000 + 4.0000i
>> clear i
>> z=3+4*i
z =
3.0000 + 4.0000i
In der ersten Zeile werden zunachst alle Variablen geloscht und anschlieend die Funktion i zur
Denition einer komplexen Zahl verwendet. Sie wird in der darauf folgenden Zeile durch die
Zuweisung i=0 uberdeckt, weshalb die nachste Zuweisung folgerichtig zu dem Wert 3+40 = 3
f uhrt. Davon unber uhrt bleibt die Darstellung komplexer Zahlen durch direktes Anhangen von
i, da hier i nicht als Funktion bzw. Variable, sondern spezieller Kennzeichner des Imaginarteils
fungiert. Durch das Loschen der Variablen i mittels clear i wird die

Uberlagerung aufgehoben
und man erhalt das urspr ungliche Ergebnis bei der Denition von z.
18 http://www.mathematik-online.org/
1.8. SPEICHERN UND LADEN VON VARIABLEN
1.8 Speichern und Laden von Variablen
Alle Variablen des Arbeitsspeichers konnen mit Hilfe des Befehls
save Dateiname
unter dem gegebenen Dateinamen abgespeichert werden. Die Speicherung erfolgt im Matlab-
eigenen Binarformat, das durch die Dateiendung .mat gekennzeichnet ist. Durch Anhangen
einer mittels Leerzeichen getrennten Liste von Variablennamen werden nur die angegebenen
Variablen gespeichert:
save Dateiname Variablennamen
Alle in einer Datei gespeicherten Variablen konnen mittels
load Dateiname
bzw. ausgewahlte Variablen mittels
load Dateiname Variablennamen
geladen werden. Dabei werden die Inhalte gleichnamiger Variablen im Arbeitsspeicher
uberschrieben.
Beispiel:
Im folgenden Beispiel werden zunachst die drei Variablen A, B, C deniert und anschlieend
in der Datei daten.mat gespeichert. Nach ihrer Umdenition werden die urspr unglichen Werte
von A und C wieder geladen.
>> A=1, B=inf, C=2-3i
A =
1
B =
Inf
C =
2.0000 - 3.0000i
>> save daten
>> A=nan, B=0, C=-1
A =
NaN
B =
0
C =
-1
>> load daten A C
>> A, B, C
A =
1
B =
0
C =
2.0000 - 3.0000i
http://www.mathematik-online.org/ 19
KAPITEL 1. GRUNDLAGEN
20 http://www.mathematik-online.org/
Kapitel 2
Matrizen
2.1 Matrizen
Die Matrix ist das zentrale Datenformat von Matlab. Die Denition einer Matrix erfolgt
dabei mittels der zeilenweisen Angabe aller Eintrage geklammert durch [ ]. Die Elemente
einer Zeile werden durch Leerzeichen oder Kommas getrennt, Zeilen durch einen Strichpunkt
bzw. eine Zeilenschaltung. Wird eine Eingabezeile mit drei Punkten abgeschlossen, so wird die
nachfolgende Zeilenschaltung nicht als Zeilenwechsel der Matrix interpretiert. Bei der Eingabe
ist darauf zu achten, dass alle Zeilen gleichviele Elemente enthalten. Die Angabe von [ ] ohne
Elemente erzeugt eine leere Matrix.
Skalare bzw. Vektoren sind in Matlab ebenfalls Matrizen. Sie besitzen die spezielle Groe
1 1 bzw. 1 n oder n 1. Insbesondere kann bei der Angabe von Skalaren die Klammerung
entfallen.
Durch Doppelklicken auf den Variablennamen im Workspace-Browser wird ein tabellenkalku-
lationsahnlicher Array Editor geonet, der die Bearbeitung einzelner Eintrage erlaubt.
Matrizen konnen wiederum aus Matrizen aufgebaut werden. Bei der Denition derartiger Block-
matrizen ist darauf zu achten, dass Zeilen- und Spaltenzahlen ubereinstimmen.
(Online-Version enthalt Download, siehe Anhang A)
Beispiel:
Varianten f ur die Eingabe einer (3 3)-Matrix:
>> A=[1,2,3;4,5,6;7,8,9]
A =
1 2 3
4 5 6
7 8 9
>> A=[1 2 3
4 5 6
7 8 9]
A =
1 2 3
4 5 6
7 8 9
Beispiel f ur die Fortsetzung von Eingabezeilen mit Hilfe von Fortsetzungspunkten:
http://www.mathematik-online.org/ 21
KAPITEL 2. MATRIZEN
>> B=[ 1 2 3 4 ...
5 6 7 8
9 10 11 12 ...
13 14 15 16]
B =
1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
Fortsetzungspunkte, Zeilenschaltungen, Kommas und Strichpunkte lassen sich bei der Deniti-
on von Matrizen beliebig kombinieren. Zudem konnen auch komplexe Matrixelemente verwen-
det werden:
>> C=[-i,2+3i,0
-inf 1+2 ...
17; 2^2 1 -3i]
C =
0 - 1.0000i 2.0000 + 3.0000i 0
-Inf 3.0000 17.0000
4.0000 1.0000 0 - 3.0000i
Matrizen, Vektoren und Skalare zahlen in Matlab zur Speicherklasse double array:
>> v1=[1,2,3]
v1 =
1 2 3
>> v2=[1;2;3]
v2 =
1
2
3
>> [2]-2
ans =
0
>> whos
Name Size Bytes Class
A 3x3 72 double array
B 2x8 128 double array
ans 1x1 8 double array
v1 1x3 24 double array
v2 3x1 24 double array
Beispiel:
Denition einer aus f unf Blocken bestehenden Matrix:
>> A11=[1 1 1
1 1 1];
>> A12=[2 2
2 2];
22 http://www.mathematik-online.org/
2.2. SPEZIELLE MATRIZEN
>> A21=[3 3
3 3
3 3];
>> A22=[4 4 4
4 4 4
4 4 4];
>> [[A11 A12;A21 A22],[5;5;5;5;5]]
ans =
1 1 1 2 2 5
1 1 1 2 2 5
3 3 4 4 4 5
3 3 4 4 4 5
3 3 4 4 4 5
2.2 Spezielle Matrizen
Spezielle Matrizen konnen in Matlab unter anderem mit den folgenden Funktionen erstellt
werden:
ones(n,m): (n m)-Matrix bei der alle Eintrage 1 sind
zeros(n,m): (n m)-Matrix bei der alle Eintrage 1 sind
eye(n,m): (n m)-Matrix bei der alle Eintrage auf der Hauptdiagonalen 1 und sonst 0
sind
rand(n,m): (n m)-Matrix deren Eintrage Pseudozufallszahlen zwischen 0 und 1 sind
randn(n,m): (n m)-Matrix mit normalverteilten Pseudozufallszahlen mit Mittelwert 0
und Standardabweichung 1
gallery: Sammlung spezieller Testmatrizen (siehe help gallery)
magic(n): magisches Quadrat mit Eintragen 1 bis n
2
Wird den obigen Funktionen an Stelle der beiden Parameter n un m jeweils nur der Parameter
n ubergeben, so wird eine (n n)-Matrix erstellt.
Beispiel:
Beispiele f ur einige spezielle Matrizen:
>> eye(4,5)
ans =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
>> zeros(3)
ans =
http://www.mathematik-online.org/ 23
KAPITEL 2. MATRIZEN
0 0 0
0 0 0
0 0 0
>> rand(4)
ans =
0.3046 0.3028 0.3784 0.4966
0.1897 0.5417 0.8600 0.8998
0.1934 0.1509 0.8537 0.8216
0.6822 0.6979 0.5936 0.6449
>> magic(4)
ans =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
Erstellen eines Jordan-Blocks mit Hilfe der Funktion gallery:
>> gallery(jordbloc,3,2)
ans =
2 1 0
0 2 1
0 0 2
Der erste Parameter kennzeichnet den Typ der Matrix, der zweite die Groe des Jordan-Blocks
und der dritte die Eintrage auf der Diagonalen.
2.3 Spezielle Vektoren
Der Operator : ermoglicht die Erzeugung von Vektoren, bei denen aufeinanderfolgende Ele-
mente den gleichen Abstand d haben. Dabei gilt
a:d:b ergibt den Vektor [a a+d a+2d ... a+m*s] mit m=fix((b-a)/d),
d.h. es wird ein Vektor erzeugt, dessen erster Eintrag a ist. Die weiteren Elemente ergeben
sich durch sukzessive Addition des Inkrements d. Dabei wird die Grenze b nicht uber- bzw.
unterschritten. Die Darstellung
a:b ist die Kurzform von a:1:b.
F ur den Doppelpunktoperator steht alternativ die aquivalente Befehlsform colon(a,d,b) bzw.
colon(a,b) zur Verf ugung.
Der Befehl
linspace(a,b,n)
erzeugt einen aquidistant unterteilten (1n)-Vektor mit erstem Element a und letztem Element
b. Sofern der optionale Parameter n nicht angegeben wird, werden 100 Elemente erzeugt. Analog
generiert
24 http://www.mathematik-online.org/
2.4. INDIZIERUNG VON MATRIXELEMENTEN
logspace(a,b,n)
einen logarithmisch unterteilten Vektor des Intervalls [10
a
, 10
b
]. Standardwert f ur den optionalen
Parameter n ist 50.
Beispiel:
Beispiele f ur die Erzeugung spezieller Vektoren in Matlab:
>> 2.3:.7:5.4
ans =
2.3000 3.0000 3.7000 4.4000 5.1000
>> 1:-.7:-2.4
ans =
1.0000 0.3000 -0.4000 -1.1000 -1.8000
>> 2.4:6.6
ans =
2.4000 3.4000 4.4000 5.4000 6.4000
>> 5:-1:6
ans =
Empty matrix: 1-by-0
>> linspace(exp(1),pi,5)
ans =
2.7183 2.8241 2.9299 3.0358 3.1416
>> logspace(pi,exp(1),5)
ans =
1.0e+03 *
1.3855 1.0858 0.8510 0.6670 0.5227
2.4 Indizierung von Matrixelementen
Matrixelementen konnen durch Angabe von Indexvektoren als Argumente der Variablen indi-
ziert werden. Das erste Element besitzt den Index 1, das letzte den speziellen Index end. Bei der
Erzeugung von Indexvektoren ist oft der Operator : n utzlich. Insbesondere ist die Verwendung
von : als Abk urzung von 1:end erlaubt.
Mogliche Indizierungsarten:
A(z,s): Element mit Zeilen- bzw. Spaltenindex z bzw. s
A(k): k-tes Element bei spaltenweiser Nummerierung
A(Z,S): Teilmatrix mit den Elementen der durch die Zeilenvektoren bzw. Spaltenvektoren
Z bzw. S indizierten Elementen
A(K): Vektor der durch den Indexvektor K bei spaltenweiser Nummerierung indizierter
Elemente. Stehender Vektor, falls K ein stehender Vektor ist, andernfalls liegend.
http://www.mathematik-online.org/ 25
KAPITEL 2. MATRIZEN
Indizierte Bereiche konnen dabei auch auf der linken Seite einer Zuweisung stehen. Zugewiesen
werden konnen dabei die folgenden Objekte:
Skalar: Alle indizierten Elemente werden durch den Skalar ersetzt
Matrix: Ersetzen der indizierten Teilmatrix durch die gegebene Matrix gleicher Groe
[ ]: Loschen der indizierten Spalten und/oder Zeilen
(Online-Version enthalt Download, siehe Anhang A)
Beispiel:
Indizierungsvarianten zur Selektion von Elementen:
>> A=[11 12 13 14 15 16 17 18 19
21 22 23 24 25 26 27 28 29];
>> A(2,7)
ans =
27
>> A(1,[3 7 1])
ans =
13 17 11
>> A([5 9 end])
ans =
13 15 29
>> A(:,2:2:end)
ans =
12 14 16 18
22 24 26 28
Loschen von Spalten bzw. Zuweisungen f ur indizierte Teilmatrizen:
>> A(:,1:3:end)=[]
A =
12 13 15 16 18 19
22 23 25 26 28 29
>> A(:,3:4)=0
A =
12 13 0 0 18 19
22 23 0 0 28 29
>> A(:,[1:2,end-1:end])=ones(2,4)
A =
1 1 0 0 1 1
1 1 0 0 1 1
Wie das letzte Beispiel zeigt, konnen zum Ende relative Indizes in der Form end-n verwendet
werden.
26 http://www.mathematik-online.org/
2.5. GR

OSSE VON MATRIZEN


2.5 Groe von Matrizen
Die Funktion
size(A) bzw. [z,s]=size(A)
gibt die Anzahl der Zeilen und Spalten der Matrix A in einem Vektor bzw. in den Variablen z
und s zur uck. Alternativ kann durch
size(A,d)
nur die Ausdehnung entlang der d-ten Dimension (1=Zeilen, 2=Spalten) ausgegeben werden.
Der Befehl
length(A)
gibt f ur Vektoren deren Lange und f ur Matrizen den Wert von max(size(A)) zur uck, sofern A
nicht leer ist. Andernfalls ist der R uckgabewert 0.
Man beachte, dass bei leeren Matrizen nicht zwangslaug sowohl die Zahl der Zeilen als auch
der Spalten 0 sein muss. Daher empehlt sich zur

Uberpr ufung, ob eine Matrix leer ist, die
Verwendung der Funktion
isempty(A) .
Diese liefert den Wert 1 bei leeren Matrizen, andernfalls den Wert 0.
Beispiel:
Ausgaben der Funktionen size und length f ur eine (4 10)-Matrix von Zufallszahlen:
>> A=rand(4,10);
>> size(A) >> length(A) >> size(A,1) >> size(A,2)
ans = ans = ans = ans =
4 10 10 4 10
>> [z,s]=size(A)
z =
4
s =
10
Man beachte, dass die Anzahl der Zeilen bzw. Spalten unabhangig voneinander 0 sein konnen:
>> A=rand(4,10);
>> A(:,:)=[] >> length(A) >> isempty(A)
A = ans = ans =
Empty matrix: 0-by-10 0 1
>> size([]) >> size(rand(17,0))
ans = ans =
0 0 17 0
http://www.mathematik-online.org/ 27
KAPITEL 2. MATRIZEN
2.6 Matrix-Operationen
Matrizen konnen mit Hilfe der Operatoren +, -, * bzw. ^ addiert, subtrahiert, multipliziert
bzw. potenziert werden. Die Groen der Matrizen m ussen dabei so gewahlt werden, dass die
Operationen im mathematischen Sinne durchf uhrbar sind. Beispielsweise muss im Fall der Ma-
trixmultiplikation die Spaltenzahl der ersten Matrix mit der Zeilenzahl der zweiten Matrix
ubereinstimmen. Abweichend davon erfolgt bei +, - und * die Verkn upfung elementweise, wenn
einer der Operanden ein Skalar ist.
Die Losung X des linearen Gleichungssystems AX=B bzw. XA=B lasst sich durch X=A\B bzw. X=B/A
bestimmen. Im Fall uber- bzw. unterbestimmter Gleichungssystem wird dabei das zugehorige
Ausgleichsproblem gelost.
Die Operatoren .*, .^, ./, .\ f uhren eine elementweise Multiplikation, Potenzierung, Division
bzw. Linksdivision durch. D.h. die korrespondierenden Elemente der Operanden werden durch
die jeweilige skalare Operation verkn upft. Dabei m ussen die Groen der verkn upften Matrizen
ubereinstimmen bzw. ein Operand ein Skalar sein.
Elementare Funktionen wie die trigonometrischen Funktionen, Exponentialfunktionen, Run-
dungsfunktionen, usw. operieren elementweise auf Matrizen.
(Online-Version enthalt Download, siehe Anhang A)
Beispiel:
Elementare Matrix-Operationen:
>> A=[1 2; 3 4], B=[8 7 6 5; 4 3 2 1], C=[11 12; 21 22]
A = B = C =
1 2 8 7 6 5 11 12
3 4 4 3 2 1 21 22
>> A+C >> A*B >> A^2
ans = ans = ans =
12 14 16 13 10 7 7 10
24 26 40 33 26 19 15 22
Elementweise durchgef uhrte Operationen:
>> A.*C >> A*-3 >> 2*A-2 >> A.^2
ans = ans = ans = ans =
11 24 -3 -6 0 2 1 4
63 88 -9 -12 4 6 9 16
>> sin(pi./(1:4))
ans =
0.0000 1.0000 0.8660 0.7071
Der letzte Vektor enthalt die Werte der Sinusfunktion an den Stellen , /2, /3 und /4.
Losen von linearen Gleichungssystemen bzw. Ausgleichsproblemen:
>> A\[0;-2] >> A*ans >> [1 2;2 4]\[1; 0]
ans = ans = Warning: Matrix is singular to working
-2.0000 -0.0000 ans = precision.
28 http://www.mathematik-online.org/
2.7. MATRIXFUNKTIONEN
1.0000 -2.0000 -Inf
Inf
>> A=[1 2; 3 5; 7 9], B=[1; 4; 6] >> A\B >> A*ans
A = B = ans = ans =
1 2 1 -0.3333 1.5333
3 5 4 0.9333 3.6667
7 9 6 6.0667
Man beachte, dass bei dem uberbestimmten Gleichungssystem des letzten Beispiels die Losung
im Sinne der kleinsten Fehlerquadrate bestimmt wurde.
2.7 Matrixfunktionen
Matlab stellt eine Vielzahl von Funktionen bereit, die aus der Linearen Algebra bzw. Numerik
bekannt sind. Die folgende

Ubersicht zeigt eine kleine Auswahl:
Elementare Matrixfunktionen
norm Norm einer Matrix bzw. eines Vektors
rank Rangberechnung
det Determinante
trace Spur
null Kern der zugehorigen Abbildung
Lineare Gleichungssysteme
\ und / Losen von linearen Gleichungssystemen
inv Matrixinvertierung
cond Berechnung der Konditionszahl
chol, lu, qr Cholesky-, LU- und QR-Zerlegung
pinv Berechnung der Pseudoinversen
Eigen- und Singularwerte
eig Bestimmung von Eigenwerten und Eigenvektoren
svd SVD-Zerlegung
poly Koezienten des charakteristischen Polynoms
eigs, svds Bestimmung einiger (dominanter) Eigen- bzw. Singularwerte
Eine

Ubersicht der Matrixfunktionen kann in Matlab mittels
help matlab/matfun
angezeigt werden.
(Online-Version enthalt Download, siehe Anhang A)
Beispiel:
Elementare Matrix-Operationen:
>> A=[-1 1 1;0 -2 -3;4 0 3]
A =
http://www.mathematik-online.org/ 29
KAPITEL 2. MATRIZEN
-1 1 1
0 -2 -3
4 0 3
>> rank(A) >> det(A) >> trace(A) >> null(A)
ans = ans = ans = ans =
3 2 0 Empty matrix: 3-by-0
Die Matrix A hat den vollen Rang 3. Folglich ist die Determinante von 0 verschieden und die
zugehorige Abbildung besitzt einen trivialen Kern. Da der Befehl null eine Basis des Kerns
zur uckliefert, ist das Ergebnis eine leere Matrix.
Eigenwertberechnung:
>> eig(A)
ans =
3.4040
-0.1824
-3.2217
>> [V,D]=eig(A)
V =
-0.0880 -0.3811 0.5060
0.4835 -0.7907 -0.7988
-0.8709 0.4791 -0.3253
D =
3.4040 0 0
0 -0.1824 0
0 0 -3.2217
>> p=poly(A)
p =
1.0000 0.0000 -11.0000 -2.0000
>> roots(p)
ans =
3.4040
-3.2217
-0.1824
>> inv(V)*A*V
ans =
3.4040 -0.0000 -0.0000
-0.0000 -0.1824 -0.0000
-0.0000 0.0000 -3.2217
Der Befehl eig gibt die Eigenwerte bzw. bei Angabe von zwei R uckgabevariablen auch die
zugehorigen Eigenvektoren in den Spalten der ersten Variablen zur uck (im Beispiel: V). p ist
der Koezientenvektor des charakteristischen Polynoms p() =
3
112, dessen Nullstellen
mit roots berechnet werden konnen. Die Werte stimmen dabei mit den Diagonaleintragen der
Matrix D uberein. Diese Diagonalmatrix kann auch als Resultat der Diagonalisierung V
1
AV
gewonnen werden.
30 http://www.mathematik-online.org/
2.8. DATENANALYSE
2.8 Datenanalyse
Zur Datenanalyse stellt Matlab unter anderem die folgenden Befehle bereit:
Grundlegende Funktionen
max, min Bestimmung maximaler bzw. minimaler Elemente
mean, median Mittelwert bzw. Median
sort, sum Aufsteigende Sortierung bzw. Summation von Elementen
cumsum, cumprod kumulierte Summe bzw. kummuliertes Produkt
Finite Dierenzen
diff Dierenzen aufeinanderfolgender Elemente
gradient numerisch genaherter Gradient
Sonstige Funktionen
conv, deconv Multiplikation bzw. Division von Polynomen
fft, ifft diskrete Fourier-Transformation und deren Inverse
Eine

Ubersicht der verf ugbaren Funktionen zur Datenanalyse gibt der Befehl
help matlab/datafun .
Beispiel:
Datenanalyse f ur einen Vektor mit 7 Zufallszahlen:
>> data=rand(1,7)
data =
0.6400 0.2473 0.3527 0.1879 0.4906 0.4093 0.4635
>> [max(data) min(data) mean(data) median(data)]
ans =
0.6400 0.1879 0.3988 0.4093
>> sort(data)
ans =
0.1879 0.2473 0.3527 0.4093 0.4635 0.4906 0.6400
>> diff(data)
ans =
-0.3927 0.1054 -0.1648 0.3028 -0.0814 0.0543
In der zweiten Eingabezeile wurden die Ergebnisse der Funktionen max, min, mean und median
der Einfachheit halber in einem Vektor zusammengefasst.
Beim Befehl cumprod bzw. cumsum entspricht der i-te Eintrag im Ergebnisvektor dem Produkt
bzw. der Summe der Elemente 1 bis i im Parametervektor. Wendet man beispielsweise cumprod
auf den Vektor mit den Elementen 1 bis 7 an, so erhalt man einen Vektor mit den Elementen
1! = 1 bis 7! = 5040:
>> fakultaeten=cumprod(1:7)
fakultaeten =
1 2 6 24 120 720 5040
http://www.mathematik-online.org/ 31
KAPITEL 2. MATRIZEN
Polynome konnen mit Hilfe der Matlab-Funktion conv bzw. deconv multipliziert bzw. divi-
diert werden. Zu ubergeben sind dabei jeweils die Koezientenvektoren der Polynome. So steht
beispielsweise
>> conv([1 -2 3],[2 1])
ans =
2 -3 4 3
f ur die Rechnung
(x
2
2x + 3)(2x + 1) = 2x
3
3x
2
+ 4x + 3
und
>> [q,r]=deconv([2 -3 4 3],[1 -2])
q =
2 1 6
r =
0 0 0 15
f ur die Rechnung
2x
3
3x
2
+ 4x + 3
x 2
= 2x
2
+ x + 6 +
15
x 2
.
2.9 Matrixumwandlung
Mogliche Befehle zur Umwandlung bzw. Selektion von Teilen einer Matrix sind:
A. bzw. A transponiert bzw. komplex konjugiert transponieren von A
fliplr, fliup Spalten- bzw. Zeilenspiegelung
tril, triu untere bzw. obere Dreiecksmatrix selektieren
diag (Neben-)Diagonale selektiert bzw. setzen
reshape

Anderung der Matrixdimension unter Beibehaltung der Elemente
repmat Matrix mehrfach in einer Blockmatrix anordnen
Beispiel:
Transponieren von Matrizen:
>> A=[1 2 2-i; i 3 -1+i]
A =
1.0000 2.0000 2.0000 - 1.0000i
0 + 1.0000i 3.0000 -1.0000 + 1.0000i
>> A
ans =
1.0000 0 - 1.0000i
2.0000 3.0000
2.0000 + 1.0000i -1.0000 - 1.0000i
>> A.
ans =
1.0000 0 + 1.0000i
2.0000 3.0000
2.0000 - 1.0000i -1.0000 + 1.0000i
32 http://www.mathematik-online.org/
2.9. MATRIXUMWANDLUNG

Anderung der Matrixdimension von A:


>> reshape(A,3,2)
ans =
1.0000 3.0000
0 + 1.0000i 2.0000 - 1.0000i
2.0000 -1.0000 + 1.0000i
Die neue Matrix wird spaltenweise gef ullt. Dabei werden die Elemente spaltenweise der Matrix
A entnommen.
Selektion bzw. setzen der Hauptdiagonalen:
>> d=diag(A) >> diag(d)
d = ans =
1 1 0
3 0 3
http://www.mathematik-online.org/ 33
KAPITEL 2. MATRIZEN
34 http://www.mathematik-online.org/
Kapitel 3
Weitere Datentypen
3.1 Zeichenketten
Zeichenketten (Strings) werden in Matlab in Form von Matrizen gespeichert. Jedes Matrix-
element reprasentiert dabei einen Index f ur eine Unicode-Zeichentabelle. Der Indexbereich liegt
zwischen 0 und 65535, und die ersten 127 Zeichen der Zeichentabelle enthalten den ASCII-
Zeichensatz.
Zeichenketten konnen in Matlab mit Hilfe der einfachen Anf uhrungszeichen angegeben
werden. Soll die Zeichenkette selbst das einfache Anf uhrungszeichen enthalten, so ist dieses
in der Form anzugeben.
Beispiel f ur die Denition eine Zeichenkette:
>> S=Hallo Welt
S =
Hallo Welt
>> whos S
Name Size Bytes Class
S 1x10 20 char array
Grand total is 10 elements using 20 bytes
Die folgende Tabelle gibt eine Auswahl n utzlicher Funktionen zur Manipulation von Zeichen-
ketten an:
Allgemein
char, double Umwandlung zwischen Zeichen- und Indexdarstellung
num2str, str2num Umwandlung von Zahlen in String- bzw. Double-Darstellung
ischar, isspace Test auf Zeichen bzw. white spaces
blanks, deblank Erzeugen bzw. Loschen von Leerzeichen
sprintf, sscanf Formatiertes Ausgeben bzw. Einlesen
Operationen
findstr, strrep Suchen/Ersetzen von Zeichenketten
regexp, regexprep Suchen/Ersetzen mit regularen Ausdr ucken
strcat, strvcat Verkettung von Strings
strcmp, findstr Vergleichen und Suchen von (Teil-)Strings
upper, lower Umwandlung Gro-/Kleinschreibung
Eine

Ubersicht der verf ugbaren Funktionen f ur Zeichenketten gibt der Befehl
http://www.mathematik-online.org/ 35
KAPITEL 3. WEITERE DATENTYPEN
help matlab/strfun .
Beispiel:
Erzeugen und Umwandeln von Zeichenketten:
>> A=Hallo; B=Welt; C=[A B]
C =
Hallo Welt
>> double(C)
ans =
72 97 108 108 111 32 87 101 108 116
>> ascii=char(reshape(32:127,48,2))
ascii =
!"#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz{|}~
Operationen f ur Strings:
>> D=strvcat(A,B) >> upper(D) >> lower(D)
D = ans = ans =
Hallo HALLO hallo
Welt WELT welt
>> findstr(C,l) >> strrep(C,Welt,Leser!)
ans = ans =
3 4 9 Hallo Leser!
Da Strings in Form von Indexmatrizen gespeichert werden, m ussen auch hier die Anzahl der
Zeichen in allen Zeilen ubereinstimmen. Bei Verwendung der Funktion strvcat zur vertikalen
Verkn upfung von Zeichenketten werden k urzere Zeilen automatisch mit Leerzeichen aufgef ullt.
3.2 Logische Matrizen
Logische Matrizen enthalten nur die Werte wahr bzw. falsch, welche durch die Zahlen 1 bzw. 0
reprasentiert werden. Logische Matrizen entstehen bei Verwendung der Funktionen true und
false, der Relationen
== (gleich), ~= (ungleich), < (kleiner), <= (kleiner gleich), > (groer), >= (groer
gleich),
als R uckgabewerte logischer Funktionen wie isempty, isinf, ischar usw. oder durch explizite
Konvertierung mittels logical.
Beispiel einer logischen Matrix:
>> L= ([1 2 3; 4 5 6; 7 8 9]<=5)
L =
1 1 1
36 http://www.mathematik-online.org/
3.2. LOGISCHE MATRIZEN
1 1 0
0 0 0
>> whos L
Name Size Bytes Class
L 3x3 9 logical array
Grand total is 9 elements using 9 bytes
Verf ugbar sind unter anderem die folgenden logischen Operatoren bzw. Funktionen:
& (und), | (oder), ~ (Negation), and, or, not, xor, any, all
Logische Matrizen konnen auch zur Indizierung verwendet werden. Dabei werden jene Elemente
ausgewahlt, deren korrespondierende Elemente der logischen Matrix den Wert wahr besitzen.
N utzlich beim Umgang mit logischen Matrizen ist auch die Funktion find, welche die Indizes
jener Eintrage zur uck gibt, die von 0 verschieden sind.
Beispiel:
Erzeugung logischer Matrizen mit Hilfe von Relationen und Operatoren:
>> M=magic(4)
M =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> mod(M,2)==0
ans =
1 1 0 0
0 0 1 1
0 0 1 1
1 1 0 0
>> L=(M<4)|(M>12)
L =
1 1 1 1
0 0 0 0
0 0 0 0
0 1 1 1
>> find(L)
ans =
1 5 8 9 12 13 16
>> whos
Name Size Bytes Class
L 4x4 16 logical array
M 4x4 128 double array
ans 1x7 56 double array
Grand total is 39 elements using 200 bytes
http://www.mathematik-online.org/ 37
KAPITEL 3. WEITERE DATENTYPEN
Der Ergebnisvektor des Befehls find enthalt dabei die Indizes der von 0 verschiedenen Elemente
bei spaltenweiser Nummerierung der Elemente von L.
Matrizen, bei deren Denition nur die Elemente 1 und 0 verwendet werden, sind nicht auto-
matisch logische Matrizen. Die Typumwandlung kann jedoch mit Hilfe der Funktion logical
erzwungen werden:
>> L=[0 1 1; 0 1 1]
L =
0 1 1
0 1 1
>> whos L
Name Size Bytes Class
L 2x3 48 double array
Grand total is 6 elements using 48 bytes
>> L=logical(L)
L =
0 1 1
0 1 1
>> whos L
Name Size Bytes Class
L 2x3 6 logical array
Grand total is 6 elements using 6 bytes
Indizierung mit logischen Ausdr ucken bzw. find-Resultaten:
>> M(M~=7 & M<10)=0
M =
16 0 0 13
0 11 10 0
0 7 0 12
0 14 15 0
>> M(find(M))
ans =
16 11 7 14 10 15 13 12
3.3 D unn besetzte Matrizen
Matrizen, bei denen ein groer Anteil der Elemente 0 ist, lassen sich ezienter im Sparse-
Format speichern. In dieser Darstellung werden nur die von 0 verschiedenen Elemente und deren
Indizes in Listen abgelegt. Alle Matrixoperationen lassen sich auch auf Matrizen im Sparse-
Format anwenden. Die Resultate sind dabei stets Sparse-Matrizen, sofern alle Parameter Sparse-
Matrizen sind. Verkn upfungen mit vollbesetzten Matrizen (double array) ergeben vollbesetzte
Matrizen.
Beispiel einer d unn besetzten (10 10)-Matrix mit einem Belegungsgrad von ca. 5%:
38 http://www.mathematik-online.org/
3.3. D

UNN BESETZTE MATRIZEN


>> S=sprand(10,10,.05)
S =
(7,2) 0.8699
(9,4) 0.4442
(5,5) 0.1472
(1,9) 0.9566
(8,9) 0.7694
>> whos S
Name Size Bytes Class
S 10x10 104 double array (sparse)
Grand total is 5 elements using 104 bytes
Spezielle Funktionen zur Behandlung d unn besetzter Matrizen sind unter anderem:
Erzeugung/Manipulation von Sparse-Matrizen
sparse, full Konvertierung zwischen d unn und voll besetzten Matrizen
speye, spdiags Einheits-/Diagonalmatrizen im Sparse-Format
sprand, sprandn Sparse-Matrizen mit Pseudo-Zufallszahlen
nonzeros, nnz Ausgabe der von 0 verschiedenen Elemente bzw. deren Anzahl
spy Grasche Anzeige der Belegungsstruktur
Funktionen f ur Sparse-Matrizen
eigs, svds Bestimmung einiger Eigen- bzw. Singularwerte
normest, condest Norm- bzw. Konditionsschatzer
pcg, minres Iterative Loser f ur d unnbesetzte Systeme
Eine

Ubersicht der f ur Sparse-Matrizen verf ugbaren Befehle kann mittels
matlab/sparfun
angezeigt werden.
(Online-Version enthalt Download, siehe Anhang A)
Beispiel:
Mit Hilfe der Befehle
>> A=sprand(100,100,.1); B=sprand(100,100,.2); C=sprand(100,100,.3);
>> spy(B)
werden zunachst die drei d unn besetzten (100 100)-Matrizen A, B und C erzeugt, bei denen
rund 10%, 20% bzw. 30% der Elemente von 0 verschieden sind. Das nachfolgende Bild zeigt die
mittels spy(B) dargestellte Belegungsstruktur der Matrix B:
http://www.mathematik-online.org/ 39
KAPITEL 3. WEITERE DATENTYPEN
0 20 40 60 80 100
0
20
40
60
80
100
nz = 1808
Rechnen mit Sparse-Matrizen:
>> M=(A+B)*C;
>> nnz(M)
ans =
9992
>> F=full(M);
>> whos
Name Size Bytes Class
A 100x100 11900 double array (sparse)
B 100x100 22100 double array (sparse)
C 100x100 31688 double array (sparse)
F 100x100 80000 double array
M 100x100 120404 double array (sparse)
ans 1x1 8 double array
Grand total is 25374 elements using 266100 bytes
Verkn upfungen von Sparse-Matrizen (wie bei der Berechnung von M) ergeben wiederum Sparse-
Matrizen. Dabei ist jedoch darauf zu achten, dass der Belegungsgrad steigen und die Verwen-
dung des Sparse-Formats damit ggf. inezient sein kann. In dem betrachteten Beispiel ist M
aufgrund der 9992 von 0 verschiedenen Elemente nahezu vollbesetzt und benotigt gegen uber
der in F gespeicherten Variante im double array Format rund 50% mehr Speicherplatz.
Wie das nachfolgende Beispiel zeigt, enstehen bei der Verkn upfung von Matrizen im d unn- und
vollbesetzten Format stets vollbesetzte Ergebnismatrizen:
>> X=C-F;
>> whos X
Name Size Bytes Class
X 100x100 80000 double array
Grand total is 10000 elements using 80000 bytes
40 http://www.mathematik-online.org/
3.4. MEHRDIMENSIONALE FELDER
3.4 Mehrdimensionale Felder
Mehrdimensionale Felder erweitern das zweidimensionale Matrixkonzept auf beliebig viele Di-
mensionen. So ergibt beispielsweise
>> M=rand(3,5,2)
M(:,:,1) =
0.6045 0.1333 0.1673 0.1052 0.7593
0.0358 0.8545 0.0884 0.5390 0.4092
0.6747 0.1469 0.7105 0.6905 0.8781
M(:,:,2) =
0.6390 0.0185 0.1608 0.1759 0.8863
0.3656 0.9576 0.8660 0.1181 0.4054
0.5340 0.7469 0.2217 0.5629 0.0791
>> whos M
Name Size Bytes Class
M 3x5x2 240 double array
Grand total is 30 elements using 240 bytes
ein (352)-Feld von Pseudozufallszahlen. Anschaulich besteht dieses aus zwei hintereinander-
gelegten (3 5)-Matrizen. Wie das obige Beispiel zeigt, erfolgt die Ausgabe mehrdimensionaler
Felder durch Angabe der Matrizen aus den beiden ersten Dimensionen bei durchlaufenden
hinteren Indizes. Mehrdimensionale Felder lassen sich auch durch Zuweisung einzelner Matrix-
elemente oder Teilmatrizen erzeugen. Zuvor nicht denierte Bereiche werden dabei durch Nullen
aufgef ullt.
Die Indizierung von Feldelementen erfolgt analog zur Matrixindizierung durch die Angabe ent-
sprechend vieler Indizes bzw. Indexvektoren. Die letzte Dimension bei mehrdimensionaler Fel-
der hat stets eine Lange > 1. Auf mehrdimensionale Felder konnen Element-Operationen bzw.
elementare Funktionen angewendet werden. Dar uber hinaus sind eine Vielzahl von Matlab-
Funktionen f ur die Verarbeitung mehrdimensionaler Felder erweitert worden.
Spezielle Funktionen f ur die Erstellung bzw. Manipulation mehrdimensionaler Felder sind unter
anderem:
Erzeugung/Manipulation mehrdimensionaler Felder
rand, randn Felder mit Pseudo-Zufallszahlen
ones, zeros Felder mit den Elementen 1 bzw. 0
reshape, permute

Anderung der Gestalt bzw. Dimensionsreihenfolge
squeeze Enfernt Dimensionen der Lange 1
Funktionen f ur mehrdimensionale Felder
size, length, ndims Groen-, Langen- und Dimensionsangaben
sin, cos, ... Elementarfunktionen operieren elementweise
sum, prod, diff Summen-, Produkt-, Dierenzenbildung uber die
angegebene Dimension
Beispiel:
Mit Hilfe der folgenden Befehle wird zunachst ein (2 4 3)-Feld deniert. Die Ziern der
Eintrage geben dabei die zugehorigen Indizes wieder:
http://www.mathematik-online.org/ 41
KAPITEL 3. WEITERE DATENTYPEN
>> A(:,:,1)=[111 121 131 141; 211 221 231 241];
>> A(:,:,2)=A(:,:,1)+1;
>> A(:,:,3)=A(:,:,1)+2
A(:,:,1) =
111 121 131 141
211 221 231 241
A(:,:,2) =
112 122 132 142
212 222 232 242
A(:,:,3) =
113 123 133 143
213 223 233 243
Groen-, Langen und Dimensionsangaben bei mehrdimensionalen Feldern:
>> size(A)
ans =
2 4 3
>> length(A)
ans =
4
>> ndims(A)
ans =
3
Die Ausgabe von length(A) entspricht der von max(size(A)), ndims(A) gibt die Anzahl der
Dimensionen von A, also length(size(A)) zur uck.
Indizierung einzelner bzw. mehrerer Elemente:
>> A(2,4,3)
ans =
243
>> A(:,1,3)
ans =
113
213
>> A(1:2,4,:)
ans(:,:,1) =
141
241
ans(:,:,2) =
142
242
ans(:,:,3) =
143
243
Summation uber eine angegebene Dimension:
>> sum(A,3)
ans =
336 366 396 426
636 666 696 726
42 http://www.mathematik-online.org/
3.5. CELL ARRAYS
Das Ergebnis entspricht dem von A(:,:,1)+A(:,:,2)+A(:,:,3).
Permutation der Dimensionen und

Anderung der Gestalt:
>> P=permute(A,[2 3 1])
P(:,:,1) =
111 112 113
121 122 123
131 132 133
141 142 143
P(:,:,2) =
211 212 213
221 222 223
231 232 233
241 242 243
>> reshape(A,[4 6])
ans =
111 131 112 132 113 133
211 231 212 232 213 233
121 141 122 142 123 143
221 241 222 242 223 243
Das Argument [2 3 1] des permute-Befehls bewirkt die Umordnung des Feldes A, so dass der
erste, zweite bzw. dritte Index von P dem zweiten, dritten bzw. ersten Index von A entspricht,
d.h. es gilt A(z,s,t)=P(s,t,z).
Der Befehl resphape mit der Groenangabe [4 6] erzeugt dagegen eine (4 6)-Matrix, deren
Elemente spaltenweise A(:) entnommen werden.
Elementzuweisung und Enfernen uber ussiger Dimensionen:
>> clear M; M(1,10,11,2,1,1,17,4,1,1,1)=1;
>> size(M)
ans =
1 10 11 2 1 1 17 4
>> S=squeeze(M);
>> size(S)
ans =
10 11 2 17 4
Die direkte Zuweisung eines Elements von M erzeugt eine Matrix entsprechender Groe und
setzt alle nicht denierten Elemente 0. Man beachte, dass jene abschlieenden Dimensionen
automatisch entfernt werden, welche die Lange 1 haben.
Alle Dimensionen der Lange 1 konnen mit Hilfe des Befehls squeeze entfernt werden. Dabei
bleiben die Elemente des Feldes unverandert, jedoch ist bei der Indizierung auf die reduzierte
Zahl der Dimensionen zu achten.
3.5 Cell Arrays
Cell Arrays (kurz Cells) bilden eine Verallgemeinerung der mehrdimensionalen Felder, da die
Elemente einer Cell beliebige Datenstrukturen sein konnen. Cells konnen beispielsweie mit Hilfe
der Funktion cell oder durch die Klammerung der Elemente mit { } erstellt werden:
http://www.mathematik-online.org/ 43
KAPITEL 3. WEITERE DATENTYPEN
>> C={Hallo,[1 2;3 4],-3i;sprand(10,10,.1),{1},[]}
C =
Hallo [2x2 double] [0 - 3.0000i]
[10x10 double] {1x1 cell } []
>> whos C
Name Size Bytes Class
C 2x3 650 cell array
Grand total is 28 elements using 650 bytes
Bei der Indizierung von Cells unter Verwendung der Klammern ( ) entsteht wiederum eine
Cell, welche die indizierten Elemente enthalt. Dagegen werden bei der Indizierung mit den
Klammern { } die indizierten Elemente selbst ausgegeben.
Spezielle Funktionen f ur Cells sind unter anderem:
Erzeugung/Manipulation von Cells
cell, mat2cell, num2cell Erstellen von Cells
cell2struct, struct2cell Konvertierung Cell/Struktur-Variablen
celldisp, cellplot Darstellung des Inhalts bzw. der Struktur einer Cell
deal Zuordnung von Ein- und Ausgaben
iscell Indikatorfunktion f ur Cell-Variablen
cellfun Wendet eine Funktion auf alle Elemente der Cell an
Cells eignen sich insbeondere zur Speicherung von Strings unterschiedlicher Lange.
(Online-Version enthalt Download, siehe Anhang A)
Beispiel:
Denition und Darstellung einer Cell:
>> C={Hallo,[1 2;3 4],-3i;sprand(10,10,.1),{1},[]}
C =
Hallo [2x2 double] [0 - 3.0000i]
[10x10 double] {1x1 cell } []
>> celldisp(C)
C{1,1} =
Hallo
C{2,1} =
(3,1) 0.1306
(10,1) 0.9261
(6,3) 0.5540
(6,4) 0.5355
(6,5) 0.1482
(2,7) 0.3633
(3,7) 0.6382
(6,8) 0.0165
(10,8) 0.7479
(3,9) 0.5833
C{1,2} =
1 2
44 http://www.mathematik-online.org/
3.6. STRUKTUREN
3 4
C{2,2}{1} =
1
C{1,3} =
0 - 3.0000i
C{2,3} =
[]
Indizierungsmoglichkeiten bei Cell Arrays und Zuweisung der R uckgabewerte:
>> C(1,:)
ans =
Hallo [2x2 double] [0 - 3.0000i]
>> C{1,:}
ans =
Hallo
ans =
1 2
3 4
ans =
0 - 3.0000i
>> {C{1,:}}
ans =
Hallo [2x2 double] [0 - 3.0000i]
>> [S,M,z]=C{1,:}
S =
Hallo
M =
1 2
3 4
z =
0 - 3.0000i
Bei der Indizierung C(1,:) wird die erste Zeile von C in Form einer Cell zur uckgegeben. Dagegen
gibt C{1,:} die Elemente der ersten Zeile von C aus. Diese werden sukzessive der Standardvaria-
blen var zugewiesen. Der Befehl {C{1,:}} sammelt die R uckgabeelemente von C{1,:} in einer
Cell. Das Resultat entspricht somit dem des Aufrufs C(1,:). Mittels [S,M,z]=C{1,:} werden
die drei R uckgabewerte von C{1,:}, d.h. die Elemente der ersten Zeile von C, den Variablen S,
M und z zugewiesen.
3.6 Strukturen
Strukturen ermoglichen die Zusammenfassung mehrerer Teilvariablen (in Matlab als Felder
bezeichnet) zu einer Sammelvariablen. Sie konnen mit Hilfe der Funktion struct oder durch
direkte Zuweisung erzeugt werden. Beispiel hierf ur sind die folgenden unter dem Sammelnamen
S gespeicherten Daten zu einer Studentin:
>> S=struct(Name,Belinda Beispiel,Matrikelnr,1234567,...
Noten,[1.3 1.0 1.7])
S =
http://www.mathematik-online.org/ 45
KAPITEL 3. WEITERE DATENTYPEN
Name: Belinda Beispiel
Matrikelnr: 1234567
Noten: [1.3000 1 1.7000]
>> whos S
Name Size Bytes Class
S 1x1 436 struct array
Grand total is 23 elements using 436 bytes
Die Felder der Struktur S sind Name, Matrikelnr und Noten. Ihr Inhalt kann mit Hilfe der
Syntax Sammelvariable.Feld angesprochen werden.
Strukturvariablen gleichen Aufbaus konnen wiederum zu Arrays beliebiger Dimension zusam-
mengefasst werden. Indizierungsangaben sind dabei zwischen dem Namen der Sammelvariablen
und dem Punkt anzugeben. Zuweisungen auf nicht vorhandene Elemente des Arrays oder Felder
bewirken ein automatisches Au ullen der Feldinhalte mit leeren Matrizen.
Spezielle Funktionen f ur Strukturen sind unter anderem:
Erzeugung/Manipulation von Strukturen
struct Erstellen von Strukturvariablen
setfield, getfield Setzen und Auslesen von Feldern
isfield, isstruct Indikatorfunktionen f ur Felder/Strukturen
rmfield Loschen eines Feldes
orderfields Sortierung der Felder
(Online-Version enthalt Download, siehe Anhang A)
Beispiel:
Denition und Erweiterung einer Struktur mit automatischem Au ullen:
>> S=struct(Name,Belinda Beispiel,Matrikelnr,1234567,...
Noten,[1.3 1.0 1.7])
S =
Name: Belinda Beispiel
Matrikelnr: 1234567
Noten: [1.3000 1 1.7000]
>> S(3).Name=Emil Exempel; S(3).Matrikelnr=7654321
S =
1x3 struct array with fields:
Name
Matrikelnr
Noten
Indizierung von Elementen und Feldern:
>> S(3)
ans =
Name: Emil Exempel
Matrikelnr: 7654321
Noten: []
>> S(2)
46 http://www.mathematik-online.org/
3.6. STRUKTUREN
ans =
Name: []
Matrikelnr: []
Noten: []
>> S(2).Matrikelnr=1223334;
>> S([1 3])
ans =
1x2 struct array with fields:
Name
Matrikelnr
Noten
>> S([1 3]).Name
ans =
Belinda Beispiel
ans =
Emil Exempel
Man beachte, dass bei der letzten Indizierung zwei R uckgabewerte entstehen. Diese werden
sukzessive der Standardvariablen ans zugewiesen, weshalb diese nur noch den letzten Wert
Emil Exempel enthalt.
Zuweisung mehrerer R uckgabewerte:
>> [S.Matrikelnr]
ans =
1234567 1223334 7654321
>> {S.Name}
ans =
Belinda Beispiel [] Emil Exempel
>> [N1,N2,N3]=S.Name
N1 =
Belinda Beispiel
N2 =
[]
N3 =
Emil Exempel
Sofern die Inhalte eines Feldes Matrizen gleicher Groe sind, konnen diese wie in der ersten
Befehlszeile gezeigt, durch Klammerung mit [ ] zu einer Matrix zusammengefasst werden. Bei
Feldinhalten unterschiedlichen Datentyps konnen mehrere R uckgabewerte stets durch Klam-
merung mit { } zu einer Cell zusammengefasst werden.
Ebenso moglich sind Zuweisungen auf mehrere Variablennamen. Diese sind auf der linken Seite
einer Anweisung durch [ ] geklammert anzugeben. Die Zahl der Variablen muss dabei mit der
Anzahl der R uckgabewerte der rechten Seite ubereinstimmen.
Sortieren und Loschen von Feldern:
>> S(2).Fach=Mathematik;
>> S(1)
ans =
Name: Belinda Beispiel
Matrikelnr: 1234567
http://www.mathematik-online.org/ 47
KAPITEL 3. WEITERE DATENTYPEN
Noten: [1.3000 1 1.7000]
Fach: []
>> orderfields(S)
ans =
1x3 struct array with fields:
Fach
Matrikelnr
Name
Noten
>> rmfield(S,Name)
ans =
1x3 struct array with fields:
Matrikelnr
Noten
Fach
>> S
S =
1x3 struct array with fields:
Name
Matrikelnr
Noten
Fach
Der Befehl orderfield sortiert die Felder einer Struktur in alphabetischer Reihenfolge. Mit
rmfiled konnen Felder von Strukturen geloscht werden. In beiden Fallen ist darauf zu
achten, dass die Funktionen nicht direkt auf der Struktur operieren, sondern nur auf ei-
ner Kopie. Daher ist ggf. das Resultat der Strukturvariablen selbst wieder zuzuweisen (z.B.
S=rmfield(S,Name)).
48 http://www.mathematik-online.org/
Kapitel 4
Grak
4.1 Darstellung ebener Graphen
Ebene Graphen konnen unter anderem mit Hilfe der folgenden Funktionen dargestellt werden:
plot zeichnet einen Polygonzug
semilogx, semilogy Polygonzug mit logarithmischer Skalierung in x- bzw. y-Richtung
loglog Polygonzug mit logarithmischer Skalierung in x- und y-Richtung
polar Darstellung von Polygonz ugen in Polarkoordinaten
plotyy Graphen unterschiedlicher Skalierung in einem Schaubild
Mogliche Aufrufvarianten der Funktion plot (analog auch f ur die Funktionen semilogx,
semilogy, loglog und polar) sind unter anderem:
plot(X,Y), plot(Y), plot(X,Y,S).
Die erste plottet den Polygonzug mit den Knoten (X(1),Y(2)),. . . , (X(end),Y(end)), die zweite
Aufrufvarianten entspricht plot(1:length(Y),Y), d.h. die Funktionswerte werden uber ihrem
Indexvektor geplottet, sofern Y nur reelle Werte enthalt. Ist Y ein komplexer Vektor so entspricht
die Darstellung der von plot(real(Y),imag(Y)). Sofern X und Y Matrizen sind, wird f ur jede
Spalte ein Polygonzug dargestellt.
Durch Anhangen des Formatstrings S kann die Darstellungsart des Polygonzugs beeinusst
werden. Dieser kann aus jeweils einem Zeichen der folgenden Listen zusammengesetzt werden:
Farbe
b Blau g Gr un r Rot c Cyan m Magenta
y Gelb k Schwarz
Kennzeichner
. o x + *
s d v ^ <
> p h
Linienstil
- : -. --
So erzeugt beispielsweise k eine schwarze Linie und g*-- eine gr une gestrichelte Linie, bei
der die Ecken des Polygonzugs durch Sterne gekennzeichnet sind.
Die verf ugbaren Befehle zur Darstellung bzw. Manipulation ebener Graphen konnen durch
http://www.mathematik-online.org/ 49
KAPITEL 4. GRAFIK
help graph2d
angezeigt werden.
(Online-Version enthalt Download, siehe Anhang A)
Beispiel:
Darstellung von Funktionen mit plot:
>> x=linspace(1,5);
>> y=exp(x);
>> plot(x,y);
1 1.5 2 2.5 3 3.5 4 4.5 5
0
50
100
150
Abgebildet ist die Exponentialfunktion y = exp x auf dem Intervall [1, 5].
Einfache logarithmische Skala bei semilogy:
>> x=linspace(1,50);
>> y=exp(x);
>> semilogy(x,y);
0 5 10 15 20 25 30 35 40 45 50
10
0
10
5
10
10
10
15
10
20
10
25
Abgebildet ist die Exponentialfunktion y = exp x auf dem Intervall [1, 50] bei logarithmischer
Skalierung der y-Achse.
Doppelte logarithmische Skalen bei loglog:
50 http://www.mathematik-online.org/
4.1. DARSTELLUNG EBENER GRAPHEN
>> x=2.^(1:20);
>> y=1./x;
>> loglog(x,y);
10
0
10
1
10
2
10
3
10
4
10
5
10
6
10
7
10
7
10
6
10
5
10
4
10
3
10
2
10
1
10
0
Abgebildet ist die Funktion y = 1/x f ur x = 2
k
mit k = 1, . . . , 20 bei logarithmischer Skalierung
beider Achsen.
Darstellung von Funktionen in Polarkoordinaten mit polar:
>> phi=linspace(0,2*pi);
>> r=3/2*(1+cos(phi));
>> polar(phi,r);
1
2
3
30
210
60
240
90
270
120
300
150
330
180 0
Abgebildet ist die Kardioide mit der Polarkoordinatendarstellung r =
3
2
(1 + cos ) f ur
[0, 2]. Im Koordinatensystem sind Sektoren f ur im Gradma und Niveaulinien f ur
r abgetragen.
Darstellung unterschiedlich skalierter Funktionen mit plotyy:
>> x=linspace(-2*pi,2*pi);
>> y1=cos(x);
>> y2=cosh(x);
>> plotyy(x,y1,x,y2,@plot,@semilogy)
8 6 4 2 0 2 4 6 8
1
0.8
0.6
0.4
0.2
0
0.2
0.4
0.6
0.8
1
8 6 4 2 0 2 4 6 8
10
0
10
1
10
2
10
3
Dargestellt sind die Funktionen y = cos x und y = cosh x f ur x [2, 2]. Die zugehorigen
Datenpaare x, y1 und x, y2 werden zusammen mit den Zeigern auf die zu verwendenden Plot-
http://www.mathematik-online.org/ 51
KAPITEL 4. GRAFIK
funktionen ubergeben (Funktionsnamen mit vorangestelltem @). Die Skala zur ersten Funktion
erscheint auf der linken Seite, die zur zweiten auf der rechten Seite. Aufgrund der Verwen-
dung von semilogy zur Darstellung der Funktion y = cosh x ist die rechte Skala logarithmisch
unterteilt.
Beispiel:
Darstellung von Funktionen:
>> x=linspace(-2.5,2.5);
>> y=x.*(x.^2-4);
>> plot(x,y)
2.5 2 1.5 1 0.5 0 0.5 1 1.5 2 2.5
6
4
2
0
2
4
6
Abgebildet ist das Polynom y = x(x
2
4) auf dem Intervall [2.5, 2.5]. Mittels der Operatoren
.* und .^ werden die Berechnungen von y elementweise durchgef uhrt.
Darstellung parametrisierter Kurven:
>> t=linspace(0,2*pi,1000);
>> x=4*cos(t)+sin(8*t);
>> y=4*sin(t)+cos(8*t);
>> plot(x,y)
5 4 3 2 1 0 1 2 3 4 5
5
4
3
2
1
0
1
2
3
4
5
Abgebildet ist die Kurve c(t) =
_
4 cos(t)+sin(8t), 4 sin(t)+cos(8t)
_
t
f ur t [0, 2]. Man beachte,
dass aufgrund der unterschiedlichen Achsenskalierung die Grak verzerrt ist. Dies kann durch
den Befehl axis equal vermieden werden.
Darstellung von Datenkurven:
52 http://www.mathematik-online.org/
4.1. DARSTELLUNG EBENER GRAPHEN
>> y=[0 1 1 2 nan 2 3 2 2 1]
>> plot(y,k--o)
1 2 3 4 5 6 7 8 9 10
0
0.5
1
1.5
2
2.5
3
Abgebildet ist der Datenvektor y=[0 1 1 2 nan 2 3 2 2 1], der uber seinen Indexvektor
geplottet wird. Kanten des Polygons zu einem Punkt, bei dem mindestens eine Koordinate den
speziellen Wert NaN besitzt, werden nicht gezeichnet. Dies kann zur Unterbrechung von Kurven
verwendet werden.
Darstellung mehrerer Funktionen:
>> x=linspace(0,2*pi);
>> Y=[cos(x); sin(x); ...
sin(x)+cos(x); sin(x)-cos(x)];
>> plot(x,Y)
0 1 2 3 4 5 6 7
1.5
1
0.5
0
0.5
1
1.5
Abgebildet sind die Funktionen cos x, sin x, sin x+cos x und sin xcos x jeweils f ur x [0, 2].
Hierf ur wird zunachst der Vektor x mit 100 Auswertungspunkten deniert. Die Matrix Y enthalt
in den Zeilen die zugehorigen Werte der zuvor angegebenen Funktionen. Alternativ konnen bei
Verwendung von hold on mehrere Funktionen mittels mehrfachem Aufruf der Funktion plot
in einem Koordinatensystem dargestellt werden.
Darstellung komplexer Funktionen:
>> t=linspace(0,2*pi);
>> z=exp(t*i);
>> plot(z,--)
1 0.8 0.6 0.4 0.2 0 0.2 0.4 0.6 0.8 1
1
0.8
0.6
0.4
0.2
0
0.2
0.4
0.6
0.8
1
Abgebildet ist die komplexe Funktion z = exp(ti) f ur t [0, 2], welche den Einheitskreis in
http://www.mathematik-online.org/ 53
KAPITEL 4. GRAFIK
der komplexen Zahlenebene parametrisiert.
4.2 Darstellung dreidimensionaler Graphen
Dreidimensionale Graphen konnen in Matlab unter anderem mit Hilfe der folgenden Funk-
tionen dargestellt werden:
plot3 zeichnet einen Polygonzug
mesh zeichnet ein dreidimensionales Netz
surf zeichnet eine dreidimensionale Flache
surfl zeichnet eine beleuchtete dreidimensionale Flache
Die Farbgebung von Flachen kann mit Hilfe des Befehls
colormap(map)
gewahlt werden. Hierbei ist map eine dreispaltige Matrix mit RGB-Werten in den Zeilen (nor-
miert auf [0,1]). Vordenierte Colormaps liefern die folgenden Funktionen:
autumn
bone
colorcube
cool
copper
flag
gray
hot
hsv
jet (Standard)
lines
pink
prism
spring
summer
vga
white
winter
Bei Angabe einer nat urlichen Zahl n als Parameter, wird eine (n3)-Colormap-Matrix generiert.
Groere n bedeuten dabei feinere Farbabstufungen.
Neben der Colormap kann die Art der Schattierung von Kanten und Flachen mit Hilfe des
Befehls shading kontrolliert werden:
shading flat konstante Farbe bei Kanten und Flachen
shading interp lineare Interpolation der Farben auf Kanten und Flachen
(Gouraud shading)
shading faceted entspricht shading flat mit schwarzen Kanten
Weitere Befehle zur Modikation der Darstellung sind unter anderem:
hidden steuert die Anzeige verdeckter Linien
alpha steuert die Transparenz von Objekten
colorbar Anzeige einer Farblegende
lighting Wahl der Beleuchtungsart
54 http://www.mathematik-online.org/
4.2. DARSTELLUNG DREIDIMENSIONALER GRAPHEN
Zur Generierung von Auswertungsgittern f ur bivariate bzw. multivariate Funktionen konnen
die Funktionen
meshgrid bzw. ndgrid
verwendet werden.
Die verf ugbaren Befehle zur Darstellung bzw. Manipulation dreidimensionaler Graphen lassen
sich durch
help graph3d
angezeigen.
(Online-Version enthalt Download, siehe Anhang A)
Beispiel:
Darstellung parametrisierter Kurven:
>> t=linspace(0,2*pi);
>> x=cos(t);
>> y=sin(t);
>> z=cos(2*t);
>> plot3(x,y,z)
1
0.5
0
0.5
1
1
0.5
0
0.5
1
1
0.5
0
0.5
1
Abgebildet ist die Kurve c(t) =
_
cos(t), sin(t), cos(2t)
_
t
f ur t [0, 2]. Analog zum Befehl plot
kann die Gestalt des Polygonzugs durch einen Formatstring modiziert werden.
Darstellung von Funktionen in zwei Variablen:
>> [X,Y]=meshgrid(-2:.1:2,-1:.1:1);
>> Z=X.*exp(-X.^2-Y.^2);
>> mesh(X,Y,Z);
>> colormap([0 0 0])
2
1
0
1
2
1
0.5
0
0.5
1
0.5
0
0.5
Abgebildet ist die Funktion z = xexp(x
2
y
2
). Zu deren Darstellung wurde zunachst mit Hilfe
des Befehls meshgrid ein Auswertungsgitter f ur den Bereich [2, 2] [1, 1] erstellt. Der Befehl
mesh erzeugt ein Netz der Flache, das anschlieend mit Hilfe von colormap gefarbt wurde. Der
Vektor [0 0 0] stellt dabei eine Colormap dar, welche nur die Farbe Schwarz enthalt.
http://www.mathematik-online.org/ 55
KAPITEL 4. GRAFIK
Darstellung parametrisierter Flachen:
>> [p,t]=meshgrid(...
linspace(-pi,pi,30),...
linspace(0,pi,15));
>> X=cos(p).*sin(t);
>> Y=sin(p).*sin(t);
>> Z=cos(t);
>> surf(X,Y,Z);
1
0.5
0
0.5
1
1
0.5
0
0.5
1
1
0.5
0
0.5
1
Dargestellt ist die mit Hilfe von Kugelkoordinaten parametrisierte Einheitsspahre. F ur die-
se wurden zunachst mit Hilfe des meshgrid-Befehls die beiden (15 30)-Parametermatrizen
p und t des Bereichs [, ] [0, ] erstellt. Aufgrund des Befehls surf erfolgt die Darstel-
lung mit gefarbten Facetten. Man beachte, dass die Darstellung aufgrund der unterschiedlichen
Achsenskalierungen verzerrt ist. Dies kann durch den Befehl axis equal vermieden werden.
Darstellung beleuchteter Flachen:
>> [X,Y,Z]=peaks(100);
>> surfl(X,Y,Z);
>> colormap(gray(1000))
>> shading interp
Die Funktion peaks liefert die drei (100100)-Matrizen X, Y und Z mit den Daten der abgebilde-
ten Funktion. Diese wird mit Hilfe von surfl als beleutete Flache dargestellt. Die Farbdarstel-
lung wird durch Wahl einer Colormap mit einer sehr feinen Abstufung von 1000 Farbeitragen
und der Verwendung interpolierter Farb ubergange innerhalb der Facetten verbessert.
4.3 Schnittbilder
F ur die Darstellung drei- bzw. vierdimensionaler Graphen mit Hilfe von Schnittbildern stehen
unter anderem die folgenden Funktionen zur Verf ugung:
56 http://www.mathematik-online.org/
4.3. SCHNITTBILDER
Schnittbilder f ur dreidimensionale Graphen:
contour, contourf Darstellung von Hohenlinien (mit eingefarbten Bereichen)
clabel Beschriftung der Hohenlinien
contour3 dreidimensionale Darstellung der Hohenlinien
meshc, surfc mesh/surf-Darstellung mit contour kombiniert
Schnittbilder f ur vierdimensionale Graphen (Volumetrische Daten):
slice Darstellung von Funktionswerten entlang von Schnittachen
contourslice Darstellung von Hohenlinien entlang von Schnittebenen
(Online-Version enthalt Download, siehe Anhang A)
Beispiel:
Darstellung von Hohenlinien:
>> [X,Y,Z]=peaks(100);
>> [c,h]=contour(X,Y,Z,8);
>> clabel(c,h);
4.9158
3.2898
3.2898

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

sichtbar und werden beim Verlassen der Funktion automatisch


geloscht. Im Gegensatz dazu besitzen die mit
global Variablenname(n)
deklarierten Variablen eine globale G ultigkeit. D.h. es kann funktions- und laufzeit ubergreifend
auf eine Variable zugegrien werden.
Die mittels
persistent Variablenname(n)
denierten persistenten Variablen haben nur innerhalb der Funktion, in welcher sie deniert
werden, einen globalen Charakter. D.h. sie werden beim Verlassen der Funktion nicht geloscht,
stehen aber anderen Funktionen nicht zur Verf ugung.
Bei der ersten Deklaration einer globalen bzw. persistenten Variablen wird diese von Matlab
als leere Matrix initialisiert. Bei Operationen mit globalen bzw. persistenten Variablen ist daher
ggf. zunachst mittels if isempty(Variablenname) der Status zu pr ufen.
Werden die globalen Daten nur innerhalb ein und derselben Funktion, aber uber mehrere Aufru-
fe hinweg benotigt, so ist die Initialisierung mit persistent der mit global vorzuziehen, da es
zu keinen Namenskonikten kommen kann. Im Gegensatz dazu konnen mit global deklarierte
Variablen auch von anderen Funktionen manipuliert werden, sofern gewollt oder ungewollt die
gleichen Vairablennamen verwendet werden.
Beispiel:
Deniert wird die folgende Funktion fa:
function fa
persistent PVAR
global GVAR
GVAR=GVAR+1;
if isempty(PVAR)
82 http://www.mathematik-online.org/
5.11. BEFEHLE ZUR BENUTZERINTERAKTION
PVAR=1;
else
PVAR=PVAR+1;
end
fprintf(Funktion fa: PVAR=%d, GVAR=%d\n,PVAR,GVAR);
Diese verwendet die persistente Variable PVAR und die globale Variable GVAR. Mit Hilfe der if-
Bedingung wird auf den Fall reagiert, dass PVAR nach der ersten Deklaration eine leere Matrix
ist. Bei GVAR wird davon ausgegangen, dass sie bereits als nat urliche Zahl deniert wurde. Die
Funktion erhoht beide Variablen um 1 und gibt dann die jeweiligen Werte aus.
Analog dazu wird eine zweite Funktion fb deniert, in der ebenfalls die persistente Variable
PVAR und die globale Variable GVAR verwendet werden:
function fb
persistent PVAR
global GVAR
GVAR=GVAR+1;
if isempty(PVAR)
PVAR=1;
else
PVAR=PVAR+1;
end
fprintf(Funktion fb: PVAR=%d, GVAR=%d\n,PVAR,GVAR);
Ausgabe eines Testlaufs:
>> global GVAR
>> GVAR=0;
>> fa, fa, fb, fa, fb
Funktion fa: PVAR=1, GVAR=1
Funktion fa: PVAR=2, GVAR=2
Funktion fb: PVAR=1, GVAR=3
Funktion fa: PVAR=3, GVAR=4
Funktion fb: PVAR=2, GVAR=5
Zunachst wird in der Befehlsumgebung die globale Variable GVAR deklariert und auf 0 gesetzt.
Anschlieend werden die Funktionen fa und fb mehrfach aufgerufen. Wie an der Ausgabe zu
erkennen ist, kann der Wert der globalen Variablen sowohl in der Befehlsumgebung, als auch
von beiden Funktionen geandert werden. Im Gegensatz dazu haben die persistenten Variablen
(trotz gleicher Variablennamen) nur innerhalb der jeweiligen Funktion G ultigkeit. Somit gibt
GVAR die Anzahl aller Funktionsaufrufe und PVAR die Anzahl der jeweiligen Funktionsaufrufe
wieder.
5.11 Befehle zur Benutzerinteraktion
Zur Unterst utzung der Interaktion mit dem Benutzer innerhalb von Skripten und Funktionen
stehen (neben uicontrol- und uimenu-Objekten) unter anderem folgenden Hilfsfunktionen zur
Verf ugung:
http://www.mathematik-online.org/ 83
KAPITEL 5. PROGRAMMIERUNG
input Eingabeauorderung an den Benutzer
inputdlg Eingabefeld in einem Dialogfenster
keyboard zweitweilig

Ubergabe der Kontrolle an den Benutzer
uigetfile Standarddialog zur Auswahl einer Eingabedatei
uigetdir Standarddialog zur Auswahl eines Verzeichnisses
uiputfile Standarddialog zur Auswahl einer Ausgabedatei
msgbox Meldungsfenster
errordlg Dialogfenster f ur Fehlermeldungen
helpdlg Dialogfenster f ur Hilfestellungen
questdlg Dialogfenster f ur Abfragen
warndlg Dialogfenster f ur Warnmeldungen
ginput graphische Eingaben mit der Maus
(Online-Version enthalt Download, siehe Anhang A)
Beispiel:
Mit Hilfe der Funktion
input(Erlauterungstext)
erfolgt eine Eingabeauorderung an den Benutzer. Die Eingabe wird von Matlab interpretiert
und zur uckgegeben:
>> M=input(Bitte (nx2)-Matrix der Messpunkte eingeben: )
Bitte (nx2)-Matrix der Messpunkte eingeben: [1 2;4 1;5 1]
M =
1 2
4 1
5 1
>> M=input(Bitte (nx2)-Matrix der Messpunkte eingeben: )
Bitte (nx2)-Matrix der Messpunkte eingeben: rand(2)
M =
0.4966 0.8216
0.8998 0.6449
Sofern die Interpretation der Eingabe durch Matlab nicht erw unscht ist, kann durch Angabe
von s als zweiter Parameter von input die R uckgabe als string erzwungen werden:
>> Fct=input(Bitte geben Sie einen Funktionsnamen ein: );
Bitte geben Sie einen Funktionsnamen ein: sin
??? Error using ==> sin
Incorrect number of inputs.
>> Fct=input(Bitte geben Sie einen Funktionsnamen ein: ,s)
Bitte geben Sie einen Funktionsnamen ein: sin
Fct =
sin
84 http://www.mathematik-online.org/
Anhang A
Downloads
Zu einigen Themen, die in diesem Kurs behandelt werden, stehen in der Online-Version Down-
loads zur Verf ugung. Diese sind nachfolgend aufgelistet.
Abschnitt 1.6:
Rundungsfehler (Dateityp .m)
Abschnitt 2.1:
Matrizengenerierung (Dateityp .m)
Abschnitt 2.4:
Demo zur Indizierung (Dateityp .m)
Abschnitt 2.6:
Matrix-Operationen (Dateityp .m)
Abschnitt 2.7:
Matrix-Funktionen (Dateityp .m)
Abschnitt 3.3:
Sparse Matrizen (Dateityp .m)
Abschnitt 3.5:
Quadtree (Dateityp .m)
Abschnitt 3.6:
Notenliste (Dateityp .m)
Demo zu verschiedenen Datentypen (Dateityp .m)
Abschnitt 4.1:
Lissajous-Figuren (Dateityp .m)
Abschnitt 4.2:
Mandelbrot-Menge (Dateityp .m)
Laplace-Gleichung (Dateityp .m)
http://www.mathematik-online.org/ 85
ANHANG A. DOWNLOADS
Abschnitt 4.3:
Parkettierung (Dateityp .m)
Abschnitt 4.4:
Gravitationsfeld (Dateityp .m)
Abschnitt 5.11:
Graphische Polygoneingabe (Dateityp .m)
86 http://www.mathematik-online.org/
http://www.mathematik-online.org/ 87
http://www.mathematik-online.org/

También podría gustarte