Matlab-Kurs

1

Lineare Algebra mit Matlab Blockkurs am Ende des SS 2002 3. Semester Mm

www.math.tu-freiberg.de/kurse/lamatlab TU Bergakademie Freiberg Oliver Ernst c

Oliver Ernst 2001

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

2

Inhalt

Tag1. Literatur. Geschichtliches. Starten von Matlab. Pfade. Matlab als Taschenrechner. M-Files. Tag2. Graphik: 2 und 3D Grafik, Handle Graphics, Animation. Funktionen. Weiteres zu M-Dateien. Tag3. Numerische Lineare Algebra. Dunn ¨ besetzte Matrizen. Ein- und Ausgabe. Fehlersuche. Weitere Datentypen. Optimierung von MDateien.

0. Vorbemerkungen

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

3

Literatur

Matlabdokumentation. hervorragende Online-Dokumentation ist Bestandteil von MATLAB; einzelne Manuale auch als PDF-Datei vor¨ handen oder erhaltlich bei http://www.mathworks.com. Matlab Guide. D. J. Higham und N. J. Higham. SIAM, Philadelphia. 2000. Diesem Text sind die meisten Beispiele der Kurses entnommen. Weitere Bucher. ¨ Unzahl von weiteren Buchern uber Matlab existiert, ¨ ¨ ¨ Aufzahlung z.B. auf MathWorks-Webseite. Kurzanleitungen. diverse Kurzanleitungen auf dem Netz vorhanden, Links auf der Kurswebseite. 0. Vorbemerkungen

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

4

Geschichtliches

LINPACK, EISPACK. (Mitte der 70er Jahre) FORTRAN-Pakete zur ¨ Losung linearer Gleichungssysteme und von Eigenwertproblemen. Stand der Kunst im Bereich numerischer Software. MATLAB 0. (1978) Aufsatz auf LINPACK und EISPACK, in FORTRAN geschrieben fur ¨ Lehrzwecke. MATLAB 1. (1984) Neufassung in C, kommerzielles Produkt. MATLAB 6.5 (2002) aktuelle Version (Release 13).

0. Vorbemerkungen

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

5

Besonderheiten von MATLAB • Integriertes interaktives System fur ¨ numerische Rechnung. ¨ • Schnelle Programmentwicklung mittels hoherer Programmiersprache. Debugger. Profiler. OOP. • Datenstrukturen erfordern minimale Beachtung (keine Deklaratio¨ nen notig). ¨ • Aufwandige Graphik steht zur Verfugung. ¨ ¨ • MATLAB (und damit MATLAB-Programme) laufen auf allen gangigen Plattformen: Windows, Linux, SGI, SUN, HP, DEC, IBM RS6000, MAC OS (bis Version 5.2.1 und wieder ab 6.5) • Erweiterungen fur ¨ spezielle Anwendungen durch Toolboxen 0. Vorbemerkungen

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

6

Starten von MATLAB • Unter Windows: am Besten durch Anklicken einer Verknupfung (De¨ ren Pfad vorher auf geeignetes Verzeichnis setzen). START-Knopf geht auch. • Eingabe von Kommandos im Kommandofenster (Prompt: >>). ¨ man durch • Dokumentation erhalt help Gliederung der Kommando-Verzeichnisse help Hilfe zu Kommando doc startet Dokumentations-Browser.

0. Vorbemerkungen

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

7

Letzte Hinweise vor der ersten Sitzung . . . • MATLAB unterscheidet Groß- und Kleinschreibung. • Tippen eines Variablen- oder Funktionsbezeichners liefert deren Wert. • Semikolon nach Kommando unterdruckt diese Ausgabe. ¨ • Mit den ↑- und ↓-Tasten kann man durch vorangehende Befehle scrollen. Tippen der ersten Zeichen vorangehender Befehle gefolgt ¨ von ↑-Taste liefert den nachsten zuruckliegenden Befehl, der mit ¨ diesen Zeichen beginnt. • MATLAB wird durch quit oder exit wieder verlassen. 0. Vorbemerkungen

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

8

1. Grundlagen

1.1 MATLAB als Taschenrechner 1.2 M-Dateien

1. Grundlagen

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

9

Arbeiten an der Kommandozeile

>> a = [1 2 3] a = 1

2

3

Unterdruckung von Leerzeilen: format compact. ¨ >> c = [4; 5; 6] c = 4 5 6 1.1 MATLAB als Taschenrechner

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

10

Matrixmultiplikation

>> a*c ans = 32 >> A = c*a A = 4 8 5 10 6 12

12 15 18

>> a*a ??? Error using ==> * Inner matrix dimensions must agree.

1.1 MATLAB als Taschenrechner

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

11

Komponentenweise Multiplikation

>> a.*b ans = 1

8

27

>> b = a.^2 b = 1 4

9

¨ Operationen. Analog andere binare

1.1 MATLAB als Taschenrechner

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

12

Komponentenweise Funktionsauswertung

>> exp(a) ans = 2.7183 >> log(ans) ans = 1 2

7.3891

20.0855

3

¨ stets letztes nichtzugewiesenes Beachte: ans enthalt Zwischenergebnis. >> sqrt(a) ans = 1.0000 1.1 MATLAB als Taschenrechner

1.4142

1.7321 TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

13

Zahldarstellung ¨ IEEE Intern: doppelt genaue (64 Bit) Gleitkommazahlen (gemaß 754) ¨ Ausgabe: defaultmaßig 5 Dezimalstellen. ¨ Dieses Standardformat kann mittels format gandert werden: >> format long >> sqrt(a) ans = 1.00000000000000 >> format >> 2^(-24) ans = 5.9605e-008 1.1 MATLAB als Taschenrechner

1.41421356237310

1.73205080756888

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

14

Mehrere Kommandos in einer Zeile: >> sum(b), mean(c) ans = 14 ans = 5 Vordefinierte Konstanten: π und i (oder j) >> i,j,pi ans = 0 + 1.0000i ans = 0 + 1.0000i ans = 3.1416 y = tan(pi/6); 1.1 MATLAB als Taschenrechner

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

15

Matrizen von Hand, LGSe >> B = [-3 0 1; 2 5 -7; -1 4 8] B = -3 0 1 2 5 -7 -1 4 8 >> x = B\c x = -1.3717 1.3874 -0.1152 >> norm(c-B*x) ans = 8.8818e-016 1.1 MATLAB als Taschenrechner

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

16

