Matlab - eine kurze Einführung Helke Karen Hesse, Thomas Dunne helke.hesse@iwr.uni-heidelberg.de, thomas.dunne@iwr.uni-heidelberg.de 13.11.2006 1 /
Gliederung Überblick Grundlegende Syntax Variablen Vektoren Matrizen Logische Vergleiche Operatoren Schleifen Dateien: Skripte und Funktionen Funktionen Plotten Hilfe Software & freie Alternativen 2 /
Ü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 3 /
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 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 4 /
Variablen II Wert zuordnen mit Semikolon >> a = 3.14159; >> Wert zuordnen ohne Semikolon >> a = 3.14159 a = 3.14159 >> Mehrere Zuordnungen (oder Befehle) in einer Zeile nur mit Semikolon >> a = 3.14159;b = 2.71828;c = a + b;d = a b; >> 5 /
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 = @ Eingabe spezieller Vektoren: a = 1 : 4 liefert den Vektor a = ` 1 2 3 4 a = 1 : 2 : 5 liefert den Vektor a = ` 1 3 5 z } { Schrittweite 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 = a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 a9 a10, {z } dann ist der Subvektor a(5 : 8) = (a 5 a 6 a 7 a 8). 0 1 2 3 1 A 6 /
Vektoren II 1 Strich transponiert, wenn a = (1 2), dann a = 2 Multiplizieren von Vektoren a = [1; 2; 3], b = [4; 5; 6] «. 0 Komponentenweise: a. b = @ 1 4 1 2 5 A 3 6 Skalarprodukt a T b : a b = 1 4+2 5+3 6 0 Matrixprodukt ab T : a b = @ 1 4 2 5 3 6 2 4 2 5 2 6 3 4 3 5 3 6 1 A 7 /
Matrizen I «1 2 3 4 A = [1,2, 3,4;0,1, 0,0;0,0, 1,0] ergibt Matrix A = 1 0 0 0 1 0 Lesen bzw. Schreiben von A ij : a = A(i, j) bzw. A(i, j) = 5; «1 0 Einheitsmatrix: I = eye (3) erzeugt I = 1 0 0 0 1 «Nullmatrix: A = zeros (3) erzeugt A = 0 0 0 «Nullmatrix: A = zeros (3, 2) erzeugt A = 0 0 Nullvektor a = zeros (1,5) erzeugt a = ( 0 0 0 0 0 ) «Eins-Matrix: A = ones (3) erzeugt A = 1 1 1 Eins-Matrix: A = ones (2,3) erzeugt A = 1 1 1 Eins-Vektor a = ones (1,4) erzeugt a = ( 1 1 1 1 ) 8 /
Matrizen II A = eye(3), B = [1,2,3,4; 0,1,0,0; 0,0,1,0] 1 0 0 1 2 3 4 ergibt A = 0 1 0 und B = 0 1 0 0 0 0 1 0 0 1 0 0 Strich transponiert: B ergibt @ 1 0 0 2 1 0 3 0 1 4 0 0 1 A Multiplikation: A B = 1 0 0 0 1 0 0 0 1 1 2 3 4 0 1 0 0 0 0 1 0 Komponentenweise: B. B = 1 4 9 16 0 1 0 0 0 0 1 0 9 /
Matrizen III «1 2 3 4 A = [1,2, 3,4;0,1, 0,0;0,0, 1,0] ergibt Matrix A = 1 0 0 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 0 2 0 0 4 0 Lesen/Schreiben von A ij : 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) «30 Zugriff auf dritte Spalte von A als Spaltenvektor: A(:, 3) ergibt 1 Submatrix Az1,s1 A, wobei z1,s1 die Indizes der linken oberen Ecke der z2,s2 Submatrix sind, und z2,s2 die Indizes der rechten unteren Ecke. Zugriff mittels A(z1:z2, s1:s2). Von A ist die Submatrix A1,2 A 1,3 A 2,2 A gesucht, 2,3 A(1:2, 2:3) liefert 2 3 1 0 10 /
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)] «1 0 0 10 1 0 0 ergibt: B == 0 1 0 11 und C == 0 1 0 0 0 1 12 0 0 1 20 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 die Hauptdiagonale. Die erste ND (k = 1) ist die erste rechts oberhalb davon. Die minus erste ND (k = 1) ist die erste links unterhalb davon. ( Also: triu(a) == triu(a, 0), tril(a) == tril(a, 0)) 1 5 9 13 A = reshape(1:16, 4,4) ergibt A == 2 6 10 14 3 7 11 15 4 8 12 16 1 5 9 13 1 0 0 0 triu(a) = 0 6 10 14 0 0 11 15 und tril(a) = 2 6 0 0 3 7 11 0 0 0 0 16 4 8 12 16 0 5 9 13 1 5 0 0 triu(a,1) = 0 0 10 14 0 0 0 15 und tril(a, 1) = 2 6 10 0 3 7 11 15 0 0 0 0 4 8 12 16 11 /
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) 12 /
Operatoren Addieren, Subtrahieren, Multiplizieren, Dividieren: +,,,/ Potenzieren: xˆp, oder power(x, p) == x p, 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./B Das 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. «1 4 7 A=reshape(1:9,3,3) ergibt A = 2 5 8 3 6 9 «1 4 7 A(2:3, 1:2) = A(2:3, 1:2) 10 ergibt A = 20 50 8 30 60 9 13 /
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; 14 /
Dateien für Skripte und Funktionen Um Zeit zu sparen, können Befehle in Dateien gespeichert werden. Die Dateien hören immer 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 da steht 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 15 /
Skripte Alle Befehle in der Datei werden aufgerufen durch den Aufruf der Datei in Matlab. Heisst die 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. 16 /
Funktionen Es können beliebig viele Funktionen in eine Datei. Aber nur die erste Funktion kann von Aussen aufgerufen werden über den Namen der Datei Dafür kann die erste Funktion in der Datei die anderen Funktionen in der selben Datei aufrufen. Es können NUR Funktionen in der Datei definiert werden. Ausserhalb der Funktionen dürfen sonst keine Befehle stehen 17 /
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)).ˆ2 return; (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)... 18 /
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 0 1 v 1 0 Diagonal-Matrix mit den Werten des Vektors v füllen: diag(v) == @... A 0 v n 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)) 19 /
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 alte Plot-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 die Fensternummer 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 20 /
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 21 /
Software & Freie Alternativen Studenten-Version ist im Online-Shop des URZ der Universität Heidelberg erhältlich für 87,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/p13511203513stud 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) 22 /
ENDE /