Upload
vuongkhuong
View
220
Download
1
Embed Size (px)
Citation preview
Einfuhrung in
Pierre Bayerl
19. November 2001
MatlabNumerische Manipulation von Matrizenund Vektoren und deren Visualisierung.
• Verwendung:
– Interaktive Eingabe von Befehlen– Skriptprogramme (“Batch-Dateien”)– Funktionen (lokale Variablen, Parameter und
Ruckgabewert)– MEX-Funktionen (Einbinden von C-Code)
• Nahezu alles wird durch Matrizen/Vektoren darge-stellt!
• Sehr kompakter Programmierstil.
– Kurze Entwicklungszeit– Machtige Befehle
(Manipulation vieler Daten mit einem einzigenBefehl)
– Keine Variablendeklaration
1
Ubersicht
• Verwenden der MatlabumgebungWie starte ich Matlab?
• SkriptprogrammeWie schreibe ich ein Programm?
• Matrizen/VektorenErzeugen – Manipulieren
• Programmflußsteuerungif – then – for – while
• “Vektorisierung”“Matlab-optimierte Programme”
• Visualisierung2D Plots – 3D Plots – Bilddarstellungen
2
Starten der Matlab-Umgebung
• Matlab 5 (externer Editor, z.B. nedit)mycomputer:˜/work > nedit example.m & (externen Editor starten)
mycomputer:˜/work > matlab (Matlab 5 in der Shell starten)
• Matlab 6 (interner Editor)mycomputer:˜/work > use matlab6 (Matlab 6 aktivieren, Linux-Pool)
mycomputer:˜/work > matlab (Dateien uber das Menu offnen)
3
SkriptprogrammeSkriptprogramme = Matlab’s Batchdateien
• In Skriptprogrammen konnen alle Befehle verwendetwerden, die auch interaktiv zur Verfugung stehen.
• Skriptprogramme sind ASCII-Dateien (*.m)z.B. “Programmname.m”.
• Aufruf in Matlab: Matlab> Programmname
• Kommentare mit “%”
• Nach jedem Befehl ein optionales Semikolon.Ohne Semikolon wird das Ergebnis ausgegeben.
Datei test1.m:x = 3; % Kommentar:y = 2; % Variablenzuweisunga = x+y % Ohne ; Ausgabe
Aufruf in Matlab:
Matlab> test1
a = 5
4
Matrizen - Initialisierung
• Vorgabe von Matrizen:
Matlab> A=[1 3 5 7; 2 4 6 8] A =
(1 3 5 72 4 6 8
);
Elemente Zeilenweise in Eckigen Klammern vorge-ben (Zeilen mit Semikolon getrennt).
• Null- bzw. Eins-Matrizen:
Matlab> B = ones(2,4) B =
(1 1 1 11 1 1 1
);
Matlab> C = zeros(1,3) C =(
0 0 0)
;
Angabe der Matrixdimensionen: Zeile, Spalte.
• Zahlenreihen: von:schrittweite:bis bzw. von:bisMatlab> D = 1:5 D =
(1 2 3 4 5
);
Matlab> E = 5:-0.5:4 E =(
5 4.5 4)
;
• Diagonalmatrizen aus 1D-Matrizen erzeugen.
Matlab> F = diag(1:3) F =
1 0 00 2 00 0 3
;
5
Matrizen - Zugriff auf die Elemente
• Zugriff auf Einzelelemente: A(zeile, spalte) = wertMatlab> A = zeros(2,4);Matlab> A(2,3) = 5 A =
(0 0 0 00 0 5 0
);
• Indizes beginnen bei 1.
• Beim uberschreiten der Indexgrenzen wird die Ma-trixgroße angepasst:
Matlab> A(3,1)=2 A =
0 0 0 00 0 5 02 0 0 0
;
• Matrixbereiche ansprechen:
Matlab> A(1:2,1:2) = ones(2,2) A =
1 1 0 01 1 5 02 0 0 0
;
• Matrixbereiche mit einem skalaren Wert fullen:
Matlab> A(1:end,[2 4]) = 9 A =
1 9 0 91 9 5 92 9 0 9
;
(“end” in diesem Kontext: max. Indexwert in entsprechender Dimension)
6
Vektoren - 1D-Matrizen
• Vektoren = 1D-Matrizen
• Spaltenvektor 6= Zeilenvektor
• Vektoren/Matrizen transponieren: A’Spaltenvektor = Zeilenvektor’Matlab> A = 1:3Matlab> B = A’ A =
(1 2 3
);B =
123
;
• Elementweiser Zugriff: A(index)=wertMatlab> C = 1:5;Matlab> C(3) = 100 C =
(1 2 100 4 5
);
7
Programmflußsteuerung
• Bedingte Ausfuhrung eines Programmblocks: while-Schleife und if-else-Block:
while Bedingung...end
a = 0;while ( a < 10 )
a = a + 1end
if Bedingung...elseif Bedingung...else...end
• for-Schleife:
for Variable = Zeilenvektor...end
forx=1:10
xend
Es werden alle Elemente des Zeilenvektors mit derIndexvariable durchlaufen.
• Vergleichsoperatoren:<,> kleiner, großer<=,>= kleinergleich, großergleich
== gleich~= ungleich
8
“Vektorisierung”Matlab-optimiert programmieren
• (for-) Schleifen werden sehr ineffizient ausgefuhrt !!⇒ Schleifen vermeiden wo immer es geht !!
• Nahezu alle Funktionen akzeptieren sowohl skalareals auch vektorielle Eingaben.Statt fur alle Elemente eines Vektors eine Ope-ration einzeln durchzufuhren, kann die Operationeinmal auf dem gesamten Vektor angewandtwerden:
x = 1:10;y = sqrt(x); statt
for x = 1:10y = sqrt(x);
end
• Bei Vergleichsoperatoren werden die Elemente ein-zeln verglichen
• Bei Multiplikation (*), Division(/) und Potenz(ˆ)wird ein Punkt (.) vor den Operator gesetzt.Matlab> A = (1:4).ˆ2 A =
(1 4 9 16
);
9
Visualisierung
• 2D Plots
• 3D Plots
• Graustufenbilder
• Darstellung mehrerer Abbildungen
0 1 2 3 4 5 6 7−1
−0.5
0
0.5
1N=8 Punkte
0 1 2 3 4 5 6 7−1
−0.5
0
0.5
1N=100 Punkte
−10−5
05
10
−10
0
10−0.5
0
0.5
1
15x15 Punkte
−10−5
05
10
−10
0
10−0.5
0
0.5
1
41x41 Punkte
0 1 2 3 4 5 6 7−1
−0.5
0
0.5
1sin(x2)
0 1 2 3 4 5 6 7−1
−0.5
0
0.5
1cos(x2)
10
Visualisierung - 2D Plots
• plot(x,y): Plotten von (xi, yi)-Wertepaaren:
Matlab> t = 0:0.01:2*pi;
Matlab> y = sin(t);
Matlab> plot(t,y);
• Linienstil und Farbe:plot(x,y,’format’);→ siehe help plot.
• Achsenbeschriftung: xlabel(’...’) und ylabel(’...’)
• Titel des Plots: title(’...’)
• Andern des dargestellten Wertebereichs:axis([xmin, xmax]) bzw. axis([xmin, xmax, ymin, ymax])
11
Visualisierung - 3D Plots
• mesh(X,Y,Z): Plotten eines (Xij, Yij, Zij)-Gitters:
Matlab> X = ...
Matlab> Y = ...
Matlab> Z = f(X,Y)
Matlab> mesh(X,Y,Z);
(Die Nachbarschaf-ten innerhalb derMatrizen ergeben die darzustellenden Gitterlinien.)
• Matlab> x = linspace(-10,10,40);→ x = (−10, . . . , 10), bestehend aus 40 Elementen. y analog.
• Matlab> [X,Y] = meshgrid(x,y);
→ X =
−10 . . . 10... . . . ...−10 . . . 10
;Y =
−10 . . . −10... . . . ...
10 . . . 10
;
• Matlab> R = sqrt(X.ˆ2+Y.ˆ2)+0.1;Matlab> Z = sin(R)./R; % (sinc-Funktion)Matlab> mesh(X,Y,Z)
12
Visualisierung - Bilder
• imshow(I,[]): Matrix I als Graustufenbild darstellen.
Dem kleinsten Wert wirdschwarz, dem großten Weißzugeordnet. (Hier ist I diesinc-Funktion des vorherigenBeispiels)Weitere Infos: help imshow
• Bilder laden:A = imread(’bildname.tif’);Da imread eine uint8-Matrix liefert, sollte eine Typ-umwandlung stattfinden: A = double(A);
• Matlab> B = double(imread(’lena.tif’));Matlab> imshow(B,[])Matlab> imshow(B(117:146,100:194),[])
→
13
Darstellung mehrerer AbbildungenFenster – Uberlagerungen
• figure < n >: Wahlt das Fenster < n > als graphi-sches Ausgabefenster an.
(Existiert dieses Fenster nicht, so wird ein neuesgeoffnet.)
• figure: Offnet ein neues Fenster.
• hold on: Im aktuellen Fenster werden von nun anneue Plotbefehle Uberlagert.
Matlab> x= linspace(0,2*pi,100);
Matlab> y1 = sin(x);
Matlab> y2 = cos(x);
Matlab> plot(x,y1,’k-’);
Matlab> hold on;
Matlab> plot(x,y2,’k.’);
• hold off: Neue Plotbefehle uberschreiben vorhande-ne Abbildungen. (default-Einstellung)
14
Darstellung mehrerer Abbildungensubplots
Matlab> subplot(3,2,1);
Matlab> plot(x1,y1);
Matlab> title(’...’);
Matlab> ...
Matlab> subplot(3,2,2);
Matlab> plot(x2,y2);
Matlab> ...
Matlab> ...
Matlab> subplot(3,2,6);
Matlab> plot(x6,y6);
Matlab> title(’...’);
• subplot(y, x, index) teilt das Ausgabefenster iny × x Unterbereiche auf.
Mit index kann man den aktiven Unterbereich se-lektieren, auf dem gezeichnet wird.
• Der index lauft dabei zeilenweise durch die Sub-plots.
15