Eigenwerte >> e = eig(B) e = -2.8601 6.4300 + 5.0434i 6.4300 - 5.0434i >> [V,D] = eig(B) V = 0.9823 -0.1275 0.1374 D = -2.8601 0 0 1.1 MATLAB als Taschenrechner

0.0400 + 0.0404i -0.7922 0.1733 + 0.5823i

0.0400 - 0.0404i -0.7922 0.1733 - 0.5823i

0 6.4300 + 5.0434i 0

0 0 6.4300 - 5.0434i TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

17

Matrizen zusammenbauen >> C = [A,[8;9;10]], D = [B; a] C = 4 8 12 8 5 10 15 9 6 12 18 10 D = -3 0 1 2 5 -7 -1 4 8 1 2 3 . . . und auf Elemente zugreifen: >> C(2,3) ans = 15 1.1 MATLAB als Taschenrechner

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

18

Funktionen zur Matrixkonstruktion >> I3 = eye(3), Y = zeros(3,5), Z = ones(2) I3 = 1 0 0 0 1 0 0 0 1 Y = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Z = 1 1 1 1

1.1 MATLAB als Taschenrechner

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

19

Zufallsmatrizen Zwei Zufallsgeneratoren: gleichverteilte Zahlen in (0, 1) und N (0, 1)-verteile Zahlen. Rucksetzen auf definierten Zustand: ¨ >> rand(’state’,20), randn(’state’,20) . . . und Matrizen erzeugen >> F = rand(3), G = randn(1,5) F = 0.7062 0.3586 0.8468 0.5260 0.8488 0.3270 0.2157 0.0426 0.5541 G = 1.4051 1.1780 -1.1142 1.1 MATLAB als Taschenrechner

0.2474

-0.8169 TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

20

Extrem nutzlich: ¨ der Doppelpunkt >> v = 1:6 v = 1 2

3

4

5

>> w = 2:3:10, y = 1:-0.25:0 w = 2 5 8 y = 1.0000 0.7500 0.5000

1.1 MATLAB als Taschenrechner

6

0.2500

0

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

21

>> zeilen = 1:2, spalten = 3:4, C(zeilen,spalten) zeilen = 1 2 spalten = 3 4 ans = 12 8 15 9 >> D(2,:), D(:,3) ans = 2 5 -7 ans = 1 -7 8 3 1.1 MATLAB als Taschenrechner

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

22

Der Arbeitsbereich (Workspace) Alle bisher zugewiesenen Variablen sind im Arbeitsbereich sichtbar. >> who Your variables are: A Z

C ans

F c

I3 v

Y x

a

b

e

w

y B

D

G

¨ clear a loscht a aus dem Arbeitsbereich. ¨ clear loscht den gesamten Arbeitsbereich. ¨ whos gibt eine detailliertere Ubersicht.

1.1 MATLAB als Taschenrechner

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

23

Kontrollstrukturen, z.B. for-Schleifen Berechnung des folgenden Kettenbruchs (von unten nach oben) 1

1+

1

1+ 1+

1 1 1+ 1+1

>> g=2; for k=1:4, g=1+1/g; end >> g g = 1.6250 >> (1+sqrt(5))/2 ans = 1.6180 1.1 MATLAB als Taschenrechner

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

24

Erste Bildchen >> t = 0:0.005:1; z = exp(10*t.*(t-1)).*sin(12*pi*t); >> plot(t,z) 0.8

0.6

0.4

0.2

0

−0.2

−0.4

−0.6

−0.8

1.1 MATLAB als Taschenrechner

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

25

>> hist(randn(1000,1)) 250

200

150

100

50

0 −4

1.1 MATLAB als Taschenrechner

−3

−2

−1

0

1

2

3

4

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

26

Ein etwas interessanteres Beispiel ¨ Wir erzeugen eine zufallige Fibonacci-Folge und untersuchen deren Wachstumsrate. >> >> >> >> >> >> >> >> >> >> >>

rand(’state’,100) x = [1 2]; for n = 2:999, x(n+1) = x(n) + sign(rand-0.5)*x(n-1); end semilogy(1:1000,abs(x)) c = 1.13198824; hold on semilogy(1:1000,c.^[1:1000]) hold off xlabel(’n’) ylabel(’|x(n)|’) title(’Zuf¨ allige Fibonaccifolge’)

1.1 MATLAB als Taschenrechner

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

27

Zufällige Fibonaccifolge

60

10

50

10

40

|x(n)|

10

30

10

20

10

10

10

0

10

0

1.1 MATLAB als Taschenrechner

100

200

300

400

500 n

600

700

800

900

1000

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

28

MATLAB-Programme Die Beispiele arten langsam in Tipparbeit aus. Abhilfe: (Script-) M-Files. • ASCII-Datei mit MATLAB-Kommandos, Name mit Endung .m • % leitet Kommentare ein. • Aufruf durch Tippen des Dateinamens (ohne Endung), muss im Matlab-Pfad sein • Alle Variablen im Arbeitsbereich sichtbar.

• Beispiele: collatz.m, collbar.m, mandel.m, lorenzde.m + lrun.m gasket.m + grun.m, barnsley.m, sweep.m 1.1 MATLAB als Taschenrechner

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

29

M-Dateien Es gibt zweierlei Arten von M-Dateien: Script M-Dateien Diese enthalten keine Ein- und Ausgabeparameter, die Variablen im Arbeitsbereich sind sichtbar. Funktions-M-Dateien Diese enthalten eine durch das Schlusselwort ¨ ¨ function eingeleitete Definitionszeile. Funktionen konnen Eingabeparameter entgegennehmen und Werte zuruckliefern. Alle Varia¨ blen sind lokal (es sei denn, sie wurden vorher explizit als global deklariert).

1.2 M-Dateien

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

30

M-Dateien und der MATLAB-Pfad Ausfuhrbare MATLAB-Kommandos bestehen aus ¨ • in den Interpreter fest eingabaute Kommandos (z.B. eig) und • M-Dateien im File-System. Der MATLAB-Pfad ist eine Liste von Verzeichnissen, in denen MATLAB nach M-Dateien sucht. path : gibt den aktuellen Wert des MATLAB-Pfades an addpath : fugt ¨ Verzeichnisse dem MATLAB-Pfad hinzu ¨ pathtool : offnet Dialogbox zur Manipulation des MATLAB-Pfades File → Set Path : wie pathtool 1.2 M-Dateien

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

31

