Matlab

Werbung
Ü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 33-Matrizen, x 31 Spaltenvektor
C = A + B
Definiert 33-Matrix C
y = x - 1
y 31, 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 nn und b n1
Erhalten Lösung x von A x = b als
x = A \ b
k Simultane Gleichungssysteme: b ist nk, 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
100100 Division
100100 Inversion
7105
2106
510-14
410-14
10001000 Division
10001000 Inversion
7108
2109
510-13
310-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 (00)
Leere Matrizen
34
M.F. + H.R.
MATLAB
• Leere (00) Matrizen
– gültige Werte für Variablen
– Viele Operationen liefern plausible Werte
• Erzeugung: Leere eckige Klammern []
x = []
Unterscheide
clear(x)
Definiert Variable x als 00 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)
nn Einheitsmatrix
rand(m,n)
mn 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 nn - 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
Herunterladen