Upload
elisabeth-kellen
View
148
Download
0
Tags:
Embed Size (px)
M.F. + H.R.MATLAB
1Ü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
M.F. + H.R.MATLAB
2Matlab (1)
• 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
M.F. + H.R.MATLAB
3Matlab (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 Datenersetzt oft Spezialprogramme
– Entwicklung von LösungsmethodenPrototypentwicklung:erster Schritt zu Fortran/C - Programm
M.F. + H.R.MATLAB
4Matrizen, Vektoren und Skalare
• Elementares Datenobjekt:m n - Matrix (reell, komplex)
• Sonderfälle:– Skalar
1 1 - Matrix
– Zeilenvektor1 n - Matrix
– Spaltenvektorn 1 - Matrix
• Alle algebraischen Operationen definiert
• + ,-, * , /, ^, …
M.F. + H.R.MATLAB
5Matrizen eingeben (1)
• Methoden– Explizit
– In M-Files erzeugen
– Aus externen Dateien laden
– Durch Funktionen erzeugen
• Explizite EingabeEingabe: zeilenweise
A = [ 1 2 3 ; 4 5 6 ; 7 8 9 ]
ergibt
A = 1 2 3 4 5 6 7 8 9
; oder trennt Zeilen in Matrix
definiert Variable A als Matrix
Leerzeichen oder , trennt Elementeinnerhalb Zeile
M.F. + H.R.MATLAB
6Matrizen eingeben (2)
• Durch M-FileDatei gena.m enthalte
% cat gena.mA = [ 1 2 3 4 5 6 7 8 9 ]%
Matlab-Kommando
>> gena
erzeugt Matrix A
• Externe DateienMatlab-Kommando save speichert Daten in Datei.
Kann mit load eingelesen werden
• Durch Matlab-Funktionen erzeugenBesprechung später
M.F. + H.R.MATLAB
7Matrixelemente (2)
• MatrixindizesMit runden Klammern ( )
>> A(2,1)
ans = 4
Erzeugen neuer Elemente
>> x(5) = abs(x(1))
x = -1.3000 1.7321 4.8000 0 1.3000
Zusätzliche Elemente = 0nach Bedarf eingeschoben
M.F. + H.R.MATLAB
8Blockmatrizen
• 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 2 3 4 5 6
; unterdrückt Ausgabe
Ausgabe beliebiger Ausdruckdurch Eingabe ohne ;
M.F. + H.R.MATLAB
9Statements, Ausdrücke, Variable
• Matlab - Statementvariable = ausdruck
oder
ausdruck
• Ausdruck– Einfache Variable oder Konstante
– Komplexer Ausdruckkonstruiert 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
M.F. + H.R.MATLAB
10Information über Variablen
• Variablen in Workspace gespeichertInfo über Workspace:
who listet alle Variablen
Detailinfo über Workspace
whos listet Variablen mit Größe, ob komplex
• Vordefinierte Variablen bzw. Funktionen eps Maschinengenauigkeit = min{ x>0 |
1+x 1 }ans letztes Ergebnis (Answer)i j imaginäre Einheitpi Zahl realmax realmin größte / kleinste darstellbare Zahlinf Unendlich. z.B. Ergebnis von 1 / 0NaN Not A Number z.B. Ergebnis von 0 / 0
u.a.
M.F. + H.R.MATLAB
11Hilfe
• On-line-Hilfehelp
ergibt...matlab/general - General purpose commands.matlab/ops - Operators and special characters.matlab/lang - 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
M.F. + H.R.MATLAB
12Beenden, Abspeichern der Sitzung
• Beendenquit
oder
exit
• Sitzung speichernsave name speichert alle lokalen Variablen in name.mat
save temp x speichert nur Variable x in temp.mat
• Einlesen von MAT-Fileload name lädt in name.mat gespeicherte Daten
M.F. + H.R.MATLAB
13Zahlen
• Dezimalnotation, mit ZehnerexponentenBeispiele3.14, -12, 1.6022e-19, 6.022e23
Imaginäre Zahlen3i, -3e5i
• 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
M.F. + H.R.MATLAB
14Arithmetische Ausdrücke
• Ausdrücke: Operatoren+ Addition
- Subtraktion
* (Matrix-) Mulitplikation
/ Division
\ Division nach links: x = A \ b ist Lösung von A x = b
^ Potenz
M.F. + H.R.MATLAB
15Komplexe Zahlen und Matrizen
• Komplexe Zahlenz = 3+4*i
w = r*exp(i*phi)
• Komplexe MatrizenA = [1 2 ; 3 4] + i*[5 6 ; 7 8]
A = [1+5i , 2+6i ; 3+7i , 4+8i]
Achtung: Kein Leerzeichen!
Falls i undefiniert wurde:Wiederherstellung i = sqrt(-1)
M.F. + H.R.MATLAB
16Ausgabeformat (1)
• Format für alle weiteren Ausgaben: format - BefehlNormales Format: 4 Dezimalstellen: short-Format
>> format short
>> x = [ 1.2 3.7e-6 0 ]
x = 1.2000 0.0000 0
>> format short e , x
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
exakt Null
Voreinstellung
gerundet Null
M.F. + H.R.MATLAB
17Funktionen (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)
M.F. + H.R.MATLAB
18Funktionen (2)
• 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: EigenvektorenD: Diagonale Matrix mit
Eigenwerten
Funktionen wissen, wieviele Ein/Ausgabeargumente sie haben(Überladen)
[x,i] = max(A) i enthält Indices der Maxima
• Regel:Matlab modifiziert nie Eingabeargumente
Eingabeargumente
Ausgabeargumente
M.F. + H.R.MATLAB
19Matrixoperationen
• Grundregel:Syntax und Bedeutung entspricht zumeistmathematischen Konventionen
Einschränkungen:Numerische GenauigkeitZeichensatz
• Übersicht– Transponieren
– Addieren, Subtrahieren
– Multiplizieren
– Dividieren: Gleichung lösen
– Potenzen
M.F. + H.R.MATLAB
20Transponieren
• Apostroph: Transponierte Matrix (reell)
>> A = [1 2 3 ; 4 5 6 ; 7 8 9 ] , B = A'
A = 1 2 3 4 5 6 7 8 9B = 1 4 7 2 5 8 3 6 9
Spaltenvektor
>> x = [ -1 0 2 ]'oder x = [ -1; 0; 2 ]
x = -1 0 2
M.F. + H.R.MATLAB
21Adjungierte Matrix
• Komplexe Matrix:Apostroph bedeutet in Wirklichkeit Adjungierte Matrix
>> k = [ 1 i ; 0 1 ]k = 1.0000 0 + 1.0000i 0 1.0000
>> k'ans = 1.0000 0 0 - 1.0000i 1.0000
Transponierte: verwende .'
>> k.'ans = 1.0000 0 0 + 1.0000i 1.0000
M.F. + H.R.MATLAB
22Addieren, 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 sumFür Vektoren: Summe der Elemente
Für Matrizen: Zeilenvektor, der Spaltensummen enthält
M.F. + H.R.MATLAB
23Matrixmultiplikation
• 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 angewandtA * c
M.F. + H.R.MATLAB
24Division von Matrizen
• Zwei Matrixdivisionszeichen\ Division nach links
/ Division nach rechts
• BedeutungX = 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 vonX*A = B
Es gilt: B/A = (A'\B')'
• Anwendung: Lösen von GleichungssystemenSei A nn und b n1
Erhalten Lösung x von A x = b alsx = A \ b
k Simultane Gleichungssysteme: b ist nk, Spalten von k sind Inhomogenitäten Spalten von x sind Lösungen
M.F. + H.R.MATLAB
25Lösung von Gleichungssystemen: Hinweise
• Effizienz, GenauigkeitFür Gleichungssysteme immer Matrixdivision,
nie Inversion!
Vergleich:Division: x = A \ bInversion: x = inv(A) * b
Zufallsmatrix Flops Genauigkeit
100100 Division 7105 510-14
100100 Inversion 2106 410-14
10001000 Division 7108 510-13
10001000 Inversion 2109 310-12
• Schwach besetzte MatrizenSparse 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)
M.F. + H.R.MATLAB
26Potenzen von Matrizen
• Zirkumflex: MatrixpotenzDefiniert 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)
M.F. + H.R.MATLAB
27Weitere 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 Funktionendet, inv Determinante, Inverese
trace Spur
poly Charakteristisches Polynom
M.F. + H.R.MATLAB
28Elementweise Matrixoperationen
• Array-Operationen:Matrixelemente werden einzeln verknüpft
• Notation:Punkt (.) vor Operator
• Übersicht– Addition, Subtraktion, Multiplikation, Division
– Vergleichsoperationen
– Logische Operationen
– Mathematische Funktionen
M.F. + H.R.MATLAB
29Binäre elementweise Operationen
• Addition, SubtraktionMatrixoperation elementweise definiert
• Multiplikation, Division.* bedeutet elementweise Multiplikation
./ .\ elementweise Division nach rechts / links
Beispielx = [ 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 = 1 32 729z = x .^ 2 z = 1 4 9z = 2 .^ x z = 2 4 8
M.F. + H.R.MATLAB
30Vergleichsoperationen (1)
• Sechs Operatoren vergleichen Matrizen mit gleicher Dimension< kleiner als
<= kleiner oder gleich
> größer als
>= größer oder gleich
== gleich
~= ungleich
• BedeutungMatrixelemente paarweise verglichen
Ergebnis: Matrix gleicher Dimension mit Elementen ...
1 "wahr"
0 "falsch"
M.F. + H.R.MATLAB
31Vergleichsoperationen (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 Matrixelementei = find(Y > 3.0); Gibt Indizes von Elementen > 3Y(i) = 10 * ones(i); Indexvektor nächster Abschnitt
Ersetzt alle Elemente von Y größer als 3 durch 10
M.F. + H.R.MATLAB
32Logische Operationen
• Drei logische Operatoren& und (binär)
| oder (binär)
~ nicht (unär)
• BedeutungMatrixelemente 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 anyall(x) Ergebnis 1, wenn alle Elemente von x 0, sonst 0
any(x) 0, wenn alle Elemente 0, sonst 1
Anwendung in Programmenif ( all(a > 3) ) .....end
M.F. + H.R.MATLAB
33Logische Funktionen
• Logische FunktionenVektorargumente: 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)
M.F. + H.R.MATLAB
34Leere Matrizen
• Leere (00) Matrizen– gültige Werte für Variablen
– Viele Operationen liefern plausible Werte
• Erzeugung: Leere eckige Klammern []x = [] Definiert Variable x als 00 Matrix (gültig)
Unterscheide
clear(x) Löscht Variable x aus Workspace
• Entfernen von Teilen einer MatrixA(:,[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 Matrixisempty(x)
M.F. + H.R.MATLAB
35Spezielle Matrizen
• Wichtig in Erzeugung von MatrizenSpezielle 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) Erzeuge Diagonalmatrix:Matrix, deren k-te Diagonale
Elemente von V sind, sonst 0
linspace(a,b,n) Zeile mit n zwischen a und b linear verteilten Elementen
meshgrid(u,v) In Funktionen von zwei Variablen verwendet
M.F. + H.R.MATLAB
36Matrizen manipulieren
• Größere MatrizenMit 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 extrahierenrot90 Rotieren
fliplr An vertikaler Achse spiegeln
flipud An horizontaler Achse spiegeln
diag Extrahiere (oder erzeuge) Diagonale
tril Untere Dreiecksmatrix
triu Obere Dreieckmatrix
reshape Form ändern
' transponieren
: Allgemeineres Umarrangieren
M.F. + H.R.MATLAB
37Matrixfunktionen (Auswahl)
• SpektralzerlegungSei A nn - Matrix
Eigenwerte und Eigenvektoren x , definiert durch
A x = x
werden berechnet als
[X,D] = eig(A)
i-te Spalte von X ist Eigenvektor xi zu Eigenwert i = D(i,i)
• Norm, Rang, Konditionszahlcond Konditionszahl in 2-Norm (falls >> 1 Matrix singulär)
norm 1-, 2-, F- und -Norm
rank Rang
rcond Schätzung reziproke Kondition (LINPACK) (falls 0 singulär)
M.F. + H.R.MATLAB
38Integraltransformationen
• Faltung und Kovarianzconv Faltung
deconv Entfaltung
cov Kovarianz
• 1-dimensionale Fouriertransformationfft Fouriertransformation
ifft Fourierrücktransformation
fftshift Vertausche Quadranten
• 2-dimensionale Fouriertransformationfft2 2-D Fouriertransformation
ifft 2-D Fourierrücktransformation
fftshift Vertausche Quadranten
• Siehe auch Signal Processing Toolbox
M.F. + H.R.MATLAB
39Automatisierung
Matlab: ProgrammierspracheAnwendung: in M-Dateien
• Ablaufkontrollefor Schleifen
while Schleifen
if Bedingungen
break Ausprung
• M-DateienScripts
Funktionen
• Eigene Programmeecho, disp, input, pause, keyboard : Interaktion mit Benutzer
Globale Variablen
Zeichenketten
eval : Text als Befehl ausführen
Effizienz
M.F. + H.R.MATLAB
40for - Schleifen
Syntax for variable = vektor ... Matlab Statements ...end
Bedeutungvariable durchläuft Elemente von vektor und Schleifeninhalt wird ausgeführt.
Genauer: Rechte Seite ist Matrix, variable erhält nacheinander Spalten der Matrix zugewiesen
Beispielfor 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); endend
Unterdrückt Ausgabeunvollständiger Matrizen
M.F. + H.R.MATLAB
41while - Schleifen
Syntax while ausdruck ... Matlab Statements ...end
Bedeutungausdruck (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
M.F. + H.R.MATLAB
42if - elseif - else - Bedingungen
Syntax if ausdruck1 ... Matlab Statements 1 ...elseif ausdruck2 ... Matlab Statements 2 ...else ... Matlab Statements 3 ...end
Bedeutungausdruck1 (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)^kelse coeff = a^kend
elseif optionell
else optionell
M.F. + H.R.MATLAB
43break - Schleife abbrechen
Syntax for oder while ... ... break ...end
BedeutungSchleife 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 else n = 3*n+1 end endend
Bei Leereingabe Aussprung
M.F. + H.R.MATLAB
44Programmierung 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
M.F. + H.R.MATLAB
45Matlab - Scripts
• Script– M-Datei mit Matlab-Kommandos
– Kommandos wirken auf Daten im Workspace
– Oft: Hauptprogramm
• BeispielFibonaccizahlen
>> type fibo.m% fibo.m : erzeuge Fibonaccizahlen < 1000f = [ 1 1 ]; i = 1;while f(i) + f(i+1) < 1000 f(i+2) = f(i) + f(i+1); i = i + 1;endplot(f)
>> fibo
Dateifibo.m
Dateiname als Kommando:führt Kommandos in Datei ausDanach sind f und i im Workspace%-Zeichen:
Kommentar
M.F. + H.R.MATLAB
46Start-Scripts
Beim Start von Matlab
• matlabrc.mZentrale Initialisierungsdatei
• startup.mBenutzerdefinieres Script startup.m
Gesucht an zwei Stellen:
./startup.m
Falls nicht vorhanden:
$HOME/matlab/startup.m
Anwendung:Initialisierung von Konstanten etc.
M.F. + H.R.MATLAB
47Funktionen (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
M.F. + H.R.MATLAB
48Funktionen (2)
• Beispiel:Datei mean.m
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 , endy = sum(x) / m
>> mean(1:99)
50
mean.m = Funktions-M-Dateiy = Ausgabeparametermean = Funktionsnamex = Eingabeparameter
Kommentar:Hilfstext (help mean)
Variablen m,n, y lokal in mean
M.F. + H.R.MATLAB
49Funktionen (3)
• Mehrfache Ein- / Ausgabeparameterfunction [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);
M.F. + H.R.MATLAB
50Interaktion mit Benutzer
echo, disp, input, pause, keyboard
• echoGib Kommandos am Schirm aus
• dispGib Wert am Schirm aus
disp (x)
Falls x Text enthält, wird dieser ausgegeben
• inputErwarte Wert von Benutzern = input('Eingabe n ')
• pauseHalte an und warte auf Tastendruck. pause(n) wartet n Sekunden
• keyboardNimm Benutzereingabe als Script
M.F. + H.R.MATLAB
51Globale Variablen
• Jede Matlab-Funktion hat eigene Variablen
• Manchmal: mehrere Funktionen - gemeinsame VariablenDefiniere globale Variablen
Syntaxglobal VAR1 VAR2Heiß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
M.F. + H.R.MATLAB
52Zeichenketten
• 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 Funktionendisp An Schirm ausgeben
isstr Stelle fest, ob Zeichenkette
strcmp Vergleiche Zeichenketten
num2str, int2str, sprintf Verwandle Zahl in Zeichenkette
M.F. + H.R.MATLAB
53Die Eval-Funktion
Leistungsfähige Makrofunktion
• FunktionSei 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) endend
• Beispiel: Funktionen numerieren spiele = ['schach'; 'dame '; 'mühle '; 'go '];k = input('Spielnummer eingeben: ');eval(spiele(k,:))
Beachte Leerzeichen(Matrix rechteckig!)
M.F. + H.R.MATLAB
54Effizienz (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)
M.F. + H.R.MATLAB
55Effizienz (2)
• Vektoren– Falls Vektorisierung unmöglich:
reserviere Platz für Resultatsmatrizen/vektoren
Beispiel:
verwendey = 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 Workspacekopiert, wenn man sie ändertKein Speicherproblem mit großen Argumentvariablen
M.F. + H.R.MATLAB
56Funktionale
• 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 Toolboxweitere Optimierungsfunktionen
M.F. + H.R.MATLAB
57Quadratur
• Numerische IntegrationBeispiel:
>> type kreis.mfunction k = kreis(x)k = sqrt(1 - x.^2);
Integriere
>> 4*quad('kreis',0,1) - piRecursion level limit reached in quad. Singularity likely.ans = -2.7014e-05
Methode höherer Ordnung
>> 4*quad8('kreis',0,1) - pians = -1.5979e-07
Funktionsname als Zeichenkette
M.F. + H.R.MATLAB
58Optimierung, Nullstellen
• Suche nach Minima einer FunktionBeispiel
>> type ord4.mfunction 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
M.F. + H.R.MATLAB
59Differentialgleichungen (1)
• Lösung eines expliziten Systems gekoppelter Differentialgleichungen(Anfangswertproblem)
y '( t ) = f ( t, y )
ode23 und ode45
[t, y] = odexy(F, t0, tend, y0, tol)
Ableitung fystrich = fun(t,y)wobeiF == 'fun'
Anfangswert von t
Endwert von t
Anfangswert von y
Genauigkeit
M.F. + H.R.MATLAB
60Differentialgleichungen (2a)
• Beispiel: Mathieu-DifferentialgleichungPendel mit periodisch bewegter Aufhängung
" = ( a - b sin( t ) ) sin( )
>> type pendel.mfunction phip = pendel(t,phi)% Gleichung für Pendel mit% beweglicher Aufhängung:% phi" = ( a - b sin(t) ) sin(phi)% phi = [ phi; phi' ]global a bphip = [ 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]);
M.F. + H.R.MATLAB
61Differentialgleichungen (2b)
• Beispiel: Mathieu-DifferentialgleichungPendel mit periodisch bewegter Aufhängung
" = ( a - b sin ( t ) ) sin ( )
>> type pendel.mfunction phip = pendel(t,phi)% Gleichung für Pendel mit% beweglicher Aufhängung:% phi" = ( a - b sin(t) ) sin(phi)% phi = [ phi; phi' ]global a bphip = [ 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
M.F. + H.R.MATLAB
62Graphik (1)
Übersicht
• Struktur:Graphikobjekte (Linien, Oberflächen)
Manipulation der Objekte möglich, nicht erforderlich
• 2-D-GraphikZeichnen
plot 2-D-Plot von Vektoren oder Spalten von Matrizen
Beschriften
title, xlabel, ylabel, text Titel, Achsenbeschriftung, bel. Text
Wertebereiche
axis Einstellen der Wertebereiche für Achsen
M.F. + H.R.MATLAB
63Graphik (2)
• 3-D-GraphikWertepaare erzeugen
meshgrid
Höhenlinien zeichnen
contour, contour3
3-D-Plots
mesh, meshc, meshz 3-D-Linienplot, mit Höhenlinien, mit
Nullebene
surf, surfc 3-D-Oberfläche, mit Höhenlinien
Beschriften
title, xlabel, ylabel, zlabel, text Titel, Achsenbeschriftung, bel. Text
clabelHöhenlinienbeschriftung
Wertebereiche
axisEinstellen der Wertebereiche für Achsen
M.F. + H.R.MATLAB
642-D-Plot
• plot - Funktionplot(y) Zeichnet Spalten von Matrix
y gegen Index
plot(x,y) Zeichnet Vektor y gegen Vektor xx oder y Matrix: Zeilen oder Spalten werden gegen
Vektorgezeichnet
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 rot, durchgezogen
Linie grün, strichliert
M.F. + H.R.MATLAB
65Beschriften, Linienstil
• Plots beschriften (nach Plot-Kommando!) title('Phasenverschiebung')ylabel('y = sin(t+phi)')xlabel('x = sin(t)')
• Linienstileplot(x,y,stil)
stil ist 1-3 Zeichen. Bedeutung:
Farben:y m c gelb, magenta, cyanr g b rot, grün, blauw k weiß, schwarz
Punkte markieren:. o x Punkt, Kreis, X+ * Kreuz, Stern
Linienart- durchgezogen: punktiert-. strichpunktiert-- strichliert
M.F. + H.R.MATLAB
66Neue Linien zu bestehender Zeichnung
• Das hold-Kommando plot(x)hold onplot(y1,'--')plot(y2,'-.')hold off
M.F. + H.R.MATLAB
67Wertebereiche ändern
2- und 3-D-Plots finden Wertebereiche automatisch
Ändern:axis Wertebereich für aktuelle Zeichnung erfragen und setzen
Anwendung: nach Plot-Kommando zu gebenaxis([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 Merke aktuelle Limits in v. Später...
axis(v) Setze Limits auf gemerkten Wert
axis(axis) Friere Achsen auf aktuellen Wert ein
axis('ij') Matrixmodus: Urprung links oben, i-Achse , j-Achse axis('xy') Kartesisch (Voreinstellung): Ursprung links unten.
axis('square') Beide Achsen gleich lang
axis('equal') Beide Achsen selber Maßstab
axis('off') Schalte Achsenbeschriftung aus
axis('on') Schalte Beschriftung wieder ein (Voreinstellung)
M.F. + H.R.MATLAB
68Funktionen zeichnen
• Direkte Methode: plot x=(0:1/200:1)';plot(x,cos(tan(pi*x)))
Problem:Funktion oszilliert schnellWerte werden ausgelassen
• Funktion plotten: fplotErzeuge Datei osz.m mit Funktionfunction y = osz(x)y = cos(tan(pi*x));
und verwende fplotfplot('osz',[0 1], ... 25,20,10)
Max. SubunterteilungenMax. KnickwinkelMin. Unterteilungen
optionell
M.F. + H.R.MATLAB
693-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)
M.F. + H.R.MATLAB
70Animation
• Für schnelle Wiedergabe kurzer Sequenzen: Movie-Funktion
• Sonst: Anwendung objektorientierter Graphik % Lissajou-Figurenclf;m=input('m= ');n=input('n= ');x=linspace(0,2*pi,1000);
p=plot(sin(m*x),sin(n*x),'k','EraseMode','None');
axis([-1.1,1.1,-1.1,1.1]);while 1for delta=linspace(0,2*pi,40*max(m,n)) y=sin(n*x-delta);
set(p,'Color','k');
set(p,'Ydata',y);
set(p,'Color','y'); drawnow;endend
Kurve bleibt inSchirmspeicherstehen
Lösche Kurve: Setze Farbe schwarz
Ändere Daten
Mache neuen Graph sichtbar
Merke Graphikobjekt "Kurve"
M.F. + H.R.MATLAB
71Beispiel zur Numerik
Endliche Genauigkeit der ZahlendarstellungStelle ( x - 100 )3 im Intervall [ 100 - , 100 + ] ( = 0.001 )
auf drei Arten berechnet graphisch dar:
1. In faktorisierter Formfunction y = yfac(x)y = ( x - 100 ) .^ 3;
2. Hornerschemafunction y = yhor(x)y = x.*(x.*(x - 300) + 30000) - 1000000;
3. Ausmultipliziertfunction 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?