M-Dateien und der MATLAB-Pfad what : listet die M-Dateien im aktuellen Verzeichnis what [name] : listet M-Dateien im Verzeichnis name lookfor [Stichwort]: durchsucht Pfad nach M-Dateien mit Stichwort im Help-Text type [name] : gibt Quelltext von name.m aus more on : schaltet type-Ausgabe auf seitenweise more off : schaltet dies wieder aus which [name] : gibt den vollen Pfadnamen zu name.m ¨ clear [name] : loscht name.m aus dem Speicher

1.2 M-Dateien

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

32

Funktions-M-Dateien • Dateiname = Funktionsname • Erste Zeile function [aus1,...,ausN] = name(in1,...,inN) • Zweite Zeile (”H1-Zeile”): %, gefolgt ohne Leerzeichen von Funktionsnamen in Großbuchstaben, dann ein oder mehrere Leerzeichen, dann Kurzbeschreibung. • Dieser Text, bis zur ersten Nichtkommentarzeile, wird auf die Anfra¨ ge help name ausgegeben. Bei Script-Dateien werden ahnlich alle Kommentarzeilen bis zur ersten Nichtkommentarzeile ausgegeben. • Sinvoll: Name des Verfassers, Datum von Erstellung und letzer ¨ Anderung hier als Kommentar vermerken. 1.2 M-Dateien

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

33

Funktions-M-Dateien Beispiel: function y = maxentry(A) %MAXENTRY Largest absolute value of matrix entries. % MAXENTRY(A) is the maximum of the absolute values % of the entries of A. y = max(max(abs(A)));

1.2 M-Dateien

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

34

Funktionen als Parameter ¨ Oft ist es notig, Funktionsnamen als Parameter zu ubergeben ¨ ¨ (numerische Integration, Losung von Differentialgleichungen). Dies ¨ geschieht seit MATLAB 6.0 durch das @-Symbol, in alteren Versionen ¨ durch Ubergabe einer Zeichenkette mit dem Namen der Funktion >> ezplot(@exp) >> ezplot(’exp’) ¨ Weitere Moglichkeiten >> ezplot(’x^2-1’) >> ezplot(inline(’exp(x)-1’))

1.2 M-Dateien

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

35

Unterfunktionen Neben der Hauptfunktion (die mit dem Namen der M-Datei) kann eine Funktions-M-Datei noch weitere Unterfunktionen enthalten. Diese sind nur fur ¨ die Hauptfunktion (und alle anderen Unterfunktionen in dieser Datei) sichtbar. Unterfunktionen sind in der Regel Hilfsfunktionen, die nur von der ¨ Hauptfunktion benotigt werden und daher nicht unbedingt in eine eigene M-Datei mussen. ¨

1.2 M-Dateien

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

36

Variable Anzahl von Parametern ¨ Manchmal ist es nicht moglich, im Voraus festzulegen, wieviele Einoder Ausgabeparameter eine Funktion entgegennehmen bzw. zuruckliefern soll. ¨ Dies kann mit Hilfe der Funktionen varargin und varargout bewerkstelligt werden. Beispiele: companb.m, moments.m

1.2 M-Dateien

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

37

Globale Variablen Hin und wieder (nie?) ist es erforderlich, Variablen als global zu ¨ erklaren, womit diese in allen Unterprogrammen sichtbar werden. Dies geschieht mit der Anweisung global A • Innerhalb einer Funktion sollten globale Variable vor deren ersten ¨ werden, idealerweise am Anfang der Datei. Verwendung erklart • Nach Konvention werden Bezeichner globaler Variabler aus Großbuchstaben gebildet. ¨ • Die Namen globaler Variabler sollten moglichst lang sein, um Kollisionen zu vermeiden. 1.2 M-Dateien

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

38

Rekursive Funktionen ¨ ¨ Funktionen in MATLAB konnen rekursiv sein, d.h. sie konnen sich selbst aufrufen. Beispiel: Koch-Kurve. (koch.m, kochBsp1.m, kochBsp2.m)

1.2 M-Dateien

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

39

Stilfragen Folgendes wird empfohlen: • Leerzeichen um = und logische Operatoren • Eine Anweisung pro Zeile (nicht immer) • Einrucken zur Betonung von for, if, switch und while Konstruk¨ tionen. • Matrizenbezeichner, die mit Großbuchstaben beginnen.

1.2 M-Dateien

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

40

¨ M-File Abhangigkeiten ¨ Mochte man selbst geschriebene M-Dateien an andere weitergeben, ¨ ist es oft notig, alle diejenigen M-Files zu bestimmen, welche vom gegebenen aufgerufen werden. Hierzu gibt es depfun(’myfun’) : druckt eine Liste aller durch myfun aufgerufenen M-Files. [Mfile,builtins]=depfun(’myfun’) druckt eine Liste der durch myfun aufgerufenen eingebauten M-Files und sonstigen aufgerufenen M-Files. inmem listet alle in den Speicher geladenen M-Files. ¨ clear functions loscht alle in den Speicher geladenen M-Files. 1.2 M-Dateien

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

41

