16
Einf¨ uhrung in Pierre Bayerl 19. November 2001

Einfuhrung in - Universität · PDF fileMatlab Numerische Manipulation von Matrizen und Vektoren und deren Visualisierung. Verwendung: { Interaktive Eingabe von Befehlen { Skriptprogramme

Embed Size (px)

Citation preview

Page 1: Einfuhrung in - Universität · PDF fileMatlab Numerische Manipulation von Matrizen und Vektoren und deren Visualisierung. Verwendung: { Interaktive Eingabe von Befehlen { Skriptprogramme

Einfuhrung in

Pierre Bayerl

19. November 2001

Page 2: Einfuhrung in - Universität · PDF fileMatlab Numerische Manipulation von Matrizen und Vektoren und deren Visualisierung. Verwendung: { Interaktive Eingabe von Befehlen { Skriptprogramme

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

Page 3: Einfuhrung in - Universität · PDF fileMatlab Numerische Manipulation von Matrizen und Vektoren und deren Visualisierung. Verwendung: { Interaktive Eingabe von Befehlen { Skriptprogramme

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

Page 4: Einfuhrung in - Universität · PDF fileMatlab Numerische Manipulation von Matrizen und Vektoren und deren Visualisierung. Verwendung: { Interaktive Eingabe von Befehlen { Skriptprogramme

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

Page 5: Einfuhrung in - Universität · PDF fileMatlab Numerische Manipulation von Matrizen und Vektoren und deren Visualisierung. Verwendung: { Interaktive Eingabe von Befehlen { Skriptprogramme

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

Page 6: Einfuhrung in - Universität · PDF fileMatlab Numerische Manipulation von Matrizen und Vektoren und deren Visualisierung. Verwendung: { Interaktive Eingabe von Befehlen { Skriptprogramme

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

Page 7: Einfuhrung in - Universität · PDF fileMatlab Numerische Manipulation von Matrizen und Vektoren und deren Visualisierung. Verwendung: { Interaktive Eingabe von Befehlen { Skriptprogramme

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

Page 8: Einfuhrung in - Universität · PDF fileMatlab Numerische Manipulation von Matrizen und Vektoren und deren Visualisierung. Verwendung: { Interaktive Eingabe von Befehlen { Skriptprogramme

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

Page 9: Einfuhrung in - Universität · PDF fileMatlab Numerische Manipulation von Matrizen und Vektoren und deren Visualisierung. Verwendung: { Interaktive Eingabe von Befehlen { Skriptprogramme

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

Page 10: Einfuhrung in - Universität · PDF fileMatlab Numerische Manipulation von Matrizen und Vektoren und deren Visualisierung. Verwendung: { Interaktive Eingabe von Befehlen { Skriptprogramme

“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

Page 11: Einfuhrung in - Universität · PDF fileMatlab Numerische Manipulation von Matrizen und Vektoren und deren Visualisierung. Verwendung: { Interaktive Eingabe von Befehlen { Skriptprogramme

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

Page 12: Einfuhrung in - Universität · PDF fileMatlab Numerische Manipulation von Matrizen und Vektoren und deren Visualisierung. Verwendung: { Interaktive Eingabe von Befehlen { Skriptprogramme

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

Page 13: Einfuhrung in - Universität · PDF fileMatlab Numerische Manipulation von Matrizen und Vektoren und deren Visualisierung. Verwendung: { Interaktive Eingabe von Befehlen { Skriptprogramme

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

Page 14: Einfuhrung in - Universität · PDF fileMatlab Numerische Manipulation von Matrizen und Vektoren und deren Visualisierung. Verwendung: { Interaktive Eingabe von Befehlen { Skriptprogramme

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

Page 15: Einfuhrung in - Universität · PDF fileMatlab Numerische Manipulation von Matrizen und Vektoren und deren Visualisierung. Verwendung: { Interaktive Eingabe von Befehlen { Skriptprogramme

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

Page 16: Einfuhrung in - Universität · PDF fileMatlab Numerische Manipulation von Matrizen und Vektoren und deren Visualisierung. Verwendung: { Interaktive Eingabe von Befehlen { Skriptprogramme

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