Matlab - eine kurze Einführung Matlab - eine kurze Einführung Helke Karen Hesse, Thomas Dunne [email protected], [email protected]13.11.2006 Einführung in die Numerische Mathematik (Numerik 0) Dr. Katja Mombaur, WS 2006/07 Helke Hesse, Thomas Dunne Institut für Angewandte Mathematik, Universität Heidelberg 1 / 23
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Einführung in die Numerische Mathematik (Numerik 0)Dr. Katja Mombaur, WS 2006/07
Helke Hesse, Thomas DunneInstitut für Angewandte Mathematik, Universität Heidelberg
7 / 23
Matlab - eine kurze Einführung
Matrizen I
A = [1, 2, 3, 4; 0, 1, 0, 0; 0, 0, 1, 0] ergibt Matrix A =
„
1 2 3 40 1 0 00 0 1 0
«
Lesen bzw. Schreiben von Aij : a = A(i, j) bzw. A(i, j) = 5;
Einheitsmatrix: I = eye (3) erzeugt I =
„
1 0 00 1 00 0 1
«
Nullmatrix: A = zeros (3) erzeugt A =
„
0 0 00 0 00 0 0
«
Nullmatrix: A = zeros (3, 2) erzeugt A =
„
0 00 00 0
«
Nullvektor! a = zeros (1, 5) erzeugt a = ( 0 0 0 0 0 )
Eins-Matrix: A = ones (3) erzeugt A =
„
1 1 11 1 11 1 1
«
Eins-Matrix: A = ones (2, 3) erzeugt A =“
1 1 11 1 1
”
Eins-Vektor! a = ones (1, 4) erzeugt a = ( 1 1 1 1 )
Einführung in die Numerische Mathematik (Numerik 0)Dr. Katja Mombaur, WS 2006/07
Helke Hesse, Thomas DunneInstitut für Angewandte Mathematik, Universität Heidelberg
8 / 23
Matlab - eine kurze Einführung
Matrizen II
A = eye (3), B = [1, 2, 3, 4; 0, 1, 0, 0; 0, 0, 1, 0]
ergibt A =
1 0 00 1 00 0 1
!
und B =
1 2 3 40 1 0 00 0 1 0
!
“Strich” transponiert: B ′ ergibt
0
@
1 0 02 1 03 0 14 0 0
1
A
Multiplikation: A ∗ B =
1 0 00 1 00 0 1
!
·
1 2 3 40 1 0 00 0 1 0
!
Komponentenweise: B. ∗ B =
1 4 9 160 1 0 00 0 1 0
!
Einführung in die Numerische Mathematik (Numerik 0)Dr. Katja Mombaur, WS 2006/07
Helke Hesse, Thomas DunneInstitut für Angewandte Mathematik, Universität Heidelberg
9 / 23
Matlab - eine kurze Einführung
Matrizen III
A = [1, 2, 3, 4; 0, 1, 0, 0; 0, 0, 1, 0] ergibt Matrix A =
„
1 2 3 40 1 0 00 0 1 0
«
Die Zahl der Zeilen und spalten einer Matrix A wird mit [z , s] = size(A) abgefragt
“Umwandeln” einer Matrix A in einen Vektor (immer spaltenweise): A(:)
“Umformen” in eine 2× 6 Matrix (immer spaltenweise):
reshape(A, 2, 6) ==“
1 0 1 3 1 00 2 0 0 4 0
”
Lesen/Schreiben von Aij : a = A(i, j); A(i, j) = 5;
Zugriff auf erste Zeile von A als Zeilenvektor: A(1 , :) ergibt (1 2 3 4)
Zugriff auf die letzten zwei Werte davon: A(1 , 3 :4) ergibt (3 4)
Zugriff auf dritte Spalte von A als Spaltenvektor: A(: , 3) ergibt
„
301
«
“Submatrix”“
Az1,s1 ·· Az2,s2
”
, wobei z1, s1 die Indizes der linken oberen Ecke der
Submatrix sind, und z2, s2 die Indizes der rechten unteren Ecke. Zugriff mittelsA(z1 :z2 , s1 :s2).
◮ Von A ist die “Submatrix”“
A1,2 A1,3A2,2 A2,3
”
gesucht,
◮ A(1 :2 , 2 :3) liefert“
2 31 0
”
Einführung in die Numerische Mathematik (Numerik 0)Dr. Katja Mombaur, WS 2006/07
Helke Hesse, Thomas DunneInstitut für Angewandte Mathematik, Universität Heidelberg
10 /23
Matlab - eine kurze Einführung
Matrizen IV
Zeilen und Spalten kann man an den “Rändern” einer Matrix “dazukleben”:◮ Mit A = eye(3) klebe rechts und unten etwas dazu: B = [A, (10 : 12)′] und C = [A; (20 : 22)]
◮ ergibt: B ==
„1 0 0 100 1 0 110 0 1 12
«
und C ==
1 0 00 1 00 0 120 21 22
!
Beliebige Zeilen und Spalten kann man löschen durch die Zuweisung eines leeren Vektors.◮ i-te Zeile löschen: A(i , :) = [ ]◮ i-te Spalte löschen: A(:, i) = [ ]
Obere und untere Dreiecksmatrizen einer Matrix A erhält man mit den Funktionen triu(A)und tril(A). Alternativ: triu(A, k) und tril(A, k), wobei k angibt ab welcher Nebendiagonale(ND) die Dreiecksmatrix angegeben werden soll. Die nullte Nebendiagonale (k = 0) ist dieHauptdiagonale. Die erste ND (k = 1) ist die erste rechts oberhalb davon. Die “minuserste” ND (k = −1) ist die erste links unterhalb davon. ( Also: triu(A) == triu(A, 0),tril(A) == tril(A, 0))
◮ A = reshape(1 :16 , 4, 4) ergibt A ==
1 5 9 132 6 10 143 7 11 154 8 12 16
!
◮ triu(A) =
1 5 9 130 6 10 140 0 11 150 0 0 16
!
und tril(A) =
1 0 0 02 6 0 03 7 11 04 8 12 16
!
◮ triu(A, 1) =
0 5 9 130 0 10 140 0 0 150 0 0 0
!
und tril(A, 1) =
1 5 0 02 6 10 03 7 11 154 8 12 16
!
Einführung in die Numerische Mathematik (Numerik 0)Dr. Katja Mombaur, WS 2006/07
Helke Hesse, Thomas DunneInstitut für Angewandte Mathematik, Universität Heidelberg
11 /23
Matlab - eine kurze Einführung
Logische Vergleiche
für zwei Zahlen (z.B. a = exp(pi) , b = pi (̂exp(1)).
a gleich b?a == b
a ungleich b?a ˜= b
a kleiner b?a < b
a kleiner gleich b?a <= b
größer und größer gleich analog ...
Und-Verknünfung mit dem &-Zeichen: (b < a) & (a < 1.035 ∗ b)
Oder-Verknünfung mit dem |-Zeichen: (b < a− 0.6) | (a + 0.6 < b)
Negation mit dem -̃Zeichen: (̃a == b)
Einführung in die Numerische Mathematik (Numerik 0)Dr. Katja Mombaur, WS 2006/07
Helke Hesse, Thomas DunneInstitut für Angewandte Mathematik, Universität Heidelberg
Bei Vektoren und Matrizen, komponentenweises Anwenden der Operatoren ∗, /, ˆ mit“Punkt” davor: a .∗ b , A .∗ B
Bei Vektoren und Matrizen, komponentenweises Anwenden der Operatoren +,− ohne
“Punkt” davor: a + b , A + B
Beispiele:◮ Jede Komponente von der Matrix A durch die entsprechende Komponente von B teilen:
A ./BDas ist nicht dasselbe wie A/B = A ∗ B−1
◮ Die ersten fünf Quadratzahlen: a.̂ 2 (mit a = 1 : 5)◮ Die ersten fünf Zweierpotenzen: 2.̂ a
◮ Operationen auf Subvektoren ausführen:⋆ Einser-Vektor anlegen: a = ones(1, 10) liefert a = ( 1 1 1 1 1 1 1 1 1 1 ).⋆ Die Zahl 1 auf den Subvektor a(5 : 10) addieren: a(5 : 10) = a(5 : 10) + 1 liefert a = ( 1 1 1 1 1 2 2 2 2 2 )⋆ Die Zahl 10 auf den Subvektor a(4 : 7) multiplizieren: a(4 : 7) = a(4 : 7) ∗ 10 liefert
a = ( 1 1 1 10 10 20 20 2 2 2 )
◮ Auf gleichem Wege können Operationen auf Submatrizen ausgeführt werden.
⋆ A=reshape(1:9,3,3) ergibt A =
„1 4 72 5 83 6 9
«
⋆ A(2 :3 , 1 :2) = A(2 :3 , 1 :2) ∗ 10 ergibt A =
„1 4 720 50 830 60 9
«
Einführung in die Numerische Mathematik (Numerik 0)Dr. Katja Mombaur, WS 2006/07
Helke Hesse, Thomas DunneInstitut für Angewandte Mathematik, Universität Heidelberg
13 /23
Matlab - eine kurze Einführung
Schleifen und Verzweigungen
for - Schleifen:
for i = 1 : n
z = z + i ;end;
while - Schleifen:
c = 0; a = 1; n = 0;
while (c ˜= a)c = a + 2̂ (−n);n = n + 1;
end;
if - Verzweigungen
if (x > y)z = 1;
elseif (x < y)z = −1;
else %d.h. x == y
z = 0;end;
Einführung in die Numerische Mathematik (Numerik 0)Dr. Katja Mombaur, WS 2006/07
Helke Hesse, Thomas DunneInstitut für Angewandte Mathematik, Universität Heidelberg
14 /23
Matlab - eine kurze Einführung
Dateien für Skripte und Funktionen
Um Zeit zu sparen, können Befehle in Dateien gespeichert werden. Die Dateien hörenimmer mit einem .m am Ende auf.Dateien können für zwei verschiedene Aufgaben benutzt werden:◮ Als Funktionshülle: nur für die Definition von Funktionen.◮ Als Skript: eine Ansammlung von Befehlen (ohne Funktions-Definitionen).
Möglichst immer Kommentare machen, damit man nachher schneller versteht was dasteht!◮ Kommentierte Zeilen fangen immer an mit einem Prozentzeichen : %
(mit möglichen führenden Leerzeichen).◮ Ganze Kommentar-Blöcke (d.h. Kommentare über mehrere Zeilen) werden mit einem %{ am
Anfang und %} am Ende markiert.
Dateien können nur im aktuellen Matlab-Verz. benutzt werden!
Skripte und Funktionen können immer abgebrochen werden mit <STRG>-C
Einführung in die Numerische Mathematik (Numerik 0)Dr. Katja Mombaur, WS 2006/07
Helke Hesse, Thomas DunneInstitut für Angewandte Mathematik, Universität Heidelberg
15 /23
Matlab - eine kurze Einführung
Skripte
Alle Befehle in der Datei werden aufgerufen durch den Aufruf der Datei in Matlab. Heisstdie Datei z.B. “befehle.m”, dann erfolgt der Aufruf aller Befehle darin mit “befehle”.
Das Skript kann auf alle vorherige Matlab Variablen zugreifen.
Variablen, die im Skript erzeugt werden, sind nachher noch da.
Der Befehl pause hält ein Skript an, bis <RETURN> gedrückt wird.
Der Befehl pause(n) hält ein Skript für n Sekunden an.
D.h. alle Befehle im Skript sind so, als ob man sie selbst eingetippt hätte.
Einführung in die Numerische Mathematik (Numerik 0)Dr. Katja Mombaur, WS 2006/07
Helke Hesse, Thomas DunneInstitut für Angewandte Mathematik, Universität Heidelberg
16 /23
Matlab - eine kurze Einführung
Funktionen
Es können beliebig viele Funktionen in eine Datei.
Aber nur die erste Funktion kann von “Aussen” aufgerufen werden über den Namen derDatei!
Dafür kann die erste Funktion in der Datei die anderen Funktionen in der selben Dateiaufrufen.
Es können NUR Funktionen in der Datei definiert werden. Ausserhalb der Funktionendürfen sonst keine Befehle stehen!
Einführung in die Numerische Mathematik (Numerik 0)Dr. Katja Mombaur, WS 2006/07
Helke Hesse, Thomas DunneInstitut für Angewandte Mathematik, Universität Heidelberg
17 /23
Matlab - eine kurze Einführung
Funktionen und grafische Ausgabe
Definition einer Funktion, die (x + sin (x))2 ausrechnet:(neue Datei anlegen, noch nicht speichern)
function erg = fun (x)
erg = (x + cos(x)).̂ 2return;
(Speichern als “fun.m”.)
Funktionsaufruf für das Argument x = 5:
x = 5;y = fun(x);
Grafische Ausgabe der Funktion auf dem Intervall [0, 1]:
x = 0 : 0.1 : 1;plot(x, fun(x),′ r−′);
Funktionen können mehr als ein Parameter haben: function erg = fun2(x,A, c) . . .
Funktionen können mehr als ein Wert zurückgeben: function [erg1, e2, e3] = fun3(x) . . .
Einführung in die Numerische Mathematik (Numerik 0)Dr. Katja Mombaur, WS 2006/07
Helke Hesse, Thomas DunneInstitut für Angewandte Mathematik, Universität Heidelberg
18 /23
Matlab - eine kurze Einführung
Funktionen in Matlab
Eine Übersicht aller Funktionen mit doc functions.
Vektorfunktionen◮ sum (Summe aller Eintraege),mean (Mittelwert),max ,min, prod (Produkt aller Eintraege),
norm (Euklidischer Norm), length (Anzahl der Werte im Vektor), . . .
Matrixfunktionen◮ Vektorfunktionen werden auf die einzelnen Spalten angewendet, Ergebnisse werden in ein
Zeilenvektor gespeichert.◮ eye, ones, zeros, abs, inv , det, poly (charakteristisches Polynom), length (Anzahl der Spalten),
[z , s] = size(A) (ergibt Zeilen− und Spaltenzahl als Vektor), triu, tril
◮ Diagonal-Matrix mit den Werten des Vektors v füllen: diag(v) ==
0
@
v1 0. . .
0 vn
1
A
◮ Singulärwertzerlegung von A: [U,S,V ] = svd(A)U und V sind unitäre Matrizen, S ist eine Diagonal-Matrix.Der Aufruf s = svd(A) ergibt den Vektor s, welches die Diagonal-Einträge von S == diag(s) sind.
Einführung in die Numerische Mathematik (Numerik 0)Dr. Katja Mombaur, WS 2006/07
Helke Hesse, Thomas DunneInstitut für Angewandte Mathematik, Universität Heidelberg
19 /23
Matlab - eine kurze Einführung
Plotten
Um ein Vektor der Funktionswerte y gegen den Vektor der x-Werte zu plotten: plot(x, y)◮ x-Werte sind z.B. x = 0 : 0.01 : 10◮ y -Werte sind z.B. y = f (x), oder: n = length(x); y = zeros(1, n); for i = 1 :n y(i) = f (x(i)); end ;◮ Mehrere Listen an y -Werte können in ein Matrix abgelegt werden, jede Zeile entspricht eine Reihe
an y -Werten.
Beschriftungen◮ Titel mit title( ′titeltext′)◮ Achsen mit xlabel( ′x − Achsentext ′) und ylabel( ′y − Achsentext ′)◮ Legenden mit legend(′plot1′,′plot2′,′plot3′, . . . )
Strich/Linien-Art beim Plotten angeben mit plot(x, y , ′arttext ′),◮ Für eine rot gezogene Linie: plot(x , y , ′r−′)◮ Für grün mit Sternchen: plot(x , y , ′g∗′)◮ Die Zeichenkette ′arttext ′ ist eine Zusammensetzung aus Farbe, Strichart und Zeichenart:
⋆ Weitere Farben: r (rot), g (grün), b (blau), k (Schwarz), y (yellow), m (mangenta), c (cyan)⋆ Weitere Strich-Arten: - (Linie) , : (gepünktelt), -. (Linie und gepünktelt), −− (gestrichelt)⋆ Weitere Zeichen-Arten: . (Pünktchen) , o (Kreischen), x (Kreuzchen), *, d, v, ,̂ p, h, <, >, . . .
Mit jedem Plot-Befehl, wird das Plot-Fenster ganz neu gezeichnet. Um altePlot-Ausgaben zu behalten, den Befehl hold on ausführen.Um wieder pro Plot-Befehl eine Plot-Ausgabe zu sehen, den Befehl hold off ausführen.Man kann das Ausgabefenster (“figure”) wechseln mit dem Befehl figure(i), wobei i dieFensternummer angibt. Normalerweise wird immer Fenster 1 benutzt, d.h. figure(1).Achsen können logarithmisch dargestellt werden:◮ für eine logarithmische y -Achse: semilogy◮ für eine logarithmische x-Achse: semilogx◮ für logarithmische x- und y -Achsen: loglog
Einführung in die Numerische Mathematik (Numerik 0)Dr. Katja Mombaur, WS 2006/07
Helke Hesse, Thomas DunneInstitut für Angewandte Mathematik, Universität Heidelberg
20 /23
Matlab - eine kurze Einführung
Hilfe
In Matlab:◮ help eingeben◮ für Hilfe zu einem bestimmten Befehl: help befehl◮ oder ausführlicher: doc befehl