MATLAB-Crashkurs
Niklas Borg
Institut für Angewandte Analysis und Numerische Simulation
13. Mai 2015
Eigenschaften
_ Etablierte kommerzielle Software für numerische Berechnungen
_ Unterstützung aller gängigen Betriebssysteme (M-files sind portabel)
_ Interaktive, benutzerfreundliche Programmierumgebung (in Java)
_ Sehr umfangreiche Bibliothek von mathematischen Funktionen
Bezugsquelle
_ Kommerzieller Vertrieb durch die Firma
MathWorks [Link]
_ CIP-Pools sind mit MATLAB ausgestattet
_ Kostenlose Studentenversion erhältlich
MATLAB
N. Borg MATLAB-Crashkurs 1/42
MATLAB starten
_ Terminal öffnen → „Matlab“ eingeben und bestätigen
N. Borg MATLAB-Crashkurs 2/42
N. Borg MATLAB-Crashkurs 3/42
Hilfreiches
_ Standard Windows Shortscuts benutzen:
Preferences → Matlab → Keyboard → Shortcut → „Active
settings“ → Windows Default Set
_ Schriftart/-größe ändern:
Preferences → Matlab → Fonts → Desktop Code Font
N. Borg MATLAB-Crashkurs 4/42
Überblick
_ integriertes Hilfesystem
_ Variablen, Vektoren und Matrizen
_ mathematische Operationen
_ M-Dateien: Skripte und Funktionen
_ Schleifen (for, while)
_ if-Anweisungen
_ Plots
N. Borg MATLAB-Crashkurs 5/42
Zusammenfassung: Hilfesystem
_ help <Thema> gibt Hilfetexte auf dem Bildschirm aus
_ lookfor <Thema> durchsucht Hilfetexte nach Stichwort
_ doc <Thema> öffnet grafisches Hilfesystem/Browser
_ demo <Thema> öffnet interaktive MATLAB Demos
Nützliche Hilfethemen
_ general Generelle Befehle (who, clear, ...)
_ ops Operationen (+, -, *, /, ˆ, [], ...)
_ elfunc Mathematische Funktionen (min, max, sqrt, ...)
_ elmat Matrix Funktionen
_ lang Programmierung
N. Borg MATLAB-Crashkurs 6/42
Zusammenfassung: Variablen
_ Es wird zwischen Groß- und Kleinschreibung unterschieden
_ Variablen werden dynamisch erzeugt und sind veränderbar
_ Wenn keine Variable angegeben wird, dann wird das zuletzt
berechnete Ergebnis in ans (=answer) gespeichert
_ Eine Übersicht über alle Variablen liefern who bzw. whos
_ Variablen lassen sich mittels clear <Variablenname> löschen;
alle Variablen werden mit clear oder clear all gelöscht
_ Die Bildschirmausgabe lässt sich mittels Semikolon unterdrücken
_ Aussagekräftige Ausgaben mittels:
fprintf(’Text1 %f und Text2 %.3f \n’, Variable1,
Variable2)
_ Command Window mittels clc bereinigen
N. Borg MATLAB-Crashkurs 7/42
Vektoren
_ Zeilenvektoren können direkt erzeugt werden
>> a=[1 3 5 7 9 11 13 15 17 19]
a =
1 3 5 7 9 11 13 15 17 19
_ oder mittels Doppelpunkt-Operator
>> a=1:20
a =
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Ohne Angabe der Schrittweite wird automatisch 1 angenommen
_ Schritteweite mittels weiterem Doppelpunkt einfügen
>> a=[Link]
a =
1 3 5 7 9 11 13 15 17 19
N. Borg MATLAB-Crashkurs 8/42
Vektoren
_ Negative Schrittweiten sind zulässig, wenn gilt: Startwert > Endwert
>> a=20:-2:1
a =
20 18 16 14 12 10 8 6 4 2
_ Anfangs-, Endwert und Schrittweite können nichtganzzahlig sein
>> a=0.3:0.1:0.7
a =
0.3000 0.4000 0.5000 0.6000 0.7000
>> b=0:pi/2:2*pi pi ist als π vordefiniert
b =
0 1.5708 3.1416 4.7124 6.2832
N. Borg MATLAB-Crashkurs 9/42
Vektoren
_ Spaltenvektoren können direkt mittels ’;’ erzeugt werden
oder durch Transponieren des entsprechenden Zeilenvektors
>> a=[1; 2; 3; 4; 5] >> b=transpose([Link])
a = b =
1 1
2 3
3 5
4 7
5 9
_ Kurzform ist a.’ und b’ entspricht komplex konjugiert transponiert
>> a=(1:3).’ >> b=[1+i 2+i 3+i]’
a = b =
1 1.0000 - 1.0000i
2 2.0000 - 1.0000i
3 3.0000 - 1.0000i
N. Borg MATLAB-Crashkurs 10/42
Vektoradressierung
_ Einen einzelnen Vektoreintrag adressiert/verändert man mit
>> a=1:5; a(3)=pi
a =
1.0000 2.0000 3.1416 4.0000 5.0000
_ Auf den letzten Vektoreintrag greift man mit end zu
>> b=1:5; b(end)=1
b =
1 2 3 4 1
_ Teilvektoren können direkt oder mittels ’:’ adressiert werden
>> a(2:4)=42 >> b([1 3 end])=42
a = b =
1 42 42 42 5 42 2 42 4 42
N. Borg MATLAB-Crashkurs 11/42
Vektoradressierung
_ Vektoren können zu größeren Vektoren zusammengesetzt werden
>> a=1:5; b=6:10; c=[a, b]
c =
1 2 3 4 5 6 7 8 9 10
Dabei kann das Komma bei Zeilenvektoren entfallen.
_ Vektoreinträge/Teilvektoren können mittels ’[]’ entfernt werden
>> c(3:8)=[]
c =
1 2 9 10 ← end entspricht jetzt dem Eintrag 4
N. Borg MATLAB-Crashkurs 12/42
Vektoroperationen
_ min bzw. max berechnet kleinsten bzw. größten Werte eines Vektors
>> a=[2 5 4]; m=min(a) >> m=max(a)
m = m =
2 5
_ Die Position des kleinsten bzw. größten Eintrags liefert
>> [m i]=min(a) >> [m i]=max(a)
m = i = m = i =
2 1 5 2
_ sum berechnet die Summe, prod das Produkt der Vektoreinträge
>> sum(a) n
X >> prod(a) n
Y
ans = =
b ak ans = =
b ak
11 k=1 40 k=1
N. Borg MATLAB-Crashkurs 13/42
Vektoroperationen
_ dot berechnet das Skalarprodukt zweier Vektoren a, b ∈ Rn
>> a=1:5; b=6:10; d=dot(a,b) n
X
d = b (a, b) =
= ak bk
130 k=1
_ norm berechnet die Euklidische Norm (p = 2) eines Vektors a ∈ Rn
v
>> a=1:10; n=norm(a) u n
uX
n = =b kak = t ak2
19.6214 k=1
_ weitere Normen können mittels norm(a,p) berechnet werden
Pn
p=1 Betragssummennorm kak1 = k=1 |ak |
p = inf Maximumsnorm kak∞ = maxk=1,k |ak |
Pn
p∈R p-Norm, p ≥ 1 kakp = ( k=1 |ak |p )1/p
N. Borg MATLAB-Crashkurs 14/42
MATLAB = MATrix LABoratory
_ Eine m × n Matrix ist in MATLAB ein zweidimensionales Array
mit m Zeilen (engl. rows) und n Spalten (engl. columns).
_ 2 × 3 Matrix >> A=[1 2 3; 4 5 6]
A =
1 2 3 1 2 3
A=
4 5 6 4 5 6
Zeilen werden durch Semikolon getrennt (vgl. Spaltenvektoren)
_ >> whos A
Name Size Bytes Class Attributes
A 2x3 48 double
N. Borg MATLAB-Crashkurs 15/42
Matrixdimensionen
_ Dimension der Matrix A
>> s = size(A) >> [m n] = size(A)
s = m = n =
2 3 2 3
>> m = size(A,1) >> n = size(A,2)
m = n =
2 3
_ Größte Dimension der Matrix A
>> l = max(size(A)) >> l = length(A)
l = l =
3 3
N. Borg MATLAB-Crashkurs 16/42
Spezielle Matrizen
_ Nullmatrix >> N = zeros(2) >> N = zeros(2,3)
N = N =
0 0 0 0 0
0 0 0 0 0
_ „Einsmatrix” >> E = ones(2) >> E = ones(2,3)
E = E =
1 1 1 1 1
1 1 1 1 1
_ Einheitsmatrix >> I = eye(2) >> I = eye(2,3)
I = I =
1 0 1 0 0
0 1 0 1 0
N. Borg MATLAB-Crashkurs 17/42
Matrixoperationen
_ Sämtliche Operationen wie +, -, * und ˆ werden unterstützt
1 2 1 2
A= , B=
3 4 1 2
Produkt der Matrixeinträge Summe der Matrixeinträge
>> A*B >> A+B
ans = ans =
3 6 2 4
7 14 4 6
N. Borg MATLAB-Crashkurs 18/42
Matrixoperationen
_ norm(A,p) berechnet die p-Norm einer Matrix A
zulässige Werte sind p=1, 2, inf und ’fro’ (Frobeniusnorm)
_ inv berechnet die Inverse A−1 einer regulären Matrix A
>> A=hilb(2), B=inv(A), C=A*B
A = B = C =
1.0000 0.5000 4.0000 -6.0000 1 0
0.5000 0.3333 -6.0000 12.0000 0 1
_ det und rank bestimmen Determinante und Rang einer Matrix A
>> d=det(A) >> r=rank(A)
d = r =
0.0833 2
N. Borg MATLAB-Crashkurs 19/42
Matrixoperationen
_ eig berechnet die Eigenwerte einer Matrix A ∈ Rn×n
>> A=hilb(2); l=eig(A)
l =
0.0657 Ax = λx, λ ∈ C, x ∈ Cn \ {0}
1.2676
_ Es können auch Eigenwerte und Eigenvektoren berechnet werden
>> [R D]=eig(A)
R = D =
0.4719 -0.8817 0.0657 0
-0.8817 -0.4719 0 1.2676
Beachte: Bei der Eigenwertberechnung können Rundungsfehler auftreten.
N. Borg MATLAB-Crashkurs 20/42
Lineare Gleichungssysteme
_ Lineare Gleichungssysteme der Form 2 1x1
1 2x2
Ax = b, A ∈ Rn×n , b ∈ Rn
1
können mittels Linksdivision (mldivide) =
2
x=A\b oder direkt x=inv(A)*b
x 1
⇒ 1 =
gelöst werden (falls Matrix A invertierbar ist) x2 0
_ >> A=[1 2; 2 1]; b=[1; 2];
>> x=A\b >> x=inv(A)*b
x = x =
1 1
0 0
N. Borg MATLAB-Crashkurs 21/42
Elementweise Operationsausführung
_ Operatoren *, /, \, ˆ werden elementweise auf jeden Eintrag
des Arrays angewendet, wenn ein „.” vorangestellt wird
1 2 1 2
A= , B=
3 4 1 2
Produkt der Matrixeinträge Division vom Typ „bij /aij ”
>> A.*B >> B./A
ans = ans =
1 4 1.0000 1.0000
3 8 0.3333 0.5000
Beachte: Aˆk meint die k-fache Matrizenmultiplikation A*...*A
während A.ˆk jeden Eintrag der Matrix potenziert.
N. Borg MATLAB-Crashkurs 22/42
Teilmatrizen
_ Matrizen können aus einzelnen Teilmatrizen aufgebaut werden
>> A = [1 2; 3 4] >> B = [A zeros(2); ...
A = ones(2) eye(2)]
1 2 B =
3 4 1 2 0 0
3 4 0 0
1 1 1 0
1 1 0 1
_ Blockmatrizen können mittels repmat(A,m,n) erzeugt werden
>> C = repmat(eye(2),2,3) >> D = repmat([1; 2],2)
C = D =
1 0 1 0 1 0 1 1
0 1 0 1 0 1 2 2
1 0 1 0 1 0 1 1
0 1 0 1 0 1 2 2
N. Borg MATLAB-Crashkurs 23/42
Matrixumformungen
_ Matrizen können mittels reshape(x,m,n) verändert werden
>> A=reshape(9:-1:1,3,3) Matrizen werden
A = spaltenweise gespeichert
9 6 3
A(:)=9 8 7 6 5 4 3 2 1
8 5 2
(Der Zugriff A(4) ist also erlaubt)
7 4 1
_ Matrizen können mittels transpose(A) transponiert werden
>> B=transpose(A) Kurznotation A.’
B =
ctranspose(A) berechnet
9 8 7
die komplex Konjugierte Ā
6 5 4
Kurznotation A’
3 2 1
N. Borg MATLAB-Crashkurs 24/42
Diagonalmatrizen
_ Diagonalteil einer Matrix kann mittels diag(A,k) bestimmt werden
>> A=reshape(1:9,3,3) >> B=diag(A) >> C=diag(A,1)
A = B = C =
1 4 7 1 4
2 5 8 5 8
3 6 9 9
_ Diagonalmatrizen können mittels diag(v,k) erzeugt werden
>> D=diag(1:3) >> E=diag(1:2,-1) >> F=diag(diag(A))
D = E = F =
1 0 0 0 0 0 1 0 0
0 2 0 1 0 0 0 5 0
0 0 3 0 2 0 0 0 9
N. Borg MATLAB-Crashkurs 25/42
M-Dateien
_ Dateiendung .m kennzeichnet eine ausführbare Datei
_ Algorithmen können in einer M-Datei editiert/gespeichert und
mehrfach (mit unterschiedlichen Daten) aufgerufen werden
_ Skripte besitzen keine Ein- und Ausgabeparameter und arbeiten
mit den global im Workspace vorhandenen Variablen
_ Funktionen besitzen Ein- und Ausgabeparameter und arbeiten
intern mit lokalen Variablen, die automatisch gelöscht werden
_ M-Dateien müssen eine gute Dokumentation enthalten ;-)
N. Borg MATLAB-Crashkurs 26/42
Skripte
Aufgabe: Berechne den betragsmäßig größten Eintrag der Matrix A.
M-Datei: maxentry.m
%MAXENTRY Betragsmäßig größter Matrixeintrag
% MAXENTRY berechnet betragsmäßig größten Wert von A
B=abs(A); m=max(B); max(m)
_ Kurzbeschreibung in H1-Zeile wird von help, lookfor verwendet
_ Hilfetext endet vor der ersten Zeile ohne Kommentarzeichen „%”
_ Aufruf des Skripts im Kommando-Fenster durch maxentry (ohne
.m!!!)
N. Borg MATLAB-Crashkurs 27/42
Funktionen
Aufgabe: Berechne den betragsmäßig größten Eintrag der Matrix A.
M-Datei: maxentry1.m
function y = maxentry1(A)
%MAXENTRY1 Betragsmäßig größter Matrixeintrag
% MAXENTRY1 berechnet betragsmäßig größten Wert von A
B=abs(A); m=max(B); y=max(m);
_ Funktions- und Dateiname müssen übereinstimmen
_ Deklaration function Ausgabe = name(Eingabe)
_ Aufruf der Funktion im Kommando-Fester durch maxentry1(A)
N. Borg MATLAB-Crashkurs 28/42
Funktionen mit mehreren Ausgabeparametern
Aufgabe: Berechne den betragsmäßig größten Eintrag der Matrix A
und bestimme dessen Zeilen- und Spaltennummer.
M-Datei: maxentry2.m
function [y i j] = maxentry2(A)
%MAXENTRY2 Betragsmäßig größter Matrixeintrag
% MAXENTRY2 berechnet betragsmäßig größten Wert von A
[x k] = max(abs(A));
[y j] = max(x);
i = k(j);
_ Beim Aufruf können Ausgabeparameter von rechts nach links
weggelassen werden, z.B. entfällt j bei [y i] = maxentry2(A)
N. Borg MATLAB-Crashkurs 29/42
Unterfunktionen
_ Berechne für die Funktion
M-Datei: fderiv.m
f (x) = sin(x)2 function y = fderiv(x,h)
die erste Ableitung %FDERIV Berechnet f’(x)
f (x+h)−f (x) y = (f(x+h) - f(x))/h;
f 0 (x) ≈ h
mit Parameter h > 0
function w = f(x)
>> fderiv(pi/4, 1e-5) %F Berechnet sin(x)ˆ2
ans =
w = sin(x)ˆ2;
1.0000
_ Unterfunktion f ist nur innerhalb der Funktion fderiv sichtbar
_ Unterfunktion f kann von außen nicht verändert werden :-(
N. Borg MATLAB-Crashkurs 30/42
Übergabe von Funktionen
Aufgabe: Schreibe eine Funktion, die für eine beliebige
Funktion f (x) deren Ableitung f 0 (x) approximiert.
M-Datei: fderiv1.m
function y = fderiv1(f,x,h)
y = (feval(f,x+h) - feval(f,x))/h;
_ Funktionsauswertung mittels feval(fun,x1,x2,...,xn)
_ Aufruf für sin Funktion mittels fderiv1(’sin’,pi,1e-5)
_ Übergabeparameter ’Funktion’ als Zeichenkette
_ Aufruf fderiv1(sin,pi,1e-5) erzeugt Fehlermeldung
N. Borg MATLAB-Crashkurs 31/42
Übergabe von Funktionen
_ Beispielfunktion p(x) = x 3
M-Datei: polynom.m
function y = polynom(x)
y = xˆ3;
_ Approximation der Ableitung p0 (x) = 3x 2 im Punkt x = 4
_ fderiv1(’polynom’,4,1e-5);
_ Ausgabe ans = 48.0001 ← p0 (4) = 48
N. Borg MATLAB-Crashkurs 32/42
Schleifen
_ Schleifen dienen zur wiederholten Ausführung von Befehlen
_ Einfachste Schleife ist der Doppelpunktoperator
A=1:5 ist Kurzform für A(1)=1, A(2)=2, A(3)=3, ...
_ Es gibt zwei unterschiedliche Schleifenarten
_ for Schleifen mit fester Anzahl an Wiederholungen
_ while Schleifen mit variabler Anzahl an Wiederholungen
_ Schleifen (auch unterschiedliche) können geschachtelt werden
_ Programmierfehler können zu Endlosschleifen führen, die mit
der Tastenkombination Strg+C abgebrochen werden können
N. Borg MATLAB-Crashkurs 33/42
Schleifen mit fester Anzahl an Wiederholungen
Aufgabe: Berechne 100 Zufallszahlen zwischen 0 und 1 und speichere
sie in einem Vektor.
for i=1:100 for Variable=Ausdruck
Zufallszahlen(i) = rand(1); Befehlsfolge
end end
_ Schleifen über Wertelisten sind möglich
for x=[pi pi/2 pi/4] → x (1) = π, x (2) = 12 π, x (3) = 14 π
_ Schleifen über Vektoren sind möglich
1 0 0
for x=eye(3) → x (1) = 0, x (2) = 1, x (3) = 0
0 0 1
N. Borg MATLAB-Crashkurs 34/42
Schleifen mit variabler Anzahl an Wiederholungen
Aufgabe: Berechne solange Zufallszahlen zwischen 0 und 1 bis sich
eine Zahl echt größer 0.8 ergibt und lasse die Anzahl der
berechneten Zufallszahlen ausgeben.
Zufallszahl = 0; counter = 0;
while Zufallszahl <= 0.8 while Bedingung
Zufallszahl = rand(1); Befehlsfolge
counter = counter + 1; end
end counter
N. Borg MATLAB-Crashkurs 35/42
if Anweisungen - Beispiel
Aufgabe: Berechne 33 Zufallszahlen zwischen 0 und 1, sortiere
diese in drei Blöcke der Größe 13 und lasse diese am Ende
ausgeben.
j=1; k=1; l=1;
for i=1:33
Zufallszahl = rand(1);
if Zufallszahl <= 1/3
first(j) = Zufallszahl;
j = j+1;
elseif Zufallszahl > 1/3 && Zufallszahl <= 2/3
second(k) = Zufallszahl;
k = k+1;
else
third(l) = Zufallszahl;
l = l+1;
end
end
N. Borg MATLAB-Crashkurs 36/42
if Anweisungen - Allgemeine Syntax
if Bedingung
Befehlsfolge
elseif Bedingung
Befehlsfolge
else
Befehlsfolge
end
_ Zulässige Befehle für Bedingung: <, <=, >, >=, ==, ∼=
_ Mehrere Bedingungen können mittels && (mathematisches und)
oder || (mathematische oder ) miteinander verknüpft werden
_ Wird eine if oder elseif Bedingung erfüllt, gilt der gesamte if
Block als beendet
N. Borg MATLAB-Crashkurs 37/42
Grafikausgabe in 2D
Aufgabe: Stelle folgende Daten grafisch dar
x 1.5 2.2 3.1 4.6 5.7 6.3 9.4
y 2.3 3.9 4.3 7.2 4.5 6.1 1.1
_ xy-Diagramme lassen sich mittels plot(x,y) Befehl erzeugen
_ plot Befehl kann mehrere Datensätze gleichzeitig anzeigen
_ plot(x1,y1,x2,y2,...) mit Vektoren x1, y1, x2 und y2
_ plot(x,Y) mit m-Vektor x und m × n-Matrix Y
_ plot(X,Y) mit m × n-Matrizen X und Y
_ Darstellung kann durch optionale Parameter beeinflusst werden
N. Borg MATLAB-Crashkurs 38/42
Optionen des plot Befehls
>> plot(x,y,’rp--’) r Rot o ◦
8
g Grün * ∗
b Blau . .
7
c Blaugrün + +
6
m Pink x x
5 y Gelb s
4
k Schwarz d
w Weiß ˆ 4
3
v 5
2
- durchgezogen > C
1
1 2 3 4 5 6 7 8 9 10
-- gestrichelt < B
: gepunktet p ?
plot(x,y,Zeichenkette) -. abwechselnd h
N. Borg MATLAB-Crashkurs 39/42
Weiterführende Optionen des plot Befehls
8
6 >> plot(x,y,’rh--’,...
5
’LineWidth’,2.0,...
’MarkerSize’,15,...
4
’MarkerEdgeColor’,’b’,...
3 ’MarkerFaceColor’,’g’)
2
1
1 2 3 4 5 6 7 8 9 10
_ Einstellungen können im Property Editor vorgenommen werden
Menüeintrag: Tools → Edit Plot
_ Manuelle Einstellungen können als M-Datei exportiert werden
Menüeintrag: File → Generate M-File (Generate Code)
_ createfigure(x1,y1) wendet generierte M-Datei auf x1, y1 an
N. Borg MATLAB-Crashkurs 40/42
Anpassen von Diagrammen
_ title(’Überschrift’) erzeugt eine Überschrift
_ Gitterlinien können mittels grid Befehl eingeblendet werden
_ grid on|off blendet Gitterlinien ein bzw. aus
_ grid minor schaltet zwischen Gitterlinienauflösungen um
_ legend Befehl fügt eine Abbildungslegende ein
_ legend(’Eintrag1’,’Eintrag2’,Optionen)
_ Position, Ausrichtung, Umrahmung optional festlegbar
_ hold on erlaubt Einfügen in ein bestehendes Diagramm
_ clf (clear figure) löscht ein bestehendes Diagramm
_ close schließt das aktuell ausgewählte Diagramm, close all
schließt alle Diagramme
N. Borg MATLAB-Crashkurs 41/42
Anpassen der Diagrammachsen
_ Achsen können linear oder logarithmisch skaliert werden
plot, semilogx, semilogy, loglog
_ Achsen können mittels xlabel, ylabel beschriftet werden
xlabel(’x-Achse’), ylabel(’y-Achse’)
_ Achsengröße kann mittels axis, xlim, ylim festgelegt werden
_ axis([xmin xmax ymin ymax])
_ xlim([xmin xmax]), ylim([ymin ymax])
_ ±inf berechnet Grenze(n) automatisch
_ Achsenverhältnis kann mittels axis angepasst werden
axis auto, equal, square, tight, off
_ Bearbeitung der Achseneinstellungen im Property Editor
N. Borg MATLAB-Crashkurs 42/42