Profiling Profiling bezeichnet hier die Bestimmung der Verteilung der Rechenzeit auf verschiedene Teile eines Programms. In MATLAB ¨ konnen die hierzu erforderlichen Messungen automatisch durchgefuhrt werden. ¨ Sinn und Zweck: • Bestimmung kritischer Abschnitte im Programm, welche die Rechenzeit dominieren • Identifizierung ineffizient programmierter Stellen, z.B. Anweisun¨ gen, die aus einer Schleife herausgezogen werden konnen. • Auffindung toter Zeilen“ im Programm (solche, die nie ausgefuhrt ¨ ” werden. 1.2 M-Dateien

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

42

Profiling Beispiel: Anwendung auf MATLABs Funktion membrane. >> >> >> >> >>

profile on A = membrane(1,50); profile report profile off profile plot

Die Anweisung profile report erzeugt eine Aufstellung der Ausfuhrungszeiten einzelner Zeilen im Programm und stellt diese in ¨ HTML-Format in einem installierten WWW-Betrachter dar. Durch profile plot wird ein Balkendiagramm erstellt, welches die Ausfuhrungszeiten aufgerufener Unterprogramme darstellt. ¨ 1.2 M-Dateien

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

43

Profiling Weiteres Beispiel: wir untersuchen die Funktion ops.m auf den relativen Zeitaufwand einzelner arithmetischer Operationen. >> >> >> >>

profile on -detail operator ops profile report profile off

1.2 M-Dateien

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

44

2 Matlab-Grafik

2.1 2D Grafik 2.2 3D Grafik 2.3 Spezielle Grafikarten 2.4 Speichern von Grafiken 2.5 Handle-Graphics 2.6 Animationen 2. Matlab-Grafik

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

45

Darstellung von Wertepaaren: plot Daten: x = [1.5 2.2 3.1 4.6 5.7 6.3 9.4] y = [2.3 3.9 4.3 7.2 4.5 3.8 1.1] plot(y) : verbindet Punkte (j, yj ) plot(x,y) : verbindet (xj , yj ) plot(x,y,Zeichenkette) : Spezifiziert Farbe, Strichart, Symbole, etwa plot(x,y,’r*--’) : rote Sternchen u. gestrichelte Linie (Siehe help plot fur ¨ alle Optionen.) >> >> >> >> >> >>

t = [0:20]/20*2*pi; s = sin(t); c = cos(t); plot(t,s,’g-’,t,c,’r--’) plot(t,[s;c]) plot([t;t]’,[s;c]’) plot(exp(i*t),’bp-’), axis equal plot(t,exp(i*t))

2.1 2D-Grafik

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

46

Weitere Einstellungen bei plot

¨ Festlegung der Eigenschaften LineWidth (Strichstarke, default 2) ¨ sowie MarkerSize (Symbolgroße, default 6): >> plot(x,y,’LineWidth’,2) >> plot(x,y,’p’,’MarkerSize’,10) Die Einheit hierbei ist Point=1/72 Zoll (inch). Bei Symbolen mit wohldefiniertem Inneren kann auch die Innenfarbe spezifiziert werden. >> plot(x,y,’s’,’MarkerEdgeColor’,’m’,’MarkerFaceColor’,’g’)

2.1 2D-Grafik

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

47

Logarithmische Achsenskalierung ¨ Exponentielle Zusammenhange werden bei logarithmischer ¨ Achsenskalierung durch eine Gerade dargestellt. In Matlab erhalt man dies durch Ersetzen von plot durch semilogx : logarithmische x-Achse, semilogy : logarithmische y-Achse, loglog : beide Achsen logarithmisch, welche ansonsten die gleiche Syntax besitzen. Beispiel: Fehler der Taylor-Approximation der Funktion f (x) = ex an der Stelle Null mit Schrittweiten h = 10−j , j = 0, 1, 2, 3, 4: Ef (h) = |1 + h + h2/2 − eh| ≈ Ch3, 2.1 2D-Grafik

h → 0. TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

48

Loglog-Beispiel

Script-Datei loglogBsp.m h = 10.^[0:-1:-4]; taylorFehler = abs(1+h+h.^2/2 - exp(h)); loglog(h,taylorFehler,’-’,h,h.^3,’k--’); xlabel(’h’) ylabel(’|Fehler|’) title(’Fehler der Taylorapproximation 2. Ordnung an exp(h)’) box off

2.1 2D-Grafik

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

49

Weitere nutzliche ¨ Graphik-Einstellungen

hold on : folgende Plots uber bestehende Plots zeichnen ¨ hold off : folgende Plots ersetzen bestehende Plots hold : wechselt zwischen diesen Modi hin und her ¨ clf : loscht aktuelles Grafikfenster ¨ figure : offnet neues Grafikfenster figure(n) : macht n-tes (bestehendes) Grafikfenster aktuell Neuerdings auch: Interaktives Editieren von Grafiken im ¨ Grafikfenster (Ausschnittvergroßerung, Einfugen von Pfeilen, Linien, ¨ Text etc.)

2.1 2D-Grafik

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

50

Einstellungen des Koordinatensystems: axis axis([xmin xmax ymin ymax]) : legt Koordinatebereich fest axis auto : automatische Bereichswahl axis equal : gleicher Skalierung aller Achsen axis square : macht Koordinatenbereich quadratisch axis tight : Koordinatengrenzen = Datenextrema xlim([xmin xmax]) : x-Bereich festlegen ylim([ymin ymax]) : y-Bereich festlegen Beispiel: >> >> >> >>

plot(fft(eye(17))) axis equal axis square axis off

2.1 2D-Grafik

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

51

¨ Beispiel 1 : Singularitat Wir zeichnen den Graphen einer Funktion mit zwei Polen, der erst ¨ durch Einschrankung des y-Achsenbereichs informativ wird. >> >> >> >>

x = linspace(0,3,500); plot(x,1./(x-1).^2 + 3./(x-2).^2) grid on ylim([0 50])

2.1 2D-Grafik

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

52

Beispiel 2: Epizykloid Wir zeichnen den Epizykloiden gegeben durch die Gleichung x(t) = (a + b) cos(t) − b cos((a/b + 1)t) y(t) = (a + b) sin(t) − b sin((a/b + 1)t) fur ¨ t ∈ [0, 10π] und a = 12, b = 5. Siehe Script-Datei epizykloidBsp.m.

2.1 2D-Grafik

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

53

Beispiel 3: Legendre-Polynome Wir erstellen ein Schaubild mit den Graphen ersten vier Legendre-Polynome P1(x) = x 3 2 1 P2(x) = x − 2 2 5 3 3 P3(x) = x − x 2 2 35 4 15 2 3 P4(x) = x − x + 8 4 8

Siehe Script-Datei legendreBsp.m. Beachte Verwendung der Funktionen legend,text sowie der Eigenschaft ’FontAngle’. 2.1 2D-Grafik

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

54

Beispiel 4: Bezier-Kurve Wir zeichnen die kubische Bezier-Kurve p(u) = (1 − u)3P1 + 3u(1 − u)2P2 + u2(1 − u)P3 + u3P4,

0 ≤ u ≤ 1,

¨ mit den vier Kontollpunkten P1, . . . , P4. Mittels fill farben wir das durch die vier Kontrollpunkte gegebene Kontrollpolygon. Siehe Script-Datei bezierBsp.m.

2.1 2D-Grafik

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

55

Mehrere Plots in einem Grafikfenster: subplot subplot(m,n,p) teilt das Grafikfenster in m ∗ n Teilfenster und macht das p-te (1 ≤ p ≤ nm) aktuell. Beispiel: >> subplot(2,2,1), >> subplot(2,2,2), >> subplot(2,2,3), >> subplot(2,2,4),

fplot(’exp(sqrt(x)*sin(12*x))’,[0 2*pi]) fplot(’sin(round(x))’,[0,10],’--’) fplot(’cos(30*x)/x’,[0.01 1 -15 20],’-.’) fplot(’[sin(x),cos(2*x),1/(1+x)]’,[0 5*pi -

Was auch geht: >> x = linspace(0,15,100); >> subplot(2,2,1), plot(x,sin(x)) >> subplot(2,2,2), plot(x,round(x)) >> subplot(2,1,2), plot(x,sin(round(x))) >> subplot(2,2,3:4), plot(x,sin(round(x))) 2.1 2D-Grafik

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

56

3D-Grafik: plot3 3D-Gegenstuck ¨ zu plot. Beispiel: gestauchte Schraubenlinie (plot3Bsp.m) t x y z

= = = =

-5:.005:5; (1+t.^2).*sin(20*t); (1+t.^2).*cos(20*t); t;

plot3(x,y,z) grid on xlabel(’x(t)’), ylabel(’y(t)’), zlabel(’z(t)’) title(’\it{plot3 Beispiel}’,’FontSize’,14)

2.2 3D-Grafik

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

57

¨ Hohenlinien: ezcontour, contour ¨ ¨ Wir Zeichnen die Hohenlinien einer Funktion zweier Veranderlicher im Bereich [−2, 2] × [−1, 1] mit den Grafikfunktionen ezcontour und contour. (Siehe Script-Datei contourBsp.m) subplot(2,1,1) ezcontour(’sin(3*y-x^2+1)+cos(2*y^2-2*x)’,[-2 2 -1 1]); x = -2:.01:2; y = -1:.01:1; [X,Y] = meshgrid(x,y); Z = sin(3*Y-X.^2+1)+cos(2*Y.^2-2*X); subplot(2,1,2) contour(x,y,Z,20) 2.2 3D-Grafik

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

58

¨ Auswahl spezieller Hohenlinien: clabel ¨ ¨ Mit clabel konnen die gezeichneten Hohenlinien im Einzelnen spezifiziert werden. (contourBsp2.m) [X,Y] = meshgrid(linspace(-3,3,100), linspace(-1.5,1.5,100)); Z = 4*X.^2 - 2.1*X.^4 + X.^6/3 + X.*Y - 4*Y.^2 + 4.*Y.^4; cvals = [linspace(-2,5,14) linspace(5,10,3)]; [C,h] = contour(X,Y,Z,cvals); clabel(C,h,cvals([3 5 7 9 13 17])) xlabel(’x’), ylabel(’y’) title(’Funktion mit 6 H¨ ockern’,’FontSize’,16)

2.2 3D-Grafik

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

59

¨ Gitterflachen: mesh ¨ ¨ Mit mesh bzw. meshc konnen Funktionen zweier Veranderlicher als ¨ Gitterflache dargestellt werden. Beispiel: (meshBsp.m) x = 0:0.1:pi; y = 0:0.1:pi; [X,Y] = meshgrid(x,y); Z = sin(Y.^2+X) - cos(Y-X.^2); subplot(2,2,1), subplot(2,2,2), subplot(2,2,3), subplot(2,2,4), 2.2 3D-Grafik

mesh(Z) meshc(Z) mesh(x,y,Z), axis([0 pi 0 pi -5 5]) mesh(Z), hidden off TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

60

¨ Gefullte ¨ Flachen: surf, surfc ¨ Mit surf werden ausgefullte Flachen dargestellt, hier am Beipiel des ¨ MATLAB-Logos: (surfBsp.m) Z = membrane; FS = ’FontSize’; subplot(2,2,1), surf(Z), title(’\bf{surf}’,FS,14) subplot(2,2,2), surfc(Z), title(’\bf{surfc}’,FS,14) colorbar subplot(2,2,3), surf(Z), shading flat title(’\bf{surf},shading flat’,FS,14) subplot(2,2,4), waterfall(Z), title(’\bf{waterfall}’,FS,14)

2.2 3D-Grafik

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

61

¨ ¨ Flachen mit Locher durch NaNs Bei allen genannten Grafikfunktionen werden NaN-Werte als fehlende Daten interpretiert und nicht dargestellt. Beispiel: (surfcNaNBsp.m) A = peaks(80); A(28:52,28:52) = NaN; surfc(A)

2.2 3D-Grafik

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

62

Beispiel: fraktales Gebirge ¨ sich durch folgenden Algorithmus Ein fraktales Gebirge laßt generieren: Ausgehend von einer N × N Matrix A, N = 2p + 1, deren ¨ Eintrage bis auf die Ecken alle Null sind, wird rekursiv folgender Mittelungsschritt ausgefuhrt bis die Matrix voll besetzt ist: ¨     a+b b a b a 2            a+c a+b+c+d b+d  ←  + Rauschen    2 4 2         c+d d c c d 2 Der Skalierungsfaktor fur ¨ das Rauschen wird in jeder Rekursionsebene um 20.9 vermindert. (Siehe Script-Datei landBsp.m sowie Funktions-Datei land.m. 2.2 3D-Grafik

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

63

2D Balkendiagramme barBsp.m bar(...,’grouped’)

bar(...,’grouped’)

10

10

8

8

6

6

4

4

2

2

0

1

2

3

4

5

0

0

5

bar(...,’stacked’)

10

15

20

barh

20 5 15 4 10

3 2

5 1 0

2.3 Spezielle Grafikarten

1

2

3

4

5

0

2

4

6

8

10

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

64

3D Balkendiagramme barBsp2.m bar3(...,’detatched’)

bar3(...,’grouped’) 10

10 5 5 0

0 1

1 2

2 3

3 4

5

1

2

4

3

5

bar3(...,’stacked’)

bar3h

20 5 10

4 3 2

0

1

1 2 3

0

4 5

5 10

2.3 Spezielle Grafikarten

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

65

Histogramme histBsp.m 1000 mal 1 Datenvektor, 10 Behälter

25 Behälter

300

140

250

120 100

200

80 150 60 100

40

50 0

20 0

1

2

3

0

0

Behälterbreite 0.1 350

120

300

100

250

80

200

60

150

40

100

20

50

2.3 Spezielle Grafikarten

0

1

2

2

3

1000 mal 3 Datenmatrix

140

0

1

3

0

0

1

2

3

4

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

66

Kuchendiagramme pieBsp.m 16%

16%

46%

46%

37%

37%

Stück 1 46% 16% Stück 3

37% Stück 2

2.3 Spezielle Grafikarten

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

67

¨ Flachendiagramme areaBsp.m 30 25 20 15 10 5 0

2

4

6

8

10

12

14

16

18

20

22

2

4

6

8

10

12

14

16

18

20

22

30 25 20 15 10 5 0 −5

2.3 Spezielle Grafikarten

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

68

Speichern von Grafiken Mit dem print-Kommando lassen sich MATLAB-Grafiken in sehr vielen Formaten auf eine Datei schreiben. Beispiel: Als farbige Encapsulated Postscript Level 2 Datei myfig.eps speichern: print -depsc2 myfig.eps Mit saveas kann eine Grafik in einem in MATLAB wiederladbaren Format abgespeichert werden. Beispiel: Speichern der aktuellen Grafik als myfig.fig und danach wieder in MATLAB laden: saveas(gcf, ’myfig’, ’fig’) open(’myfig.fig’) 2.4 Speichern von Grafiken

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

69

Objekthierarchie Handle-Graphics ist ein objektorientiertes Grafiksystem, mit dem uber die bisher vorgestellten Grafikroutinen hinaus grafische ¨ ¨ Elemente gezielter manipuliert werden konnen.

2.5 Handle Graphics

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

70

Objekte und Eigenschaften Objekte sind durch ein handle (Identifikationsnummer) ¨ anzusprechen. Objekte mit gegebenen Eigenschaften konnen mit findobj ermittelt werden. Beispiel: >> plot(1:10,’o-’) >> h = findobj h = 0 1.0000 100.0166 3.0132

2.5 Handle Graphics

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

71

Objekte und Eigenschaften >> get(h,’type’) ans = ’root’ ’figure’ ’axes’ ’line’

2.5 Handle Graphics

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

72

Objekte und Eigenschaften Mit der set-Funktion werden einzelne Eigenschaften von Objekten ¨ manipuliert. Ohne Argumente werden die moglichen Werte der Eigenschaften des Objekts zuruckgegeben. ¨ >> set(h(3)) ALim ALimMode: [ {auto} | manual ] AmbientLightColor Box: [ on | {off} ] CameraPosition CameraPositionMode: [ {auto} | manual ] ... Visible: [ {on} | off ] 2.5 Handle Graphics

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

73

Objekte und Eigenschaften ¨ Die Werte konnen durch Angabe von Parameter-Wert-Paaren gesetzt werden: >> set(h(4),’Marker’,’s’,’MarkerSize’,16) >> set(h(3),’XScale’,’log’)

2.5 Handle Graphics

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

74

Objekte und Eigenschaften Das Gegenstuck ¨ zu set ist die get-Funktion, mit der die aktuellen ¨ Eigenschaftswerte eines Objektes abgefragt werden konnen. >> get(h(4),’Marker’) ans = square

2.5 Handle Graphics

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

75

Objekte und Eigenschaften Mit Hilfe der Kommandos get(h,’Children’) get(h,’Parent’) findobj findall kann man innerhalb der Objekthierarchie navigieren.

2.5 Handle Graphics

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

76

¨ Grafische Benutzeroberflache: GUI Bestandteil von Handle-Graphics sind auch Elemente von grafischen ¨ Benutzeroberoberflachen, wie etwa Pull-down Menus, ¨ ¨ File-Selektorboxen, Schaltflachen etc., mit Hilfe derer die EinAusgabe professionell gestaltet werden kann. Nur ein Beispiel: Fortschrittsbalken (waitbarBsp.m). h = waitbar(0,’Computing’); N = 20; for j = 1:N % irgendwelche Rechnung A = eig(rand(100)); waitbar(j/N) end close(h) 2.5 Handle Graphics

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

77

Animationen ¨ In MATLAB konnen Animationen auf zweierlei Art erzeugt werden: 1. Sukzessives Erzeugen der einzelnen Bilder einer Sequenz 2. Manipulation der XData, YData und ZData Eigenschaften von Objekten

2.6 Animationen

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

78

Animationen ¨ Hier wird mit getframe die aktuelle Grafik als nachstes Einzelbild in den Film eingefugt. (animationsBsp.m) ¨ Z = peaks; surf(Z) axis tight set(gca,’nextplot’,’replacechildren’) disp(’Film wird erzeugt ...’) N = 10; for j=1:N surf(cos(2*pi*(j-1)/N).*Z,Z) F(j) = getframe; end disp(’Film wird gezeigt ...’) movie(F,3) 2.6 Animationen

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

79

Animationen Hier wird ein Punkt gezeichnet und dann bewegt. Siehe auch den Plotbefehl comet. (animationsBsp2.m) x = linspace(-pi,pi,2000); y = cos(tan(x))-tan(sin(x)); p = plot(x(1),y(1),’.’,’EraseMode’,’none’,’MarkerSize’,5) axis([min(x) max(x) min(y) max(y)]) hold on for i=2:length(x) set(p,’XData’,x(i),’YData’,y(i)); drawnow end hold off 2.6 Animationen

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

80

3. Verschiedenes

3.1 Ein- und Ausgabe 3.2 Fehlersuche 3.3 Dunn besetzte Matrizen ¨ 3.4 Weitere Datentypen 3.5 Optimierung von M-Dateien

3. Verschiedenes

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

81

Nutzereingabe Mit der input-Funktion lassen sich einzelne Variablen von Nutzer per Aufforderung eingeben. >> x = input(’Startpunkt: ’) Startpunkt: 0.5 x = 0.5000 ¨ Mit einem zusatzlichen Argument ’s’ wird die Eingabe als Zeichenkette interpretiert. >> titel = input(’¨ Uberschrift f¨ ur Grafik: ’,’s’) ¨ Uberschrift f¨ ur Grafik: Experiment 2 titel = Experiment 2 3.1 Ein- und Ausgabe

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

82

Nutzereingabe ¨ Mit der Funktion ginput konnen die Koordinaten von Mausklicks eingegeben werden. ¨ Auf folgende Weise konnte man im Bezier-Kurvenbeispiel die vier Kontrollpunkte per Mausklick vom Nutzer anfordern: axis([0 1 0 1]) [x,y] = ginput(4); P = [x’,y’];

3.1 Ein- und Ausgabe

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

83

Textausgabe Mit der disp-Funktion kann man simple Textausgabe bewerkstelligen >> disp(’Hier ist ein 3x3 magisches Quadrat:’),disp(magic(3)) Hier ist ein 3x3 magisches Quadrat: 8 1 6 3 5 7 4 9 2

3.1 Ein- und Ausgabe

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

84

Textausgabe: fprintf ¨ sich Textausgabe mit fprintf. Wie in der Genauer steuern laßt Programmiersprache C gehorcht diese Funktion der Syntax fprintf(Formatanweisung, Liste von Ausdrucken) ¨ >> fprintf(’%6.3f\n’, pi) 3.142 Festkommazahl 6 Felder breit mit 3 Nachkommastellen. Eine zu kleine Feldbreite wird angepasst: >> fprintf(’%6.3f\n’, pi^10) 93648.047

3.1 Ein- und Ausgabe

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

85

Textausgabe: fprintf Bei e anstelle von f gibt die Ziffer nach dem Punkt die Anzahl gultiger ¨ Stellen in Exponentialnotation an: >> fprintf(’%12.3e\n’, pi) 3.142e+000 Bei negativen Zahlen muss eine Stelle fur ¨ das Vorzeichen mitgerechnet werden. >> fprintf(’%5.2f\n%5.2f\n’, exp(1), -exp(1)) 2.72 -2.72

3.1 Ein- und Ausgabe

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

86

Textausgabe: fprintf Ein Minuszeichen nach dem %-Zeichen richtet die Zahl linksbundig ¨ aus. Vergleiche >> fprintf(’%5.0f\n%5.0f\n’,9,103) 9 103 mit >> fprintf(’%-5.0f\n%-5.0f\n’,9,103) 9 103

3.1 Ein- und Ausgabe

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

87

Textausgabe: fprintf ¨ Die Formatanweisung kann auch wortlich auszugebenden Text enthalten: >> m = 5; iter = 11; U = orth(randn(m)) + 1e-10; >> fprintf(’iter = %2.0f\n’, iter) iter = 11 >> fprintf(’norm(U’’*U-I) = %11.4e\n’,norm(U’*U-eye(m))) norm(U’*U-I) = 5.0516e-010 Schliesslich ist g eine Formatanweisung, welche unter e und f die ¨ kurzere auswahlt. ¨ >> fprintf(’%g %g\n’,exp(1), exp(20)) 2.71828 4.85165e+008 3.1 Ein- und Ausgabe

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

88

Ein- und Ausgabe auf Dateien Dieser Bereich ist im MATLAB sehr flexibel, aber auch sehr umfangreich. Siehe Importing and Exporting Data im Help-Navigator.

3.1 Ein- und Ausgabe

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

89

Fehlersuche MATLAB besitzt einen eingebauten Debugger, der sowohl von der ¨ Kommandozeile also auch von der grafischen Oberflache aus bedient werden kann. ¨ Schneller als den Debugger anzuwerfen ist in manchen Fallen die Funktion keyboard an eine kritische Stelle eines Programmes einzusetzen; diese Funktion erlaubt es, von der Kommandozeile aus auf alle lokalen Variablen, die von dieser Stelle sichtbar sind, zuzugreifen.

3.2 Fehlersuche

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

90

Dunn ¨ besetzte Matrizen In vielen Anwendungen treten Matrizen auf, sie zwar sehr groß sind ¨ aber fast nur Nullen als Eintrage besitzen. Um solche Probleme ¨ bearbeiten zu konnen ist es erforderlich ¨ • nur die von Null verschiedenen Eintrage zu speichern und ¨ • Rechnungen so zu organisieren, dass moglichst nur Operationen ¨ auf den Nichtnulleintragen ausgefuhrt werden. ¨ Hierfur ¨ existiert in MATLAB seit Version 4.0 ein besonderer Datentyp: sparse array. MATLAB erkennt, ob eine Matrix voll oder dunn besetzt ist und fuhrt ¨ ¨ transparent fur ¨ den Benutzer die entsprechenden Rechnungen durch (+,-,*,/).

3.3 Dunn besetzte Matrizen ¨

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

91

Erzeugen dunn ¨ besetzter Matrizen ¨ Besitzt eine dunn besetzte Matrix n von Null verschiedene Eintrage ¨ ai(k),j(k), k = 1, . . . , n, so kann mit diesen Daten durch die Funktion sparse die Matrix im Sparseformat generiert werden: >> A = sparse([1 2 2 4 4],[3 1 4 2 4],1:5) A = (2,1) 2 (4,2) 4 (1,3) 1 (2,4) 3 (4,4) 5

3.3 Dunn besetzte Matrizen ¨

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

92

Erzeugen dunn ¨ besetzter Matrizen A = sparse(i,j,s,m,n,nzmax) erzeugt eine dunn besetzte m × n ¨ Matrix mit Nichtnullelementen s, deren Zeilen- bzw. Spaltenindizes i, j, und reserviert Speicher fur ¨ insgesamt nzmax Nichtnullelemente. Dieselben Daten fur ¨ eine bereits existierende Matrix lassen sich durch [i,j,s] = find(A); [m,n] = size(A); ermitteln. ¨ man durch Eine dunn besetzte m × n Matrix aus lauter Nullen erhalt ¨ A = sparse(m,n); 3.3 Dunn besetzte Matrizen ¨

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

93

oder A = sparse([],[],[],m,n,0);

3.3 Dunn besetzte Matrizen ¨

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

94

Full/sparse Umwandlung Mit full kann man die Matrix in eine voll besetzte umwandeln: >> B = full(A) B = 0 0 2 0 0 0 0 4

1 0 0 0

0 3 0 5

Analog wandelt A = sparse(B) B wieder in eine dunn besetzte ¨ (gespeicherte) Matrix um.

3.3 Dunn besetzte Matrizen ¨

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

95

Information uber ¨ dunn ¨ besetzte Matrizen ¨ nnz(A) liefert die Anzahl von Null verschiedener Eintrage in A. spy(A) gibt die Besetzungsstruktur von A in einem Grafikfenster an. Beispiel: >> load west0479; >> spy(west0479) issparse(A) liefert 1, falls A vom Datentyp sparse ist, andernfalls 0.

3.3 Dunn besetzte Matrizen ¨

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

96

Weiter nutzliche ¨ sparse-Funktionen spdiags spones(S) speye(n) sprand

3.3 Dunn besetzte Matrizen ¨

erzeugt Matrix aus Diagonalen m × n Matrix aus lauter Einsen, S ist ein Besetzungsmuster analog spzeros Einheitsmatrix der Dimension n Zufallsmatrix

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

97

Weitere Datentypen Bisher haben wir folgende an Datentypen in MATLAB angesprochen double, uint8, uint16, function handle und sparse. In diesem Abschnitt stellen wir drei weitere vor: char, struct und cell. In MATLAB wird der Datentyp einer Variablen als class bezeichnet, hierzu gibt es die entsprechende Funktion: >> class(pi) ans = double >> class(speye(4)) ans = sparse 3.4 Weitere Datentypen

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

98

Zeichenketten (strings) ¨ Zeichenketten sind Matrizen oder Vektoren, deren Eintrage ASCII-Zeichen sind, und welche intern als entsprechenden ASCII-Code gespeichert werden. >> s = ’ABCabc’ s = ABCabc >> sd = double(s) sd = 65 66 67 >> s2 = char(sd) s2 = ABCabc

97

98

99

¨ help strfun liefert eine Ubersicht uber alle Funktionen zur ¨ Manipulation von Strings. 3.4 Weitere Datentypen

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

99

Strukturen und Cell Arrays Diese beiden zusammengesetzten Datentypen dienen dazu, Daten ¨ von verschiedenem Typ und Große in einer Variablen zusammenzufassen. Strukturen bestehen, analog zu C oder PASCAL, aus Feldern, von denen jedes einen eigenen Namen besitzt. Man kann Matrizen definieren, deren Elemente Strukturen sind. ¨ anstelle von double-Zahlen Cell Arrays sind Matrizen, deren Eintrage beliebige Datentypen in beliebiger Reihenfolge sein durfen. Cell ¨ Arrays werden z.B. von den Funktionen varargin und varargout eingesetzt.

3.4 Weitere Datentypen

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

100

Beispiel Wir stellen eine Datenbank aus Testmatrizen zusammen und speichern dabei jeweils Name, die Matrix selbst sowie deren Eigenwerte. n = 4; testmat(1).name = ’Hilbert’; testmat(1).mat = hilb(n); testmat(1).eig = eig(hilb(n)); testmat(2).name = ’Pascal’; testmat(2).mat = pascal(n); testmat(2).eig = eig(pascal(n));

3.4 Weitere Datentypen

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

101

Bei der Ausgabe des Strukturarrays werden zwar die Feldnamen, ¨ nicht aber deren Inhalte aufgezahlt: >> testmat testmat = 1x2 struct array with fields: name mat eig

3.4 Weitere Datentypen

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

102

¨ Wir konnen auf einzelne Felder durch folgende Notation zugreifen: >> testmat(2).name ans = Pascal >> testmat(1).eig ans = 0.0001 0.0067 0.1691 1.5002

3.4 Weitere Datentypen

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

103

Bei dem Matrixfeld kann die ubliche Indizierung verwandt werden: ¨ >> testmat(1).mat(1:2,1:2) ans = 1.0000 0.5000 0.5000 0.3333

Alternativ kann man das Stukturarray folgendermaßen aufbauen: testmat = struct(’name’,{’Hilbert’,’Pascal’},... ’mat’,{hilb(n),pascal(n)},... ’eig’,{eig(hilb(n)),eig(pascal(n))})

3.4 Weitere Datentypen

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

104

Cell Arrays Im Gegensatz zu Strukurarrays werden Zellarrays durch die ubliche ¨ Matrixindizierung angesprochen anstelle von Feldnamen. Beispiel: >> C = {1:3, pi, magic(2), ’Ein Wort’} C = [1x3 double] [3.1416] [2x2 double]

3.4 Weitere Datentypen

’Ein Wort’

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

105

Das vorige Beispiel mit Cell Arrays clear testmat{1,1}= ’Hilbert’; testmat{2,1} = hilb(n); testmat{3,1} = eig(hilb(n)); testmat{1,2} = ’Pascal’; testmat{2,2} = pascal(n); testmat{3,2} = eig(pascal(n)); >> testmat testmat = ’Hilbert’ [4x4 double] [4x1 double] 3.4 Weitere Datentypen

’Pascal’ [4x4 double] [4x1 double] TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

106

Vektorisierung In MATLAB werden Matrixoperationen intern durch (schnellen) kompilierten C- oder Assembler-Code ausgefuhrt. Dies gilt ¨ insbesondere fur ¨ die arithmetischen Grundoperationen +, -, *, /, aber z.B. nicht fur von for-Schleifen. ¨ die Ausfuhrung ¨ Daher wird im Allgemeinen eine for-Schleife wesentlich schneller ¨ ausgefuhrt, wenn sie in aquivalente Matrixoperationen umformuliert ¨ ist.

3.5 Optimierung von M-Dateien

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

107

Beispiel >> n = 5e5; x = randn(n,1); >> tic, s=0; for i=1:n, s = s + x(i)^2; end, toc elapsed_time = 2.9840 >> tic, s = sum(x.^2); toc elapsed_time = 0.0500

3.5 Optimierung von M-Dateien

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

108

Weiteres Beispiel Wir generieren den Weg einer Brownschen Bewegung (Wiener Prozess): randn(’state’,20) N = 1e4; dt = 1/N; w(1) = 0; for j=2:N+1 w(j) = w(j-1) + sqrt(dt)*randn; end plot([0:dt:1],w) >> tic, vecBsp, toc elapsed_time = 4.9380 3.5 Optimierung von M-Dateien

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

109

Optimierte Variante: randn(’state’,20) N = 1e4; dt = 1/N; w = sqrt(dt)*cumsum([0;randn(N,1)]); plot([0:dt:1],w) >> tic, vecBsp2, toc elapsed_time = 0.0400

3.5 Optimierung von M-Dateien

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

110

Arrays im Voraus anlegen Wenn neue Elemente einem Array angefugt ¨ werden muss MATLAB den hierzu erforderlichen Speicher allokieren. Dieser Aufwand ¨ wenn das Array gleich zu Anfang mit seiner endgultigen entfallt, ¨ ¨ Lange initialisiert wird (sofern bekannt). Beispiel: Elementweise: tic, n = 1e4; x(1:2) = 1; for i=3:n, x(i) = 0.25*x(i-1)^2 - x(i-2); end toc Alles auf einmal: tic, n = 1e4; x = ones(n,1); for i=3:n, x(i) = 0.25*x(i-1)^2 - x(i-2); end toc 3.5 Optimierung von M-Dateien

TU Bergakademie Freiberg, SS 2002

Matlab-Kurs

111

Weitere Optimierungen Um eine n × n Matrix bestehend aus lauter Zweien zu generieren liegt es nahe, dies mit der Anweisung A = 2*ones(n); zu tun, was aber n2 Multiplikationen erfordert. Schneller geht A = repmat(2,n); ¨ was im Wesentlichen aquivalent ist mit A = zeros(n); A(:) = 2;.

3.5 Optimierung von M-Dateien

TU Bergakademie Freiberg, SS 2002