Überblick Exzerpt aus Matlab User's Guide (Version 4.0) • Einführung • Elementare Operationen – Matrixoperationen – Elementweise Operationen auf Matrizen – Vektoren und Matrizen manipulieren – Matrixfunktionen • Programmierung – Ablaufkontrolle – M-Files + Scripts + Funktionen • Graphik 1 M.F. + H.R. MATLAB Matlab (1) 2 M.F. + H.R. MATLAB • Matrix Laboratory – Matrizen, Vektoren + reell, komplex + Kompakte Vektor- Matrixnotation + lineare Algebra, Gleichungen lösen, Eigenwerte und -Vektoren – Funktionen + math. Standardfunktionen + selbstdefinierte Funktionen – Differentialgleichungen, Integration, Fouriertransformation – Leistungsfähige 2D und 3D Grafik • Erweiterung – Simulink. Graphisch orientiertes System zur Simulation dynamischer Systeme Matlab (2) • Vorteile / Nachteile + Sehr geringer Entwicklungsaufwand – Nützt Maschineneffizienz nicht voll aus – Schlechte Effizienz bei nicht vektorisierbaren Problemen • Anwendung: – numerische Probleme ersetzt Fortran oder C – Visualiserung von Lösungen oder Daten ersetzt oft Spezialprogramme – Entwicklung von Lösungsmethoden Prototypentwicklung: erster Schritt zu Fortran/C - Programm 3 M.F. + H.R. MATLAB Matrizen, Vektoren und Skalare • Elementares Datenobjekt: m n - Matrix (reell, komplex) • Sonderfälle: – Skalar 1 1 - Matrix – Zeilenvektor 1 n - Matrix – Spaltenvektor n 1 - Matrix • Alle algebraischen Operationen definiert • + ,-, * , /, ^, … 4 M.F. + H.R. MATLAB Matrizen eingeben (1) 5 M.F. + H.R. MATLAB • Methoden – Explizit – In M-Files erzeugen – Aus externen Dateien laden – Durch Funktionen erzeugen • Explizite Eingabe Eingabe: zeilenweise definiert Variable A als Matrix A = [ 1 2 3 ; 4 5 6 ; 7 8 9 ] ; oder trennt Zeilen in Matrix ergibt A = 1 4 7 2 5 8 3 6 9 Leerzeichen oder , trennt Elemente innerhalb Zeile Matrizen eingeben (2) • Durch M-File Datei gena.m enthalte % cat gena.m A = [ 1 2 3 4 5 6 7 8 9 % ] Matlab-Kommando >> gena erzeugt Matrix A • Externe Dateien Matlab-Kommando save speichert Daten in Datei. Kann mit load eingelesen werden • Durch Matlab-Funktionen erzeugen Besprechung später 6 M.F. + H.R. MATLAB Matrixelemente (2) 7 M.F. + H.R. MATLAB • Matrixindizes Mit runden Klammern ( ) >> A(2,1) ans = 4 Erzeugen neuer Elemente >> x(5) = abs(x(1)) x = -1.3000 1.7321 Zusätzliche Elemente = 0 nach Bedarf eingeschoben 4.8000 0 1.3000 Blockmatrizen 8 M.F. + H.R. MATLAB • Aufbau großer Matrix aus kleinen r = [ 10 11 12 ]; A = [ A ; r ] A = 1 2 3 4 5 6 7 8 9 10 11 12 • Submatrix A(1:2,:) ans = 1 4 ; unterdrückt Ausgabe Ausgabe beliebiger Ausdruck durch Eingabe ohne ; 2 5 3 6 Statements, Ausdrücke, Variable • Matlab - Statement variable = ausdruck oder ausdruck • Ausdruck – Einfache Variable oder Konstante – Komplexer Ausdruck konstruiert mit Operatoren – Lange Ausdrücke: Fortsetzung einer Zeile mit ... Beispiel w = exp( i*omega*t) ... + exp(-i*omega*t) • Syntax – Variablennamen: 19 alphanumerische Zeichen – Groß/Kleinschreibung signifikant 9 M.F. + H.R. MATLAB Information über Variablen • Variablen in Workspace gespeichert Info über Workspace: who listet alle Variablen Detailinfo über Workspace whos listet Variablen mit Größe, ob komplex • Vordefinierte Variablen bzw. Funktionen eps ans i j pi realmax realmin inf NaN Maschinengenauigkeit = min{ x>0 | 1+x 1 } letztes Ergebnis (Answer) imaginäre Einheit Zahl p größte / kleinste darstellbare Zahl Unendlich. z.B. Ergebnis von 1 / 0 Not A Numberz.B. Ergebnis von 0 / 0 u.a. 10 M.F. + H.R. MATLAB Hilfe 11 M.F. + H.R. MATLAB • On-line-Hilfe help ergibt ... matlab/general matlab/ops matlab/lang ... General purpose commands. Operators and special characters. Language constructs and debugging. help general ergibt ... Managing variables and the workspace. who - List current variables. whos - List current variables, long form. ... help who gibt Detailbeschreibung zu who-Kommando Beenden, Abspeichern der Sitzung • Beenden quit oder exit • Sitzung speichern save name speichert alle lokalen Variablen in name.mat save temp xspeichert nur Variable x in temp.mat • Einlesen von MAT-File load name lädt in name.mat gespeicherte Daten 12 M.F. + H.R. MATLAB Zahlen 13 M.F. + H.R. MATLAB • Dezimalnotation, mit Zehnerexponenten Beispiele 3.14, -12, 1.6022e-19, Imaginäre Zahlen 3i, -3e5i 6.022e23 • Eigenschaften – Wertebereich: ca. 10-308 bis 10308 – Relative Genauigkeit: eps , d.h. ca. 16 Dezimalstellen – Spezielle Werte an IEEE-Maschinen inf Infinity: z.B. 1/0 NaN Not A Number: Undefiniertes Ergebnis, z.B. 0/0 Arithmetische Ausdrücke 14 M.F. + H.R. MATLAB • Ausdrücke: Operatoren + * / \ ^ Addition Subtraktion (Matrix-) Mulitplikation Division Division nach links: x = A \ b Potenz ist Lösung von Ax=b Komplexe Zahlen und Matrizen • Komplexe Zahlen z = 3+4*i w = r*exp(i*phi) 15 M.F. + H.R. MATLAB Falls i undefiniert wurde: Wiederherstellung i = sqrt(-1) • Komplexe Matrizen A = [1 2 ; 3 4] + i*[5 6 ; 7 8] A = [1+5i , 2+6i ; 3+7i , 4+8i] Achtung: Kein Leerzeichen! Ausgabeformat (1) 16 M.F. + H.R. MATLAB • Format für alle weiteren Ausgaben: format - Befehl Normales Format: 4 Dezimalstellen: short-Format >> format short Voreinstellung >> x = [ 1.2 3.7e-6 0 ] x = 1.2000 0.0000 0 exakt Null >> format short e , x gerundet Null x = 1.2000e+000 3.7000e-006 0 >> format long , x x = 1.20000000000000 0.00000370000000 0 >> format long e , x x = 1.200000000000000e+000 3.700000000000001e-006 0 Funktionen (1) • Matlab: umfangreiche Ausstattung mit Funktionen – Eingebaut und M-Files – Anwender kann selbst Funktionen definieren (M-Files) – Übersicht: Siehe Kurzreferenz. u.a.: + Elementare mathematische (min, abs, sin, exp ...) + Spezielle Funktionen (bessel, erf ...) + Matrixfunktionen (zeros, eye ...) + Lineare Gleichungen (/ , \, inv, ...) + Differentialgleichungen lösen + Integration • Argumente: runde Klammern ( ) x = sqrt(log(z)) Mehrere Argumente durch , getrennt z = gammainc(1.3,0.8) 17 M.F. + H.R. MATLAB Funktionen (2) 18 M.F. + H.R. MATLAB • Rückgabewert – ein Rückgabewert (Skalar, Vektor, Matrix) x = max(A) Zeilenvektor mit Spaltenmaxima – mehrere Rückgabewerte: Eckige Klammern [V,D] = eig(A) Spalten von V: Eigenvektoren D: Diagonale Matrix mit Eigenwerten Eingabeargumente Ausgabeargumente Funktionen wissen, wieviele Ein/Ausgabeargumente sie haben (Überladen) [x,i] = max(A) i enthält Indices der Maxima • Regel: Matlab modifiziert nie Eingabeargumente Matrixoperationen • Grundregel: Syntax und Bedeutung entspricht zumeist mathematischen Konventionen Einschränkungen: Numerische Genauigkeit Zeichensatz • Übersicht – Transponieren – Addieren, Subtrahieren – Multiplizieren – Dividieren: Gleichung lösen – Potenzen 19 M.F. + H.R. MATLAB Transponieren 20 M.F. + H.R. MATLAB • Apostroph: Transponierte Matrix (reell) >> A = [1 2 3 ; 4 5 6 ; 7 8 9 ] , B = A' A = 1 4 7 2 5 8 3 6 9 1 2 3 4 5 6 7 8 9 B = Spaltenvektor >> x = [ -1 0 2 ]' oder x = -1 0 2 x = [ -1; 0; 2 ] Adjungierte Matrix 21 M.F. + H.R. MATLAB • Komplexe Matrix: Apostroph bedeutet in Wirklichkeit Adjungierte Matrix >> k = [ 1 i ; 0 1 ] k = 1.0000 0 0 + 1.0000i 1.0000 >> k' ans = 1.0000 0 - 1.0000i 0 1.0000 Transponierte: verwende .' >> k.' ans = 1.0000 0 + 1.0000i 0 1.0000 Addieren, Subtrahieren • Plus, Minus : normale Matrixaddition/subtraktion – Matrixdimensionen müssen übereinstimmen – Ausnahme: ein Operand ist Skalar wird auf alle Elemente angewandt Seien A, B 33-Matrizen, x 31 Spaltenvektor C = A + B Definiert 33-Matrix C y = x - 1 y 31, y(i) = x(i)-1, "i=1,3 k = A + x verboten • Funktion sum Für Vektoren: Summe der Elemente Für Matrizen: Zeilenvektor, der Spaltensummen enthält 22 M.F. + H.R. MATLAB Matrixmultiplikation • Stern: Multiplikation (im algebraischen Sinn) Skalares (inneres) Produkt von x,y >> x' * y 4 Äußere Produkte: x*y' und y*x' • Matrix-Vektorprodukt >> b = A * x b = 5 8 11 • Multiplikation mit Skalar (c-Zahl): Auf jedes Element angewandt A * c 23 M.F. + H.R. MATLAB Division von Matrizen • Zwei Matrixdivisionszeichen \ / Division nach links Division nach rechts • Bedeutung X = A \ B heißt formal: X = inv(A)*B implementiert effizient als Lösung des Gleichungssystems A*X = B x = A / B heißt formal: X = A*inv(B) implemtiert als Lösung von X*A = B Es gilt: B/A = (A'\B')' • Anwendung: Lösen von Gleichungssystemen Sei A nn und b n1 Erhalten Lösung x von A x = b als x = A \ b k Simultane Gleichungssysteme: b ist nk, Spalten von k sind Inhomogenitäten Spalten von x sind Lösungen 24 M.F. + H.R. MATLAB Lösung von Gleichungssystemen: Hinweise 25 M.F. + H.R. MATLAB • Effizienz, Genauigkeit Für Gleichungssysteme immer Matrixdivision, nie Inversion! Vergleich: Division: x = A \ b Inversion: x = inv(A) * b Zufallsmatrix Flops Genauigkeit 100100 Division 100100 Inversion 7105 2106 510-14 410-14 10001000 Division 10001000 Inversion 7108 2109 510-13 310-12 • Schwach besetzte Matrizen Sparse Matrices (Matrizen mit vielen Null-Elementen) können in Matlab definiert und sollten verwendet werden. Beispiel: Partielle Differentialgleichung mit Finiten Differenzen (z.B. Poissongleichung aus Teil 1: SOR-Verfahren überflüssig) Potenzen von Matrizen 26 M.F. + H.R. MATLAB • Zirkumflex: Matrixpotenz Definiert für quadratische Matrizen Natürliche Exponenten A^n A * A * ... * A (n-mal) Reelle Exponenten: Definiert über Spektraldarstellung Ist [V,D] = eig(A) dann gilt A^p V * D.^p / V Elementweise Potenzierung (nächster Abschnitt) Weitere Matrixfunktionen • Analytische Matrixfunktionen: Definition über Spektraldarstellung Achtung: Elementare Funktionen (exp, log, ...) operieren elementweise Vordefinierte Matrixfunktionen expm, logm, sqrtm Matrix-Exponential, -Logarithmus, -Wurzel funm(A,'fun') Matrix-Funktion fun • Weitere Funktionen det, inv trace poly Determinante, Inverese Spur Charakteristisches Polynom 27 M.F. + H.R. MATLAB Elementweise Matrixoperationen • Array-Operationen: Matrixelemente werden einzeln verknüpft • Notation: Punkt (.) vor Operator • Übersicht – Addition, Subtraktion, Multiplikation, Division – Vergleichsoperationen – Logische Operationen – Mathematische Funktionen 28 M.F. + H.R. MATLAB Binäre elementweise Operationen • Addition, Subtraktion Matrixoperation elementweise definiert • Multiplikation, Division .* bedeutet elementweise Multiplikation ./ .\ elementweise Division nach rechts / links Beispiel x = [ 1 2 3 ] ; y = [ 4 5 6 ] z = x .* y z = 4 10 18 • Potenzierung .^ bedeutet elementweise Potenzierung (ein oder beide Operanden Skalar oder Vektor) z = x .^ y z = x .^ 2 z = 2 .^ x z = z = z = 1 1 2 32 4 4 729 9 8 29 M.F. + H.R. MATLAB Vergleichsoperationen (1) • Sechs Operatoren vergleichen Matrizen mit gleicher Dimension < <= > >= == ~= kleiner als kleiner oder gleich größer als größer oder gleich gleich ungleich • Bedeutung Matrixelemente paarweise verglichen Ergebnis: Matrix gleicher Dimension mit Elementen ... 1 "wahr" 0 "falsch" 30 M.F. + H.R. MATLAB Vergleichsoperationen (2) Beispiele >> 2 + 2 ~= 4 ans = 0 Erkennen von Regelmäßigkeiten >> a=magic(3) a = 8 1 6 3 5 7 4 9 2 >> p=(rem(a,3)==0) p = 0 0 1 1 0 0 0 1 0 Anwenden von Operationen auf ausgewählte Matrixelemente i = find(Y > 3.0); Gibt Indizes von Elementen > 3 Y(i) = 10 * ones(i); Indexvektor nächster Abschnitt Ersetzt alle Elemente von Y größer als 3 durch 10 31 M.F. + H.R. MATLAB Logische Operationen • Drei logische Operatoren & | ~ und (binär) oder (binär) nicht (unär) • Bedeutung Matrixelemente werden paarweise mit null verglichen Ergebnis & Ergebnis 1, wenn beide Elemente 0, sonst 0 | 0, wenn beide Elemente =0, sonst 1 ~ 1, wenn Element 0, sonst 0 • Funktionen all und any all(x) any(x) Ergebnis 1, wenn alle Elemente von x 0, sonst 0 0, wenn alle Elemente =0, sonst 1 Anwendung in Programmen if ( all(a > 3) ) ..... end 32 M.F. + H.R. MATLAB Logische Funktionen 33 M.F. + H.R. MATLAB • Logische Funktionen Vektorargumente: Ergebnis ist Skalar Matrixargumente: Ergebnis ist Zeile mit Ergebnissen spaltenweiser Operationen Zweimalige Anwendung gibt immer Skalar Unter anderem ... any $ - Quantor all " - Quantor find gibt Array-Indices von Elementen 0 isnan entdeckt NaN isinf entdeckt Unendlich isempty Matrix ist leer (00) Leere Matrizen 34 M.F. + H.R. MATLAB • Leere (00) Matrizen – gültige Werte für Variablen – Viele Operationen liefern plausible Werte • Erzeugung: Leere eckige Klammern [] x = [] Unterscheide clear(x) Definiert Variable x als 00 Matrix (gültig) Löscht Variable x aus Workspace • Entfernen von Teilen einer Matrix A(:,[2 4]) = [] Entfernt Spalten 2 und 4 • Entstehen leerer Matrix (Beispiele) n=0; x=1:n x=input('Wert x eingeben ') und Leereingabe des Benutzers • Entdecken leerer Matrix isempty(x) Spezielle Matrizen 35 M.F. + H.R. MATLAB • Wichtig in Erzeugung von Matrizen Spezielle Matrixfunktionen (Argumente s.u.): zeros Nullmatrix ones Einsmatrix (alle Elemente 1) eye Identitäts- (Einheits-)matrix rand Zufallsmatrix (gleichverteilt) Argumente: zeros(size(A)) Nullmatrix mit Dimension von A eye(n) nn Einheitsmatrix rand(m,n) mn Zufallsmatrix Weitere: diag(V,k) linspace(a,b,n) meshgrid(u,v) Erzeuge Diagonalmatrix: Matrix, deren k-te Diagonale Elemente von V sind, sonst 0 Zeile mit n zwischen a und b linear verteilten Elementen In Funktionen von zwei Variablen verwendet Matrizen manipulieren • Größere Matrizen Mit Blockmatrixnotation erzeugen. Beispiel: Sei A quadratisch C = [ A A' ; ones(size(A) A.^2 ] erzeugt doppelt so große Matrix • Rotieren, Spiegeln, Form ändern, Teil extrahieren rot90 fliplr flipud diag tril triu reshape ' : Rotieren An vertikaler Achse spiegeln An horizontaler Achse spiegeln Extrahiere (oder erzeuge) Diagonale Untere Dreiecksmatrix Obere Dreieckmatrix Form ändern transponieren Allgemeineres Umarrangieren 36 M.F. + H.R. MATLAB Matrixfunktionen (Auswahl) 37 M.F. + H.R. MATLAB • Spektralzerlegung Sei A nn - Matrix Eigenwerte l und Eigenvektoren x , definiert durch Ax = lx werden berechnet als [X,D] = eig(A) i-te Spalte von X ist Eigenvektor xi zu Eigenwert li = D(i,i) • Norm, Rang, Konditionszahl cond norm rank rcond Konditionszahl in 2-Norm (falls >> 1 Matrix singulär) 1-, 2-, F- und -Norm Rang Schätzung reziproke Kondition (LINPACK) (falls @ 0 singulär) Integraltransformationen • Faltung und Kovarianz conv deconv cov Faltung Entfaltung Kovarianz • 1-dimensionale Fouriertransformation fft ifft fftshift Fouriertransformation Fourierrücktransformation Vertausche Quadranten • 2-dimensionale Fouriertransformation fft2 ifft fftshift 2-D Fouriertransformation 2-D Fourierrücktransformation Vertausche Quadranten • Siehe auch Signal Processing Toolbox 38 M.F. + H.R. MATLAB Automatisierung Matlab: Programmiersprache Anwendung: in M-Dateien • Ablaufkontrolle for while if break Schleifen Schleifen Bedingungen Ausprung • M-Dateien Scripts Funktionen • Eigene Programme echo, disp, input, pause, keyboard : Interaktion mit Benutzer Globale Variablen Zeichenketten eval : Text als Befehl ausführen Effizienz 39 M.F. + H.R. MATLAB for - Schleifen 40 M.F. + H.R. MATLAB Syntax for variable = vektor ... Matlab Statements ... end Bedeutung variable durchläuft Elemente von vektor und Schleifeninhalt wird ausgeführt. Genauer: Rechte Seite ist Matrix, variable erhält nacheinander Spalten der Matrix zugewiesen Beispiel for i = 1:n , x(i) = 0 , end Verschachteln: Beispiel Hilbertmatrix for i = 1:m for j=1:n A(i,j) = 1/(i+j-1); end end Unterdrückt Ausgabe unvollständiger Matrizen while - Schleifen Syntax while ausdruck ... Matlab Statements ... end Bedeutung ausdruck (Vergleichsausdruck) wird ausgewertet. Falls 0 (wahr), wird Schleifeninhalt ausgeführt. Solange Wiederholung, bis ausdruck = 0 Beispiel: Iteration delta = 1.e-5; err = realmax; oldy = realmax; while err > delta ... berechne y ... err = abs ( y - oldy ); end 41 M.F. + H.R. MATLAB if - elseif - else - Bedingungen Syntax if ausdruck1 ... Matlab Statements 1 ... elseif ausdruck2 ... Matlab Statements 2 ... else ... Matlab Statements 3 ... end elseif optionell else optionell Bedeutung ausdruck1 (Vergleichsausdruck) wird ausgewertet. Falls 0, werden Statements 1 ausgeführt. Sonst wird ausdruck2 ausgewertet etc. Ist kein Ausdruck wahr, wird else - Block ausgeführt, falls vorhanden. Beispiel if rem (k,2) == 0 coeff = (a-1)^k else coeff = a^k end 42 M.F. + H.R. MATLAB break - Schleife abbrechen Syntax for oder while ... ... break ... end Bedeutung Schleife wird verlassen. Meist ist break in einer if-Bedingung Beispiel (3n+1 - Problem) while 1 n = input (' Eingabe n '); if isempty(n), break, end while n > 1 if rem(n,2) == 0 n = n/2 Bei Leereingabe Aussprung else n = 3*n+1 end end end 43 M.F. + H.R. MATLAB Programmierung von Matlab • Matlab = Interpreter – Interaktive Verwendung: Benutzer gibt Kommandos ein Matlab führt sie aus – Matlab - Programme Matlab führt Kommandos in Datei aus • M-Datei – Dateiname mit Endung .m – Erstellung mit Texteditor – Enthält Folge von Matlab-Kommandos – M-Dateien können andere und sich selber rekursiv aufrufen – Datei name.m definiert Kommando name – Zwei Arten + Script + Funktion 44 M.F. + H.R. MATLAB Matlab - Scripts 45 M.F. + H.R. MATLAB • Script – M-Datei mit Matlab-Kommandos – Kommandos wirken auf Daten im Workspace – Oft: Hauptprogramm • Beispiel Fibonaccizahlen >> type fibo.m % fibo.m : erzeuge Fibonaccizahlen < 1000 f = [ 1 1 ]; i = 1; while f(i) + f(i+1) < 1000 f(i+2) = f(i) + f(i+1); i = i + 1; end plot(f) >> fibo %-Zeichen: Kommentar Datei fibo.m Dateiname als Kommando: führt Kommandos in Datei aus Danach sind f und i im Workspace Start-Scripts Beim Start von Matlab • matlabrc.m Zentrale Initialisierungsdatei • startup.m Benutzerdefinieres Script startup.m Gesucht an zwei Stellen: ./startup.m Falls nicht vorhanden: $HOME/matlab/startup.m Anwendung: Initialisierung von Konstanten etc. 46 M.F. + H.R. MATLAB Funktionen (1) • Funktion – M-Datei, die mit Wort function in erster Zeile beginnt – Funktionsdatei name.m definert neue Funktion name – Hat Ein- / Ausgabeparameter – Wirkt auf Daten in eigenem (lokalem) Workspace – Anwendung + Großer Teil von Matlab = M-Dateien + Erweiterung von Matlab 47 M.F. + H.R. MATLAB Funktionen (2) • Beispiel: Datei mean.m 48 M.F. + H.R. MATLAB mean.m = Funktions-M-Datei y = Ausgabeparameter mean = Funktionsname x = Eingabeparameter function y = mean(x) %MEAN Mittelwert % Für Vektoren gibt mean(x) Mittelwert % Für Matrizen gibt mean(x) Zeilenvektor % mit Spaltenmittelwerten [m,n] = size(x) if m == 1 , m = n , end y = sum(x) / m Kommentar: Hilfstext (help mean) >> mean(1:99) 50 Variablen m,n, y lokal in mean Funktionen (3) • Mehrfache Ein- / Ausgabeparameter function [aus1, aus2] = fun (ein1, ein2, ein3) Beispiel function [mean, stdev] = stat (x) [m,n] = size(x); if m == 1 , m = n ; end mean = sum(x)/m; stdev = sqrt(sum(x.^2)/m - mean.^2); 49 M.F. + H.R. MATLAB Interaktion mit Benutzer echo, disp, input, pause, keyboard • echo Gib Kommandos am Schirm aus • disp Gib Wert am Schirm aus disp (x) Falls x Text enthält, wird dieser ausgegeben • input Erwarte Wert von Benutzer n = input('Eingabe n ') • pause Halte an und warte auf Tastendruck. pause(n) wartet n Sekunden • keyboard Nimm Benutzereingabe als Script 50 M.F. + H.R. MATLAB Globale Variablen 51 M.F. + H.R. MATLAB • Jede Matlab-Funktion hat eigene Variablen • Manchmal: mehrere Funktionen - gemeinsame Variablen Definiere globale Variablen Syntax global VAR1 VAR2 Heißt, daß VAR1 und VAR2 einem speziellen globalen Workspace angehören Global-Definitionen erforderlich in: + Allen Funktionen, die globalen Wert von VAR1 und VAR2 verwenden + Falls nötig: Basisworkspace Beachte: + Funktionen, die VARi nicht global definieren, verwenden lokale Variable ( 3.5) Konvention: + Globale Variablen werden oft in Großbuchstaben geschrieben Zeichenketten 52 M.F. + H.R. MATLAB • Zeichenketten zwischen Einfachapostrophen >> s = 'Hallo'; Abspeicherung: Zeilenvektor von ASCII-Werten >> size(s) 1 5 >> abs(s) 72 97 108 108 111 Konkatenieren: Blockmatrixnotation >> s = [ s, ' da!' ] s = Hallo da! • Zeichenkettenbezogene Funktionen disp isstr strcmp num2str, int2str, sprintf An Schirm ausgeben Stelle fest, ob Zeichenkette Vergleiche Zeichenketten Verwandle Zahl in Zeichenkette Die Eval-Funktion 53 M.F. + H.R. MATLAB Leistungsfähige Makrofunktion • Funktion Sei t Zeichenkette mit Matlab-Kommando. eval(t) führt Text in t als Kommando aus • Beispiel: Hilbertmatrix t = '1/(i+j-1)' for i = 1:n for j = 1:n a(i,j) = eval(t) end end Beachte Leerzeichen (Matrix rechteckig!) • Beispiel: Funktionen numerieren spiele = ['schach'; 'dame '; 'mühle '; 'go k = input('Spielnummer eingeben: '); eval(spiele(k,:)) ']; Effizienz (1) • Geschwindigkeit – Eingebaute Funktionen mehr als 1 Größenordnung schneller als Interpreter – Vektorisiere Algorithmen wenn Effizienz nötig ist! Beispiel: statt i = 0; for t = 0:0.01:10 i = i + 1; y(i) = sin(t); end verwende t = 0:0.01:10; y = sin(t) 54 M.F. + H.R. MATLAB Effizienz (2) • Vektoren – Falls Vektorisierung unmöglich: reserviere Platz für Resultatsmatrizen/vektoren Beispiel: verwende y = zeros(1,100); for i = 1:100 y(i) = det(X^i); end viel schneller als wenn erste Zeile fehlte (und y wachsen müßte) • Speicher – Löschen von Variable fragmentiert Speicher (außer der letzten Variablen) – Vergrößern von Vektoren führt zu Neuzuweisung Fragmentierung – Funktionsargumente werden erst in lokalen Workspace kopiert, wenn man sie ändert Kein Speicherproblem mit großen Argumentvariablen 55 M.F. + H.R. MATLAB Funktionale • Funktionen mit Funktionen als Argumente – Numerische Quadratur (Integration) quad Bestimmtes Integral von Funktion einer Variable quad8 - " - , höhere Ordnung – Nichtlineare Gleichungen, Optimierung fmin Minimiere Funktion einer Variable fmins Minimiere Funktion mehrerer Variablen (umbeschränkt) fzero Nullstelle Funktion einer Variable – Numerische Integration von Differentialgleichungen ode23 2. u. 3. Ordnung Runge-Kutta Integration ode45 4. u. 5. Ordnung Runge-Kutta-Fehlberg Integration – Optimization Toolbox weitere Optimierungsfunktionen 56 M.F. + H.R. MATLAB Quadratur 57 M.F. + H.R. MATLAB • Numerische Integration Beispiel: >> type kreis.m function k = kreis(x) k = sqrt(1 - x.^2); Funktionsname als Zeichenkette Integriere >> 4*quad('kreis',0,1) - pi Recursion level limit reached in quad. ans = -2.7014e-05 Methode höherer Ordnung >> 4*quad8('kreis',0,1) - pi ans = -1.5979e-07 Singularity likely. Optimierung, Nullstellen 58 M.F. + H.R. MATLAB • Suche nach Minima einer Funktion Beispiel >> type ord4.m function s = ord4(x) s = x.^4 - 4 * x.^2 + x; >> x = linspace(-2.5,2.5); >> plot(x,ord4(x)); >> fmin('ord4',-3,3) ans = -1.4730 • Suche nach Nullstellen >> fzero('ord4',0.1) ans = 2.9512e-017 Schätzwert Differentialgleichungen (1) 59 M.F. + H.R. MATLAB • Lösung eines expliziten Systems gekoppelter Differentialgleichungen (Anfangswertproblem) y '( t ) = f ( t, y ) Anfangswert von t Endwert von t ode23 und ode45 Anfangswert von y [t, y] = odexy(F, t0, tend, y0, tol) Genauigkeit Ableitung f ystrich = fun(t,y) wobei F == 'fun' Differentialgleichungen (2a) • Beispiel: Mathieu-Differentialgleichung Pendel mit periodisch bewegter Aufhängung j" = ( a - b sin( t ) ) sin( j ) >> type pendel.m function phip = pendel(t,phi) % Gleichung für Pendel mit % beweglicher Aufhängung: % phi" = ( a - b sin(t) ) sin(phi) % phi = [ phi; phi' ] global a b phip = [ phi(2) (a-b*sin(t)).*sin(phi(1)) ]; >> global a b , a = 1; b = 0.5; >> [t,phi] = ode23('pendel', 0, 100, [0;0.1]); 60 M.F. + H.R. MATLAB Differentialgleichungen (2b) • Beispiel: Mathieu-Differentialgleichung Pendel mit periodisch bewegter Aufhängung j" = ( a - b sin ( t ) ) sin ( j ) >> type pendel.m function phip = pendel(t,phi) % Gleichung für Pendel mit % beweglicher Aufhängung: % phi" = ( a - b sin(t) ) sin(phi) % phi = [ phi; phi' ] global a b phip = [ phi(2) (a-b*sin(t)).*sin(phi(1)) ]; >> global a b , a = 1; b = 0.5; >> [t,phi] = ode23('pendel', ... 0, 100, [0;0.1]); >> plot(t,phi) >> plot(phi(:,1),phi(:,2)) Besitzt chaotische Lösungen 61 M.F. + H.R. MATLAB Graphik (1) 62 M.F. + H.R. MATLAB Übersicht • Struktur: Graphikobjekte (Linien, Oberflächen) Manipulation der Objekte möglich, nicht erforderlich • 2-D-Graphik Zeichnen plot Beschriften title, xlabel, ylabel, text Wertebereiche axis 2-D-Plot von Vektoren oder Spalten von Matrizen Titel, Achsenbeschriftung, bel. Text Einstellen der Wertebereiche für Achsen Graphik (2) 63 M.F. + H.R. MATLAB • 3-D-Graphik Wertepaare erzeugen meshgrid Höhenlinien zeichnen contour, contour3 3-D-Plots mesh, meshc, meshz surf, surfc Beschriften title, xlabel, ylabel, zlabel, text clabel Wertebereiche axis 3-D-Linienplot, mit Höhenlinien, mit Nullebene 3-D-Oberfläche, mit Höhenlinien Titel, Achsenbeschriftung, bel. Text Höhenlinienbeschriftung Einstellen der Wertebereiche für Achsen 2-D-Plot 64 M.F. + H.R. MATLAB • plot - Funktion plot(y) plot(x,y) Zeichnet Spalten von Matrix y gegen Index Zeichnet Vektor y gegen Vektor x x oder y Matrix: Zeilen oder Spalten werden gegen Vektor gezeichnet Beispiel: t = linspace(0,2*pi); x = sin(t); y1 = sin(t+0.25); y2 = sin(t+0.5); plot(x,y1,'r-',x,y2,'g--'); Linie grün, strichliert Linie rot, durchgezogen Beschriften, Linienstil • Plots beschriften (nach Plot-Kommando!) title('Phasenverschiebung') ylabel('y = sin(t+phi)') xlabel('x = sin(t)') • Linienstile plot(x,y,stil) stil ist 1-3 Zeichen. Bedeutung: Farben: y m c gelb, magenta, cyan r g b rot, grün, blau w k weiß, schwarz Punkte markieren: . o x Punkt, Kreis, X + * Kreuz, Stern Linienart durchgezogen : punktiert -. strichpunktiert -strichliert 65 M.F. + H.R. MATLAB Neue Linien zu bestehender Zeichnung • Das hold-Kommando plot(x) hold on plot(y1,'--') plot(y2,'-.') hold off 66 M.F. + H.R. MATLAB Wertebereiche ändern 2- und 3-D-Plots finden Wertebereiche automatisch Ändern: axis Wertebereich für aktuelle Zeichnung erfragen und setzen Anwendung: nach Plot-Kommando zu geben axis([xmin, xmax, ymin, ymax]) Setze Limits explizit axis([xmin, xmax, ymin, ymax, zmin, zmax]) (für 3-D-Plots) axis('auto') Schalte automatische Skalierung wieder ein v = axis axis(v) axis(axis) Merke aktuelle Limits in v. Später... Setze Limits auf gemerkten Wert Friere Achsen auf aktuellen Wert ein axis('ij') axis('xy') axis('square') axis('equal') axis('off') axis('on') Matrixmodus: Urprung links oben, i-Achse , j-Achse Kartesisch (Voreinstellung): Ursprung links unten. Beide Achsen gleich lang Beide Achsen selber Maßstab Schalte Achsenbeschriftung aus Schalte Beschriftung wieder ein (Voreinstellung) 67 M.F. + H.R. MATLAB Funktionen zeichnen • Direkte Methode: plot x=(0:1/200:1)'; plot(x,cos(tan(pi*x))) Problem: Funktion oszilliert schnell Werte werden ausgelassen • Funktion plotten: fplot Erzeuge Datei osz.m mit Funktion function y = osz(x) y = cos(tan(pi*x)); und verwende fplot fplot('osz',[0 1], ... 25,20,10) Max. Subunterteilungen optionell Max. Knickwinkel Min. Unterteilungen 68 M.F. + H.R. MATLAB 3-D-Graphik • Beispiel: sin(r)/r x = -8:0.5:8; y = x; [X,Y] = meshgrid(x,y); R = sqrt(X.^2+Y.^2+eps); Z = sin(R)./R; mesh(X,Y,Z) 69 M.F. + H.R. MATLAB Animation • Für schnelle Wiedergabe kurzer Sequenzen: Movie-Funktion • Sonst: Anwendung objektorientierter Graphik % Lissajou-Figuren clf; m=input('m= '); n=input('n= '); x=linspace(0,2*pi,1000); Merke Graphikobjekt "Kurve" p=plot(sin(m*x),sin(n*x),'k','EraseMode','None'); Kurve bleibt in axis([-1.1,1.1,-1.1,1.1]); Schirmspeicher while 1 stehen for delta=linspace(0,2*pi,40*max(m,n)) y=sin(n*x-delta); Lösche Kurve: Setze Farbe schwarz set(p,'Color','k'); Ändere Daten set(p,'Ydata',y); Mache neuen Graph sichtbar set(p,'Color','y'); drawnow; end end 70 M.F. + H.R. MATLAB Beispiel zur Numerik Endliche Genauigkeit der Zahlendarstellung Stelle ( x - 100 )3 im Intervall [ 100 - e, 100 + e ] ( e = 0.001 ) auf drei Arten berechnet graphisch dar: 1. In faktorisierter Form function y = yfac(x) y = ( x - 100 ) .^ 3; 2. Hornerschema function y = yhor(x) y = x.*(x.*(x - 300) + 30000) - 1000000; 3. Ausmultipliziert function y = yexp(x) y = x.^3 - 300 * x.^2 + 30000 * x - 1000000; Erkläre Effekt und Größenordnung Wie wirkt dieser sich z.B. auf Nullstellensuche aus? 71 M.F. + H.R. MATLAB