Upload
trinhdieu
View
261
Download
0
Embed Size (px)
Citation preview
Matlab - eine kurze Einführung
Matlab - eine kurze Einführung
Helke Karen Hesse, Thomas [email protected],
13.11.2006
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
1 / 23
Matlab - eine kurze Einführung
Gliederung
ÜberblickGrundlegende Syntax◮ Variablen◮ Vektoren◮ Matrizen◮ Logische Vergleiche◮ Operatoren◮ Schleifen◮ Dateien: Skripte und Funktionen◮ Funktionen◮ Plotten◮ Hilfe◮ Software & freie Alternativen
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
2 / 23
Matlab - eine kurze Einführung
Überblick
Matlab = MATrix-LABoratory◮ Matrixorientiertes Softwaresystem
Berechnung◮ viele grundlegende Funktionen stehen zur Berechnung zur Verfügung
Visualisierung◮ vielfältige, einfache realisierbare Datenausgabe
Programmierung◮ Möglichkeit, eigene Programme in Matlab zu erstellen
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
3 / 23
Matlab - eine kurze Einführung
Variablen I
Variablen werden angelegt durch Zuordnung von Werten.
Variablenamen müßen mit einem Buchstaben anfangen, ansonsten dürfen Buchstaben,Zahlen und Unterstriche benutzt werden.
Es wird zwischen Groß- und Kleinschreibung unterschieden, d.h. A 6= a
Variable anlegen und Wert zuordnen>> a = 3.14159
Variable ausgeben:>> a
ergibt:a =
3.14159
“Schöner” ausgeben:>> disp([′Variable a =′, num2str(a)])ergibt:Variable a = 3.14159
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
4 / 23
Matlab - eine kurze Einführung
Variablen II
Wert zuordnen mit Semikolon>> a = 3.14159;>>
Wert zuordnen ohne Semikolon>> a = 3.14159a =
3.14159>>
Mehrere Zuordnungen (oder Befehle) in einer Zeile nur mit Semikolon>> a = 3.14159;b = 2.71828; c = a + b; d = 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
5 / 23
Matlab - eine kurze Einführung
Vektoren I
Explizite Eingabe eines Zeilenvektors: a = [1, 2, 3] liefert den Vektor a =`
1 2 3´
Explizite Eingabe eines Spaltenvektors: b = [1; 2; 3] liefert den Vektor b =
0
@
123
1
A
Eingabe spezieller Vektoren:◮ a = 1 : 4 liefert den Vektor a =
`1 2 3 4
´
◮ a = 1 : 2z }| {
Schrittweite
: 5 liefert den Vektor a =`
1 3 5´
Die Länge eines Vektors a wird mit length(a) abgefragt◮ Wenn z.B. a = 1 : 10, dann ist die Länge des Vektors: length(a) = 10
Zugriff auf i-te Komponente des Vektors a mit “Klammern” : a(i)◮ Wenn z.B. a = 1 : 10 = (1 2 3 4 5 6 . . . 9 10),◮ dann ist der fünfte Eintrag: a(5) ր
Zugriff auf “Subvektor” des Vektors a von Index i bis j : a(i : j)
◮ Wenn a =
a1 a2 a3 a4 a5 a6 a7 a8| {z }
a9 a10
!
,
◮ dann ist der “Subvektor” a(5 : 8) = (a5 a6 a7 a8) .
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
6 / 23
Matlab - eine kurze Einführung
Vektoren II
“Strich” transponiert, wenn a = (1 2), dann a′ =
„
12
«
.
Multiplizieren von Vektoren a = [1; 2; 3], b = [4; 5; 6]
◮ Komponentenweise: a. ∗ b =
0
@
1 ∗ 42 ∗ 53 ∗ 6
1
A
◮ Skalarprodukt aT b : a′ ∗ b = 1 ∗ 4 + 2 ∗ 5 + 3 ∗ 6
◮ Matrixprodukt abT : a ∗ b′ =
0
@
1 ∗ 4 2 ∗ 5 3 ∗ 62 ∗ 4 2 ∗ 5 2 ∗ 63 ∗ 4 3 ∗ 5 3 ∗ 6
1
A
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
12 /23
Matlab - eine kurze Einführung
Operatoren
Addieren, Subtrahieren, Multiplizieren, Dividieren: +,−, ∗, /
Potenzieren: x p̂ , oder power(x, p) == xp ,
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.
Skalare Funktionen◮ sin, cos, tan, asin, acos, atan, exp, log(Basis e), log2(Basis 2), log10(Basis 10),
abs, sqrt, sign(Vorzeichen), factorial , round(runden),floor(immer Abrunden), ceil(immer Aufrunden),. . .
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.
◮ Normen:⋆ Spaltennorm: norm(A, 1) == max(sum(abs(A))⋆ Zeilennorm: norm(A, inf ) == max(sum(abs(A′))⋆ Frobeniusnorm: norm(A, ′fro′) == norm(A(:)) == sqrt(sum(diag(A′ ∗ A)))⋆ Größter Singulärwert in S: norm(A, 2) = max(svd(A))
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
Online:◮ Wikipedia: http://de.wikipedia.org/wiki/MATLAB (Deutsch, kurz)◮ Wikipedia: http://en.wikipedia.org/wiki/MATLAB (English, lang)◮ Wikipedia Buch: http://en.wikibooks.org/wiki/Programming:MATLAB◮ Buch: http://en.literateprograms.org/Category:Programming_language:Matlab◮ Mathworks: http://www.mathworks.com/access/helpdesk/help/techdoc/learn_matlab/
◮ Grundsätzlich hilft immer: Google⋆ : google:matlab primer⋆ : google:matlab tutorial⋆ : google:matlab Einführung
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
21 /23
Matlab - eine kurze Einführung
Software & Freie Alternativen
Studenten-Version ist im Online-Shop des URZ der Universität Heidelberg erhältlich für87,00 EUR
◮ Infos: http://web.urz.uni-heidelberg.de/Unterstuetzung/SoftwareVerteilung#ask
◮ Online-Shop: https://urz.asknet.de/cgi-bin/home
◮ Matlab im Shop: https://urz.asknet.de/cgi-bin/product/P13511!203513!STUD
Es gibt freie Software, die (in Grenzen) kompatibel ist.
◮ http://de.wikipedia.org/wiki/MATLAB#Alternativen
◮ http://www.gnu.org/software/octave/ (für Linux, Mac, Windows)
◮ http://freemat.sourceforge.net/ (für Linux, Mac, Windows)
◮ http://www.scilab.org/ (u.a. für Linux, Mac, Windows)
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
22 /23