Einführung in MATLAB
Einführung in MATLAB
Einführung in MATLAB
G nter M. Gramlich
u
Professor fr Mathematik an der Hochschule Ulm
http://www.hs-ulm.de/gramlich
Ulm, 30. Juni 2009
Vorwort
und wozu man Funktionen aus Matlab nutzen kann, erklre aber nicht die Mathematische
Theorie und die Algorithmen, die sich dahinter verbergen. Auch gehe ich davon aus, dass
Sie grundlegende Kenntnisse im Programmieren und mit dem Umgang wenigstens eines Betriebssystems haben.
1985: Matlab 2
30% mehr Funktionen und Kommandos,
Dokumentation.
1987: Matlab 3
Schnellere Interpreter, Farbgrak, hochauflsende Grak als Hardkopie.
1992: Matlab 4
Sparsematrizen, Animation, Visualisierung, User-Interface-Kontrolle, Debugger,
Handle-Grak.
1997: Matlab 5
Proler, objekt-orientierte Programmierung,
mehrdimensionale Arrays, Zellenarrays,
Strukturen, mehr lineare Algebra fr
Sparse-Probleme, neue DGL-Lser, Hilfe
Diese Einfhrung soll ein Einstieg in Matlab
Browser.
sein. Ich habe nur die wichtigesten Eigenschaften von Matlab behandelt. Dabei zeige ich, wie 2000: Matlab 6 (R12)
Matlab-Desktop mit Hilfe Browser, Matrizenrechnungen basierend auf LAPACK mit
1
Matlab R ist eingetragenes Warenzeichen von The
BLAS, Handle-Funktionen, eigs SchnittMathWork Inc.
Copyright c G. Gramlich
A
stelle zu ARPACK, Randwertprobleml- HTML, XML, LTEX,usw. ein. Dafr nden Sie
ser, partieller Dierenzialgleichungssystem- aber einen Zugang zum symbolischen Rechnen
Lser, JAVA Untersttzung.
mit Matlab, zu Optimierungs- und Statistikfunktionen, sowie eine Einfhrung in Simulink
2002: Matlab 6.5 (R13)
(Symbolic Toolbox, Optimization Toolbox, StaPerformance-Beschleunigung, schnellere
3
Geschwindigkeit der Kernfunktionen der tistics Toolbox, Simulink) . Im Anhang nden
Linearen Algebra fr den Pentium 4, mehr Sie ein kleines Glossar, sowie eine Auistung
wichtiger Matlab-Funktionen.
Fehler- und Warnhinweise.
Copyright c G. Gramlich
Inhaltsverzeichnis
17.
1.
1.1.
1.2.
1.3.
Einfhrung
Erste Schritte . . . . . . . . . .
Magische Quadrate (magic) . .
Grak . . . . . . . . . . . . . .
9 18.
9
10 19.
15
20.
2.
Allgemeines
15
3.
4.
5.
5.1.
5.2.
5.3.
5.4.
Die Arbeitsoberche
Das Command Window .
Command History . . . .
Der Workspace Browser
Current Directory . . . .
6.
22
7.
22
8.
Der Editor/Debugger
23
9.
Plots
24
10.
25
11.
Matlab unterbrechen
25
12.
Lange Eingabezeilen
13.
14.
Das help-Kommando
15.
Das doc-Kommando
16.
Demos
21.
19
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
23.
19
20 24.
20
25.
20
21 26.
Das lookfor-Kommando
26
Alle Funktionen?
27
Wichtige Funktionen?
27
28
28
28
Voreinstellungen
29
Einfaches Rechnen
29
27.
30
28.
31
29.
Komplexe Zahlen
32
30.
33
31.
Nicht double-Datentypen
35
32.
Merkmale von Matlab
32.1. Keine Deklaration notwendig . .
25 32.2. Variable Argumentenliste . . . .
32.3. Komplexe Arrays und Arithmetik
25
33.
Mathematische Funktionen
33.1. Rundungsfunktionen . . . . . .
26
33.2. Verwendung
mathematischer
26
Funktionen in Matlab . . . . . .
25
37
37
37
38
38
39
40
Copyright c G. Gramlich
34.
Vektoren
35.
Vektorenoperationen
42 41.
36.
36.1.
36.2.
36.3.
36.4.
36.5.
Matrizen
Matrizen erzeugen . . . . . . . .
Der Doppelpunkt . . . . . . . .
Matrizen- und Arrayoperationen
Matrizenmanipulationen . . . .
Datenanalye . . . . . . . . . . .
37.
Vektorielle Programmierung
38.
38.1.
38.2.
38.3.
43
43 42.
45
48 42.1.
52 42.2.
53
43.
55 43.1.
43.2.
56 43.3.
56 43.4.
56
57 44.
39.
Function Functions
58
40.
40.1.
40.2.
40.3.
40.4.
40.5.
40.6.
40.7.
40.8.
40.9.
40.10.
40.11.
40.12.
40.13.
40.14.
40.15.
40.16.
40.17.
40.18.
Grak
2D-Grak . . . . . . . . . . . .
3D-Grak . . . . . . . . . . . .
Funktionsdarstellungen . . . . .
Parametrisierte Kurven . . . . .
Parametrisierte Flchen . . . . .
Implizite Kurven . . . . . . . .
Implizite Flchen . . . . . . . .
Koordinatenachsen skalieren . .
Zwei y-Achsen . . . . . . . . .
Koordinatentransformationen . .
Spezielle Grakfunktionen . . .
Vektorfelder visualisieren . . . .
Graken exportieren und drucken
Digitale Bilder . . . . . . . . . .
Animationen . . . . . . . . . . .
Handle Graphics . . . . . . . . .
Graphical User Interface (GUI) .
Geometrische Krper . . . . . .
59
59
62
63
66
68
69
69
70
71
71
72
72
74
75
76
76
76
76
77
Vergleichsoperatoren, Vergleichsfunktionen
78
Logische Operatoren und logische
Funktionen
78
Logische Operatoren . . . . . . 78
Logische Funktionen . . . . . . 79
Steuerstrukturen
for-Schleife . . . .
while-Schleife . .
if-Anweisung . . .
switch-Anweisung
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
79
79
80
81
81
.
.
.
.
.
.
.
81
81
83
84
84
84
85
85
44.1.
44.2.
44.3.
44.4.
44.5.
44.6.
44.7.
m-Files
Script-Files . . . . . . . .
Function-Files . . . . . . .
Namen von m-Files . . . .
Editieren von m-Files . . .
Zur Struktur eines m-Files
Blockkommentare . . . . .
bungsaufgaben . . . . .
45.
87
46.
Namenstest
88
47.
48.
Built-in Functions
49.
49.1.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
91
92
92
96
Copyright c G. Gramlich
49.3.
49.4.
49.5.
49.6.
49.7.
49.8.
52.1.
52.2.
52.3.
52.4.
52.5.
52.6.
52.7.
Function-Handles . . . .
Anonymous Functions .
Subfunctions . . . . . .
Nested Functions . . . .
Overloaded Functions . .
Private Functions . . . .
Beispielhafte Funktionen
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
127
128
129
129
130
130
131
53.
Polynome
131
53.1. Darstellung von Polynomen . . . 131
50.
Lineare Algebra (Teil 2)
106 53.2. Nullstellen von Polynomen . . . 131
50.1. Lineare Gleichungssysteme (2) . 106 53.3. Multiplikation von Polynomen . 132
50.1.1. Quadratische Systeme . . . . . . 107 53.4. Addition und Subtraktion von
Polynomen . . . . . . . . . . . 132
50.1.2. berbestimmte Systeme . . . . 108
50.1.3. Unterbestimmte Systeme . . . . 109 53.5. Division von Polynomen . . . . 133
50.2. Lineare Gleichungssysteme (3) . 109 53.6. Ableiten von Polynomen . . . . 133
50.3. Lineare Gleichungssysteme (4) . 113 53.7. Integrieren von Polynomen . . . 134
50.4. Inverse . . . . . . . . . . . . . . 113 53.8. Auswerten von Polynomen . . . 134
53.9. Zusammenfassung . . . . . . . . 135
51.
Lineare Algebra (Teil 3)
113
Polynominterpolation
135
51.1. Normen . . . . . . . . . . . . . 114 54.
51.2. Konditionszahlen . . . . . . . . 116
Polynomapproximation
135
51.3. LU-Faktorisierung . . . . . . . . 117 55.
51.4. Cholesky-Faktorisierung . . . . 118
Kubische Splineinterpolation
137
51.5. QR-Faktorisierung . . . . . . . 119 56.
51.6. Singulrwertzerlegung . . . . . 120
57.
Stckweise lineare Interpolation 137
51.7. Pseudoinverse . . . . . . . . . . 122
51.8. Eigensysteme . . . . . . . . . . 122 58.
Nichtlineare Gleichungen (1)
138
51.9. Iterative Methoden . . . . . . . 123
51.9.1. Iterative Methoden fr lineare
59.
Optimierung (Teil 1)
142
Gleichungssysteme . . . . . . . 123
51.9.2. Iterative Methoden fr Eigensys60.
FFT
143
teme . . . . . . . . . . . . . . . 125
61.
Integration
145
51.9.3. Iterative Methoden fr Singulrwertsysteme . . . . . . . . . . . 125 61.1. Mehrfachintegrale . . . . . . . . 147
51.10. Funktionen einer Matrix . . . . 126 61.2. Tabellarische Daten . . . . . . . 148
61.3. Numerische uneigentliche Inte52.
Mehr zu Funktionen
127
gration . . . . . . . . . . . . . . 150
Copyright c G. Gramlich
61.4.
62.
62.1.
62.2.
62.3.
63.
64.
64.1.
64.2.
64.3.
64.4.
64.5.
64.6.
64.7.
64.8.
65.
65.1.
65.2.
65.3.
65.4.
66.
Stochastische Simulationen
66.1. Nherung fr . . . . . .
66.2. Zum Ziegenproblem . . . .
66.3. Das Geburtstagsparadox .
66.4. Bestimmte Integrale . . . .
67.
67.1.
67.2.
.
.
.
.
.
.
.
.
.
.
.
.
Symbolisches Rechnen
Erste Schritte . . . . . . . . . .
Wie man Maple-Funktionen verwendet . . . . . . . . . . . . . .
67.3. Mathematische Funktionen . . .
162 67.21.
162 67.22.
163
67.23.
164
67.24.
166
166 67.25.
167
168
169 68.
171
69.
171 69.1.
172 69.2.
69.3.
175
175 69.4.
Algebraische Gleichungen . . .
Grenzwerte . . . . . . . . . . .
Endliche und unendliche Summen
Dierenziation . . . . . . . . .
Partielle Dierenziation . . . . .
Der Gradient . . . . . . . . . . .
Die Hesse-Matrix . . . . . . . .
Die Jacobi-Matrix . . . . . . . .
Integration . . . . . . . . . . . .
Polynome . . . . . . . . . . . .
Taylor-Polynome . . . . . . . .
Die Funktionen funtool und
taylortool . . . . . . . . . .
Mehrdimensionale
TaylorPolynome . . . . . . . . . . . .
Lineare Algebra . . . . . . . . .
Dierenzengleichungen . . . . .
Dierenzialgleichungen . . . . .
Die kontinuierliche FourierTransformation . . . . . . . . .
Laplace-Transformation . . . . .
Spezielle mathematische Funktionen . . . . . . . . . . . . . .
Variable Rechengenauigkeit . . .
berblick ber alle symbolischen Funktionen . . . . . . . .
Weitere Bemerkungen und Hinweise . . . . . . . . . . . . . .
179
180
183
185
186
186
187
187
188
190
190
191
191
192
193
193
196
198
199
199
201
201
202
Optimierung (Teil 2)
Lineare Optimierung . . . . . .
Quadratische Optimierung . . .
Lineare Ausgleichsaufgaben mit
linearen Nebenbedingungen . . .
Nichtlineare Optimierung . . . .
202
203
204
207
208
Copyright c G. Gramlich
69.5.
70.
70.1.
71.
78.
berblick ber alle Funktionen
zur Optimierung . . . . . . . . . 213
79.
Lineare Ausgleichsaufgaben
213
80.
Weitere Aufgaben zur linearen
Ausgleichsrechnung . . . . . . . 213
81.
Das Matlab-Logo
237
Studentenversion
237
Cleves Corner
237
Handbcher
237
Progammiertips
237
83.
Literatur
237
84.
hnliche Systeme
238
A.
Glossar
239
B.
241
72.
72.1.
72.2.
Simulink
219
Erste Schritte . . . . . . . . . . 220
Konstruktion eines Blockdiagramms . . . . . . . . . . . . . 220
72.3. Weitere Arbeitsschritte . . . . . 221
72.4. Ein erstes Beispiel . . . . . . . . 221
72.4.1. Konstruktion des Blockdiagramms 221
72.4.2. Weitere Arbeitsschritte . . . . . 222
72.4.3. Simulation . . . . . . . . . . . . 223
72.5. Beispiele . . . . . . . . . . . . . 223
72.6. Vereinfachungen . . . . . . . . 225
72.7. Kommunikation mit Matlab . . 226
72.8. Umgang mit Kennlinien . . . . . 226
72.9. Weitere Bemerkungen und Hinweise . . . . . . . . . . . . . . 226
73.
73.1.
73.2.
Mehrdimensionale Arrays
243
Stichwortverzeichnis
245
74.
Literatur
230
75.
Datentypen (Klassen)
231
75.1. Zeichenketten (char) . . . . . . 232
75.2. Zellen- und Strukturenarrays . . 233
76.
235
77.
WWW-Seiten
236
Copyright c G. Gramlich
1. Einfhrung
Um ihnen ein Gefhl dafr zu geben, wie Matlab arbeitet, starten wir gleich mit ein paar Beispielen. Nhere Erklrungen und weitere Informationen erhalten Sie dann in den folgenden
Abschnitten.
Copyright c G. Gramlich
Matrizen (zweidimensionale Arrays) werden Mit dem Operator * knnen Sie die Matrizen
mit eckigen Klammern erzeugt.
A und B nun im Sinne der Matrizenalgebra (Lineare Algebra) multiplizieren, wenn Sie wol1
>> A = [1 2 3; 4 5 6]
len, denn die Mulitplikation ist deniert.
2
A =
1
4
2
5
3
6
1
ans =
2
5
Neben Matrizen und mehrdimensionalen Arrays (mehr als zwei Indizes) untersttzt
Matlab Zellenvariablen und Strukturvariablen
Spalten werden durch Leerzeichen oder Kom- (Abschnitt 75). In eine Zellenvariable kann
mas getrennt, Zeilen durch Semikolons. Gibt man Variablen mit verschiedenen Datentypen
man A(1,2) ein, so spricht man das Matrixele- zusammenpacken.
ment 2 an, denn der erste Index bezieht sich auf
die Zeile whrend der zweite Index sich auf die 1 >> Z = {x,s}
2
Z =
Spalte bezieht. Dies entspricht ganz der ma3
[3]
Ich bin ein String
thematischen Notation. Mit dem Doppelpunkt
kann man auch ganze Zeilen oder Spalten einer
Die Zellenvariable Z besteht aus einem numeMatrix ansprechen.
rischen Skalar und einem String. Zellenvaria1
>> A(1,:), A(:,2)
blen knnen mit geschweiften Klammern er2
ans =
zeugt werden.
3
4
3
4
5
6
>> B = rand(3)
B =
0.4447 0.9218
0.6154 0.7382
0.7919 0.1763
0.4057
0.9355
0.9169
10
>> A = magic(3)
A =
Copyright c G. Gramlich
3
4
5
8
3
4
1
5
9
6
7
2
Das Kommando sum(A) summiert die Elemente jeder Spalte und erzeugt die Ausgabe
1
2
ans =
15
15
15
ans =
15
6
7
8
1
6
3
5
7
4
9
2
6
1
8
7
5
3
2
9
4
4
3
8
9
5
1
2
7
6
9
10
2
7
6
9
5
1
4
3
8
2
9
4
7
5
3
6
1
8
11
4
9
2
3
5
7
8
1
6
6
7
2
1
5
9
8
3
4
12
15
15
13
6
7
2
14
1
5
9
Das Kommando sum(A) transponiert (Zeilen und Spalten vertauschen) die Matrix A
zunchst, berechnet dann die Spaltensummen
und besttigt, dass auch die Zeilensummen
gleich 15 sind:
1
8
3
4
15
>> sum(diag(A))
ans =
15
1
2
3
4
for k=0:3
rot90(A,k)
rot90(A,k)
end
>> sum(diag(flipud(A)))
ans =
15
ans =
-360
11
Copyright c G. Gramlich
1
2
3
4
5
6
23/360
19/180
-37/360
2
3
4
5
>> A
A =
[ 8,
[ 3,
[ 4,
= sym(A)
1, 6]
5, 7]
9, 2]
Jetzt kann man die Determinante im Nenner erkennen. Mit format short knnen wir wie- konverteiert die Matrix A zu einer symbolischen Matrix. Die Kommandos
der auf die Defaultausgabe zurckschalten.
Die Norm einer Matrix, die Eigenwerte und 1 sum(A), sum(A), det(A), inv(A),
die singuren Werte sind wichtige Gren ei- 2 eig(A), svd(A)
ner Matrix. Hier sind sie fr das magische Quadrat der Ordnung drei:
produzieren die entsprechenden symbolischen
Resultate.
1
2
3
4
5
6
7
8
9
10
11
12
13
>> r = norm(A)
r =
15.0000
>> e = eig(A)
e =
15.0000
4.8990
-4.8990
>> s = svd(A)
s =
15.0000
6.9282
3.4641
3
4
Bis jetzt haben wir alle unsere Berechnungen in Gleitpunktarithmetik durchgefhrt. Diese Arithmetik wird im wissenschaftlichen und
ingenieurmigen Rechnen am meisten verwendet, insbesondere fr groe Matrizen.
Fr eine (3, 3)-Matrix knnen wir die Berechnungen leicht symbolisch wiederholen. Dabei
verwenden wir die Symbolic Toolbox, die auf
Name
Size
Bytes Class
X
648x509 2638656 double
caption 2x28
112 char
map
128x3
3072 double
6
7
Hierbei ist X die Bildmatrix des Grauwertbildes und in der Variablen map ist die Graustufenskalierung enthalten. Das Bild wird mit den
Anweisungen
12
Copyright c G. Gramlich
1
2
3
>> image(X)
>> colormap(map)
>> axis image
50
100
150
200
250
300
350
100
100
200
300
200
300
400
500
600
2
3
4
>>
>>
>>
>>
load detail
image(X)
colormap(map)
axis image
16
5
9
4
2
11
7
14
3
10
6
15
13
8
12
1
Die
Aufrufe
sum(A),
sum(A),
sum(diag(A))
und
sum(diag(flipud(A))) liefern jeweils
den Wert 34 und zeigen somit, dass A ein
magisches Quadrat ist.
Dieses magische Quadrat ist aber nicht das
Gleiche wie in D rers Radierung. Wir brauu
chen aber nur die zweite und dritte Spalte vertauschen. Das geht so:
1
A =
2
3
4
5
6
>> A = magic(4)
13
Copyright c G. Gramlich
17
18
for n=1:24
r(n) = rank(magic(n));
end
[(1:24) r]
19
20
21
22
23
24
17
18
19
20
21
22
23
24
17
11
19
3
21
13
23
3
Schauen Sie sorgfltig auf die Tabelle. Ignorieren Sie den Fall n = 2, denn dann liegt kein magisches Quadrat vor. Knnen Sie Strukturen erkennen? Mit Hilfe eines Sulendiagramms erkennt man die Strukturen besser. Die Anweisungen
1
2
>> bar(r)
>> title(Rang magischer Quadrate
)
erzeugen eine Tabelle in der man mit zunehmender Ordnung den Rang ablesen kann.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
3
5
5
7
3
9
7
11
3
13
9
15
3
20
15
10
5
0
0
10
15
20
25
14
Copyright c G. Gramlich
Rang drei. Diese Matrizen sind also stark k = 1 (Tragfhigkeit), r = 0.6 (Wachstumsrasingulr.
te) und der Anfangsbedingung y0 = 0.01 (An Ist n = 6, 10, 14, . . ., so hat die Matrix den fangsbestand), siehe Abbildung 4. Die darin
Rang n/2 + 2. Auch diese Matrizen sind sin1
gulr, nicht aber so stark wie die vorhergehende Klasse.
0.8
Mit edit magic knnen Sie sich den
Function-File anschauen, der die magischen
Quadrate erzeugt. Dort knnen Sie auch die
obigen drei Fallunterscheidungen wieder
erkennen.
0.6
0.4
0.2
0
0
10
15
20
1.3. Grak
Abbildung 4: Logistisches Wachstum
Matlab verfgt ber mchtige Grakfhigkeiten. Dieser Abschnitt zeigt erste Schritte, siehe vorkommenden Rechenoperationen ./, * und
Abschnitt 40 fr weitere Einzelheiten.
/ werden in Abschnitt 36.3 erklrt.
Die Funktion plot verfgt ber viele grasche Mglichkeiten; sie eine der grundlegenden Grakfunktionen in Matlab. Sind x und 2. Allgemeines
y zwei Vektoren der gleichen Lnge, so net der Befehl plot(x,y) ein Grakfenster Matlab ist ein sehr leistungsfhiges Software(Figure) und zeichnet die Elemente von x ge- system fr alle Arten von Berechnungen. Der
gen die Elemente von y, das heit er verbindet Name Matlab kommt von Matrix Laboratory
die Punkte (x(i),y(i)) durch gerade Linien. und verweist auf die zwei berlegungen, die
Es entsteht ein Polygonzug. Der erste Vektor bei der Entwicklung eine Rolle gespielt hax bildet die Koordinaten entlang der x-Achse ben. Grundelemente sind Matrizen und ihre
und der zweite Vektor y die Koordinaten ent- Manipulation, die in numerischen Verfahren
optimal eingesetzt werden knnen, gleichzeilang der y-Achse.
tig verfolgt man ber Laboratory den GedanDie Anweisungen
ken der Entwicklung und Erweiterung. Matlab
1
>> k = 1; r = 0.6; y0 = 0.01;
ist ein interaktives Matrix-orientiertes Softwa2
>> x = linspace(0,20);
resystem, in dem sich Probleme und Lsun3
>> y = k./(1+(k/y0-1)*exp(-r*x));
gen in vertrauter mathematischer Schreibweise
4
>> plot(x,y), grid,
darstellen lassen.
zeichnen den Graf der logistischen Wachtums- Mittlerweile gibt es auer Matrizen bzw. zweitumsfunktion von 0 bis 20 mit den Parametern dimensionalen Feldern (Arrays) weitaus kom-
15
Copyright c G. Gramlich
ezient in der Lehre zunchst in der (Numerischen) Linearen Algebra, spter und jetzt in
vielen anderen Bereichen einzusetzen. Zur
Geschichte von Matlab siehe http://www.
mathworks.com/company/newsletters/
news_notes/clevescorner/dec04.html.
16
Copyright c G. Gramlich
nutzer hat somit die Mglichkeit, die Funktionalitt von Matlab durch eigene Programme
beliebig zu erweitern. Dies kann dadurch geschehen, dass er Matlab-Programme schreibt
sogenannte m-Files oder C/C++, Fortran
bzw. Java-Codes einbindet. Dadurch stellt Matlab ein oenes System dar.
Die grundlegenden Datenelemente von Matlab sind Matrizen bzw. mehrdimensionale Arrays (Felder), die nicht dimensioniert werden mssen. Dadurch lassen sich viele technische Aufgabenstellungen, vor allem wenn sie
mit Matrizen oder Vektoren dargestellt werden
knnen, mit einem Bruchteil des Zeitaufwandes lsen, der fr die Programmierung in einer
skalaren, nicht interaktiven Sprache wie Fortran oder C/C++ erforderlich wre.
Im Verlauf mehrerer Jahre und durch Beitrge vieler Benutzer hat sich Matlab zu seinem heutigen Umfang entwickelt. In Hochschulen ist Matlab das bevorzugte Lehrmittel
fr Grund- und Aufbaukurse in Mathematik,
Ingenieurswissenschaften, Naturwissenschaften und Wirtschaftswissenschaften. In der Industrie ndet Matlab immer mehr Zuwachs
in Forschung, Entwicklung, Datenauswertung
und Visualisierungen aller Art. Folgende Punkte tragen auerdem zum Erfolg von Matlab
bei:
Syntax. Matlab besitzt eine benutzerfreundliche, intuitive Syntax, die kurz und einfach
ist. Sie lehnt sich stark an die mathematischen Schreibweisen an. Auch einen umgekehrten Prozess kann man beobachten. Matlab
nimmt Einu auf mathematische Beschreibungen, siehe zum Beispiel [3].
Toolboxen. In Form von sogenannten Toolbo-
xen lsst sich der Funktionsumfang von Matlab auf vielen Gebieten erweitern. Unter anderem stehen folgende Toolboxen zur Verfgung:
Symbolic Math Toolbox, Financial Toolbox,
Image Processing Toolbox, Neural Network
Toolbox, Optimization Toolbox, Partial Dierential Equation Toolbox, Signal Processing
Toolbox, Spline Toolbox, Statistics Toolbox und
Wavelet Toolbox. Darber hinaus stellt Matlab
eine Schnittstelle zur numerischen Programmbibliothek Nag (http://www.nag.com) bereit.
Matrizen. Grundlage von Matlab sind reelle und komplexe (einschlielich dnn besetzter) Matrizen. Die Einfhrung einer Matrix
als grundlegendes Datenelement hat sich nicht
nur in der (numerischen) Mathematik, sondern
auch in vielen anderen rechnerorientierten Bereichen als sehr vorteilhaft herausgestellt.
Symbolisches Rechnen. Durch die Symbolic
Math Toolbox ist es innerhalb der MatlabUmgebung mglich, symbolisch zu rechnen.
Dadurch kann der Benutzer symbolische und
numerische Berechnungen miteinander verknpfen. In Abschnitt 67 wird diese Toolbox
genauer beschrieben.
Prototyprealisierung. In der Praxis kommt
es vor, dass man aus den verschiedensten
Grnden heraus darauf angewiesen ist, Algorithmen in anderen Programmiersprachen,
wie zum Beispiel C/C++, Fortran, Pascal
oder Java, zu implementieren. Aber auch dann
ist es vorteilhaft, einen Prototyp des Verfahrens in Matlab zu realisieren, da dies meist
sehr schnell mglich ist, bevor man den Algorithmus bertrgt bzw. automatisch bertragen lsst (Zum Beispiel mit Hilfe des Matlab
C/C++ Compilers).
17
Copyright c G. Gramlich
wendungen bereitstellen.
Stateflow ist eine Erweiterung von Simulink
zur Simulation ereignisorientierter Modelle (Endliche Zustandsautomaten, Finite State
Machines).
Real-time Workshop ist ein Programm, mit
dem sich aus den Blockdiagrammen ein CCode bilden lsst, der von einer Vielzahl von
Echtzeitsystemen abgearbeitet werden kann.
Wir verwenden den Begri Funktion im Folgenden doppeldeutig. Zum
Einen sind mathematische Funktionen gemeint und zum Anderen handelt es sich um Matlab-Funktionen,
also um Unterprogramme. Aus dem
Zusammenhang sollte aber immer
klar sein, um welchen Typ Funktion
es sich handelt.
18
Copyright c G. Gramlich
merksamkeit; zum Beispiel mssen Arrays In jedem Fall sollten Sie den Matlab-Prompt
nicht deklariert werrden, bevor man sie be- sehen (bzw. EDU). Mit dem Kommando quit
(exit) verlassen Sie Matlab. Weitere Hinweinutzt.
Ein interaktives Arbeiten erlaubt schnelles se nden Sie in den Matlab-Handbchern. Gegebenenfalls mssen Sie Ihren Systemmanager
experimentieren und leichte Fehlersuche.
nach lokalen Installationseigenschaften befra Matlab verfgt ber mchtige, benutgen.
zerfreundliche und qualitativ hochwrtige
Grak- und Visualisierungsmglichkeiten.
Matlab m-Files sind fr eine groe Klasse
von Plattformen kompatibel.
5. Die Arbeitsoberche
Es bestehen Erweiterungsmglichkeiten
durch Toolboxen (Signalverarbeitung,
Bildverarbeitung, Statistik, Mechanik,
Hydraulik, Optimierung usw.).
Wir geben eine bersicht ber die Matlab Arbeitsoberche (Desktop) und ihrer einzelnen
Elemente: den Help Browser, Arrayeditor und
Editor/Debugger.
ber das Internet sind viele m-Files von an- Nach dem Start net sich die Matlab Arderen Benutzern zu bekommen.
beitsoberche, die auch als Desktop beWir geben hier nur eine Einfhrung in die zeichnet wird, siehe Abbildung 5. Die ArMchtigkeit von Matlab. Fr ausfhrlichere Darstellungen bezglich Matlab und Mathematik (numerisch und symbolisch) verweise ich Sie auf unser Buch [6] bzw. auf
[8], [28], [29] und natrlich auf die MatlabDokumentationen [13, 14, 15, 16, 19, 20], sowie auf die Toolbox-Dokumentationen [18, 21,
22].
19
Copyright c G. Gramlich
nen Komponenten knnen in ihrer Positionierung und Gre mit der Maus verndert und
durch Festhalten der Namensliste mit der linken Maustaste umgruppiert werden. Mit der
Dock-Eigenschaft lassen sich die einzelnen
Komponenten abkoppeln und in unabhngige Fenster wandeln. Figure Windows, Editor/Debugger und Arrayeditor lassen sich an das
Command Window ankoppeln und so ein greres Dokument erzeugen. Dabei bestehen unterschiedliche Mglichkeiten der Anordnung,
beispielsweise nebeneinander oder hintereinander. Probieren Sie es aus! Fr hug sich
wiederholende Aufgaben lassen sich eigene
Shortcuts denieren und in die Liste der Shortcuts einfgen.
20
Copyright c G. Gramlich
weist die Desktop-Menleiste zustzlich das der die folgenden Daten enthlt:
Men Graphics auf. Whlt man dort Plot
1
1.0
5.0
Tools, so net sich die Figure-Umgebung mit 2
2.1
6.3
Figure Palette, Plot Browser, Property Editor 3
3.2
6.9
und Figure Toolbar. Unter der Figure Palette 4
3.9
8.1
5
5.1
9.1
sind alle Variablen des Workspace aufgelistet
und knnen damit auch direkt geplottet werErzeugen Sie im Matlab Workspace eine Maden.
Der Workspace Browser stellt eine grasche trix A mit diesen Daten. ndern Sie die zweiDarstellung des whos Kommandos dar. Mit te Zeile von A zu 2.0 und 6.2 und schreiben
dem Befehl who kann man herausnden, wel- Sie die modizierte Matrix A in einen ASCIIche Variablen momentan im Workspace ge- Datenle mit dem Namen data.out.
speichert sind. Um Daten zu sichern kann man Lsung: Das Einlesen erfolgt mittels
die Funktion save verwenden. Mit load kann 1 >> A = load(data.in);
man gespeicherte Daten in den Workspace laden. Die Tabelle 1 zeigt weitere Funktionen Die Manipulation der Matrix A erfolgt durch
zum Verwalten des Workspace.
1
Funktion
clear
clear all
load
save
who
whos
Beschreibung
Lscht Variablen
Lscht alles
Daten laden
Daten speichern
Zeigt Variablen
Zeigt mehr als who
.......................................
Aufgabe 1 (Workspace verwalten) Angenommen Sie mchten die Variablen a und b aus
dem Workspace lschen. Wie geht das?
Lsung: Dies knnen Sie mit clear a und
clear b tun. Falls Sie sich Tipparbeit sparen
wollen, geben Sie clear a b ein. Hilfe erhalen Sie mit doc clear (help clear). . . .
21
Copyright c G. Gramlich
Unter View kann eine Auswahl der aufgelisteten Files nach ihrer Filekennung erfolgen. Files
werden durch Doppelklicken ausgefhrt. Dah
heit beispielsweise zu m-Files oder Textles
net sich der Editor, g-Files werden dargestellt, bei mat-Files werden die Daten geladen
und HTML-Files im Web Browser dargestellt.
Das Men Find Files (Fernglassymbol) net
eine grasche Umgebung zum Suchen anch
Dateien oder Begrien in Dateien.
Mit filebrowser wird der Current Directory Browser aus dem Command Window heraus
aktiviert.
22
Copyright c G. Gramlich
mittels openvar(VarName) aus dem Command Window genet werden. VarName ist
der Name der Variablen. Im Gegensatz zu lteren Versionen lassen sich ab dem Release 7 auch Zellen- und Strukturvariablen (siehe Abschnitt 75) im Array Editor bearbeiten.
Der Array Editor lsst sich wie bereits erwhnt am Matlab Desktop andocken. Spalten
im Editor lassen sich kopieren, lschen und teilen. Excel-Daten lassen sich unter WindowsBetriebssystemen mit Copy und Paste in den
Array Editor kopieren. Das Plot-Symbol erlaubt grasch untersttzt das Plotten von Daten, dabei steht ein umfangreicher Auswahlkatalog mit Linienplots, Histogrammen, Hhenlinienplots, 3D-Graken usw. zur Verfgung.
Neue Variablen lassen sich mausgesteuert aus
bestehenden Daten erzeigen.
23
Copyright c G. Gramlich
halb gesucht und gegebenenfalls durch einen Kontext-Mens der reechten Maustaste im Array Editor angezeigt werden. Die Variablenneuen Begri ersetzt werden knnen.
Bei der Entwicklung eines Programms treten werte knnen allerdings nicht nur angezeigt
prinzipiell zwei Fehlerarten auf: Syntax- und werden. Darber hinaus ist es mglich, die
Laufzeitfehler. Syntaxfehler sind meist leicht Werte zur Programmlaufzeit zu verndern, was
zu beheben. Laufzeitfehler treten bei einem zu Testzwecken sehr ntzlich ist.
syntaktisch korrekten Programm whrend der
Ausfhrung auf und zeigen sich entweder in
einem Programmabsturz oder in oensichtlich
falschen Resultaten. In solchen Fllen kann
es notwendig sein, sich den Ablauf des Programms whrend der Ausfhrung genauer anzusehen. Diese Aufgabe bernimmt ein sogenannter Debugger, ein Programm, mit dem andere Programme whrend der Ausfhrung an
bestimmten Stellen, so genannte Breakpoints,
unterbrochen und untersucht werden knnen.
Mit Hilfe der Meneintrge unter Debug oder
durch Klick auf das Icon mit dem roten Punkt
knnen Breakpoints gesetzt oder gelscht werden. Der Debugger kennt verschiedene Arten von Berakpoints, von denen wir auf den
Standard-Breakpoint kurz eingehen wollen.
Ein Standard-Breakpoint wird durch einen roten Punkt im Quelltext angezeigt. Er wird in
die Zeile gesetzt, in der der Cursor steht. Bei
der Ausfhrung des Programms erfolgt dann
ein automatischer Wechsel in den Editor und
das Programm wird an der Stelle des Breakpoints angehalten. Die bis dahin belegten Variablenwerte knnen anschlieend bequem betrachtet werden, indem man mit dem Mauszeiger auf die jeweilige Variable zeigt. Die Werte werden in einem automatisch ausgeklappten Fenster angezeigt (wenn in den Preferences
eingestellt). Alternativ knnen die Variablen
auch im Command Window oder mit Hilfe des
Meine Empfehlung ist es, sich mit dem Debugger vetraut zu machen, insbesondere wenn man
grere Programme entwickeln will.
Neben dem Debugger gibt es noch weitere
Werkzeuge, die die Programmentwicklung untersttzen, den Code-Check mit M-Lint und
den Proler. Mit dem Proler sind umfangreiche Laufzeitanalysen mglich, die sicherlich nur dem fortgeschrittenen Anwender von
Nutzen sind. Mit dem M-Lint Programm (im
Men Tools) kann ein Bericht erstellt werden,
in dem der Programmierer zum Beispiel ber
nicht verwendete Variablen, syntaktische Fehler oder sonstige Ungereimtheiten im Code informiert wird. Dies ist auch fr den Anfnger
ntzlich.
9. Plots
Bilder (Images) oder Abbildungen werden im
Figure Window dargestellt. Neben seiner Aufgabe, die Ebene fr die grasche Darstellung
bereitzustellen, bietet das Figure Window noch
weitere Eigenschaften. Unter File besteht die
Mglichkeit mit Generate m-File das grasche
Layout in einem m-File abzuspeichern und
so bei zuknftigen vergleichbaren Aufgaben
auf ein vorgefertigtes Plotlayout in Form einer Matlab Funktion zuzugreifen. Unter View
wird als wichtigestes Instrument der Proper-
24
Copyright c G. Gramlich
Das Kommando
sorgt dafr, dass der folgende Bildschirmtext komplett in der Datei MeineSitzung
aufgezeichnet wird. Die Aufzeichung knnen
Sie anhalten, wenn Sie diary off eingeben. MeineSitzung ist nur eine Beispieldatei;
sie knnen selbstverstndlich jeden zulssigen
Dateinamen angeben.
25
Copyright c G. Gramlich
2
3
4
16. Demos
Durch den Aufruf
>> help
HELP topics
3
4
matlab\general
matlab\ops
matlab\lang matlab\elmat usw.
- General ...
Operators ...
Programming ...
Elementary ...
26
Copyright c G. Gramlich
Funktion mit dem Namen inverse. Somit ist Falls Sie Hilfe zu einem Begri suchen und
die Antwort auf
den entsprechenden englischen Ausdruck nicht
kennen, verwenden Sie ein Wrterbuch. Auf
1
>> help inverse
meiner Homepage nden Sie einen Link zu
einem Mathematischen Wrterbuch, das Ihfolgende:
nen weiterhelfen kann, siehe http://www.
1
inverse.m not found.
hs-ulm.de/gramlich.
Aufgabe 3 (lookfor-Kommando) Mit welchem Befehl wird das Command Window
1
>> lookfor inverse
(Kommandofenster) gelscht?
liefert in Abhngigkeit der installierten Tool- Lsung: Mit dem Aufruf
boxen folgendes:
Aber der Aufruf
1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
27
Copyright c G. Gramlich
Kommando
cd
cd oder pwd
delete
dir oder ls
exist
matlabroot
type
what
which
Matlab ermittelt die Art, in der die aufgerufenen Funktionen auszufhren sind, ber einen
Suchpfad, das ist eine geordnete Liste von Verzeichnissen. Mit dem Kommando path erhlt
man die aktuelle Liste von Verzeichnissen, in
denen Matlab sucht. Dieser Befehl kann auch
dazu verwendet werden, um Verzeichnisse aus
dem Suchpfad zu lschen oder anzuhngen.
Mit dem Path Browser (siehe Abbildung 9)
kann der Pfad bequem gendert oder ausgege-
Beschreibung
Verzeichnis wechseln
Zeigt Verzeichnispfad
Lscht Filename
Zeigt Files
berprft Existenz
Zeigt Matlab-Wurzel
Type
M, mat und mex-Files
Lokalisiert Funktionen
Beschreibung
Typ des Rechners
Identikationsnummer
Lizenznummer
Tabelle 3: Systeminformationen
ben werden. Falls Sie ein Windows Betriebssystem verwenden, so knnen Sie den Path
Browser ber die Schaltche des Command
man verwenden kann, um Informationen ber
Windows, ber Set Path im Men File oder
den eigenen Computer zu erhalten.
ber das Kommando pathtool nen.
Die Funktionen aus der Tabelle 2 zeigen Mglichkeiten, wie man den Datentrger verwalten Weitere Informationen und Demonstrationen
kann.
zu Matlab nden Sie in Tabelle 4.
28
Copyright c G. Gramlich
Funktion
bench
ver
version
whatsnew
Beschreibung
Benchmarks
Versionen
Versionsnummer
Release Notes
5
6
7
8
9
ans =
3
>> 2^8
ans =
256
24. Voreinstellungen
Es gibt mehrere m-Files, die die Voreinstellungen von Matlab festlegen und beim Start
Schlieen Sie die Eingabezeile mit einem
ausgefhrt werden. Diese Files benden sich
Strichpunkt (Semikolon) ab, so rechnet Matim Unterverzeichnis local im Verzeichnis
lab zwar, unterdrckt aber die Ausgabe:
toolbox. Der File Contents enthlt eine
1
>> 1+2;
bersicht.
Zur Startzeit fhrt Matlab automatisch den File matlabrc aus. Dieser File setzt die Matlab
Pfade, legt die Default-Gre der Figures fest
und setzt einige weitere Standardeinstellungen.
Vernderungen sollten bei Bedarf nicht in dieser Datei, sondern im startup File durchgefhrt werden. Dieser ist dafr gedacht, dass Sie
dort eigene Funktionen und Kommandos denieren, die zur Startzeit ausgefhrt werden sollen.
Im Workspace knnen Sie erkennen, dass Matlab die Variable ans angelegt hat, den Wert der
Variablen ans jedoch nicht ausgibt.
Ein Semikolon am Ende der Eingabe
unterdrckt die Bildschirmausgabe!
Aufgabe 4 (Einfaches Rechnen) Was ist 00 in
Matlab?
Lsung: Es ist 00 = 1 in Matlab. . . . . . . .
29
Copyright c G. Gramlich
Operationen zeigt die Tabelle 6). Fr Operatoren, die auf einer Ebene stehen, ist der Vorrang
von links nach rechts geregelt. Klammern knnen immer verwendet werden, um den Vorrang
entsprechend abzundern.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>> 2^10/10
ans =
102.4000
>> 2+3*4
ans =
14
>> -2-3*4
ans =
-14
>> 1+2/3*4
ans =
3.6667
>> 1+2/(3*4)
ans =
1.1667
zunchst mit Bleistift und Papier und berprfen Sie es dann mit Matlab.
Lsung: Mit den Vorrang-Regeln gilt:
(48/3) (32 ) = 16 9 = 7. Hier die
Besttigung in Matlab:
1
2
3
.......................................
Prioritt
1 (hchste)
2
3
4 (niedrigste)
>> 48/3-3^2
ans =
7
Operator
Potenzieren ()
Unres Plus (+)
unres Minus (-)
Multiplikation (*)
Division (/)
Addition (+)
Subtraktion (-)
Tabelle 5: Vorrang-Tabelle
>> 3+4/5*6
zunchst mit Bleistift und Papier und berpr27. Zahlen und Formate
fen Sie es dann mit Matlab.
Lsung: Mit den Vorrang-Regeln gilt: 3+4/5
6 = 3 + (4/5) 6 = 3 + (0.8 6) = 3 + 4.8 = 7.8. Matlab verarbeitet Zahlen in der blichen Dezimalschreibweise, wobei wahlweise ein DeziHier die Besttigung in Matlab:
malpunkt und ein positives oder negatives Vor1
>> 3+4/5*6
zeichen verwendet werden knnen. In der wis2
ans =
senschaftlichen Notation bezeichnet der Buch3
7.8000
stabe e eine Skalierung um Zehnerpotenzen.
Zulssige Zahlen sind zum Beispiel:
.......................................
Aufgabe 6 (Rechnen) Ermitteln Sie das Ergebnis von
1
2
3
4
101
0.0001
9.84757 1.5e-12 8.997
3i
-3.4j 4e3i
>> 48/3-3^2
30
Copyright c G. Gramlich
Prioritt
1 (hchste)
4
5
6
7
8 (niedrigste)
Operator
Transponieren (.)
Potenzieren (.)
kongugiert complex ()
Matrix-Potenzieren()
Unres Plus (+)
unres Minus (-)
logische Negation ()
Multiplikation (.*)
rechte Division (./)
linke Division (.\)
Matrix-Multiplikation (*)
rechte Matrix-Division (/)
linke Matrix-Division (\)
Addition (+)
Subtraktion (-)
Doppelpunktoperator (:)
Kleiner (<)
kleiner oder gleich (<=)
grer (>)
grer oder gleich (>=)
gleich (==)
nicht gleich (=)
Logisches und (&)
Logisches oder (|)
Tabelle 6: Vorrang-Tabelle
Beispiel: pi
3.1416
3.14159265358979
3.14
31
>> namelengthmax
ans =
Copyright c G. Gramlich
Spezielle Variable
ans
computer
eps
i
Inf, inf
j
NaN
pi
63
MeineVariable Anna x1 X3
z23c1 My_Var
Bedeutung
Resultat (Default)
Identiziert
Maschinengenauigkeit
Imaginre Einheit
Innity
Imaginre Einheit
Not-a-Number
Kreiszahl 3.14
>> isvarname(My_Var)
ans =
1
>> isvarname(2Var)
ans =
0
z2 =
1.0000 - 3.0000i
32
Copyright c G. Gramlich
Aufgabe 9 (Komplexe Zahlen) Finden Sie heraus, wie man den Real- und Imaginrteil ei4
ner komplexen Zahl berechnet. Berechnen Sie
5
dann den Real- und Imaginrteil von z = (3 +
6
2i)/(1 i).
Lsung: Mit lookfor complex ndet man
Die Wurzel der komplexen Zahl 1 + 2i berechdie Funktionen real und imag. Damit gilt
net man mit der Funktion sqrt
2
3
1
2
3
ans =
4.0000 + 1.0000i
>> z1*z2
ans =
15.0000 - 5.0000i
>> sqrt(1+2i)
ans =
1.2720 + 0.7862i
2
3
4
>> conj(1+3i)
ans =
1.0000 - 3.0000i
5
6
>> z = (3+2i)/(1-i);
>> real(z), imag(z)
ans =
0.5000
ans =
2.5000
.......................................
33
Copyright c G. Gramlich
8
9
10
>> 0*inf
ans =
NaN
>> eps
ans =
2.2204e-016
1
2
3
252 ,
>> 3+NaN
ans =
NaN
>> NaN-NaN
ans =
NaN
>> 0*NaN
ans =
NaN
-Inf
>> 1.2*realmax
ans =
Inf
1
2
3
4
Ist eine Rechnung mathematisch nicht deniert, so ist das Resultat NaN, was fr Not a
Number steht. Die Ausdrcke 0/0, inf/inf
und 0*inf sind von dieser Art.
5
6
7
8
9
1
2
3
4
5
6
7
>> 0/0
Warning: Divide by zero.
ans =
NaN
>> inf/inf
ans =
NaN
>> realmin
ans =
2.2251e-308
>> realmin*eps
ans =
4.9407e-324
>> realmin*eps/2
ans =
0
Die Funktion computer gibt den ComputerTyp zurck, auf dem Matlab luft. Der Rechner auf dem diese Zeilen und die matlab-Codes
geschrieben werden, produziert folgende Ausgabe
34
Copyright c G. Gramlich
1
2
3
>> computer
ans =
PCWIN
Diese Datentypen sind insbesondere dann vorteilhaft, wenn Speicherplatz gespart werden
soll, also zum Beispiel wenn Bilder gespeichert und verarbeitet werden sollen (Bildverarbeitung).
(b) e710
Beschreiben Sie die Resultate.
Lsung:
1
2
3
1
2
3
>> exp(700)
ans =
1.0142e+304
>> exp(710)
ans =
Inf
>> realmax
ans =
1.7977e+308
Klasse
uint8
int8
uint16
int16
int32
uint32
Speicherbedarf
8 Bit
8 Bit
16 Bit
16 Bit
32 Bit
32 Bit
Wertebereich
0 bis 28 1
27 bis 27 1
0 bis 216 1
215 bis 215 1
231 bis 231 1
0 bis 232 1
2
3
>> x = uint8(7)
x =
7
3
4
35
11
>> x+pi
ans =
10
Copyright c G. Gramlich
7
8
9
10
11
12
13
14
15
16
17
18
>> x+253
ans =
255
>> x+254
ans =
255
>> x-8
ans =
0
>> x-9
ans =
0
>> intmax(int32)
ans =
2147483647
1x1
4 single array
>> single(4.1)+double(3)
ans =
7.1000
>> whos
Name Size Bytes Class
>> int8(3.6)
ans =
4
>> int8(3.5)
ans =
4
>> int8(3.4)
ans =
3
>> int8(-3.5)
ans =
-4
2
3
4
5
6
7
ans 1x1
4 single array
zeigen die Antwort. Matlab rundet auf die Siehe doc datatypes, [16], [24] und Abnchste ganze Zahl. Liegt die Zahl in der Mitte, schnitt 75 fr weitere Informationen.
36
Copyright c G. Gramlich
Eingabeargumente stehen rechts vom Funktionsnamen in runden Klammern und die AusMatlab verfgt ber drei wesentliche Merk- gabeargumente stehen links vom Funktionsnamale, die das System von anderen modernen men in eckigen Klammern.
Programmierumgebungen unterscheidet. Wir 1 [a,b] = Funktionsname(x,y,z)
fhren sie in diesem Anschnitt ein und erklren
sie in den folgenden Abschnitten ausfhrlicher. In diesem Beispiel sind a und b sind Ausgabeund x, y, z die Eingabeargumente. Sowohl die
Eingabe- als auch die Ausgabeargumente sind
32.1. Keine Deklaration notwendig
variabel, so dass unter Umstnden nur ein Teil
Variablen mssen in Matlab nicht deklariert der Argumente speziziert werden muss. Wir
werden, bevor sie verwendet werdn. Dies gilt zeigen dies an ein paar Beispielen.
sowohl fr Arrays als auch fr Skalare. Dar- Die Funktion norm berechnet die Euklidische
berhinaus werden die Dimensionen der Ar- Norm (gewhnliche Lnge, 2-Norm) eines
rays bei Bedarf automatisch vergrert. Durch Vektors:
1
2
3
>> x(3) = 0
x =
0
0
1
2
3
>> x = [3 4];
>> norm(x)
ans =
5
wird ein Zeilenvektor x mit drei NullkoordinaEine andere Norm, die sogenannte 1-Norm
ten angelegt und durch
(Summe der Betrge der Koordinaten), kann
1
>> x(5) = 0
ebenfalls mit der Funktion norm berechnet
2
x =
werden, indem 1 als zweites Eingabeargument
3
0
0
0
0
0
angegeben wird.
1
2
3
>> norm(x,1)
ans =
7
Wir sehen. Wird kein zweites Eingabeargument angegeben, so wird standardmig die 2Norm verwendet. Die Funktion max hat mehrere Ausgabeargumente. Mit einem Eingabeund einem Ausgabeargument gibt max die
grte Koordinate eines Vektors zurck.
37
1
2
>> max(x)
ans =
Copyright c G. Gramlich
1
2
3
4
5
Logarithmusfunktionen,
hyperbolische Funktionen,
Potenzfunktionen,
Wurzelfunktionen,
Restbildungsfunktionen,
Vorzeichenfunktionen,
Rundungsfunktionen.
Unter den speziellen Funktionen ndet man
zum Beispiel die
Besselfunktionen,
Hankelfunktionen,
Fehlerintegrafunktion,
Exponentialintegralfunktion,
Gammafunktion.
Die Tabelle 10 zeigt trigonometrische Funktionen. Alle trigonometrische Funktionen (mit
der Ausnahme atan2) akzeptieren als Argumente komplexe Arrays, die punktweise ausgewertet werden. Die Arumente werden im
Bogenma (Radiant, rad) erwartet. Fr Berechnungen in Grad (Gradma, ) dienen die
mit einem d am Ende des Namens ergnzten
trigonometrischen Funktionen: acosd, cosd,
asind, sind, usw.
Die folgenden Zeilen besttigen die Ergebnisse
cos(/2) = 0 und cos(90 ) = 0 in Matlab.
38
1
2
>> cos(pi/2)
ans =
Copyright c G. Gramlich
Funktion
acos
asec
acsc
asin
atan
cos
cot
csc
sec
sin
tan
Beschreibung
Inverser Kosinus
Inverser Sekans
inverser Kosekans
Inverser Sinus
Inverser Tangens
Kosinus
Kotangens
Kosekans
Sekans
Sinus
Tangens
.......................................
Andere Funktionen sind zum Beispiel sqrt,
exp oder log.
1
2
3
4
5
6
7
3
4
5
6
6.1232e-017
>> cosd(90)
ans =
0
Mathematisches Symbol
ln = loge
lb = log2
lg = log10
33.1. Rundungsfunktionen
In Matlab gibt es die folgenden Rundungsfunktionen:
Matlab
log
log2
log10
x
1/2 3/2 2
cos x
0
1
0
1
und die Tabelle
39
Copyright c G. Gramlich
(d) ceil(-2.6)
function y = f(x)
y = x.^2;
(e) floor(ceil(-2.6))
Zeichnen Sie die Funktionen im Intervall Sie denieren den Funktionsterm in der
Kommandozeile durch einen String und
[3, 3]!
Vorstellung eines @-Zeichens, siehe AbLsung:
schnitt 39. Zum Beispiel deniert man die
1
>> round(-2.6), fix(-2.6),
quadratische Funktion f (x) = x2 , x R
2
ans =
durch
3
-3
4
5
6
7
8
9
10
11
12
13
ans =
-2
>> floor(-2.6), ceil(-2.6),
ans =
-3
ans =
-2
>> floor(ceil(-2.6))
ans =
-2
>> x = linspace(-3,3,1000);
>> y = round(x);
>> plot(x,y)
.......................................
40
Copyright c G. Gramlich
2
3
4
5
6
1
2
3
4
.......................................
34. Vektoren
Vektoren (Zeilen- oder Spaltenvektoren) sind
spezielle Matrizen. Zeilenvektoren sind (1, n)Matrizen und Spaltenvektoren sind (m, 1)Matrizen. Aussagen ber Matrizen sind demnach auch fr Vektoren interessant. Wir verweisen auf Abschnitt 36; dort werden Matrizen und somit auch Vektoren ausfhrlich behandelt. Matrizen (und somit Vektoren) sind
grundlegende Bausteine von Matlab.
>> y = sqrt(x)
y =
0
1.4142 2.0000
2.8284
2.4495
x =
1
2
>> x = 29:-2:0
x =
Columns 1 through 11
29
27
25 usw.
Columns 12 through 15
7
5
3
1
41
Copyright c G. Gramlich
Angabe der Schrittweite weglassen. Fr weiter Informationen zu diesem Doppelpunktoperator, siehe doc colon (help colon). Siehe
auch doc ops (help ops).
x =
4
5
6
7
8
9
10
11
12
>> x = 1:2:7;
>> y = log(x)
y =
0
1.0986
1
2
3
4
1.6094
1.9459
>> x = logspace(-2,2,4)
x =
0.0100 0.2154 4.6416 100.0000
>> x = logspace(1,3,3)
x =
10
100
1000
y(1) ist die erste Koordinate des Vektors y, al- Zusammenfassend gilt: Vektoren knnen auf
so y(1)=0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . drei Arten erzeugt werden:
Mit der Funktion linspace knnen Vektoren erzeugt werden, indem man den Wert der
ersten, letzten, sowie die Anzahl der Komponenten (drittes Argument im Aufruf) vorgibt.
Mit dem Doppelpunktoperator : ist es dagegen mglich, die Schrittweite direkt anzugeben, nicht aber die Anzahl der Koordinaten.
Sind a und b reelle Zahlen, dann erzeugt x =
linspace(a,b,n) einen Zeilenvektor x der
Lnge n mit den Koordinaten xk = a + (b
k1
a) n1 , wobei k = 1, . . . , n ist.
1
>> x = linspace(1,2,3)
35. Vektorenoperationen
Vektoren sind spezielle Matrizen. Fr Vektorenoperationen siehe die Abschnitte 36.3, 49,
42
Copyright c G. Gramlich
50 und 51.
A=
36. Matrizen
1
7
2 2
.
3
43
x =
Copyright c G. Gramlich
Funktion
zeros
ones
eye
rand
randn
>> x = 1.3:0.2:1.8
x =
1.3000 1.5000
Bedeutung
Nullmatrix
Einsmatrix
Einheitsmatrix
Zufallsmatrix
Zufallsmatrix
1.7000
Mit der Funktion size knnen Sie stets die Die Nullmatrix wird mit der Funktion zeros
Gre einer Matrix bestimmen.
erzeugt.
1
2
3
>> size(A)
ans =
2
3
1
2
3
4
Macht man bei einer Matrix A aus den Zeilen Spalten und aus den Spalten Zeile, so entsteht die transponierte Matrix AT . In Matlab
erreicht man dies mit dem -Operator.
5
6
7
8
9
1
2
3
4
5
6
7
8
>> A = [1 2 3; 4 5 6], A
A =
1
2
3
4
5
6
ans =
1
4
2
5
3
6
>> Z1 = zeros(3,2)
Z1 =
0
0
0
0
0
0
>> Z2 = zeros(size(A))
Z2 =
0
0
0
0
0
0
>> eye(3)
ans =
1
0
0
1
0
0
ans =
1
1
1
1
1
1
44
>> A = 4*rand(10);
>> A+A;
Copyright c G. Gramlich
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Auer den elementaren Matrizen stellt Matlab weitere spezielle Matrizen zur Verfgung,
Diagonalmatrizen werden mit der Funktion siehe Tabelle 13. Diese Matrizen haben interdiag erzeugt.
Funktion
Bedeutung
1
>> D = diag([1 2 3])
compan
Begleitmatrix
2
D =
gallery
Highams-Testmatrizen
3
1
0
0
hadamard
Hadamard-Matrix
4
0
2
0
hankel
Hankel-Matrix
5
0
0
3
hilb
Hilbert-Matrix
invhilb
Inverse Hilbert-Matrix
Aufgabe 20 (Diagonalmatrizen) Erzeugen Sie
magic
Magische Quadrate
eine Diagonalmatrix mit 1, 2, 3, 4 und 5 auf der
pascal
Pascal-Matrix
Diagonalen!
rosser
Symmetrische Testmatrizen
Lsung:
toeplitz
T plitz-Matrix
o
1
>> diag([1 2 3 4 5])
vander
Vandermonde-Matrix
2
ans =
wilkinson Wilkinson-Matrix
3
4
5
6
1
0
0
0
0
0
2
0
0
0
0
0
3
0
0
0
0
0
4
0
0
0
0
0
5
essante Eigenschaften und werden hug verwendet, um Algorithmen zu testen. Eine besonders interessante Matrix ist die HilbertAufgabe 21 (Matrizen) Wir betrachten die folMatrix, deren (i, j)-tes Element 1/(i + j 1) ist.
gende Matrix A:
Diese Matrix kann durch hilb erzeugt werden;
9.4
5.5
3.3
4.6 4.3 .
A = 0.3
0.4 4.6
9.0
5.0
5.5
7.7
7
Um ezient mit Matrizen arbeiten zu knnen, steht der Doppelpunkt : zur Vefgung.
Mit ihm lassen sich Vektoren ezient erzeugen. Sind i und j zwei ganze Zahlen, so wird
mit i:j ein Zeilenvektor bestehend aus ganzen
Zahlen von i nach j mit Schrittweite 1 erzeugt.
45
Copyright c G. Gramlich
1
2
3
4
5
>> 3:-1:-2
ans =
3
2
1
0
-1
-2
>> 0:0.7:2.5
ans =
0
0.7000 1.4000 2.1000
1
2
3
1
2
3
4
5
6
1 2
A= 3 4
5 6
7
8
9
das Element a31 in der dritten Zeile und ersten Spalte zurckgegeben, dann die zweite Zeile, danach die erste Spalte und schlielich eine
(2, 2)-Untermatrix.
2
3
4
5
6
7
8
9
10
11
12
13
>> A(3,1)
ans =
5
>> A(2,:)
ans =
3
4
>> A(:,1)
ans =
1
3
5
>> A([1 2],:)
ans =
Aus einem Vektor lsst sich ebenfalls eine Matrix mit spezieller Struktur konstruieren.
>> A(:)
ans =
1
3
>> x = [1 2 3]
x =
1
2
3
>> B = x([1 1 1 1],:)
B =
1
2
3
1
2
3
1
2
3
1
2
3
>> C = [1 2 3;4 5 6]
C =
1
2
3
4
5
6
>> C(:,2) = []
C =
1
3
4
6
46
Copyright c G. Gramlich
A=
1 2 3 4
6 7 8 9
11 12 13 14
16 17 18 19
21 22 23 24
5
10
15
20
25
0.4
3.1
5.5
9.4
5.5
3.3
4.6 4.3 .
A = 0.3
0.4 4.6
9.0
5.0
5.5
7.7
3
4
5
6
7
8
9
Was ist A(:,2), A(3,:), A(4:5,2:3)? berprfen Sie Ihr Resultat in Matlab.
Lsung: A(:,2) ist die zweite Spalte und
A(3,:) ist die dritte Zeile von A. A(4:5,2:3)
ist die Untermatrix
10
11
12
13
14
15
16
4.6 9.0
.
5.5 7.7
17
18
19
.......................................
20
21
47
22
22 23 24 25];
>> A(2,:)
ans =
6
7
8
9
>> A(:,1)
ans =
1
6
11
16
21
>> A(:,5)
ans =
5
10
15
20
25
>> A(1,1:2:5)
ans =
1
3
5
>> A([1,5])
10
Copyright c G. Gramlich
23
24
25
26
27
28
29
30
ans =
1
21
>> A(4:-1:1,5:-1:1)
ans =
20
19
18
17
15
14
13
12
10
9
8
7
5
4
3
2
16
11
6
1
.......................................
1 2 3
A= 4 5 6
7 8 9
2
3
4
5
Ist A eine (m, n)-Matrix und x ein nSpaltenvektor, so ist das Matrix-VektorProdukt Ax deniert.
>> A = [1 2 4; 2 6 0];
B = [4 1 4 3; 0 -1 3 1; 2 7 5 2];
A*B
ans =
12
27
30
13
8
-4
26
12
>> A = [1 2 3; 4 5 6; 7 8 9];
>> A(2,:) = []
A =
1
2
3
7
8
9
2
3
4
5
A = 2 4 B = 4 2
7 1
3 1
Symbol
Bedeutung
1 5
+
Addition
C=
5 3
Subtraktion
*
Multiplikation
und
Potenzieren
3 2
0
5 .
D= 1
48
Copyright c G. Gramlich
2
3
4
ans =
-24
-20
20
-16
(a) A + B
.......................................
(b) B + C
Sind a und b Skalare, so ist a+b die gewhnliche Addition, a-b die gewhnliche Subtraktion, a*b die gewhnliche Multiplikation und
ab die gewhnliche Potenzierung. a/b ist die
gewhnliche Division: a b. Sie wird auch
als rechte Division bezeichnet, weil es auch eine linke Division a\b gibt mit der Bedeutung
b a. Die Operatoren und \ haben fr Matrizen A und B folgende Bedeutung: A\B ist
eine Lsung X der Matrizengleichung A*X=B
und A/B ist eine Lsung X der Matrizengleichung X*B=A. Fr weiter Einzelheiten siehe
Abschnitt 49.
(c) DA
(d) 2A 3B
(e) AT
(f) C2
Lsung:
(a)
1
2
3
4
5
>> A+B
ans =
0
6
10
5
2
0
1
2
3
4
5
>> D*A
ans =
4
16
18
22
8
8
>> 2*A-3*B
ans =
5
0
-8
14
-15
5
(d)
(e)
>> A
ans =
1
3
Matrizenaddition und -subtraktion sind elementweise deniert (im Sinne einer Arrayoperation). Die Multiplikation (Potenzierung) ist
jedoch nicht elementweise deniert, also nicht
im Sinne einer Arrayoperation. In vielen Anwendungen (siehe zum Beispiel Abschnitt 40)
ist es jedoch notwendig, Matrizen elementweise zu verknpfen. Daher sind in Matlab die
Operatoren *, , \ und / auch elementweise deniert. Damit eine Operation elementweise durchgefhrt werden kann, muss ein Punkt
davorgesetzt werden, also .*, ., .\ und ./.
Die Tabelle 15 fasst die Arrayoperationen (elementweise Operationen) zusammen.
>> C^2
1
2
3
2
4
(f) Unterscheiden
Sie
zwischen
Matrizenund
Arrayoperationen. Die Matrizenoperationen sind
im Sinne der Matrizenalgebra
(Lineare Algebra), whrend die
3
1
49
Copyright c G. Gramlich
Symbol
+
.*
./
.\
.
Bedeutung
Addition
Subtraktion
Multiplikation
rechte Division
linke Division
Potenzieren
a = [2 -1 5 0];
b = [3 2 -1 4];
(a) c = b+a-3;
(b) c = a./b;
(c) c = 2*a+a.b;
(d) c = 2.b+a;
Arrayoperationen elementweise zu
verstehen sind.
(e) c = 2*b/3.*a;
Das folgende Beispiel zeigt eine Arraymulti- Analog fr die anderen Operationen. Manchmal ist es notwendig, Matrizen elementweise
plikation:
zu multiplizieren (Hadamard-Produkt), dann
1
>> A = [1 2; 3 4; 5 6];
hilft der .*-Operator.
2
3
4
5
6
7
1
2
3
4
5
6
>> C = [1 2; 3 4];
>> D = [5 6; 7 8];
>> C.*D
ans =
5
12
21
32
>> A^2,
ans =
7
15
ans =
1
9
A.^2
10
22
Die konjugiert Transponierte der Matrix A erhlt man durch A. Ist A eine reelle Matrix, so
ist A einfach die Transponierte. Die Transponierte ohne Konjugation erhlt man mit A..
4
16
50
Copyright c G. Gramlich
1
2
a = [2,4,6]; b = [1,2,3];
3
4
5
a
a
a
a
a
a
a
a
a
a
a
a
+ b
+ b
- b
- b
* b
* b
\ b
\ b
.* b
.* b
.\ b
.\ b
a
a
a
a
a
a
a
a
a
a
a
a
6
7
8
9
+ b
+ b
- b
- b
* b
* b
\ b
\ b
.* b
.* b
.\ b
.\ b
10
11
12
13
.......................................
Aufgabe 31 (Vektoren, Signale) Gegeben ist
das kontinuierliche Signal (die kontinuierliche
Funktion)
s(t) = sin(2t)e0.3t .
Die Funktion kron berechnet das Kronecker- Erzeugen Sie fr t = 0, 0.1, 0.2, . . . , 10 das daProdukt (direktes Produkt) zweier Matrizen, zugehrige diskrete Signal (Vektor). Wieviel
Werte hat das Signal?
siehe auch [4].
Lsung:
Aufgabe 30 (Direktes Produkt) Berechnen Sie
1
>> t = 0:0.1:10;
in Matlab das direkte Produkt von
2
>> sd = sin(2*pi*t).*exp(-0.3*t);
2
3
1
1 2
A= 3
5 1
0
Wird ein Skalar in Matlab zu einer Matrix addiert oder Subtrahiert, so wird die Zahl zu jeund
5
B=
51
2
3
4
>> [1 2 3; 4 5 6]/2
ans =
0.5000 1.0000 1.5000
2.0000 2.5000 3.0000
Copyright c G. Gramlich
Die meisten mathematischen Funktionen, siehe Abschnitt 33, akzeptieren als Eingabeargument eine Matrix. Dann wird diese Funktion elementweise ausgefhrt. Funktionen einer Matrix im Sinne der Linearen Algebra, wie
zum Beispiel die Exponentialfunktion, tragen
am Ende des Namens ein m: expm, funm, logm,
sqrtm. Fr die Matrix A = [2 1; 0 2] gilt:
1
2
3
4
5
6
7
8
9
10
11
12
>> sqrt(A)
ans =
1.4142
0
>> sqrtm(A)
ans =
1.4142
0
>> ans*ans
ans =
2.0000
0
1.0000
1.4142
0.3536
1.4142
1.0000
2.0000
8
9
Die Funktionen tril und triu extrahieren eine Dreiecksmatrix aus einer gegebenen Matrix.
Aufgabe 32 (Dreiecksmatrizen) Erzeugen Sie
eine 6 6 obere (untere) Dreiecksmatrix mit
Zufallszahlen zwischen 0 und 1!
Lsung:
1
36.4. Matrizenmanipulationen
>> A = [1 2 3; 4 5 6]
A =
1
2
3
4
5
6
>> B = reshape(A,3,2)
B =
1
5
4
3
2
6
>> triu(rand(6))
.......................................
Die Tabelle 16 zeigt Funktionen mit denen man Aufgabe 33 (Matrizenmanipulationen) Gegeben seien die folgenden Matrizen:
Funktion
Bedeutung
0 1 0 3
reshape ndert Ordnung
3 5 0
A= 4
diag
Diagonalmatrix
1
2 3 0
blkdiag Blockdiagonalmatrix
tril
Untere Dreiecksmatrix
und
triu
Obere Dreiecksmatrix
1 3 5 0
3 6 9 12
fliplr
Vertauscht
B=
flipud
Vertauscht
4 3 2 1 .
rot90
Drehung um 90
1 2 3 4
Tabelle 16: Matrizenmanipulationen
Bestimmen Sie die Rckgabewerte und berprfen Sie diese dann in Matlab.
(a) rot90(B)
52
Copyright c G. Gramlich
36.5. Datenanalye
(b) rot90(A,3)
(c) fliplr(A)
(d) reshape(A,4,3)
(e) triu(B)
Funktion
max
min
mean
median
std
var
sort
sum
prod
cumsum
cumprod
diff
(f) diag(rot90(B))
Aufgabe 34 (circshift) Verschieben Sie jede Zeile der Matrix
1 2 3
A= 4 5 6
7 8 9
um eine Zeile nach unten und die letzte in die
erste Zeile.
Lsung:
1
2
3
4
5
>> A = [1 2 3; 4 5 6; 7 8 9];
>> circshift(A,1)
ans =
7
8
9
1
2
3
4
5
6
Bedeutung
Maximales Element
Minimales Element
Arithmetischer Mittelwert
Zentralwert (Median)
Standardabweichung
Varianz
Sortiert
Berechnet Summenwert
Berechnet Produktwert
Summiert
Multipliziert
Bildet Dierenz
nen zur Analyse von Daten. Der einfachste Gebrauch dieser Funktionen ist, wenn die Daten
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . in Vektoren gegeben sind. Zum Beispiel:
6
1 2 3
A= 4 5 6
7 8 9
1
2
3
4
5
6
die Spalten.
Lsung:
1
2
3
4
5
>> A = [1 2 3;
>> fliplr(A)
ans =
3
2
6
5
9
8
7
8
9
4 5 6; 7 8 9];
10
11
12
1
4
7
>> x = [3 -7 -1 1 0]
x =
3
-7
-1
1
>> [min(x) max(x)]
ans =
-7
3
>> sort(x)
ans =
-7
-1
0
1
>> sum(x)
ans =
-4
53
Copyright c G. Gramlich
Vektoren komplex, so wird nach dem Absolutwert geordnet. NaNs werden von dem Funktionen min und max ignoriert und sort setzt sie
an das Ende.
5
6
7
8
9
Sind die Eingabeargumente Matrizen, so arbeiten die Funktionen zur Datenanalyse spaltenweise. Ist zum Beispiel
1
10
11
12
13
A =
0
1
5
2
3
4
-1
2
-3
14
2
-4
0
15
16
17
18
so ist
1
2
3
>> max(A)
ans =
5
2
19
20
21
22
23
24
25
26
27
x = [0 3 -2 7];
y = [3 -1 5 7];
28
ans =
1
-1
-2
>> min(x,y)
ans =
0
-1
-2
7
>> mean(A)
ans =
3.0000 3.3333 3.0000
>> median(x)
ans =
1.5000
>> cumprod(A)
ans =
1
3
7
2
24
28
12 -24 -56
>> sort(2*x+y)
ans =
1
3
5
21
>> sort(A)
ans =
1
-1
-2
2
3
4
6
8
7
.......................................
B= 0 0 3
1
max(x);
min(A);
8 7 0
2
min(x,y); mean(A);
1
A = [1 3 7; 2 8 4; 6 -1 -2];
median(x); cumprod(A);
sort(2*x+y); sort(A);
(a) any(B)
(b) find(B)
Lsung: Es ist
1
2
3
4
(c) all(any(B))
>> max(x)
ans =
7
>> min(A)
(d) any(all(B))
(e) finite(B(:,3))
(f) any(B(1:2,1:3))
54
Copyright c G. Gramlich
Lsung:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
>> any(B)
ans =
1
1
1
>> find(B)
ans =
1
3
6
7
8
>> all(any(B))
ans =
1
>> any(all(B))
ans =
0
>> finite(B(:,3))
ans =
1
1
1
>> any(B(1:2,1:3))
ans =
1
0
1
>> x = 1.4;
>> y = x^2;
und in der Variablen y ist der Wert 1.96 gespeichert. Will man nun aber zum Beispiel in
16
17
hundert verschiedenen x-Werten die entspre18
chenden y-Werte (ein Vektor mit 100 Koor19
dinaten) berechnen, so braucht man in Mat20
lab keine Schleife, sondern kann gleichzeitig
21
alle hundert y-Werte ausrechnen, indem man
22
den .-Operator verwendet, der die Potenzie23
rung zweier Matrizen (Vektoren) elementweise
24
durchfhrt. Hier ein Beispiel mit der gleichen
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Funktionsgleichung y = x2 wie oben:
15
1 2 3
A= 4 5 6
ans =
9
Diese vektorielle Vorgehensweise hat den Vorteil, dass man auf Schleifen verzichten kann, so
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . einen bersichtlicheren Programmcode erhlt
4
55
Copyright c G. Gramlich
Startwert: 1.5
>> x = linspace(-3,3,200);
>> y = exp(-x.^2);
3
4
)
Titel: Versuch 5
MeinTitel =
Versuch 5
.......................................
38.2. Bildschirmausgabe
Wir wissen bereits, dass Matlab immer dann
eine Ausgabe am Bildschirm macht, wenn auf
das Semikolon verzichtet wird, siehe Abschnitt
38. Ein- und Ausgabe
25. Auerdem kann mit den Funktion format
die Ausgabe kontrolliert werden. Eine noch
In diesem Abschnitt diskutieren wir, wie durch
bessere Kontrolle ber die Ausgabe erhlt man
einen Benutzer Daten eingelesen werden knaber durch die Verwendung weiterer Funktionen, wie man Informationen auf dem Bildnen.
schirm ausgeben und Dateien lesen und schreiben kann. Wie man eine ganze Sitzung in ei- Als erste Funktion ist disp zu nennen. Ohne
ner Datei auszeichnen kann, wissen wir be- Namen und Gleichheitszeichen gibt diese den
reits aus Abschnitt 13. Wie Graken gespei- Wert einer Variablen am Bildschirm an. Hier
chert und gedruckt werden knnen, steht in ein Beispiel:
Abschnitt 40.13. Zur Dateneingabe siehe auch
Abschnitt 10.
56
Copyright c G. Gramlich
2
3
4
5
Die (2,2)-Hilbert-Matrix
>> disp(hilb(2))
1.0000 0.5000
0.5000 0.3333
8
9
10
11
12
13
14
15
1
2
>> fprintf(%6.3f\n,pi)
3.142
16
17
18
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1.1618
1.2214
1.2840
1.3499
1.4191
1.4918
1.5683
1.6487
1.7333
1.8221
1.9155
2.0138
2.1170
2.2255
2.3396
2.4596
2.5857
2.7183
Die Funktion sprintf ist analog zur Funktion fprintf, aber die Ausgabe geschieht
als Zeichenkette, siehe doc sprintf (help
sprintf) fr weitere Einzelheiten.
2
3
4
5
6
x = linspace(0,1,21);
y = [1:21; exp(x)];
disp(Werte der exp-Funktion)
disp( )
disp(
k
exp(x(k)))
disp( --------------------------
)
disp(sprintf(%6.0f %15.4f\n,y))
2
3
4
5
6
7
k
exp(x(k))
---------------------1
1.0000
2
1.0513
3
1.1052
57
Copyright c G. Gramlich
dass sie weniger Speicherplatz bentigen und erzeugt im File MeinOutput die Zeilen
schneller gelesen und beschrieben werden kn1
30 m/h = 48 km/h
nen. Ihr Nachteil ist, dass sie nicht einfach mit 2 40 m/h = 64 km/h
einem Editor gelesen werden knnen. Die Ta- 3 50 m/h = 80 km/h
belle 18 zeigt vier Funktionen. Eine kompletFunktion
fscanf
fprintf
fread
fwrite
Ascii
die fr drei Geschwindigkeiten eines Fahrzeugs in Meilen pro Stunde die entsprechenden
Werte in Kilometer pro Stunde angeben.
binr
1
2
4
5
6
7
8
9
10
58
Copyright c G. Gramlich
on ist fplot, mit der man Graphen von mathematischen Funktionen zeichnen kann. Diese
Function bentigt als erstes Eingabeargument
eine Function. Wir zeigen die Arbeitsweise an
einem Beispiel.
Geplottet werden soll die Funktion f (x) = x2 , Matlab verfgt ber moderne und mchtix R im Intervalle [2, 2]. Diese kann in Mat- ge Visualisierungsmglichkeiten. Dies ist eilab durch
ner der Grnde fr den Erfolg von Matlab.
Das Visualisieren von Daten ist typisch im
1
>> f = @(x) x.^2;
praktischen Einsatz von Matlab, whrend das
Zeichnen von explizit bekannten Funktionen
deniert werden. Der Aufruf
sehr von Nutzen in der Lehre ist. Eine Viel1
>> fplot(f,[-2,2])
zahl von Gestaltungsmglichkeiten statistische
Daten darzustellen stehen bereit. Auf der Hozeichnet dann die Funktion im Intervalle von
mepage von The Mathworks steht ein Online2 bis 2. Man sieht, dass das erste ArguGrakhandbuch zur Verfgung, siehe [15].
ment von fplot selbst eine Funktion ist, nmlich in diesem Fall die selbstdenierte Funkti- Wenn wir nun grasche Fhigkeiten von Maton f (x) = x2 , x R. Fr eingebaute Funk- lab zeigen, so handelt es sich um die Beschreitionen entfllt natrlich deren Denition. Hier bung grascher Funktionen, die man zur Viein Beispiel mit der eingebauten Sinusfunktion sualisierung von Daten im Command Window
sin. Die folgende Zeile plottet die Sinusfunk- eingibt. Fast alle hier aufgezeigten Merkmale knnen Sie nach nen einer Figur durch
tion im Intervall von 3 bis 3:
Mausklick ber den Plot Browser, Figure Pa1
>> fplot(@sin,[-3,3])
lette, Property Editor, usw. beeinussen (siehe
Men-Item Show Plot Tools in der geneten
Andere Function Functions sind zum BeiFigur).
spiel fzero, quad, ode45, usw. Wir werden diese und andere Funktionen in den spteren Abschnitten ausfhrlicher besprechen. 40.1. 2D-Grak
Alle Function Functions sind im Verzeichnis funfun untergebracht, siehe doc funfun Wir beginnen die graschen Mglichkeiten
von Matlab mit 2D-Graken (zweidimensio(help funfun).
nalen Graken). Eine hug verwendete Funktion ist die plot-Funktion (doc plot). Dieser
40. Grak
werden im einfachsten Fall Koordinaten von
Punkten aus der Ebene bergeben, die dann
Twenty years ago, we did not interact with von plot durch gerade Linien verbunden wercomputers graphically; now, everything is den. Ein einfaches Beispiel soll dies erlutern.
59
Copyright c G. Gramlich
65
60
55
Zeitpunkt in min
0.0
0.5
1.0
1.5
2.0
2.5
3.0
3.5
4.0
Temperatur in
62
55
48
46
42
39
37
36
35
0C
50
45
40
35
0
0.5
1.5
yk = f (xk )
k=1:n
Der Befehl
1
3.5
wollen dieses Messergebnis nun grasch darstellen. Hierzu speichern wir die Zeitpunkte im
Vektor x und die Temperaturwerte in y, also
2
2.5
2
3
>> plot(x,y)
erzeugt ein Grakfenster und zeichnet die Elemente von x gegen die Elemente von y und verbindet diese Punkte geradlinig. Die Abbildung
10 zeigt das Ergebnis.
Wir zeichnen nun den Graph der explizit gegebenen Funktion f (x) = sin(x) auf dem Intervall
[0, 2]. Dazu mssen drei Dinge getan werden:
1. Einen Vektor x erzeugen, der das Intervall
[0, 2] diskretisiert:
>>
>>
>>
>>
n = 20;
x = linspace(0,2*pi,n);
y = sin(x);
plot(x,y)
60
>> grid
>> title(Die Sinusfunktion im
Intervall [0,2\pi])
Copyright c G. Gramlich
1 |x| 0.5
rect(x) =
0 sonst
0.5
0.5
1
0
2
3
4
function y = rect(x)
n = length(x);
y = zeros(n,1);
y = (x<0.5)-(x<-0.5);
4
5
6
7
8
9
10
11
12
%-Methode 1:
x = linspace(0,2*pi);
plot(x,sin(x),x,sin(2*x),x,sin(3*x
),x,sin(4*x),x,sin(5*x))
%-Methode 2:
x = linspace(0,2*pi);
Y = [sin(x);sin(2*x);sin(3*x);sin
(4*x);sin(5*x)];
plot(x,Y)
%-Methode 3:
x = linspace(0,2*pi);
plot(x,sin(x)), hold on,
for k=2:5
plot(x,sin(k*x),-)
end
hold off
x = linspace(0,1,200);
y = sqrt(1-x.^2);
x = linspace(0,1,200);
y = sqrt(1-x.^2);
61
Copyright c G. Gramlich
>>
>>
>>
>>
>>
>>
>>
plot(x,y)
hold on
plot(-x,y)
plot(x,-y)
plot(-x,-y)
axis equal
hold off
3
4
5
6
x = (1+t.^2).*sin(20*t);
y = (1-t.^2).*cos(20*t);
z = t;
plot3(x,y,z), grid on
xlabel(x(t)), ylabel(y(t)),
zlabel(z(t))
title(\it{plot3-Beispiel},
FontSize,14)
plot3Beispiel
z(t)
Der Befehl hold on sorgt dafr, dass die Resultate aller plot-Befehle erhalten bleiben.
Um die Bedeutung des Befehls axis equal
zu verstehen knnen Sie help axis verwenden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
50
50
0
y(t)
0
50 50
x(t)
t = -5:0.005:5;
62
Copyright c G. Gramlich
Funktion meshgrid erzeugt werden; anschlieend kann man den Graph mit mesh, surf
usw. zeichnen.
2
3
4
5
>>
>>
>>
>>
>>
Z = 2*ones(size(X));
Z = -0.5*Y.*(X>=0 & Y>=0)+2;
mesh(X,Y,Z)
axis([-2,2,-2,2,1,3])
xlabel(x_1), ylabel(x_2)
2
3
4
Mehr Informationen ber Visualisierungsmglichkeiten ndet man mit doc graph2d (help
graph2d), doc graph3d (help graph3d)
und doc specgraph (help specgraph).
Aufgabe 45 (3D-Grak) Zeichnen Sie den
Graph des Funktionterms
f (x, y) =
0.1
0.05
f(x,y)
1
cos(x) + y exp(x2 y2 )
5
0
0.05
1
0.1
2
2
2
1
[X,Y] = meshgrid(-3:0.1:3);
Z = 1/5*cos(X)+Y.*exp(-X.^2-Y.^2);
mesh(X,Y,Z)
1
y
2(x2 +y2 )
1
2 x2 + 2 fr x1 , x2 0
2
sonst.
40.3. Funktionsdarstellungen
63
Copyright c G. Gramlich
langt den Funktionsterm in einem m-File (Ab- Aufgabe 46 (Funktionsdarstellungen) Zeichschnitt 44) oder als Function Handle (doc nen Sie den Graph des Funktionsterms
function_handle). Die Funktion ezplot erf (x) = sin(x2 ) 2 cos(x)
wartet den Funktionsterm in Hochkomma oder
als symbolisches Objekt, siehe Abschnitt 67.
ber dem Intervall (0, 5) mit den Funktionen
Der Aufruf
plot, fplot und ezplot.
1
>> fplot(@(x)exp(-x^2),[-3,3])
Lsung: Dies erreicht man wie folgt:
plottet die Funktion
1
2
2
f (x) = ex ,
xR
3
4
5
6
>> fplot(@humps,[-2,2])
7
8
9
10
11
12
13
x R.
x = linspace(0,5);
f = sin(x.^2)-2*cos(x);
plot(x,f)
%-oder:
fplot(sin(x^2)-2*cos(x),[0,5])
%-bzw.
f = @(x) sin(x.^2)-2*cos(x);
fplot(f,[0,5])
%-oder:
ezplot(sin(x^2)-2*cos(x),[0,5])
%-bzw.
f = @(x) sin(x.^2)-2*cos(x);
ezplot(f,[0,5])
sin(x.2)2 cos(x)
3
100
2
80
1
60
0
40
20
2
0
20
2
x
1
Die Abbildung 16 zeigt vier verschiedene Darstellungen einer Funktion mit zwei Variablen.
64
Copyright c G. Gramlich
x. exp(x.2y.2)
10
10
10
5
10
0.4
2
5 5
0.2
0
3
2
0.2
1
0
0.4
2
3
2
2
0
y
der
0
2
2
x
Es handelt sich hier um die sogenannte peaksFunktion colormap zum Einsatz kommt und
Funktion, die in Matlab bereits vordeniert ist.
dafr sorgt, dass der Graph (das Netz) blau ist.
Es ist die Funktion
Die Funktion colormap erlaubt es, Daten mit
2 (y+1)2
Farbtabellen (color map) zu visualisieren. Mit
f (x, y) =3(1 x)2 ex
der Funktion colorbar knnen Sie sich die
2
2
10(x/5 x3 y5 )ex y
aktuelle Farbtabelle in der entsprechenden Figur anzeigen lassen. Die Figur wurde mit Hilfe
(x+1)2 y2
2
1/3e
, (x, y) R
der Anweisungen erzeugt:
Die peaks-Funktion geht durch Translationen
und Skalierungen aus der Gaussschen Normalverteilungsfunktion hervor. Das Bild links
oben in Abbildung 16 zeigt den Graph, rechts
oben Kurven gleicher Hhe (Hhenschittbilder), links unten ein paar Hhenlinien und
rechts daneben farbig ausgefllte Hhenlinien
der peaks-Funktion. Die Figur wurde mit den
folgenden Anweisungen erzeugt:
1
2
3
4
5
[X,Y,Z] = peaks(30);
subplot(2,2,1), surf(X,Y,Z),
subplot(2,2,2), contour3(X,Y,Z),
subplot(2,2,3), contour(X,Y,Z),
subplot(2,2,4), contourf(X,Y,Z),
1
2
3
fh = @(x,y) x.*exp(-x.^2-y.^2);
ezmesh(fh,40)
colormap([0 0 1])
65
Z = peaks;
[C,h] = contour(interp2(Z,4));
text_h = clabel(C,h);
set(text_h,BackgroundColor,[1 1
.6],Edgecolor,[.7 .7 .7])
Copyright c G. Gramlich
0.2
400
0
2
100
0
0.2
42 0
0.4
300
200
0.4
2
500
0.6
6
8
600
0.8
700
0.6
0.8
200
400
0.5
600
0.5
der
ezplot(t-sin(t),1-cos(t),[0,4*
pi])
grid on, xlabel(x(t)),
ylabel(y(t))
y = 1 cos(t)
r1 = @(t) cos(3*t).*cos(t);
r2 = @(t) cos(3*t).*sin(t);
ezplot(r1,r2,[0,2*pi]), grid;
in der x, y-Ebene fr 0 t 4.
Lsung: Es handelt sich um eine Zykloide.
ezplot(sin(-t)+t,1-cos(-t)
,[0,4*pi])
.......................................
x(t) = t sin t
y(t) = 1 cos t
fr t [0, 4].
Lsung: Die Kurve kann zum Beispiel wie
folgt geplottet werden.
66
x = sin(t)
y = 1 cos(t)
Copyright c G. Gramlich
in der x, y-Ebene fr 0 t .
rumliche Kurve
Lsung: Es handelt sich um einen Kreisbogen.
x(t) = (1 + t2 ) sin(20t)
1
y(t) = (1 + t2 ) cos(20t)
ezplot(sin(-t),1-cos(-t),[0,pi
])
z(t) = t
fr t [5, 5].
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lsung: Die Kurve kann zum Beispiel wie
folgt geplottet werden.
Die Anweisungen
1
1
2
3
4
r1 = @(t) exp(-0.2*t).*cos(t);
r2 = @(t) exp(-0.2*t).*sin(t);
r3 = @(t) t;
ezplot3(r1,r2,r3,[0,20],animate)
2
3
4
5
6
20
t = -5:0.005:5;
x = (1+t.^2).*sin(20*t);
y = (1+t.^2).*cos(20*t);
z = t;
plot3(x,y,z),
grid on, xlabel(x(t)),
ylabel(y(t)), zlabel(z(t))
.......................................
Aufgabe 51 (Rumliche Kurve) Zeichnen Sie
die Schraubenlinie (Helix, zylindrische Spirale)
15
x = cos(t)
10
y = sin(t)
0
1
z = t
1
0
y
0
1 1
67
Copyright c G. Gramlich
3
4
x = (1 t) cos(t)
z = @(theta,phi) 4*sin(theta);
ezmesh(x,y,z), axis equal
colormap([0,0,1])
y = (1 t) sin(t)
z = t
2
0
2
10
10
0
y
.......................................
5
10
0
10
ezsurf(2*cos(u)*cos(v),2*sin(u)
*cos(v),2*sin(v),[-pi/2,pi
/2]),
axis equal
Lsung: Es entsteht eine Wendelche, sieDer folgende Script zeichnet einen Torus fr he Abbildung 22. Eine Wendelche entsteht,
a = 10 und b = 4, siehe Abbildung 21.
wenn eine Strecke um eine zu ihr orthogonale
Achse geschraubt wird. Wir nehmen an, dass
1
x = @(theta,phi) (10+4*cos(theta))
diese Achse gleich der z-Achse des Koordi.*cos(phi);
natensystems ist. Hat die Strecke die Lnge l
2
y = @(theta,phi) (10+4*cos(theta))
.*sin(phi);
und ist der Winkel, den sie mit der positiven
68
Copyright c G. Gramlich
x = u cos(v), y = u sin(v), z = 2 v
11
50
12
40
40
13
30
z
14
20
20
16
20
0
y 20
15
10
0
20
0
20
17
18
19
subplot(2,3,4)
ezplot(y^2-x^3/9+6*x+10
,[-15,15])
grid; pause;
subplot(2,3,5)
f = @(x,y) (x.^2+y.^2).^2-14^2*(x
.^2-y.^2);
ezplot(f,[-15,15])
grid; pause;
subplot(2,3,6)
ezplot(abs(x)+abs(y)-14
,[-15,15]); grid;
3
4
5
6
7
8
9
10
subplot(2,3,1)
ezplot(x^2/15^2+y^2/9^2-1
,[-15,15])
hold on; plot([-12,12],[0,0],ro)
hold off; grid; pause;
subplot(2,3,2)
ezplot(-x^2/4+y^2/25-1,[-15,15])
grid; pause;
subplot(2,3,3)
ezplot(x^4+y^4-14^4,[-15,15])
grid; pause;
3
4
5
6
69
[x,y,z] = meshgrid(-2:0.1:2);
v = sin(10*x)/8+sqrt(z.^2+y.^2)
-0.5;
p = patch(isosurface(x,y,z,v,0));
view(34,40), grid on,
set(p,FaceColor,red),
set(p,EdgeColor,None),
Copyright c G. Gramlich
Name
loglog
semilogx
semilogy
Beschreibung
Logarithmisches KO-System
x-Achse logarithmisch
y-Achse logarithmisch
>> x = linspace(0,10);
>> y = 3*exp(-0.5*x);
>> semilogy(x,y); grid;
10
normal
2
10
0
2
4
2
0
equal
4
1
10
0
2
2
2
0
square 2
10
10
2
4 2 0 2 4
70
Copyright c G. Gramlich
1
2
1
2
3
>> x = 1:1000;
>> y = sqrt(x);
>> loglog(x,y); grid;
>> x = linspace(0,10);
>> y = 3*exp(-0.5*x);
>> plotyy(x,y,x,y,plot,semilogy
)
erhalten wir die Abbildung 27. Die linke yerhalten wir die Abbildung 26. Der Graph der
1
10
10
2.5
0
10
1.5
10
10
0.5
0
10 0
10
10
Abbildung 26: y =
10
0
0
10
10
10
x, x 1
Quadratwurzelfunktion ist wie erwartet eine Achse ist gewhnlich linear skaliert, whrend
Gerade. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . die rechte y-Achse logarithmisch skaliert ist.
40.10. Koordinatentransformationen
Mit der Funktion plotyy knnen wir Datenstze mit zwei y-Achsen zeichnen; die eine
Achse links, die Andere rechts. Als Beispiel
betrachten wir die Funktion y = 3e1/2x , x R.
Zeichnet man die Graph dieser Funktion in ein
gewhnliches kartesisches Koordinatensystem
mit gleicher Skalierung, so erhlt man den typischen Verlauf einer abfallenden Exponentialfunktion. Skaliert man die y-Achse jedoch logarithmisch, so ist der Graph eine Gerade. Wir
plotten diese beiden Kurven mit der Funktion
plotyy nun in eine Figur. Nach den Eingaben
Mit der Funktion cart2pol knnen kartesische Koordinaten in Polar- bzw. Zylinderkoodinaten transformiert werden. Die Funktion pol2cart transformiert umgekehrt Polarbzw. Zylinderkoordinaten in kartesische Koordinaten. Mit cart2sph bzw. sph2cart knnen Transformationen von kartesischen zu Polarkoordinaten und umgekehrt durchgefhrt
werden.
Zum Zeichnen von Polarkoordinaten ist die
Funktion polar geeignet.
71
Copyright c G. Gramlich
Weitere Grakfunktionen ndet man in der Tabelle 21. Insbesondere zur Darstellung statistischer Daten sind diese von groer Bedeutung.
Name
bar
barh
bar3
bar3h
hist
pie
stem
Beschreibung
Balkendiagramm (vertikal)
Balkendiagramm (horizontal)
3D-Balkendiagramm (vertikal)
3D-Balkendiagramm (horizontal)
Histogramm
Kreisdiagramm
Punkte mit Linien
2
3
dar.
Lsung: Die Anweisungen
1
2
1
y
0
0
1
1
2
2
0
x
72
Copyright c G. Gramlich
Die Funktion quiver3 stellt das dreidimensionale Analogon zur Funktion quiver dar. Damit lassen sich also dreidimensionale Vektorfelder darstellen.
1
2
3
Aufgabe 58 (Vektorfeld) Stellen Sie mit der erzeugen die Abbildung 31. . . . . . . . . . . . . .
Funktion quiver3 das rumliche Vektorfeld
f:
R3
R3
(x, y, z) (2, 0, 1)
4
2
dar.
Lsung: Die Anweisungen
1
2
0
2
4
5
5
0
y
0
5 5
1.5
1
f:
0.5
R2
R2
(x, y) (sin x, sin y)
dar.
Lsung: Die Anweisungen
0
10
0
y 10 0
10
2
3
[X,Y] = meshgrid(-6:0.8:6);
U = sin(X); V = sin(Y);
quiver(X,Y,U,V), grid,
R3
R3
(x, y, z) (x, y, z)
dar.
Lsung: Die Anweisungen
f:
R2
R2
(x, y) (sin x, sin y)
dar.
Lsung: Die Anweisungen
73
Copyright c G. Gramlich
6
4
2
0
2
2
4
6
6
3
4
5
6
7
[X,Y] = meshgrid(-6:2:6);
quiver(X,Y,2*X-3*Y,2*X+3*Y), grid
1
2
10
10
10
10
74
7. Whlen Sie aus dem File Men den Unterpunkt Export aus, um die Export Dialogbox zu erzeugen.
8. Whlen Sie den Dateityp EPS Level 2 Co-
Copyright c G. Gramlich
lor, geben Sie den Dateinamen MyFile.eps In Matlab werden vordenierte Pixelbilder zur
ein und speichern Sie Ihre Figur unter die- Verfgung gestellt. Mit dem Befehl
sem Namen.
1
Mit der Funktion print knnen Graken gespeichert oder gedruckt werden; mit der Funk- werden die Daten der Datei gatlin.mat gelation saveas nur gespiechert werden.
den. Die Befehle
1
Matlab bietet zum Einlesen von digitalen erzeugen die Abbildung 35 eine Fotograe aus
Bildern (Pixelbild, Pixel-Grak) die Funktion
imread, zum Schreiben imwrite sowie fr In50
formationen imfinfo. image bzw. imagesc
100
gibt die eingelesene Grak in einer Figure aus.
150
So erzeugen die folgenden Befehlszeilen die
200
250
300
350
400
450
100
200
300
400
500
600
dem Jahr 1964 von sechs Pionieren der Numerischen Mathematik. Von links nach rechts
handelt es sich um die Wissenschaftler Wilkinson, Givens, Forsythe, Householder, Henrici
und Bauer.
Figure in Abbildung 34, die das im jpg-Format Das Farbbild eines Clowns ist in Abbildung 36 zu sehen. Es kann analog der Davorliegende Bild gg.jpg enthlt:
tei gatlin.mat aus der Datei clown.mat er1
>> G = imread(gg.jpg);
zeugt werden. In [4] habe ich dieses Bild (als
2
>> imagesc(G), colormap(gray),
Grautonbild) fr eine Anwendung der Singu3
>> axis image, axis off,
lrwertzerlegung in der Bildverabeitung verMgliche Bildformate sind bmp, cur, gif, hdf4, wendet.
ico, jpeg, usw., siehe doc imread (help In Tabelle 22 sind wichtige Funktionen fr
Pixel-Graken zusammengefasst.
imread).
75
Copyright c G. Gramlich
40.15. Animationen
Um Animationen herzustellen und durchzufhren, gibt es die Funktion movie, siehe doc
movie (help movie).
50
100
150
200
50
100
150
200
250
300
Das Graksystem von Matlab stellt sogenannte Low-Level-Funktionen zur Verfgung, mit
denen alle Aspekte des Graksystems kontrolliert werden knnen. Damit besteht die
Mglichkeit, detaillierte Graken zu generieren. Die Kommandos set und get erlauben
es, jedes Grakobjekt anzusprechen. Mit doc
graphics (help graphics) erhalten Sie eine
komplette bersicht ber alle zur Verfgung
stehenden Kommandos und Funktionen.
Name
imread
image
imagesc
imfinfo
imwrite
Bedeutung
Pixel-Grak einlesen
Pixel-Grak in Figure plotten
Pixel-Grak in Figure plotten
Infos ber Pixel-Grak
Pixel-Grak schreiben
76
Copyright c G. Gramlich
Verfgung.
10
11
12
13
14
patch ist eine Low-Level-Funktion zur Erzeugung von Flchenstcken (patches). Ein PatchObjekt besteht aus Polygonen, die durch Eckpunkte deniert werden. Patches knnen verwendet werden, um reale Objekte geometrisch
zu modellieren, wie zum Beispiel Flugzeuge
oder Automobile.
15
16
patch(Vertices,E,Faces,K,
FaceColor,[0.9 1 0.9]);
text(0,0,0,A), text(1,0,0,B)
text(1,1,0,C), text(0,1,0,D)
text(0.5,0.5,1,S),
axis([-0.5 1.5 -0.5 1.5 0 1])
xlabel(x), ylabel(y),
zlabel(z), grid
Aufgabe 62 (Geometrie) Gegeben ist die dreiseitige Pyramide mit der Grundche A =
(12, 0, 2), B = (12, 12, 2), C =
(0, 12, 2) und der Spitze S = (4, 4, 6). Die
Koordinaten sind bezglich eines kartesischen
Ein Beispiel zeigt Abbildung 37. Die gerade
Koordinatensystems gegeben. Eine Dreieckspyramide besitzt eine Inkugel, das heit eine
Kugel, die alle vier Seitenchen der Dreiecks1
S
pyramide berhrt. Diese Dreieckspyramide besitzt die Inkugel mit dem Radius r = 3 und dem
0.5
Mittelpunkt M = (3, 3, 1). Stellen Sie die PyC
ramide und die Inkugel dar.
0
D
B
1.5
Lsung: Das folgende Script lst das Pro1
1.5
A
1
0.5
blem.
0.5
0
y
0.5 0.5
x
1
2
3
4
77
%-Pyramide zeichnen.
%-Ecken.
E = [-12 0 -2; 12 -12 -2; 0 12 -2;
-4 4 6];
Copyright c G. Gramlich
5
6
7
8
9
10
11
12
13
14
15
16
%-Kanten.
K = [1 2 3;
1 2 4;
%
2 3 4;
1 3 4];
p = patch(Vertices,E,Faces,K,
FaceColor,[0.9 0.9 1]);
hold on,
%-Inkugel zeichnen.
[x,y,z]=ellipsoid(-3,3,1,3,3,3,30)
;
surfl(x, y, z), colormap copper,
axis equal, grid on; xlabel(x),
ylabel(y), zlabel(z),
10
5
z
0
5
10
0
10
x
10
10
41. Vergleichsoperatoren,
Vergleichsfunktionen
78
Copyright c G. Gramlich
Logische Operatoren
&
|
Beschreibung
logisches und
logisches oder
logisches nicht
Bestimmen Sie die Ergebnisse der folgenden Ausdrcke. berprfen Sie Ihre Resultate
dann in Matlab.
(a) a < 10.0
(b) a+b >= 6.5
(c) k
>> x =
>> y =
>> x &
ans =
1
(e)
[1 0 2 3 0 4];
[5 6 7 0 0 8];
y
0
= 0
(a == 3*b)
43. Steuerstrukturen
Verknpft man zwei Matrizen mit einem ex- The guts of Matlab are wirtten in C. Much of
Matlab ist also written in Matlab, because
klusiven oder, so ist die entsprechende Ergebits a programming language.
niskomponente 1 (wahr), wenn eine der beiden
Cleve Moler, 1999.
Komponenten von Null verschieden ist. Andererseits ist die Ergebniskomponente 0 (falsch),
wenn beide Komponenten 0 oder beide un- Programmiersprachen und programmierbare
Taschenrechner erlauben es, den Ablauf eines
gleich 0 sind.
Programms zu steuern. Man spricht von Steu1
>> x = [1 0 2 3 0 4];
erstruktur. Matlab bietet vier Mglichkeiten,
2
>> y = [5 6 7 0 0 8];
den sequentiellen Ablauf durch Verzweigun3
>> xor(x,y)
gen und Schleifen zu ndern. Dies sind:
4
ans =
5
for-Schleifen
while-Schleifen
Verzweigungen mit if
Verzweigungen mit switch
43.1. for-Schleife
Aufgabe 63 (Logische Operatoren) Gegeben Das folgende Beispiel erzeugt in einer forseien die Variablen a=5.5, b=1.5 und k=-3. Schleife die ersten 20 Fibonacci-Folgenglieder.
79
Copyright c G. Gramlich
1
2
3
4
Der Zeilenvektor f beinhaltet die Zahlenwerte. Bekannterweise nhern sich die Quotienten zweier benachbarter Fibonacci-Zahlen
so gibt es zwei Grnde dafr, die Matrizen zu- Es ist daher ezienter, obige erste forSchleife wie folgt zu programmieren:
vor mit zeros zu initialisieren:
1. Durch zeros kann man festlegen, ob man
einen Zeilen- oder Spaltenvektor erzeugen
mchte bzw. welche Gre die Matrix haben soll. Dadurch wird man gezwungen,
explizit ber die Orientierung und Gre
des Vektors bzw. der Matrix nachzudenken, und vermeidet so Fehler beim Operieren mit diesen.
1
2
3
4
>> x = zeros(1,11);
>> for k = 1:11
x(k) = (k-1)*(1/10);
end
Will man eine Matrix in einer Schleife erzeugen, dann sollte man sie zuvor initialisieren.
2. Der Speichermanager hat durch eine Initialisierung weniger Arbeit. Werden Matri- 43.2. while-Schleife
zen schrittweise aufgebaut, dann muss sich
Matlab stndig um die Reservierung (Al- In einer while-Schleife berechnen wir die
lokation) von zustzlichem Speicher km- Summe der ersten 100 Zahlen.
mern, was eventuell auch eine zeitaufwen1
>> n = 1; Summe = 0;
dige Kopie der Matrix in einen neuen (gr2
>> while n <= 100
eren) Speicherbereich ntig macht. Dies 3 Summe = Summe+n;
kann man verhindern, indem man gleich 4 n = n+1;
zu Beginn die Matrix auf die passen- 5 end
de endgltige Gre setzt und diese an- 6 >> Summe
80
Copyright c G. Gramlich
7
8
Summe =
5050
1
2
3
Der folgende Matlab-Code berechnet die Vektoren zk+1 = Azk mit Startvektor z0 = (1, 0)
und der stochastischen Matrix
A=
4
5
6
7
0.8 0.3
.
0.2 0.7
8
9
switch x
case -1
disp(x ist
case 0
disp(x ist
case 1
disp(x ist
otherwise
disp(x ist
end
-1);
0);
1);
ein anderer Wert);
44. m-Files
Bisher wurden Anweisungen zeilenweise eingegeben und von Matlab verarbeitet. Diese in8
teraktive Arbeitsweise ist unzweckmig fr
9
Algorithmen, die mehrere Programmzeilen bentigen und wieder verwendet werden sollen.
Hierfr eignen sich sogenannte m-Files, die
43.3. if-Anweisung
mit einem Editor erzeugt werden und unter einem Filenamen mit dem Krzel .m abgespeiIm folgenden Beispiel wird die Anweisung
chert werden. Es gibt zwei Arten von m-Files:
disp(a ist gerade) nur dann ausgedie Script-Files und die Function-Files.
fhrt, wenn a durch 2 teilbar ist.
6
7
1
2
3
>> if ( rem(a,2) == 0 )
disp(a ist gerade)
end
44.1. Script-Files
81
Copyright c G. Gramlich
ein Script-File einen anderen m-File aufrufen. der Ordnung 8, dann gibt es 0,2,4,6 oder 8
Script-Files haben keine Ein- und Ausgabear- reelle Eigenwerte (die Anzahl muss gerade
gumente.
sein, weil komplexe Eigenwerte in komplexWir geben ein einfaches Beispiel eines Script- konjugierten Paaren auftreten). Die beiden Zeilen
Files (ErstesScript).
1
2
3
4
5
6
%-Script: ERSTES-SCRIPT
Daten = [2,10,1,12,-2,3,2];
sort(Daten)
mean(Daten)
median(Daten)
std(Daten)
erzeugen eine zufllig normalverteilte 8 8Matrix und zhlen, wieviel Eigenwerte reell
sind. Dies ist so realisiert, dass geprft wird,
ob der Imaginrteil dem Betrag nach kleiner
als 104 ist. Jeder Aufruf erzeugt nun eine andere Zufallsmatrix und man erhlt somit unterschiedliche Ergebnisse. Um ein Gefhl dafr
zu bekommen, welche der fnf Mglichkeiten
am wahrscheinlichsten ist, kann man folgenden Script ausfhren.
1
2
3
ans =
-2
1
2
2
3
10
12
ans =
4
ans =
2
ans =
5.0662
4
5
6
7
8
9
10
Das folgende Beispiel zeigt ein EigenwertRoulette, welches darauf beruht, abzuzhlen
wieviele Eigenwerte einer reellen Zufallsmatrix reell sind. Ist die Matrix A reell und von
A = randn(8);
sum((abs(imag(eig(A))) < 0.0001));
%-Script-File: EIGENWERTROULETTE
n = 1000;
Anzahl = zeros(n,1);
for k=1:n
A = randn(8);
Anzahl(k) = sum(abs(imag(eig(A)
)) < 0.0001);
end
hist(Anzahl,[0 2 4 6 8]);
h = findobj(gca,Type,patch);
set(h,FaceColor,r,EdgeColor,
w)
82
Copyright c G. Gramlich
600
beachten.
500
400
300
200
100
1
0
2
0
function [Out_1,...,Out_n] =
Name(In_1,...,In_m)
< Irgendwelche Anweisungen >
wobei Name der vom Anwender anzugebende Funktionsname ist. Der Funktionsname
(hier Name) muss auch der Filename sein, un44.2. Function-Files
ter der der Function-File abgespeichert wird.
Es ist mglich, dass ein Function-File keine
Wenn Sie intensiver mit Matlab arbeiten, dann Ausgabe- und/oder Eingabeargumente hat.
werden Sie bald feststellen, dass es nicht
Die folgende Funktion ist ein Beispiel fr
fr alle ihre Wnsche eingebaute Funktionen
einen Function-File.
oder Kommandos gibt. In diesem Fall knnen Sie sich aber Ihre eigene Funktion schrei- 1 function [V,D,r] = MatrixEig(A)
ben und damit die Funktionalitt von Mat- 2 [m,n] = size(A);
3
if m==n
lab erweitern. Mit Hilfe von Function-Files
4
[V,D] = eig(A);
(Matlab-Funktionen, Funktionen) knnen Sie 5
r = rank(A);
den Matlab-Funktionsvorrat erweitern. Va- 6 else
riablen in Function-Files sind lokale Varia- 7
disp(Fehler: Die Matrix muss
quadratisch sein!)
blen. Function-Files haben demnach ihren ei- 8
genen nach auen nicht sichtbaren Workspace. 9 end
Die bergabe einzelner Variablen erfolgt ber
eine Parameterliste im Funktionsaufruf. Ein Schreiben Sie sich die obigen Anweisungen
Function-File entspricht der subroutine bzw. in eine Datei mit dem Namen MatrixEig.m
function in der Programmiersprache Fortran, und denieren Sie eine Matrix A im Matlabfunction in C/C++ und procedure bzw. functi- Workspace. Fhren Sie
on in Pascal. Haben Sie eine Funktion in Form 1 >> [V,D,r] = MatrixEig(A)
eines Function-Files geschrieben, so knnen
Sie diesen genauso aufrufen, wie die eingebau- aus, dann stehen in der Matrix V die Eigenten Matlab-Funktionen. Fr das Schreiben ei- vektoren, in der Hauptdiagonalen von D die
nes Function-Files sind verschiedene Dinge zu Eigenwerte und in r der Rang der Matrix A.
83
Copyright c G. Gramlich
V,D,r sind die Ausgabe- und A das Eingabeargument der Funktion MatrixEig. Der von uns
geschriebene Function-File MatrixEig ruft
mehrer eingebaute Matlab-Funktionen auf:
size, eig, usw.
nen einerseits mit einem Editor Ihrer Wahl arbeiten oder andererseits den eigebauten Matlab-Editor/Debugger verwenden. Diesen knnen Sie mit dem Befehl edit aktivieren oder
durch Anklicken der Menoptionen File-New
Functions knnen sowohl von anderen Func- oder File-Open.
tions als auch von Scripts aufgerufen werden.
Es ist eine Strke von Matlab-Funktionen,
mit einer unterschiedlichen Anzahl von ber- 44.5. Zur Struktur eines m-Files
gabeparameter zurechtzukommen. Hierzu exisitieren innerhalb einer Funktion die Varia- m-Files sollten, um sie auch nach lngerer Zeit
blen nargin und nargout (number argu- wieder verwenden zu knnen, gut dokumenment in/out), die die Anzahl der bergebenen tiert sein (Software Engineering). ProfessioParameter enthalten. Zustzlich stehen noch nelle m-Files haben daher folgende Form:
die Befehle inputname zum Ermitteln der
Variablennamen der bergabeargumente und 1 function [Out,...] = Name(In,...)
nargchk zum berprfen der korrekten An- 2 % H1-Zeile
zahl der bergebenen Argumente zur Verf- 3 % Help Text
4
% Help Text usw.
gung. Siehe doc nargin, doc nargout, doc
5
< Irgendwelche Anweisungen >
inputname und doc nargchk fr entsprechende Beispiele. Fr weitere Informationen
ber Funktionen siehe doc function (help Die erste Zeile legt den Funktionsnamen und
die Ein- und Ausgabeparameter fest. Dies hafunction) und Abschnitt 52.
ben wir bereits besprochen. Die zweite Zeile
ist die sogenannte H1-Zeile. In ihr wird in ei44.3. Namen von m-Files
ner Zeile das Programm beschrieben. Dies ist
die erste Zeile, die auf dem Bilschirm ausgeFr m-Files gelten bezglich der Namens- geben wird, wenn Sie help Name eingeben.
wahl die gleichen Regeln wie fr Varia- Auerdem sucht die lookfor-Funktion nur in
blen, siehe Abschnitt 28. Insbesondere wird dieser H1-Zeile und gibt nur diese aus. Gezwischen Klein- und Grobuchstaben unter- ben Sie sich daher besondere Mhe, diese H1schieden. Weitere Infos nden Sie unter doc Zeile kurz und prgnant zu schreiben. In weitegeneral und doc lang.
ren anschlieenden Zeilen knnen Sie den mFile weiter dokumentieren. Script-Files werden genauso gehandelt, dann aber entfllt na44.4. Editieren von m-Files
trlich die erste Zeile mit dem Schlsselwort
Sie haben zwei Mglichkeiten, um einen m- function. Weitere Informationen nden Sie
File zu erzeugen und zu editieren. Sie kn- in [19].
84
Copyright c G. Gramlich
44.6. Blockkommentare
%{
<Block>
%}
y = ( t>=0 );
fplot(@h,[-3,3,-0.5,1.5]), grid
44.7. bungsaufgaben
0.5
.......................................
Aufgabe 65 (Function-File) Schreiben Sie
einen Function-File, der die Sprungfunktion
(Einheitssprungfuktion, Heaviside-Funktion)
0 t < 0
h(t) =
1 t 0
0.5
3
function y = hT(t,T)
85
Copyright c G. Gramlich
1
2
3
4
5
Lsung: Mit Hilfe der Sprungfunktion h lassen sich diese Funktionen geschlossen darstellen. Es ist rect(t) = h(t + 0.5) h(t 0.5),
t R, ramp(t) = th(t), t R und g(t) =
sin( t )(h(t) h(t 1)), t R. Daher lassen sich
2
diese drei Funktionen in Matlab wie folgt berechnen.
subplot(2,1,1)
fplot(@hT
,[-4,4,-0.5,1.5],[],[],[],2),
grid, title(h(t+2))
subplot(2,1,2)
fplot(@hT
,[-4,4,-0.5,1.5],[],[],[],-2),
grid, title(h(t-2))
1
2
1.5
function y = rect(t)
y = h(t+0.5)-h(t-0.5);
function y = ramp(t)
y = t.*h(t);
0.5
0
0.5
4
1.5
1
0.5
0
0.5
4
0
h(t2)
function y = g(t)
y = sin(pi*t/2)*(h(t)-h(t-1))+(t
>=1);
Die Anweisungen
2
2
3
4
5
1 |t| 0.5
(a) rect(t) =
0 sonst
0 t < 0
(b) ramp(t) =
t sonst
t<0
t
(c) g(t) = sin( 2 ) 0 t 1
1
1<t
subplot(3,1,1), title(rect)
fplot(@rect,[-2,2,-0.5,2]), grid
subplot(3,1,2), title(ramp)
fplot(@ramp,[-2,2,-0.5,2]), grid
subplot(3,1,3), title(g)
fplot(@g,[-2,2,-0.5,2]), grid
x x < 0
f (x) = x2 0 x < 2
4 x 2
86
Copyright c G. Gramlich
>> fplot(f,[0,2])
.......................................
0
2
2
1
0
2
2
1
0
2
Aufgabe 71 (Horner-Methode) Implementieren Sie die Horner-Methode in Matlab. Zunchst skalar und dann vektoriell.
Lsung: Hierzu whlen wir die folgende Darstellung des Polynoms
p(x) = a1 + a2 x + a3 x2 + + an xn1
und nennen die skalare Matlab-Funktion
Horner.
1
1
2
3
4
5
function y = f(x)
y1 = x.*(x<0);
y2 = x.^2.*( (x<2)-(x<=0) );
y3 = 4*(x>=2);
y = y1+y2+y3;
2
3
4
5
6
function p = Horner(a,x)
n = length(a);
p = a(n);
for k=n-1:-1:1
p = p*x+a(k);
end
2
Der Aufruf fplot(@f,[-3,3]) zeichnet den Fr das Polynom p(x) = x + 3x + 2 liefert
Graph im Intervall [3, 3]. . . . . . . . . . . . . . . der Aufruf Horner([2,3,1],2) den Wert
12=p(2).
Aufgabe 69 (Function-File) Schreiben Sie
Nun die vektorielle Version.
einen Function-File, um die Funktion f (t) =
1
t 3 , t R zu berechnen. Benutzen Sie diesen, 1 function p = HornerVektoriell(a,x)
um die Funktion f im Intervall [0, 1] zu zeich- 2 n = length(a);
3
p = a(n)*ones(size(x));
nen.
4
for k=n-1:-1:1
Lsung: Mit dem Function-File
5
p = x.*p+a(k);
1
2
function y = f(t)
y = t.^(1/3);
end
87
Copyright c G. Gramlich
Variablen knnen aber auch mit global de- 47. Wie man eziente Programme
niert werden. Um auf diese Variablen zugreischreibt
fen zu knnen, muss diese Denition sowohl
im Haupt-Workspace als auch in der Function
Schleifen werden in Matlab inezient auserfolgen. Angezeigt werden die globalen Vagefhrt. Deshalb sollten Sie diese vermeiden,
riablen mit whos global, gelscht werden sie
wo immer es geht. Im Abschnitt 37 haben wir
mit clear global.
auf diesen Sachverhalt zum ersten Mal hingewiesen. Nahezu alle Matlab-Funktion akzeptieren vektorielle Argumente, so dass man
auf Schleifen hug tatschlich auch verzichten kann.
46. Namenstest
Angenommen Sie wollen die ersten 100 natrlichen Zahlen aufsummieren (nicht aber die
Mit der Funktion exist knnen Sie berFormel n(n + 1)/2 verwenden). In einer skalaprfen, ob ein Name bereits exsitiert. Mit
ren Programmiersprache wie zum Beispiel in
iskeyword kann festgestellt werden, ob ein
C/C++ wrde man wie folgt vorgehen:
Schlsselwort vorliegt. Eine Liste aller Schls1
int s = 0;
selwrter erhlt man mit
2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>> iskeyword
ans =
break
case
catch
continue
else
elseif
end
for
function
global
if
otherwise
persistent
return
switch
try
while
3
4
5
6
7
int n;
for (n=1;n<101;++n)
{
s = s+n;
}
print(%d\n,s);
s = 0;
for n=1:100
s = s+n;
end
s
88
N = 1:100;
s = sum(N)
Copyright c G. Gramlich
1+
x
24
x
12
8
x2
384
n = 200;
x = linspace(0,1,n);
y = zeros(1,n);
for k=1:n
y(k) = ((1+x(k)/24)/(1-x(k)/12+(
x(k)/384)*x(k)))^8;
end
n = 200;
x = linspace(0,1,n);
Zaehler = 1 + x/24;
Nenner = 1 - x/12 + (x/384).*x;
5
6
Quotient = Zaehler./Nenner;
y = Quotient.^8;
Um der Variablen y die entsprechenden Funktionswerte von f zuzuweisen, werden verschiedene bekannte und weniger bekannte
Vektoroperationen durchgefhrt: Vektoraddition, Vektorsubtraktion, skalare Multiplikation, punktweise Vektormultiplikation, punktweise Vektordivision und punktweise Vektorexponentiation.
Betrachten wir den Script-File genauer. Matlab erlaubt es, einen Vektor mit einem Skalar
zu multiplizieren. Dies zeigt der Term x/24.
Dort wird jede Koordinate des Vektors x durch
die Zahl 24 dividiert bzw. mit 1/24 multipliziert. Das Ergebnis ist ein Vektor mit der
gleichen Lnge und Orientierung (Zeile oder
Spalte) wie der Vektor x. Im obigen Script ist
x ein Zeilenvektor und somit ist x/24 ebenfalls ein Zeilenvektor. Durch die Anweisung
1+x/24 wird zu jeder Koordinate des neuen
Vektors x/24 1 hinzuaddiert und der Variablen
Zaehler zugeordnet. Dies ist natrlich keine Vektorraumoperation, aber eine ntzliche
Matlab-Eigenschaft. Wir betrachten nun die
Variable Nenner. Hierbei bedeutet die Operation (x/384).*x eine punktweise Vektormultiplikation. das heit jede Koordinate von
x/384 wird mit jeder Koordinaten des Vektors x multipliziert. Beachten Sie, dass die Vektoren die gleiche Lnge haben. Zum Ergebnis wird 1 hinzuaddiert und von jeder Koordinate x/12 subtrahiert, bevor das Ergebnis
der Variablen Nenner zugeordnet wird. Die
Anweisung Quotient = Zaehler./Nenner
bedeutet punktweise Division, das heit, jede Komponente des Vektors Zaehler wird
89
Copyright c G. Gramlich
y = vectorize(((1+x/24)/(1x/12+x^2/384))^8);
x = linspace(0,1,20);
vs = vectorize(((1+x/24)/(1-
2
3
4
E = zeros(2,10);
for k=1:10
E(:,k) = eig(A^k);
end
Mit der Anweisung E = zeros(2,10); haben wir die Ausgabematrix E mit Nullen vorbesetzt. Htten wir dies nicht getan, so msste
Matlab in jedem Schleifendurchlauf die Gre
der Matrix E durch Hinzunahme einer weiteren
Spalte verndern, was sich durch eine lngere Ausfhrungszeit bemerkbar machen wrde.
Darber hinaus hat das Vorbesetzen der Ausgabematrizen den Vorteil, dass man sich bereits vorher ber die Gre und Orientierung
Gedanken machen muss, was zu disziplinrem
Programmierstil erzieht.
90
Copyright c G. Gramlich
4
5
Somit gilt:
Vermeiden Sie Schleifen in Matlab,
wann immer dies mglich ist.
20
10
10
for x = 1:10
y = sqrt(x);
end
20
10
x = linspace(-10,10,n);
A = [sin(x) sin(2*x) sin(3*x) sin
(4*x)];
y = A*[2; 3; 7; 5];
plot(x,y)
x = 1:10;
y = sqrt(x);
10
.......................................
91
Copyright c G. Gramlich
Funktionen Matrizen als Argumente akzeptie- Matlab-Code zum Berechnen der Pseudoinren; es ist daher nicht ntig, die Komponenten versen ber die Singulrwertzerlegung (svd).
einzeln zu durchlaufen. Verwendet man diese
Funktionen, so beschleunigt dies die Program49. Lineare Algebra (Teil 1)
mausfhrung.
Funktionen, die oft verwendet werden oder deren Ausfhrung zeitaufwendig ist, sind meist
als ausfhrbare Files implementiert. Sie heien built-ins. Built-ins sind Funktionen, die
entweder aus der Lapack/Blas-Library stammen oder von MathWorks erstellt wurden. Diese Funktionen sind sehr ezient implementiert
und sollten so viel wie mglich anstelle von
eigenem M-Code verwendet werden. Ob eine
Funktion built-in ist, kann mit which festgestellt werden:
1
2
2x + 4y 3z = 1
3x + 6y 5z = 0
Mit der Funktion exist kann man built-ins
identizieren:
aus Beispiel 1.6 in [5] knnen wir in Matlab
mit dem \-Operator (Backslash-Operator) wie
1
>> exist sin
folgt lsen.
2
ans =
3
1
2
3
4
5
6
92
Copyright c G. Gramlich
1
2
3
4
5
Lsung: Die allgemeine Lsung ist die eindeutige Lsung x = (1, 2, 2). Dies zeigen die
folgenden Matlab-Zeilen.
1
2
3
1
2
3
>> x = inv(A)*b
x =
1.0000
2.0000
3.0000
4
5
6
7
2
3
>> syms a b c d
>> A = [a,b; c,d];
>> inv(A)
ans =
[ d/(a*d-b*c), -b/(a*d-b*c)]
[ -c/(a*d-b*c), a/(a*d-b*c)]
4
5
>> x = sym(A)\b
x =
[ -1]
[ 2]
[ 2]
.......................................
2x1 + 4x2 = 6.
4 2 x1
2
2
1
>> A = [4 -8; 3 -6; -2 4];
9 3 x2 = 8 .
2
>> b = [12; 9; -6];
10
2 3
7
x3
3
>> rref([A b])
4
93
ans =
1
-2
Copyright c G. Gramlich
6
7
0
0
0
0
0
0
1
2
3
4
5
6
7
>> A = [1 1 2; -1 -2 3; 3 -7 4];
>> b = [8; 1; 10];
>> sym(A)\b
ans =
[ 3]
[ 1]
[ 2]
1 4 1 0 0
2.4
0 1 4 1 0 , b = 4.2 ,
A=
0 0 1 4 1
2.4
[
3]
[ -2]
[ -1/3]
.......................................
5
6
7
x1 + x2 + 2x3 = 8
8
9
x1 2x2 + 3x3 = 1
10
11
12
13
Lsung: Die allgemeine Lsung ist die eindeutige Lsung x = (3, 1, 2), denn es gilt
94
14
15
>> A = 4*diag([ones(5,1)])+diag([
ones(4,1)],1)+diag([ones(4,1)
],-1)
A =
4
1
0
0
0
1
4
1
0
0
0
1
4
1
0
0
0
1
4
1
0
0
0
1
4
>> b = [4.1,2.4,4.2,2.4,4.1];
>> A\b
ans =
1.0000
0.1000
1.0000
0.1000
1.0000
Copyright c G. Gramlich
.......................................
15
16
1 2
3
2
2
3
4
5
%1 := a e i - a f h - d b i +
d c h + g b f - g c e
Die Inverse exisiert genau dann, wenn der Nenner aei a f h dbi + dch + gb f gce ungleich
Null ist. Ein Vergleich mit
Lsung: Es ist
1
17
1
2
3
>> det(S)
ans =
a*e*i-a*f*h-d*b*i+d*c*h+g*b*f-g*c*
e
2 17 11
a b c
11 7 .
S= d e f
0
3 2
g h i
.......................................
[
[ d i - f g
[- --------- usw.
[
%1
[
[ -d h + e g
[- ---------- usw.
[
%1
1
2
3
95
Copyright c G. Gramlich
49.2. Vektoren in der Ebene und im Raum Beachten Sie, Matlab rechnet im Bogenma.
Die Zeile
Zu Vektoren siehe auch Abschnitt 34. Vektor1
>> 180*phi/pi
operationen lassen sich in Matlab einfach aus2
ans =
fhren. Die Summe der beiden Vektoren u = 3
60.0000
(2, 3, 1) und v = (3, 4, 2) ist (Beispiel 2.3 in
[5])
liefert den Winkel im Gradma. Wir berechnen
den Projektionsvektor aus Beispiel 2.12
1
>> u = [2;3;-1]; v = [3;-4;2];
2
3
4
5
6
>> u+v
ans =
5
-1
1
1
2
3
4
5
>> norm([4;-3])
ans =
5
1
2
3
4
5
6
2
3
4
5
6
>> p = (u*a)/(norm(a)^2)*a
p =
2.8571
-0.7143
1.4286
3
4
5
Aufgabe 83 (Skalarprodukt) Berechnen Sie jeweils das Skalarprodukt der angegebenen Vektoren:
(a) a = (1, 0); b = (0, 1)
(b) a = (1, 0, 0); b = (0, 1, 0)
96
Copyright c G. Gramlich
1
2
3
1
2
3
>> dot([1,1,1],[-2,-2,-2])
ans =
-6
4
5
Auch Matlab hat t = 1 gewhlt, um einen Basisvektor fr den Nullraum von A zu bestimmen. Eine (numerische) Basis der Lnge 1 erhlt man mit
>> dot([2,2,2],[3,3,3])
ans =
18
.......................................
2
3
4
3
4
5
Mehr Geometrie und Matlab nden Sie bei liefern eine Basis des Spaltenraumes von A.
[25].
Eine Basis der Lnge 1 erhlt man mit orth.
97
Copyright c G. Gramlich
1
2
3
4
5
In Beispiel 4.28 haben wir alle vier Fundamentalrume an Hand der Matrix A diskutiert. Wir
besttigen nun die dort gefundenen Resultate, indem wir zu jedem Fundamentalraum eine
Basis berechnen.
2
3
>> null(A)
ans =
[ -2]
[ 1]
>> Z = rref(A)
Z =
[ 1, 2]
[ 0, 0]
>> null(Z)
ans =
[ -2]
[ 1]
4
5
6
7
8
9
10
11
12
13
14
15
16
und
1
2
3
4
5
6
7
8
17
>> colspace(A)
ans =
[ 1]
[ 2]
>> colspace(rref(A))
ans =
[ 1]
[ 2]
2
3
4
>> A = [1 2 4 0 1; 0 1 2 0 0; 0 0
0 1 0; 0 0 0 0 0];
>> rank(A)
ans =
3
8
9
10
11
12
13
14
15
16
17
98
Copyright c G. Gramlich
10
11
12
13
1
2
3
4
14
15
16
17
18
19
20
>> colspace(A)*null(A)
ans =
0
21
22
23
Mit dem Backslash-Operator \ knnen wir lineare Ausgleichsaufgaben lsen. Wir besttigen damit die Lsung aus Beispiel 4.34.
1
2
3
4
5
6
24
25
26
27
28
29
30
31
32
33
34
>> eig(A)
ans =
0
4
4
>> svd(A)
ans =
0
(45+3*97^(1/2))^(1/2)
(45-3*97^(1/2))^(1/2)
>> rref(A)
ans =
[ 1, 0, 1/2]
[ 0, 1, 1/2]
[ 0, 0, 0]
>> null(A)
ans =
1
1
-2
>> colspace(A)
ans =
[ 1, 0]
[ 0, 1]
[ 1, -1]
1 0
A= 1 1
1 2
ren linear abhngig sind.
jeweils eine Basis der vier Fundamentalrume.
1
>> a = [1,-2,3];
2
>> b = [5,6,-1];
Lsung: Hier eine symbolische Lsung. Zu3
>> c = [3,2,1];
erst Basen des Nullraumes und des Spaltenrau4
>> A = sym([a,b,c]);
mes, dann Basen des transponierten Nullrau5
>> det(A), rank(A)
mes und des Zeilenraumes.
6
7
8
9
ans =
0
ans =
2
1
2
3
99
Copyright c G. Gramlich
4
5
6
7
8
9
10
11
12
13
14
15
ans =
[ 1, 0]
[ 0, 1]
[ -1, 2]
>> null(A), colspace(A)
ans =
[ 1]
[ -2]
[ 1]
ans =
[ 1, 0]
[ 0, 1]
>> A = [1 1; -1 1; -1 2];
>> b = [7; 0 ; -7];
>> x = A\b
x =
5.0000
0.5000
>> p = A*x
p =
5.5000
-4.5000
-4.0000
Lsung:
7
1 1
x1
0 .
1 1
1
t = [0 0.2 0.4 0.6 0.8 1];
x2
1 2
7
2
b = [3.825 4.528 4.746 4.873 4.865
A
100
4.813];
A = [ones(length(t),1),t,cos(t)];
Copyright c G. Gramlich
4
5
6
7
8
9
10
11
12
13
x = A\b
x =
-1.0428
3.1516
4.9265
plot(t,b,o,MarkerSize,10)
tt = linspace(min(t),max(t));
f = x(1)+x(2)*tt+x(3)*cos(tt);
hold on
plot(tt,f)
3
4
5
>> det(A)
ans =
a*d-b*c
2
1 1
A = 2 4 3
3 6 5
4.8
4.6
4.4
4.2
3.8
0
1
0.2
0.4
0.6
0.8
2
3
lung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49.5. Determinanten
Zur Berechnung der Determinante einer Matrix steht die Funktion det zur Verfgung, so- 49.6. Eigenwerte und Eigenvektoren
wohl numerisch als auch symbolisch. Wir beDie Funktion eig hift uns beim Lsen einer
rechnen die Determinante von
Eigenaufgabe. Es knnen damit sowohl Eigena b
werte als auch Eigenvektoren berechnet werA=
.
c d
den, sowohl numerisch als auch symbolisch.
Wir besttigen Beispiel 6.2.
1
2
>> syms a b c d
>> A = [a b; c d];
101
Copyright c G. Gramlich
2
3
4
5
6
7
8
12
4
6
8 21 8
A=
29
72 27
ans =
x^2-5*x+6
1
2
3
Eine symmetrische Matrix ist immer diagonalisierbar. Wir berprfen Beispiel 6.12.
1
2
3
4
5
6
7
8
9
10
Da die Eigenwerte von A alle reell und voneinander verschieden sind, kann A diagonalisiert
werden, das heit, es gibt eine Matrix X mit
0 0
1
X1 AX = 0 2 0 .
0
0 3
Wie ndet man X? Die Spalten von X knnen als Eigenvektoren zu den Eigenwerten -1,2 und 3 gewhlt werden. Gibt man
ans =
[ 3]
[ -2]
[ -1]
>> X*D*inv(X)
ans =
[ 4, 2, 2]
[ 2, 4, 2]
[ 2, 2, 4]
102
3
4
5
X
[
[
[
D
=
1, 0, -4]
0, 1, -2]
1, -3, 1]
=
Copyright c G. Gramlich
6
7
8
[ -2, 0, 0]
[ 0, 3, 0]
[ 0, 0, -1]
15
16
17
18
Schlielich kann man mit inv(X)*A*X berprfen, ob X1 AX die gewnschte Diagonalmatrix ist. Wir erhalten das gewnschte Ergebnis:
1
19
20
21
[ 0, 0, 0, -12]
>> inv(X)*A*X
ans =
[ -16, 0, 0, 0]
[ 0, -4, 0, 0]
[ 0, 0, -8, 0]
[ 0, 0, 0, -12]
.......................................
ans =
[ -2, 0, 0]
[ 0, 3, 0]
[ 0, 0, -1]
2
>> [V,J] = jordan(A)
48
68
88
12
19 54 57 68
3
V =
A=
4
[ 1/2, 1]
22
52
66
96
5
[ -1/4, 0]
11 26 41 64
2
3
6
7
J =
[ 1, 1]
[ 0, 1]
[ -16, 0, 0,
[ 0, -4, 0,
[ 0, 0, -8,
0]
0]
0]
103
Copyright c G. Gramlich
1
x.
In Matlab kann auch dieses verallgemeinerte Problem mit der Funktion eig angegangen werden. Die Funktion eigs berechnet ein
paar Eigenwerte und Eigenvektoren, wenn gewnscht.
(A1 B)x =
3. Es gibt Eigenvektoren mit zwei unabhngigen Richtungen. Es gibt genau zwei Eigenrume von R2 . Dies ist typisch, der StanAufgabe 92 (Eigensysteme) Bestimmen Sie
dardfall.
eine orthogonale Eigenvektorenmatrix Q, die
4. Jeder Vektor ist Eigenvektor oder anders
die Matrix
gesagt: Jeder eindimensionale Unterraum
3 1
A=
von R2 ist Eigenraum.
1 3
Auch die Singulrwertzerlegung kann im Fall diagonalisiert.
m = n = 2 mit der Funktion eigshow visuali- Lsung:
siert werden.
Die Matrix
Viele in der Praxis auftretenden Eigenwertpro
1/ 2 1/ 2
bleme haben die Form eines verallgemeinerQ=
1/ 2 1/ 2
ten (allgemeinen) Eigenwertproblems: Gegeben sind zwei quadratische Matrix A und B. diagonalisiert A. Man erhlt sie mit der FunkGesucht sind Zahlen und Vektoren x, sodass tion eig.
gilt
1
>> A = [3 1; 1 3];
Ax = Bx.
2
Fr B
E ist diese Aufgabenstellung ei- 3 Q =
-0.7071 0.7071
ne Verallgemeinerung der herkmmlichen Ei- 4
5
0.7071 0.7071
genwertaufgabe; fr B = E reduziert sich
6
D =
das verallgemeinerte Eigenwertproblem auf 7
2
0
die Standardeigenwertaufgabe. Verallgemei- 8
0
4
nerte Eigenwertprobleme treten zum Beispiel
in mechanischen Schwingungssystemen auf; Probe:
dort ist A die Steigkeitsmatrix und B die Mas1
>> inv(Q)*A*Q
senmatrix.
2
ans =
Ist A oder B eine regulre Matrix, dann kann
man das verallgemeinerte Problem auf ein gewhnliches reduzieren, entweder so
(B A)x = x.
1
3
4
2.0000
0
0
4.0000
Die symbolische eig-Funktion liefert (nur) eine orthogonale Basis aus Eigenvektoren. . .
104
Copyright c G. Gramlich
10
6
4
2
0
2
4
6
8
1
2
3
4
5
function plotHaus(H)
%-Zeichnet ein Haus.
x = H(1,:); y = H(2,:);
plot(x,y,o,x,y,r-)
axis([-10 10 -10 10]); axis square
;
10
10
10
Nach
zweimaligem
Aufruf
von
plotHaus(A*H) (zuvor entsprechend A
denieren!) erhalten wir die Bilder 46 und 47.
>> H =
[-6,-6,-7,0,7,6,6,-3,-3,0,0,-6;
-7,2,1,8,1,2,-7,-7,-2,-2,-7,-7]
>> plotHaus(H)
A=
und im Zweiten
A=
1
0
.
0 1
105
Copyright c G. Gramlich
Symbolische Funktionen
colspace Basis fr Spaltenraum
det
Determinante
diag
Diagonalmatrix
eig
Eigenwerte und -vektoren
expm
Exponentialfunktion
inv
Inverse
jordan
Jordan-Form
null
Basis fr Nullraum
poly
Charakteristisches Polynom
rank
Rang
rref
Reduzierte Zeilenstufenform
svd
Singulrwertzerlegung
tril
Untere Dreiecksmatrix
triu
Obere Dreiecksmatrix
10
8
6
4
2
0
2
4
6
8
10
10
10
10
8
6
4
2
0
2
4
6
8
10
10
10
106
Copyright c G. Gramlich
1 2
3
2
Ist die Koezientenmatrix A singulr, so erhlt man eine Fehlermeldung, auch dann wenn
b im Spaltenraum von A liegt und es nicht nur
eine, sondern unendlich viele Lsungen gibt.
Aufgabe 93 (Lineare Systeme) Berechnen Sie
die allgemeine Lsung des linearen Gleichungssystems
4 2 x1
2
2
9 3 x2 = 8 .
2 3
7
x3
10
A
Lsung: Die allgemeine Lsung ist die eindeutige Lsung x = (1, 2, 2). Dies zeigen die
folgenden Matlab-Zeilen.
1
107
Copyright c G. Gramlich
2
3
4
5
6
7
Ax
b mit
1 0
A= 1 1
1 2
und
6
b = 0 .
0
>> x = sym(A)\b
x =
[ -1]
[ 2]
[ 2]
5
6
7
8
9
10
.......................................
11
12
13
14
>> x = A\b
x =
5.0000
-3.0000
>> x = pinv(A)*b
x =
5
-3
>> x = inv(A*A)*A*b
x =
5
-3
.......................................
2
3
1
4 und b = 2 .
A= 2
1 2
1
Interpretieren Sie die Ergebnisse.
Lsung: Es ist
1
2
3
4
>> x = A\b
x =
0
0.5000
108
Copyright c G. Gramlich
6
0
4
1
2
3
4
>> x = pinv(A)*b
x =
0.2000
0.4000
5
6
7
8
x =
3.0000
3.0000
109
>> maple(gaussjord,sym([1 1 2 9;
2 4 -3 1; 3 6 -5 0]))
ans =
Copyright c G. Gramlich
3
4
5
[ 1, 0, 0, 1]
[ 0, 1, 0, 2]
[ 0, 0, 1, 3]
x1 = 7 2x2 3x4
x2 = t
Die gausselim-Funktion transformiert die erweiterte Matrix auf Zeilenstufenform, wobei die fhrenden Elemente nicht notwendig
gleich 1 sind.
1
2
3
4
5
>> maple(gausselim,sym([1 1 2 9;
2 4 -3 1; 3 6 -5 0]))
ans =
[
1,
1,
2,
9]
[
0,
2, -7, -17]
[
0,
0, -1/2, -3/2]
x3 = 1
x4 = s
x5 = 2
Mit rref knnen wir die Lsungen besttigen:
1
2
3
4
5
6
7
8
>> maple(backsub,ans)
ans =
[ 1, 2, 3]
9
10
>> Ab = sym([0 0 -2 0 7
-10 6 12 28; 2 4 -5
Ab =
[ 0, 0, -2, 0, 7,
[ 2, 4, -10, 6, 12,
[ 2, 4, -5, 6, -5,
>> rref(Ab)
ans =
[ 1, 2, 0, 3, 0, 7]
[ 0, 0, 1, 0, 0, 1]
[ 0, 0, 0, 0, 1, 2]
12; 2 4
6 -5 -1])
12]
28]
-1]
1
2
3
2x3 + 7x5 = 12
6
7
8
>> maple(gausselim,Ab)
ans =
[ 2, 4, -10, 6, 12, 28]
[ 0, 0, -2, 0, 7, 12]
[ 0, 0, 0, 0, 1/2, 1]
>> maple(backsub,ans)
ans =
[ 7-2*_t2-3*_t1,_t2,1,_t1,2]
A b
7 12
0 0 2 0
= 2 4 10 6 12 28
2 4 5 6 5 1
1
2
3
4
Dieses lineare Gleichungssystem hat unendlich viele Lsungen. Mit den Parametern t R
und s R knnen die Lsungen wie folgt pa-
110
5
6
7
>> A =
A =
[ 0,
[ 2,
[ 2,
>> b =
b =
Ab(:,1:5)
0, -2, 0, 7]
4, -10, 6, 12]
4, -5, 6, -5]
Ab(:,6)
Copyright c G. Gramlich
8
9
10
11
12
13
14
15
16
17
[ 12]
[ 28]
[ -1]
>> A\b
ans =
[ 7]
[ 0]
[ 1]
[ 0]
[ 2]
4
5
6
7
8
9
10
ans =
[ 4, -8, 12]
[ 0, 0, 0]
[ 0, 0, 0]
>> maple(backsub,ans)
ans =
[ 3+2*_t1, _t1]
nur die Lsung x = (7, 0, 1, 0, 2). Die Parameter t und s sind hier gleich Null gewhlt.
1
2
3
>> A\b
ans =
3
0
ans =
Wir betrachten nun ein lineares Gleichungssystem, das keine Lsung hat. Das folgende System ist berbestimmt. berbestimmte System
haben mehr Gleichungen als Variablen und daher in der Regel (generisch) keine Lsung. Tatschlich ist das System
0
0
1.0000
2.3333
2.0000
2x1 3x2 = 2
2x1 + x2 = 1
3x1 + 2x2 = 1
4x1 8x2 = 12
3x1 6x2 =
2x1 + 4x2 = 6.
2
3
4
5
1
2
3
6
7
8
111
Copyright c G. Gramlich
9
10
[ 0, 1, 0]
[ 0, 0, 1]
3
4
>> maple(gausselim,Ab)
ans =
[
2, -3, -2]
[
0,
4,
3]
[
0,
0, -7/8]
5
6
7
8
9
10
>> solve(2*x1-3*x2=-2,2*x1+x2=1
,3*x1+2*x2=1)
Warning: 3 equations in 2
variables.
> In C:\MATLAB6p1\toolbox\symbolic
\solve.m at line 110
Warning: Explicit solution could
not be found.
> In C:\MATLAB6p1\toolbox\symbolic
\solve.m at line 136
ans =
[ empty sym ]
>> double(A)\double(b)
ans =
0.6429
>> maple(backsub,ans)
??? Error using ==> sym/maple
Error, (in backsub) inconsistent
system
5
6
>> A\b
Warning: System is inconsistent.
Solution does not exist.
> In C:\MATLAB6p1\toolbox\symbolic
\
@sym\mldivide.m at line 29
ans =
Inf
Bedeutung
Lst Ax = b
Red. Zeilenstufenform
Lst Gleichungen
Gauss-Verfahren
Gauss-Jordan-Verf.
Funktionen, die man einsetzen kann, um lineare Gleichungen symbolisch zu lsen. BeachWie zu erwarten: das System ist inkonsistent. ten Sie, dass es das Gleiche bedeutet, eine MaAuch die Funktion solve sagt, dass die L- trix in reduzierte Zeilenstufenform zu bringen
wie das Gauss-Jordan-Verfahren durchzufhsungsmenge leer ist:
7
112
Copyright c G. Gramlich
10
11
12
>> norm(A*X-eye(3))
ans =
0
Die Inverse wird mit Hilfe der LUFaktorisierung mit partieller Pivotisierung
berechnet. Gleichzeit wird mit rcond der
Kehrwert der Konditionszahl berechnet. Wird
festgestellt, dass A (exakt) singulr oder
die rcond kleiner als eps ist, so wird eine
Warnung ausgegeben.
4
5
6
7
8
9
2
3
3
6
3
-3
1
-3
5
-2
1
-2
1
X =
Lange Zeit waren reelle und komplexe Matrizen der einzige Datentyp in Matlab und die
meisten Funktionen knnen auch mit reellen
und komplexen Matrizen aufgerufen und bearbeitet werden. Das Teilgebiet, das sich mit
113
Copyright c G. Gramlich
Matlab
norm(x)=norm(x,2)
norm(x,1)
norm(x,inf)
norm(x,-inf)
norm(x,p)
numerischen Methoden in der Linearen Algebra befasst, heit Numerische Lineare Algebra.
Jedes Buch ber Numerische Mathematik behandelt auch dieses Thema, siehe zum Beispiel
[6], [11] und der darin zitierten Literatur.
51.1. Normen
1
2
3
|xi |
p 1/p
1 p < .
4
5
i=1
Fr p = ist
7
8
= max |xi |.
10
1in
11
3
4
5
Bedeutung
x2
x1
x
x
x p fr p 1
12
13
14
15
16
17
18
>> x = 1:4;
>> [norm(x,1) norm(x,2) norm(x,inf
) norm(x,-inf)]
ans =
10.0000 5.4772 4.0000
1.0000
19
20
21
p
norm(x,p)
------------------1.0
6.0000
1.5
4.3346
2.0
3.7417
2.5
3.4586
3.0
3.3019
3.5
3.2072
4.0
3.1463
4.5
3.1056
5.0
3.0774
5.5
3.0574
6.0
3.0430
6.5
3.0325
7.0
3.0247
7.5
3.0188
8.0
3.0144
8.5
3.0111
9.0
3.0086
9.5
3.0067
Inf
3.0000
114
1
2
3
4
5
6
7
function Vektornormen
%-Vektor x
x = [1 -2 3];
%
disp( p
norm(x,p));
disp(-------------------);
for p = [1:0.5:9.5 inf]
Copyright c G. Gramlich
3
4
5
6
7
8
9
10
11
3
4
5
>> A = [1 2; 3 4];
>> [norm(A,1) norm(A,2) norm(A,inf
) norm(A,fro)]
ans =
6.0000 5.4650 7.0000
5.4772
= max
x o
Ax p
.
x p
Matlab
norm(A)=norm(A,2)
norm(A,1)
norm(A,inf)
norm(A,fro)
= max
1 jn
|ai j |
i=1
Bedeutung
A2
A1
A
A F
lich.
= max
1im
|ai j |.
j=1
115
Copyright c G. Gramlich
Matrizen
A=
0 1
,
1 0
B=
1 2
2 2
und
C=
1 4
.
1 2
Lsung: Es ist
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>> A = [0 1; -1 0];
>> [norm(A,1) norm(A,2) norm(A,inf
) norm(A,fro)]
ans =
1.0000 1.0000 1.0000
1.4142
>> B = [1 2; 2 2];
>> [norm(B,1) norm(B,2) norm(B,inf
) norm(B,fro)]
ans =
4.0000 3.5616 4.0000
3.6056
>> C = [1 4; 1 2];
>> [norm(C,1) norm(C,2) norm(C,inf
) norm(C,fro)]
ans =
6.0000 4.6708 5.0000
4.6904
1
2
3
4
5
6
>> cond(hilb(10))
ans =
1.6025e+013
>> max(svd(hilb(10)))/min(svd(hilb
(10)))
ans =
1.6025e+013
.......................................
Fr p=2 sind auch rechteckige Matrizen erlaubt, wobei dann die Konditionszahl durch
.......................................
2 (A) = A
51.2. Konditionszahlen
Fr eine regulre Matrix A ist
A+
( A) = A A1 1
die Konditionszahl bezglich der Inversion. Die Zahl misst die Sensitivitt der Lsung eines linearen Gleichungssystems Ax =
b bezglich Strungen in A und b. Man
Die Konditionszahl auszurechnen ist aufwendig. Daher gibt es in Matlab zwei Funktionen, die die Konditionszahl nherungsweise
berechnen: rcond und condest, siehe doc
rcond und doc condest.
116
Copyright c G. Gramlich
51.3. LU-Faktorisierung
22
23
0
0
-0.5000 0.5000
0 -2.0000
Die lu Funktion arbeitet auch fr rechteckige Matrizen. Ist A eine (m, n)-Matrix, dann ist
L eine (m, n)- und U eine (n, n)-Matrix, falls
m n ist und L eine (n, n)- und U eine (m, n)Matrix, wenn m < n gilt.
Das Lsen eines quadratischen linearen Gleichungssystems Ax = b durch x=A\b ist
gleichbedeutend damit, von A eine LUFaktorisierung zu bilden, und dann mit den
Faktoren zu lsen:
1
2
[L,U] = lu(A);
x = U\(L\b);
117
Copyright c G. Gramlich
2
1 1
A = 2 4 3
3 6 5
2
3
4
5
6
7
8
9
10
11
12
13
14
4
0
0
9
10
11
12
13
14
-0.33333
U =
0.5
9
1.5
0
-3
5.5
1.3333
P =
0
0
1
1
0
0
0
1
0
.......................................
51.4. Cholesky-Faktorisierung
Jede positiv denite Hermitesche Matrix hat
eine Cholesky-Zerlegung A = R R, wobei R
eine obere Dreiecksmatrix mit reeller positiver
Diagonale ist. Die Cholseky-Faktorisierung
wird mit chol berechnet: R=chol(A). Hier ein
Beispiel.
1
2
3
.......................................
4
5
4 2
2
9 3
A= 4
2 3
7
6
7
8
9
10
>> A = pascal(3)
A =
1
1
1
1
2
3
1
3
6
>> R = chol(A)
R =
1
1
1
0
1
2
0
0
1
1
2
3
4
5
>> R*R
ans =
1
1
1
1
2
3
1
3
6
Beachten Sie, dass chol nur die obere Dreiecksmatrix einschlielich der Diagonalen von
118
Copyright c G. Gramlich
A zur Faktorisierung verwendet. Ist die Ma- Hier noch die Probe:
trix A nicht positiv denit, so erhlt man ei- 1 >> Q*R
ne Fehlermeldung. Tatschlich ist die Funkti- 2 ans =
on chol gegeignet um zu berprfen, ob eine 3
1.0000 0.0000 -0.0000
1.0000 1.0000 0.0000
Matrix positiv denit ist. Hat nach dem Auf- 4
5
1.0000 1.0000 1.0000
ruf [R,p]=chol(A) der Rckgabeparameter p
den Wert null, so ist A positiv denit. Siehe
doc chol fr weitere Details zum Ausgabe- Aufgabe 104 (QR-Faktorisierung) Berechnen
Sie von der Matrix
argument p.
1 2 1
0
1
A=
51.5. QR-Faktorisierung
2 4
2
4
0
0
Eine QR-Faktorisierung einer (m, n)-Matrix A
ist eine Faktorisierung der Form A = QR, wo- eine reduzierte QR-Faktorisierung.
bei Q eine (m, m)-unitre und R eine (m, n)- Lsung: Es ist
obere Dreicksmatrix ist. In Matlab wird ei- 1 >> A=[1 -2 -1; 2 0 1; 2 -4 2; 4 0
ne QR-zerlegung mit der Funktion qr berech0];
net. Diese Faktorisierung wird zum Beispiel 2 >> [Q1,R1]=qr(A,0)
zum Lsen linearer Ausgleichsaufgaben und 3 Q1 =
-0.2000 0.4000 0.8000
zur Konstruktion einer orthonormalen Basis 4
5
-0.4000 -0.2000 -0.4000
fr den Spaltenraum von A eingesetzt. Die An6
-0.4000 0.8000 -0.4000
weisung [Q,R] = qr(A) berechnet die Fak- 7
-0.8000 -0.4000 0.2000
torisierung. Ist m > n, so gibt die Anweisung 8 R1 =
[Q,R] = qr(A,0) wirtschaftlichere Matri- 9
-5.0000 2.0000 -1.0000
0 -4.0000 1.0000
zen zurck. Man spricht von reduzierter QR- 10
11
0
0 -2.0000
Zerlegung. Die Matrix Q hat nur n Spalten und
die Matrix R hat n Zeilen und n Spalten. Wir
.......................................
geben ein Beispiel.
Aufgabe 105 (QR-Faktorisierung) Berechnen
1
>> A = [1 0 0; 1 1 0; 1 1 1];
Sie von der Matrix
2
>> [Q,R] = qr(A)
3
Q =
1 1 1
1
4
-0.5774 0.8165 -0.0000
0 0
A=
5
-0.5774 -0.4082 -0.7071
1
1 1
6
-0.5774 -0.4082 0.7071
1
2 4
7
8
9
10
R =
-1.7321 -1.1547 -0.5774
0 -0.8165 -0.4082
0
0
0.7071
119
eine
reduzierte
QR-
Copyright c G. Gramlich
1
2
3
4
5
6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
0.2236
-0.6708
0.6708
-0.2236
R =
-2.0000 -1.0000 -3.0000
0 -2.2361 -2.2361
0
0
2.0000
0
0
0
8
9
.......................................
51.6. Singulrwertzerlegung
und
1
2
3
4
5
6
7
8
9
10
>> [Q1,R1]
Q1 =
-0.5000
-0.5000
-0.5000
-0.5000
R1 =
-2.0000
0
0
>> A = [1 0; 1 1; 1 2];
>> [Q1,R1]=qr(A,0)
Q1 =
-0.5774 0.7071
-0.5774 0.0000
-0.5774 -0.7071
R1 =
-1.7321 -1.7321
0 -1.4142
= qr(A,0)
0.6708 0.5000
0.2236 -0.5000
-0.2236 -0.5000
-0.6708 0.5000
-1.0000 -3.0000
-2.2361 -2.2361
0
2.0000
1 0
A= 1 1
1 2
1
2
120
Copyright c G. Gramlich
3
4
5
6
7
8
9
10
11
12
13
U =
-0.3583 -0.9336
-0.9336 0.3583
S =
5.7839
0
0
2.5586
V =
-0.7076 0.1952
-0.4467 -0.4497
-0.5462 0.0552
-0.0375 0.8698
20
21
22
23
24
25
26
27
28
29
30
31
A = 1 1 .
2
3
4
5
6
7
>> A = [1 -1 1; 1 0
4];
>> [U,S,V] = svd(A)
U =
-0.1517 0.8959
-0.0612 0.4013
-0.3215 0.0406
-0.9327 -0.1861
0; 1 1 1; 1 2
1
2
3
4
-0.3525
0.6207
0.6671
-0.2134
5
6
7
8
8
9
10
11
12
13
14
15
16
17
18
19
0.2236
-0.6708
0.6708
-0.2236
S =
4.8956
0
0
0
V =
-0.2997
9
10
11
12
0
1.6942
0
0
0
0
1.0784
0
0.6798
0.6693
121
Copyright c G. Gramlich
kurz: GSVD) einer (m, p)-Matrix A und einer (n, p)-Matrix B hat die Form A = UCX ,
B = VSX , C C + S S = E, wobei U
und V unitr sind, X regulr, und C und D
sind reelle Diagonalmatrizen mit nichtnegativen Diagonalelementen. Die Zahlen cii /sii
sind die verallgemeinerten singulren Werte.
Diese Zerlegung wird in Matlab wie folgt
erreicht: [U,V,X,C.S] = gsvd(A,B). Siehe
doc gsvd (help gsvd) fr weitere Details.
nicht quadratisch sind ([4]). Die mathematische Notation ist A+ . Sie wird in Matlab
mit pinv berechnet. Die Pseudoinverse wird
mit Hilfe der Singulrwertzerlegung berechnet. Beispiele ([4]):
1
2
3
4
5
6
7
8
9
10
>> semilogy(svd(hilb(10)),o),
grid
11
12
13
14
>> A = [2 0; 0 0];
>> pinv(A)
ans =
0.5000
0
0
0
>> B = [2; 4];
>> pinv(B)
ans =
0.1000 0.2000
>> C = [2 0; 0 3; 0 0];
>> pinv(C)
ans =
0.5000
0
0
0
0.3333
0
10
51.8. Eigensysteme
10
10
10
10
15
10
10
51.7. Pseudoinverse
Die Pseudoinverse ist die Verallgemeinerung sind Eigenvektoren gewnscht oder nicht.
der Inversen fr Matrizen A, die singulr oder Beispiele ndet man in Abschnitt 49.6.
122
Copyright c G. Gramlich
Iterative Methoden bentigen gewhnlich eine Vorkonditionierung, wenn sie ezient sein
Es stehen mehrere Funktionen zur Verfgung, sollen. Einen guten Vorkonditionierer auszuum quadratische lineare Gleichungssysteme whlen, ist im Allgemeinen nicht leicht und erAx = b iterativ zu lsen, siehe Tabelle 29.
fordert meist Kenntnisse von der Anwendung,
die dahinter steckt. Die Funktionen luinc
Funktion
Methode
und cholinc berechnen unvollstndige Fakbicg
BiCG
torisierungen, die eine Mglichkeit darstellen,
bicgstab BiCG stabilized
Vorkonditionierer zu konstruieren; siehe doc
cgs
CG squared
luinc, doc cholinc und doc bicg. Fr
gmres
GMRES
Hintergrundinformationen zu iterativen Melsqr
CG fr Normalleichungen
thoden der Linearen Algebra siehe [7], [9],
minres
Residuen.
[10], [23] und [27].
pcg
CG mit Vorkonditionierung
Um den Umgang mit iterativen Problemlsern
qmr
quasi-minimale Residuienm.
zu zeigen, betrachten wir ein Beispiel, wo die
symmlq
Symmetrische LQ
Funktion pcg Verwendung ndet. Die Funktion pcg realisiert eine konjugierte GradientenTabelle 29: Iterative Methoden
methode mit Vorkonditionierung. Fr A verwenden wir eine positiv denite symmetriBis auf die Funktion minres, symmlq und
sche Matrix, die Wathen-Matrix aus der Higpcg sind alle Funktionen auf beliebige Matrihamschen Matrizensammlung. Es handelt sich
zen A anwendbar. Fr minres und symmlq
um eine zufllige dnn besetzte nite Elemenmuss A Hermitesch und fr pcg muss A Hertematrix, siehe doc gallery.
mitesch und positiv denit sein. Alle Metho-
123
Copyright c G. Gramlich
5
1
2
3
4
5
6
7
9
10
11
12
13
14
15
16
>> A = gallery(wathen,12,12);
>> n = length(A)
n =
481
>> b = ones(n,1);
>> x = pcg(A,b);
pcg stopped at iteration 20
without
converging to the desired
tolerance
1e-006 because the maximum number
of iterations was reached.
The iterate returned (number 19)
has relative residual 0.12
>> x = pcg(A,b,1e-6,100);
pcg converged at iteration 92 to a
solution with relative residual
9.8e-007
6
7
8
relres =
8.2661e-007
iter =
28
Beachten Sie, dass keine Bildschirmausgabe ausgegeben wird, wenn wenn man mehr
als ein Ausgabeargument im Funktionsaufruf angibt. Der Wert 0 der Variablen flag
gibt an, dass das Verfahren konvergiert ist
mit einem relativen Residuum relres =
norm(b-A*x)/nomrm(b) nach iter Iterationen.
Die anderen Funktionen der Tabelle 29 werden (bis auf gmres) genauso aufgerufen und
gehandelt.
Mit doc sparfun (help sparfun) bekommen Sie eine komplette Liste ber alle Funktionen, die bezglich Sparserechnungen interessant sind, so auch die Funktionen fr iterative Methoden von linearen Gleichungssystemen.
Im ersten Aufruf haben wir nur die Systemmatrix A und die rechte Seite b eingegeben
und gesehen, dass die konjugierte Gradientenmethode nicht konvergiert mit standardmig eingestellten 20 Iterationen und dem standard Abbruchkriterium von 106 . Ein erneuer- Aufgabe 109 (Konjugierte Gradientenmethote Versuch fhrt nach 92 Iterationen zum Er- de) Berechnen Sie mit pcm die Lsung von
folg, wobei wir die Iterationsgrenze auf 100
2 1 0 x1
1
1 2 1 x2 = 1 .
fllt. Fr diese Matrix kann man zeigen, dass M
0 1 2
1
x3
= diag(diag(A)) ein guter Vorkonditionierer ist. bergeben wir der Funktion pcg diese
A
x
b
Matrix als fnftes Argument, so erreichen wir
eine eziente Reduktion in der Anzahl der Ite- Lsung: Es ist
rationen:
1
1
2
3
4
2
3
4
124
>> A = [2 1 0; 1 2 1; 0 1 2];
>> b = [1; 1; 1];
>> x = pcg(A,b)
pcg converged at iteration 2 to a
solution with relative residual
3.1e-016
Copyright c G. Gramlich
5
6
7
8
x =
0.5000
0.0000
0.5000
7
8
9
10
.......................................
11
12
13
14
15
Die Funktion eigs berechnet auswhlbare Eigenwerte und Eigenvektoren des Standardeigenwertproblems Ax = x oder der verallgemeinerten Eigenwertaufgabe Ax = Bx,
wobei B eine reelle symmetrische positiv denite Matrix ist. Im Gegensatz dazu berechnet die Funktion eig immer das gesamte Eigensystem, also alle Eigenwerte und Eigenvektoren. Wie die iterativen Lser von linearen Gleichungssystemen, so bentigt eigs nur
Matrix-Vektor Produkte, das heit A kann explizit oder als eine Funktion, die Matrix-Vektor
ausfhrt, angegeben werden. In der einfachsten
Form kann eigs wie eig aufgerufen werden:
[V,D] = eigs(A). Dann werden die sechs
grten Eigenwerte und dazugehrige Eigenvektoren berechnet. Siehe doc eigs fr weitere Details. Diese Funktion ist eine Schnittstelle zum ARPACK Paket, siehe [12]. Als
Beispiel berechnen wir nun die fnf grten Eigenwerte einer dnn besetzten symmetrischen Matrix. Zum Vergleich verwenden wir
die Funktion eig, welche erwartet, dass die
Matrix im Speichermodus full vorliegt.
1
2
3
4
5
>> A = delsq(numgrid(N,40));
>> n = length(A)
n =
1444
>> nnz(A)/n^2 %Anteil nicht Null.
16
17
18
19
20
21
22
23
24
25
26
27
ans =
0.0034
>> tic, e_alle = eig(full(A)); toc
Elapsed time is 10.600102 seconds.
>> e_alle(n:-1:n-4)
ans =
7.9870
7.9676
7.9676
7.9482
7.9354
>> options.disp = 0; %Keine
Ausgabe.
>> tic, e = eigs(A,5,LA,options)
;
>> toc %LA = Largest Algebraic
Elapsed time is 1.676173 seconds.
>> e
e =
7.9870
7.9676
7.9676
7.9482
7.9354
Mit den Funktion tic und toc kann man Zeitmessungen durchfhren. Es ist klar, dass eigs
viel schneller ist als eig und auch weniger
Speicherplatz bentigt.
51.9.3. Iterative Methoden fr
Singulrwertsysteme
Die Funktion, um ein paar singulre Werte und
singulre Vektoren einer Matrix A Cmn iterativ zu berechnen, heit: sdvs. Die Funktion
svds verwendet dabei die Funktion eigs, indem eigs auf die Hermitesche Matrix
Om A
A On
125
Copyright c G. Gramlich
angewendet wird.
und
e Xt X dt = e Xt
Mit der Funktion expm kann man fr eine quadratische Matrix A die Matrixexponentialfunk- Lsung:
tion e A , die durch
(a) Es ist
eA = E + A +
1 2 1 3
A + A +
2!
3!
1
2
3
deniert ist, berechnen. Wir geben ein Beispiel, siehe Beispiel 3.5 in [4].
1
2
3
4
5
4
5
6
>> A = [1 1; -2 4];
>> expm(A)
ans =
-5.3074 12.6965
-25.3930 32.7820
7
8
2
3
4
1
2
3
0 1
.
1
0
>> exp(A)
ans =
1.0000
2.7183
0.3679
1.0000
und
>> exp(sym(A))
ans =
[
1, exp(-1)]
[ exp(1),
1]
>> syms t
dann
de Xt
= Xe Xt = e Xt X
dt
1
2
126
>> expm(A*t)
ans =
Copyright c G. Gramlich
3
4
[ cos(t), -sin(t)]
[ sin(t), cos(t)]
(b) e At =
1 t
0 1
(c) e At =
cos t sin t
sin t cos t
1 t t2 /2
0 1
t
0 0 1
>> syms X t
(d) e At
kann man die Aussagen durch
1
2
3
>> diff(expm(X*t))
ans =
exp(X*t)*X
cosh t sinh t
sinh t cosh t
.......................................
>> int(expm(X*t)*X)
ans =
exp(X*t)
(e) e At =
und
1
2
3
0 1
0 0
(c) A =
0 1
1 0
0 1 0
(d) A = 0 0 1
0 0 0
0 1
1 0
Lsung: Man erhlt:
et
0
(a) e At =
0 e2t
(e) A =
In viele Anwendungen muss man einer Funktion als Argument eine andere Funktion bergeben. In Abschnitt 39 haben wir Beispiele betrachtet. Gewhnlich macht man dies mit einem Function-Handle. Ein Function-Handle ist
ein Matlab-Datentyp, der alle notwendigen Informationen enthlt, um eine Funktion auszuwerten. Ein Function-Handle wird erzeugt, indem man das @-Zeichen vor einen Funktionsnamen stellt.
Wir zeigen die Funktionsweise mit der Funktion ezplot, die den Graph einer Mathematischen Funktion f standardmig ber dem In-
127
Copyright c G. Gramlich
function y = Differenzenq(f,x,h)
if nargin < 3
h = sqrt(eps);
end
y = (f(x+h) - f(x))/h;
0.7183
Hier ist f ein Function-Handle zu der Anonymous Function. Dem @-Zeichen, welches
5
ein Function-Handle konstruiert, folgt in runden Klammern eine Liste von Eingabearguist eine Implementierung des Dierenzenquo- menten und dannach folgt eine einfache Mattienten von f an der Stelle x. Geben wir nun
lab-Anweisung. Als Function-Handle kann
die Anonymous Function dann einer anderen
1
>> Differenzenq(@sqrt,0.3)
2
ans =
Funktion bergeben werden.
3
4
128
Copyright c G. Gramlich
>> a = 2; b = 3;
>> g = @(x,y) a*x^2+b*exp(x);
3
4
5
6
=0
=1
0.3
>> g(3,4)
ans =
78.2566
>> a = 10;
>> g(3,4)
ans =
78.2566
=0
=2
0.1
0
4
mu = 0; sigma = 1;
f = @(x) normpdf(x,mu,sigma);
129
Copyright c G. Gramlich
Das Ergebnis ist korrekt, denn fr den gebrochen rationalen Funktionsterm f (x) = (1 +
2x)/(1 x) gilt f (x) = 3/(1 x)2 , also f (2) =
3.
Nested Functions haben zwei Haupteigen- Nested Functions sind neu seit Matlab 7.
schaften:
Eine Nested Function hat Zugri zum 52.5. Overloaded Functions
Workspace aller Funktionen in welche sie
eingebaut ist.
Overloaded Functions sind mehrere Functi Ein Function-Handle einer Nested Functi- ons gleichen Namens, bei denen anhand der
on speichert alle Informationen, um zu die- Argumentliste oder der Klassenzugehrigkeit
ser Zugang zu haben, und darberhinaus al- entschieden wird, welche auszufhren ist. Sie
le Variablen der Funktionen, die die Nested wurden mit der Objektorientierung von Matlab in den neusten Versionen eingefhrt und
Funktion beinhalten.
dienen dazu, alternative Implementierungen
Ein Beispiel einer Nested Function zeigt das
fr unterschiedliche Datenobjekte anzubieten.
folgende Listing:
Zum Beispiel wird mit help rank eine Be1
function RationalBsp(x)
schreibung der Funktion rank angezeigt und
2
a = 1; b = 2; c = 1; d = -1;
gegen Ende wird mit
3
4
5
6
7
Differenzenq(@Rational,x)
function r = Rational(x)
r = (a+b*x)/(c+d*x);
end
end
1
2
Das Beispiel zeigt, wie eine parameterabhngige Funktion einer anderen Funktion bergeben werden kann. Die Funktion Rational
ist parameterabhngig und wird der Funktion
Differenzenq bergeben. Die Variablen a,
b, c und d des Workspace der Hauptfunktion RationalBsp sind der Funktion Rational
bekannt und die Werte werden der Funktion
Differenzenq ordungsgem weitergereicht:
1
2
3
>> RationalBsp(2)
ans =
3.0000
Overloaded methods:
sym/rank
130
Copyright c G. Gramlich
gespeicherten Verzeichnisse durchsucht werden, ist sichergestellt, dass die selbst denierte
(private) Funktion vor der Originalfunktion gefunden und ausgefhrt wird. Man sollte es aber
vermeiden, das Unterverzeichnis mit dem Namen private in den Suchpfad aufzunehmen.
stanten Terms des Polynoms. Zum Beispiel reprsentiert der Zeilenvektor [1 -8 2 1 12]
das Polynom p1 (x) = x4 8x3 + 2x2 + x 12;
[2 0 1] stellt das Polynom p2 (x) = 2x2 + 1
dar. Beachten Sie, dass Nullkoezienten mitgefhrt werden mssen.
gsvd: Subfunctions
2
3
4
5
6
>> p1 = [1 -8 2 1 -12]
p1 =
1
-8
2
1 -12
>> p2 = [2 0 1]
p2 =
2
0
1
53. Polynome
53.2. Nullstellen von Polynomen
Polynome haben in der Mathematik eine groe
Bedeutung. Im wissenschaftlichen Rechnen Ist ein Polynom als Zeilenvektor dargestellt, so
benutzt man sie, um kompliziertere Funktionen erlaubt die Funktion roots, die Nullstellen des
131
Copyright c G. Gramlich
>> r = roots(p2)
r =
0 + 0.7071i
0 - 0.7071i
5
6
7
8
9
10
11
12
13
14
15
16
>> poly(r)
ans =
1.0000
.......................................
0.5000
1
2
Aufgabe 113 (Polynomfunktionen) Bestimmen Sie die reellen Nullstellen folgender Polynome. Zeichnen Sie diese Polynome dann in
einem geeigneten Intervall, um diese Nullstellen geometrisch berprfen zu knnen (x R).
(a) g1 (x) = x3 5x2 + 2x + 8
(b) g2 (x) = x2 + 4x + 4
(c) g3 (x) = x5 3x4 + 4x3 4x + 4
Lsung:
1
2
3
4
-1.0000
>> roots([1 4 4])
ans =
-2
-2
>> roots([1 -3 4 0 -4 4])
ans =
-1.0000
1.0000 + 1.0000i
1.0000 - 1.0000i
1.0000 + 1.0000i
1.0000 - 1.0000i
3
4
5
>>
>>
>>
p3
p1 = [1 2 -3];
p2 = [2 -1 3 -4];
p3 = conv(p1,p2)
=
2
3
-5
5 -17
12
132
Copyright c G. Gramlich
>>
>>
>>
p5
p1 = [1 2 -3];
p4 = [-1 3 -4];
p5 = p1+p4
=
0
5
-7
>> addpoly(p1,p2)
ans =
2
0
5
-7
Das Ergebnis ist das gleiche wie oben. DieDies setzt jedoch Vektoren gleicher Lnge, das se Matlab-Funktion addpoly kann auch dazu
heit Polynome gleichen Grades, voraus. Will verwendet werden, um Polynome zu subtrahieman Polynome unterschiedlichen Grades ad- ren. Dies zeigen die folgenden Matlab-Zeilen:
dieren, so muss man den Zeilenvektor zum Polynom kleineren Grades durch Nullen aul- 1 >> p7 = addpoly(p1,-p2)
2
p7 =
len. Das Polynom p1 (x) = x2 + 2x 3 addiert
3
-2
2
-1
1
zu dem Polynom p2 (x) = 2x3 x2 + 3x 4
ergibt p6 (x) = p(1) + p2 (x) = 2x3 + 5x 7
p1 (x) = x2 +2x3 minus p2 (x) = 2x3 x2 +3x
4 ergibt das Polynom p7 (x) = 2x3 +2x2 x+1.
1
>> p1 = [1 2 -3];
2
3
4
5
>> p2 = [2 -1 3 -4];
>> p6 = [0 p1]+p2
p6 =
2
0
5
-7
1
2
3
4
5
6
7
>> p2 = [2 -1 3 -4];
>> p1 = [1 2 -3];
>> [q,r] = deconv(p2,p1)
q =
2
-5
r =
0
0
19 -19
133
Copyright c G. Gramlich
>> p2 = [2 -1 3 -4];
>> dp2 = polyder(p2)
dp2 =
6
-2
3
f1 (x) = x3 3x2 x + 3
f2 (x) = x3 6x2 + 12x 8
f3 (x) = x3 8x2 + 20x 16
f4 (x) = x3 5x2 + 7x 3
f5 (x) = x 2
>> q = polyint(p)
q =
2
-1
3
1
2
3
4
>> p = [4 -2 1 -7];
>> px = polyval(p,2.5)
px =
45.5000
5
6
7
8
9
Die folgenden Befehle berechnen 100 Polynomwerte fr das Polynom p(x) = 4x3 2x2 +
x 7 zu 100 verschiedenen quidistanten Werten im Intervall von 1 bis 4.
10
11
12
13
14
1
2
3
>> p = [4 -2 1 -7];
>> x = linspace(-1,4);
>> px = polyval(p,x);
15
p1 = [1 -3 -1 3];
p2 = [1 -6 12 -8];
p3 = [1 -8 20 -16];
p4 = [1 -5 7 -3];
p5 = [0 0 1 -2];
pa = p2-2*p4;
pb = 3*p5+p2-2*p3;
pc = conv(p1,p3);
pd = deconv(p4,[1 -1]);
x = linspace(0,4);
ypa = polyval(pa,x);
ypb = polyval(pb,x);
ypc = polyval(pc,x);
ypd = polyval(pd,x);
plot(x,ypa,x,ypb,x,ypc,x,ypd)
.......................................
134
Copyright c G. Gramlich
53.9. Zusammenfassung
1
2
3
4
5
6
t = [-2 0 1];
y = [-27 -1 0];
x = polyfit(t,y,length(t)-1);
ti = linspace(min(t),max(t));
yi = polyval(x,ti);
plot(ti,yi,t,y,ro), grid on
5
0
Beschreibung
Multipliziert Polynome
Dividiert Polynome
Polynom aus Nullstellen
Berechnet Ableitung
Berechnet Integral
Berechnet Polynomwerte
Berechnet Nullstellen
5
10
15
20
25
30
2
1.5
0.5
0.5
54. Polynominterpolation
Gegeben sind n Punkte in der Ebene R2 , nde
ein Polynom minimalen Grades, das durch alle
Punkte geht. Ein solches Polynom hat hchstens den Grad n 1 und ist eindeutig bestimmt; man nennt es das Interpolationspolynom. Mit der Matlab-Funktion polyfit ist
es bequem mglich, dieses Polynom zu berechnen. Als Beispiel betrachten wir die drei
Punkte (2, 27), (0, 1) und (1, 0). Gesucht
ist also ein quadratisches Polynom p2 (t, x) =
x1 + x2 t + x3 t2 , das die drei gegebene Punkte
interpoliert. Die folgenden Matlab-Zeilen be-
55. Polynomapproximation
Die Funktion polyfit kann auch verwendet
werden, um Daten durch Polynome zu approximieren. Gegeben sind m Punkte (ti , yi ), i =
1, 2, . . . , m und gesucht ist ein Parametervektor
x Rn , sodass die polynomiale Modellfunktion p(t, x) = x1 + x2 t + x3 t2 + + xn tn1
die gegebenen Punkte bestmglichst approximiert, wobei bestmglichst im Sinne kleins-
135
Copyright c G. Gramlich
m
i=1 (yi
p(ti , x))2 .
Da die gesuchten Parameter xi in der Modellfunktion linear vorkommen, liegt eine lineare
Ausgleichsaufgabe vor. Als Beispiel betrachten wir folgende Aufgabe. Angenommen es
liegen die folgenden Messdaten vor, siehe Tabelle 31. Da diese Daten nahezu auf einer pa-
1
2
3
4
5
ti
0.0
0.5
1.0
1.5
2.0
2.5
3.0
3.5
4.0
4.5
5.0
5.5
6.0
6.5
7.0
7.5
8.0
8.5
9.0
9.5
10.0
yi
2.9
2.7
4.8
5.3
7.1
7.6
7.7
7.6
9.4
9.0
9.6
10.0
10.2
9.7
8.3
8.4
9.0
8.3
6.6
6.7
4.1
t = [0.0:0.5:10];
y = [2.9 2.7 4.8 5.3 7.1 7.6 7.7
7.6 9.4 9.0 9.6 10.0 10.2 9.7
8.3 8.4 9.0 8.3 6.6 6.7 4.1];
x = polyfit(t,y,2);
ti = linspace(min(t),max(t));
yi = polyval(x,ti);
plot(ti,yi,t,y,ro), grid on
120
100
80
data 1
linear
quadratic
cubic
4th degree
60
40
20
0
20
0
10
Die Polynomapproximation bzw. Ausgleichsaufgabe ist in der Statistik von besonderer Berabolischen Kurve liegen, entscheiden wir uns deutung und wird dort unter dem Namen Redafr, ein quadratisches Polynom durch diese gressionsrechnung (Engl.:data tting) studiert.
Tabelle 31: Zur Polynomapproximation
136
Copyright c G. Gramlich
10
9
8
Polynom
Daten
Spline
1
2
3
4
5
6
7
8
9
10
11
12
%-Daten.
t = [0 1 4 9 16 25 36 49 64];
y = [0 1 2 3 4 5 6 7 8];
%-Polynominterpolation.
x = polyfit(t,y,length(t)-1);
ti = linspace(min(t),max(t));
yi = polyval(x,ti);
%-Kubische Splineinterpolation.
ys = spline(t,y,ti);
plot(ti,yi,t,y,ro,ti,ys),
grid on, axis([0,64,0,10]),
legend(Polynom,Daten,Spline)
6
5
4
3
2
1
0
0
10
20
30
40
50
60
137
t = linspace(0,3,10);
y = humps(t);
tt = linspace(min(t),max(t));
Copyright c G. Gramlich
4
5
6
7
yi = interp1(t,y,tt);
plot(tt,yi,t,y,ro,tt,humps(tt)),
grid on,
legend(Interpolationsfunktion,
Punkte,humps),
1
2
3
4
5
6
>> fzero(@humps,1)
ans =
1.2995
>> fzero(@humps,0)
ans =
-0.1316
100
Interpolationsfunktion
Punkte
humps
80
60
40
20
20
0
1
0.5
1.5
2.5
2
3
>> f = @(x)x^2-4*sin(x);
>> x1 = fzero(f,1)
x1 =
-1.2470e-026
bzw.
1
2
>> x2 = fzero(f,3)
x2 =
1.9338
138
Copyright c G. Gramlich
exp(x)+2 x
10
>> f = @(x)exp(-x)-x;
>> x = fzero(f,2)
x =
0.5671
Lsung:
(a) Man zeichnet zunchst den Graphen der
Funktion (s. Abbildung 55) mit
.......................................
2
3
4
1
1
2
3
4
2
3
.......................................
Aufgabe 117 (Nichtlineare Gl.) Finden Sie die
>> fzero(f,[0,1])
ans =
0.6772
139
Copyright c G. Gramlich
15
f(x)
10
5
0
10
1
2
3
4
>>
>>
>>
>>
f = @(x) log10(x+1)-x^2;
fplot(f,[0 1])
xlabel(x),ylabel(f(x))
grid on
function y = f3(x)
y = exp(x)-5*x.^2;
0.2
200
0
150
f(x)
f(x)
0.2
0.4
50
0.6
0.8
0
100
0.2
0.4
0.6
0.8
50
0
3
x
Abbildung 56: Graph der Funktion f2 im In- Abbildung 57: Graph der Funktion f3 im Intervall [0,6]
tervall [0,1]
Die Nullstelle liegt oensichtlich im Intervall [0.3,0.5]. Mit
1
2
3
>> fzero(f,[0.3,0.5])
ans =
0.3696
140
>> fzero(@f3,[0,1])
ans =
0.6053
Copyright c G. Gramlich
und
1
1
2
3
>> fzero(@f3,[4,5])
ans =
4.7079
2
3
>> solve(log(x)/log(0.5)-x)
ans =
.64118574450498598448620048211482
oder
1
2
.......................................
>> solve(ln(x)/ln(0.5)-x)
ans =
.64118574450498598448620048211482
Zweite Mglichkeit:
ans =
.64118574450498598448620048211482
1
2
x3 + 6x2 11x 6 = 0
Lsung: Die drei Lsungen ndet man wie
folgt:
.......................................
2
3
4
log0.5 x = x
Lsung: Erste Mglichkeit:
141
Copyright c G. Gramlich
4
5
-0.7854
fWert =
-1.4142
2
3
4
5
6
>> f = @(x)x(1)^2+x(2)^2-x(1)*x(2)
;
>> x = fminsearch(f,ones(2,1))
x =
1.0e-004 *
-0.4582
-0.4717
Wollen Sie eine Funktion f maximieren statt Das Verfahren hinter der Funktion
minimieren, dann knnen Sie f minimieren, fminsearch basiert auf dem Nelder-Mead
da Max x f (x) = Min x ( f (x)) ist.
Simplexverfahren, eine direkte Suchmethode,
Als Beispiel betrachten wir das eindimensio- die ohne Ableitungsinformationen auskommt.
nale (univariate) Optimierungsproblem:
Es ist mglich, dass das Verfahren zu keinem
Minimiere sin x cos x
x [, ]
Die Lsung erhalten wie folgt:
1
2
3
>> f = @(x)sin(x)-cos(x);
>> [x,fWert] = fminbnd(f,-pi,pi)
x =
142
Copyright c G. Gramlich
Problem
2
2
Minimiere e x1 x2 + x1 + x2 .
2
xR
5
6
7
Will man die gleiche Zielfunktion nur mit anderen Parameterwerten a und b optimieren, so
sind einfach die Werte 2 und 4 auszutauschen.
.......................................
60. FFT
function f = myf(x)
f = exp(x(1)-x(2))+x(1).^2+x(2)
.^2;
1
1
1 1
1 2 3
.......................................
2i/4
Fn =
.
1 2 4 6 , = e
1 3 6 9
Problem
2
Minimiere ax2 bx
xR
mit der Parameterwahl a = 2 und b = 4.
Lsung: Die Idee dieser Aufgabe besteht darin, aufzuzeigen wie man verfhrt, wenn die
Zielfunktion Parameter enthlt. Die Lsung ist
x = 1 mit f (x = 1) = 2. Man erhlt die Lsung zum Beispiel wie folgt:
1
2
3
function main
clear all; close all; clc;
a = 2; b = 4;
143
Copyright c G. Gramlich
1
2
3
4
5
6
7
8
9
10
die diskrete Fourier-Transformation des Vektors x = (1, 0, 1, 0). berlegen Sie jedoch zuerst, was herauskommen sollte.
Lsung: Es ist
1
2
3
.......................................
1
2
3
5
6
0 - 2.0000i
0
0 + 2.0000i
(a) x1 = (4, 1, 2, 1)
3.5
1
(b) x2 = (1, 4, 1, 2)
3
2.5
(c) x3 = (4, 0, 1, 0, 2, 0, 1, 0)
2
0.5
Lsung: Es ist
1.5
1
0.5
0
1
0
1
2
2
3
4
5
6
144
>> y1 = fft([4,1,2,1])
y1 =
8
2
4
2
>> y2 = fft([1,4,1,2]).
y2 =
8
0 2i
-4
0 +
2i
Copyright c G. Gramlich
10
11
12
13
14
15
16
17
18
19
>> y3 = fft([4,0,1,0,2,0,1,0]).
y3 =
8
2
4
2
8
2
4
2
quad(fun,a,b)
.......................................
Es existieren in Matlab auch Funktionen
zur mehrdimensionalen diskreten Fourier-Transformation: Siehe doc fft2 (help
fft2), doc fftn (help fftn), doc ifft2
(help ifft2) und doc ifftn (help
ifftn).
berechnet das bestimmte Integral. Der Integrand fun kann sowohl in einem m-File als
auch als @-Funktion deniert werden. Er muss
jedoch in vektorisierter Form vorliegen, so
dass ein Vektor zurckgegeben werden kann,
wenn das Argument x von f ein Vektor ist.
Wegen
Die FFT-Algorithmen in Matlab werden durch
das Softwarepaket FFTW (the "Fastest Fouri- 1 >> quad(@humps,0,1)
er Transform in the West") realisiert. Dieses 2 ans =
29.8583
Paket ist ein Beispiel einer adaptiven Softwa- 3
re in dem Sinne, dass dieses dafr sorgt, dass
die Ausfhrungszeit am schnellsten ist, unab- ist der Flcheninhalt unter dem Graph von
hngig davon auf welcher Computerumgebung humps im Intervall [0, 1] ungefhr gleich 30.
man sich gerade bendet. Die Funktion fftw Die Abbildung 59 zeigt die Geometrie in Form
stellt Parameter zur Verfgung um diesen Pro100
zess zu tunen, siehe doc fftw (help fftw).
Bemerkungen zur kontinuierlichen FourierTransformation ndet man im Abschnitt 67.20.
80
60
40
61. Integration
20
145
0
0
0.2
0.4
0.6
0.8
Copyright c G. Gramlich
0.8
>> x = linspace(0,1);
>> y = humps(x);
>> area(x,y,FaceColor,r,
LineWidth,2,EdgeColor,b);
0.6
0.4
0.2
0.2
0.4
0.6
0.8
x x dx
>> f = x^x;
>> int(f,0,1)
Warning: Explicit integral could
not be found.
> In sym.int at 58
ans =
int(x^x,x = 0 .. 1)
2
3
| f (t)| dt
0
2
Das Integral wird unverndert als nichtberechenbar ausgegeben. Wir knnen das Integral
aber numerisch berechnen. Es ist:
1
Lf =
2
3
4
>> quad(@(x)x.^x,0,1)
ans =
0.7834
>> f = @(t)sqrt((1-cos(t)).^2+sin(
t).^2);
>> quad(f,0,2*pi)
ans =
8.0000
.......................................
Aufgabe 128 (Numerische Integration) BeDie Abbildung 60 zeigt die dazugehrige Geo- rechnen Sie
metrie.
4
x ln(x) dx.
Aufgabe 127 (Numerische Integration) Berechnen Sie die Lnge der Zykloide
t (t sin t, 1 cos t)
146
function f = fxlog(x)
f = x.*log(x);
Copyright c G. Gramlich
61.1. Mehrfachintegrale
>> quad(@fxlog,2,4)
ans =
6.7041
f (x, y) dx dy
D
f (x, y, z) dx dy dz
G
147
Copyright c G. Gramlich
Die Funktion, die dblquad im ersten Argument bergeben wird, muss einen Vektor x und
einen Skalar y vertragen knnen. Zurckgegeben wird ein Vektor. Zustzliche Argumente fr dblquad sind mglich, um die Toleranz und die Integrationsmethode zu bestimmen. Standardmig ist dies quad.
2
1
von 0 sin x dx ist 2. Wir besttigen dies mit
2
(x ) dx dy
der Funktion trapz. Hierzu diskretisieren wir
y=0 x=0
das Intervall [0, ] gleichmig und berechnen
Lsung: Es ist
die dazugehrigen Sinusfunktionswerte, damit
1
>> dblquad(@(x,y) x.^2,0,1,0,2)
die Eingabeargumente tabellarisch vorliegen.
2
3
ans =
0.6667
1
2
>> x = 0:pi/50:pi;
>> y = sin(x);
.......................................
Als Nherung erhalten wir somit
Dreifachintegrale knnen mit triplequad berechnet werden.
1
2
2
3
>> triplequad(@(x,y,z)(y*sin(x)+z*
cos(x)),0,pi,0,1,-1,1)
ans =
2.0000
(x3 ) dx dy dz
z=1
y=0
x=0
4
5
Lsung: Es ist
1
2
3
>> trapz(x,y)
ans =
1.9993
>> x = sort(rand(1,101)*pi);
>> y = sin(x);
>> trapz(x,y)
ans =
1.9983
148
Copyright c G. Gramlich
man an der tabellarischen Form der Integral- Integralfunktion, die mit cumtrapz berechnet
wurde. Die Abbildung wurde einfach mit
funktion Jt1 mit
x
Jt1 (x) =
f (t) dt
t1
erzeugt.
2
1/ 2et /2 , t R im Intervall von 3 bis 3,
und in dieselbe Figur auch den Graph von f .
Kennen Sie die Bedeutung der Funktionen f
1
z = cumtrapz(t,f)
und F .
liefert einen Vektor z zurck, der die gleiche Lsung: Die Abbildung 62 zeigt die Graphen.
Lnge wie t hat und in dem die Werte Jt1 (x =
1
ti ) fr i = 1, 2, . . . , m stehen. Das folgende
f
Beispiel zeigt die Funktionsweise der FunktiF
0.8
on cumtrapz an der humps-Funktion.
1
2
3
0.6
>> t = linspace(-1,2);
>> f = humps(t);
>> z = cumtrapz(t,f);
0.4
0.2
0
3
100
f
F1
80
60
40
20
0
20
1
0.5
0.5
1.5
2
3
4
5
>>
>>
>>
>>
>>
t = linspace(-3,3,500);
f = 1/sqrt(2*pi)*exp(-t.^2/2);
z = cumtrapz(t,f);
plot(t,f,t,z), grid,
legend(f,F_{-\infty})
149
Copyright c G. Gramlich
Integrand tabellarisch vor, so sind die Funktionen trapz und cumtrapz zu verwenden. Zur
symbolischen Berechnung von Integralen steDie numerische Integration kann auch bei hen die Funktionen int und dsolve zur Veruneigentlicher Integration eingesetzt werden, fgung, siehe Abschnitt 67.12 und 67.19.
zum Beispiel etwa fr 0 f (x) dx. Eine Mglichkeit besteht darin, einen Punkt zu n
den, so dass der Wert von f (x) dx im Ver
gleich zu 0 f (x) dx vernachlssigt werden 62. Dierenzialgleichungen
kann; man beschrnkt sich dann auf die Berechnung des letzten Integrals mit einer be- Eine Gleichung zur Bestimmung einer Funktikannten Quadraturformel. Wir zeigen die Idee on heit Dierenzialgleichung, wenn sie min
an dem Beispiel 1 1/x5 dx = 1/4, siehe auch destens eine Ableitung der gesuchten Funktion
Aufgabe 176. Statt 1 1/x5 dx berechnen wir enthlt. Die Ordnung der in der Dierenzialgleichung vorkommenden hchsten Ableitung
7
1/x5 dx. Wir erhalten
1
der gesuchten Funktion heit Ordnung der Dif1
>> quad(@(x) 1./x.^5,1,7)
ferenzialgleichung. Hngt die in der Dieren2
ans =
zialgleichung gesuchte Funktion nur von einer
3
0.2499
Variablen ab, so nennt man die Dierenzialgleichung gewhnlich. Enthlt die Dierenzi
was fr 1 1/x5 dx = 1/4 eine sehr gute N- algleichung partielle Ableitungen, so heit sie
herung darstellt.
partiell. Zum Beispiel ist die Bestimmungsgleichung fr die reellwertige Funktion y einer
Variablen t
61.4. Zusammenfassung
Zusammenfassend knnen wir sagen: Matlab stellt zur numerischen Berechnung von
Integralen mehrere Funktionen zur Verfgung. Liegt die zu integrierende mathematische Funktion f in analytischer Form vor,
so kann der Funktionsterm in einem m-File
oder als anonyme Funktion deniert werden.
Die Matlab-Funktionen quad, quadl, quadv,
dblquad, triplequad und alle Funktionen
zur numerischen Lsung von Dierenzialgleichungen, siehe Abschnitt 62, knnen dann eingesetzt werden. Die Funktion quadv ist eine
vektorrielle Form der Funktion quad. Liegt der
y (t) = ay(t)
eine gewhnliche Dierenzialgleichung. Hierbei ist a 0 eine reelle Konstante. Die Gleichung
utt (x, t) = c2 u xx (x, t)
ist eine partielle Dierenzialgleichung. Gesucht ist die reellwertige Funktion u mit den
beiden unabhngigen Variablen x und t, wobei
c 0 eine reelle Konstante ist. Siehe Abschnitt
67.19 fr symbolisches Lsen von Dierenzialgleichungen.
150
Copyright c G. Gramlich
62.1. Anfangswertaufgaben
(0 t 3)
AWA : dt
Anfangswertaufgaben von gewhnlichen Dify(0) = 1
m-File rSeite.m, der die rechte Seite der Dif d y(t) = f (t, y(t))
dt
ferenzialgleichung deniert.
AWA :
t0 t t f
y(t ) = y
0
0
1
function dy = rSeite(t,y)
dy = -y-5*exp(-t)*sin(5*t);
tspan = [0,3]; y0 = 1;
[t,y] = ode45(@rSeite,tspan,y0);
plot(t,y,-), grid,
xlabel t, ylabel y(t)
0.5
y(t)
wobei t eine reelle Variable, y eine unbekannte vektorwertige Funktion und die gegebene
Funktion f ebensfalls vektorwertig ist. Konkret kann man sich t als die Zeit vorstellen. Die Funktion f bestimmt die gewhnliche Dierenzialgleichung und zusammen mit
der Anfangsbedingung y(t0 ) = y0 wird die
Anfangswertaufgabe deniert. Der einfachste Weg solch ein Problem in Matlab zu lsen, besteht darin, eine Funktion zu schreiben, die f auswertet und dann einen der Matlab-Lser aufzurufen. Die geringste Information, die man dem Lser mitteilen muss, ist
der entsprechende Funktionsname, das Intervall [t0 , t f ] wo man die Lsung sucht und die
Anfangsbedingung y0 . Zustzlich knnen weitere extra Ein- und Ausgabeargumente optional angegeben werden, die mehr ber das mathematische Problem aussagen und wie es gelst werden soll. Jeder einzelne Lser ist in
speziellen Situationen besonders ezient, jedoch knnen sie prinzipiell gegeneinander ausgetauscht werden. Im nchsten Anschnitt zeigen wir Beispiele, die den Lser ode45 illustrieren. Diese Funktion realisiert ein adaptives
Runge-Kutta Verfahren und ist fr die meisten
Probleme ezient.
0.5
1
0
0.5
1.5
t
2.5
151
Copyright c G. Gramlich
y (t)y(t) + t = 0
1
y0 = 1; yp0 = 0;
AWA :
y(0) = 1
2
t0 = 0; tf = 0.9;
3
im Intervall [t0 , t f ] = [0, 0.9]. In diesem Problem liegt die Dierenzialgleichung y (t)y(t) +
t = 0 in impliziter Form vor; sie ist von erster Ordnung. Ich habe diese Dierenzialgleichung gewhlt, weil deren analytische Lsung
bekannt ist und man diese so mit dem numerischen Ergebnis vergleichen kann. Die allgemeine implizite Lsung von y (t)y(t) + t = 0
ist die Kreisgleichung t2 + y2 = c, c 0. Wir
besttigen dieses Ergebnis symbolisch mit der
Funktion dsolve, siehe Abschnitt 67.19.
[t,y] = ode15i(@fuerode15i,[t0 tf
],y0,yp0);
ezplot(ytrue,[0,0.9])
hold on
plot(t,y,ro)
152
Copyright c G. Gramlich
0.9
0.8
0.7
0.6
0.5
0.4
0
symbolisch
numerisch
0.2
0.4
0.6
0.8
153
Copyright c G. Gramlich
0 = u(0) = c2 c2 = 0
d y(x) = f (x, y(x))
dx
1 = u(1) = 1 + c1 c1 = 0
RWA :
g(y(x ), y(x )) = 0 x0 x x f
0
f
Hier ist, wie auch bei Anfansgwertaufgaben,
y eine unbekannte vektorwertige Funktion und
f eine gegebene vektorwertige Funktion von
x und y. Die Lsung wird auf dem Intervall
[x0 , x f ] erwartet und die gegebene Funktion g
speziziert die Nebenbedingungen. Bei Randwertaufgaben ist es blich, die unabhngige
Variable mit x statt mit t zu bezeichnen, weil
sie bei Anwendungen meist eine Ortsvariable
ist. Dies ist auch konsistent mit der MatlabDokumentation. Das Lsen von Randwertaufgaben ist im Allgemeinen anspruchsvoller als
das Lsen von Anfangswertaufgaben. Insbesondere ist es nicht ungewhnlich, dass eine
Randwertaufgabe mehrere Lsungen hat. Daher ist es beim Aufruf von bvp4c notwendig,
eine Schtzung fr die Lsungsfunktion mitanzugeben.
Randwertaufgabe:
RWA : y2 (x) = 6x
0x1
u = 6x
y1 (0) = 0, y1 (1) = 1
RWA :
0 x 1.
u(0) = 0 u(1) = 1
154
Copyright c G. Gramlich
2
3
4
5
solinit = bvpinit(linspace(0,1,5),
@guess);
sol = bvp4c(@odes,@bcs,solinit);
xint = linspace(0,1);
sxint = deval(sol,xint);
plot(xint,sxint(1,:))
y = y
RWA :
y(0) = 3, y(/2) = 7 0 x /2.
sol = bvp4c(@odefun,@bcfun,solinit
,
options,p1,p2,...)
155
Copyright c G. Gramlich
c(x, t, u, u x )ut =
= c1 .
Die Lsung der Randwertaufgabe ist so- wobei u die gesuchte Funktion ist. Sie hngt
mit
von den Variablen x (Raumvariable) und t
(Zeitvariable) ab und kann vektorwertig sein.
y(x) = 7 sin(x) + 3 cos(x), x [0, /2].
Fr die unabhngigen Variablen x und t gilt:
x0 x x f und t0 t t f . Die Zahl m
(b) Die numerische Lsung mit der Mat- kann die Werte 0, 1 oder 2 haben, je nachdem,
lab-Funktion bvp4c erledigt der folgende ob keine, Zylinder- oder Kugelsymmetrie vorliegt. Die Funktion c ist matrixwertig und die
Function-File:
Flu- bzw. Quellenfunktionen f , s sind vektor1
function RWA
wertig. Anfangs- und Randbedingungen ms2
solinit = bvpinit(linspace(0,pi
sen in folgender Form zur Verfgung gestellt
/2,5),@guess);
werden. Fr x0 x x f und t = t0 muss die
3
sol = bvp4c(@odes,@bcs,solinit);
Lsung gleich u0 (x) sein, wobei die Funktion
4
xint = linspace(0,pi/2);
5
sxint = deval(sol,xint);
u0 gegeben ist. Fr x = x0 und t0 t t f muss
6
plot(xint,sxint(1,:),r)
die Lsung dem Gleichungssystem
7
8
9
10
11
12
13
14
15
16
17
%-------------------------------% Subfunctions.
%-------------------------------function dydx = odes(x,y)
dydx = [y(2);-y(1)];
%-------------------------------function res = bcs(ya,yb)
res = [ya(1)-3;yb(1)-7];
%-------------------------------function yinit = guess(x)
yinit = [0;0];
156
Copyright c G. Gramlich
13
1
sol = pdepe(m,@pdefun,@pdeic,
@pdebc,xmesh,tspan,options,p1,
p2,...);
14
15
16
17
18
ut (x, t) = u xx (x, t)
21
19
20
22
23
24
25
26
u(x, 0) = sin(x)
27
28
29
30
u(0, t) = u(1, t) = 0.
31
32
function pdeWaerme
%Lst die eindimensionale Wrme%leitungungsgleichung mit den
%angegebenen Anfangs- und Rand%bedingungen.
m = 0;
t0 = 0;
tf = 0.5;
x0 = 0;
xf = 1;
xmesh = linspace(x0,xf,40);
tspan = linspace(t0,tf,20);
33
34
35
36
37
38
sol = pdepe(m,@pdefun,@pdeic,
@pdebc,xmesh,tspan);
u = sol(:,:,1);
mesh(xmesh,tspan,u)
xlabel(x), ylabel(t),
zlabel(u)
%-------------------------------%Subfunctions.
%-------------------------------function [c,f,s] =
pdefun(x,t,u,DuDx)
%Differenzialgleichung.
c = 1;
f = DuDx;
s = 0;
%-------------------------------function u0 = pdeic(x)
%Anfangsbedingungen.
u0 = sin(pi*x);
%-------------------------------function [px0,qx0,pxf,qxf] =
pdebc(x0,u0,xf,uf,t)
%Randbedingungen.
px0 = u0;
qx0 = 0;
pxf = uf;
qxf = 0;
Hierbei haben wir die Funktion linspace verwendet, um ein Gitter zwischen x0 und x f , sowie eines zwischen t0 und t f zu erzeugen. Um
die Lsung zu plotten, haben wir mesh verwendet. Die Abbildung 65 zeigt das Ergebnis.
Aufgabe 133 (Partielle DGL) Besttigen Sie,
dass
u(x, t) = e t sin(x)
157
Copyright c G. Gramlich
Mit der Statistics Toolbox stehen Ihnen Statistikfunktionen zur Verfgung. Die Tabelle 32
zeigt ein paar grundlegende Funktionen fr
die beschreibende Statistik. Ein paar Dichte-
0.5
Beschreibende Statistik
corrcoef Korrelationsmatrix
cov
Kovarianzmatrix
geomean
Geometrischer Mittelwert
mad
Mittlere absolute Abw.
mean
Arithmetischer Mittelwert
median
Zentralwert (Median)
mode
Hugster Wert
range
Spannweite
std
Standardabweichung
tabulate Hugkeitstabelle
var
Varianz
0
0.5
1
0.5
t
0 0
ut (x, t) = u xx (x, t)
0 x 1, t 0
u(x, 0) = sin(x)
u(0, t) = u(1, t) = 0
158
Copyright c G. Gramlich
die Funktion factorial, die die FakulttsFunktion symbolisch berechnet, siehe mhelp
factorial.
0.8
0.6
0.4
1
2
0.2
0
8
3
6
1
2
3
1
2
2
3
>> maple(6!)
ans =
720
>> factorial(6)
ans =
720
1
2
>> maple(n!)
ans =
n!
>> syms n
>> maple(factorial,n)
ans =
n!
oder einfach
64. Kombinatorik
>> maple(factorial,6)
ans =
720
>> prod(1:6)
ans =
720
6
7
8
>> perms(1:3)
ans =
3
2
3
1
2
3
2
1
1
2
1
3
1
2
1
3
3
2
Mit der Symbolic-Toolbox hat man Zugri Mit der Funktion nchoosek kann man Binoauf Maple-Funktionen, zum Beispiel auf mialzahlen berechnen.
159
Copyright c G. Gramlich
>> nchoosek(49,6)
ans =
13983816
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1
1
1
1
1
1
1
1
1
1
2
2
2
2
3
2
2
2
2
2
2
3
3
3
4
3
3
3
4
4
3
3
3
4
4
5
4
4
5
5
4
4
5
5
5
4
5
6
5
6
6
5
6
6
6
5
6
6
6
6
Mit der Anweisung nchoosek(1:n,k) erhalten Sie alle Anordnungsmglichkeiten fr k Demnach gibt es
Objekte ohne Wiederholung und ohne Berck- 1 >> nchoosek(6,4)
sichtigung der Reihenfolge aus n verschiede- 2 ans =
15
nen Objekten. Zum Beispiel ist dies fr n = 5 3
und k = 3:
Mglichkeiten. . . . . . . . . . . . . . . . . . . . . . . . . .
1
2
3
4
5
6
7
8
9
10
11
12
>> nchoosek(1:5,3)
ans =
1
2
3
1
2
4
1
2
5
1
3
4
1
3
5
1
4
5
2
3
4
2
3
5
2
4
5
3
4
5
>> maple(with(combinat));
>> maple(multinomial,8,2,3,3)
ans =
560
>> nchoosek(1:6,4)
ans =
Die Anzahl der Permutationen ohne Widerholung kann man mit den Funktionen
160
Copyright c G. Gramlich
1
2
3
>> VW = 26^6
VW =
308915776
>> factorial(30)/factorial(30-5)
ans =
17100720
oder aber
1
2
3
>> factorial(5)*nchoosek(30,5)
ans =
17100720
1
2
3
>> KW = nchoosek(6+2-1,2)
KW =
21
oder
1
2
>> KW = maple(binomial,6+2-1,2)
KW =
21
.......................................
ans =
560
1
2
161
bell
binomial
character Chi
cartprod
choose
Copyright c G. Gramlich
fallsvariablen X1 , X2 , . . ., Xn verhalten. Da
die Werte x1 , x2 , . . ., xn tatschlich jedoch
5
berechnet werden, sind sie nicht echt zufl6
lig. Man spricht deshalb auch von Pseudo7
Zufallszahlen, die sich (fast) wie echte verhal8
ten. Mit Hilfe von gleichverteilten Zufallszah9
len lassen sich Zufallszahlen fr andere Vertei10
lungen durch geeignete Transformationen er11
zeugen. Je nach Verteilung kann dies sehr einzur Lsung kombinatorischer Probleme zur fach oder aber auch kompliziert sein. In der
Vefgung, siehe mhelp combinat.
Statistik Toolbox wird Ihnen diese Arbeit abgenommen, siehe Abschnitt 65.4.
3
4
65. Zufallszahlen
Zufallszahlen sind im wissenschaftlichen
Rechnen ein ntzliches Hilfsmittel. In vielen
Fllen werden Zufallszahlen in einer rechnergesttzten Simulation eines komplexen
Problems eingesetzt, zum Beispiel bei der
Planung von Produktionssystemen oder von
Groprojekten. Diese Simulation kann dann
auf dem Rechner immer und immer wieder
ausgefhrt werden, und die Resultate knnen
analysiert werden. Oft werden Zufallszahlen
auch als Testdaten benutzt. Hat man zum
Beispiel einen Algorithmus entwickelt, der
ein beliebiges Gleichungssystem lsen soll,
so kann man eine Matrix als auch eine rechte
Seite des Systems zum Testen des Algorithmus
mit Zufallszahlen generieren.
Zufallszahlen sind durch die Verteilung ihrer Werte charakterisiert. Zum Beispiel sind
gleichverteilte Zufallszahlen dadurch gekennzeichnet, dass alle Werte der Zahlenfolge in einem bestimmten Intervall gleichverteilt liegen.
So erzeugt die Funktion rand(10,1) einen
Spaltenvektor mit 10 gleichmig ber das
Intervall ]0, 1[ verteilten Zufallszahlen (GeZufallszahlen werden am Computer mit Hil- naugenommen erzeugt rand eine Gleitpunktfe spezieller Algorithmen berechnet. Solche zahl im abgeschlossenen Intervall [eps/2, (1
Algorithmen nennt man Zufallsgeneratoren. eps/2)]):
Grundlegend ist dabei die Erzeugung von Zu- 1 >> rand(10,1)
fallszahlen x1 , x2 , . . ., xn , deren Werte sich in 2 ans =
sehr guter Nherung wie Realisierungen von 3
0.9501
unabhngigen auf [0, 1] gleichverteilten Zu- 4
0.2311
162
Copyright c G. Gramlich
5
6
7
8
9
10
11
12
0.6068
0.4860
0.8913
0.7621
0.4565
0.0185
0.8214
0.4447
3
4
Aufgabe 140 (Zufallszahlen) Die MatlabFunktion rand(n) erzeugt eine n nMatrix, deren Eintrge gleichverteilte Zufallszahlen aus dem Intervall ]0, 1[ sind. Schreiben Sie einen Function-File, der n nMatrizen erzeugt, deren Eintrge Zahlen aus
{1, 2, 3, 4, 5, 6} sind.
Lsung: Dies erreicht man zum Beispiel mit
folgender Funktion. Die Funktion ceil rundet
zur nchsten ganzen Zahl auf (nchste ganze
Zahl in Richtung +).
In den Anwendungen werden oft auch Zufallszahlen gesucht, die in einem anderen Intervall als ]0, 1[ liegen. Mit der Matlab-Funktion
rand ist auch dies leicht mglich. Zum Beispiel erzeugt die Anweisung
1
1
2
3
4
function A = randganz1bisk(m,n,k)
if nargin == 1, n=m; end;
if nargin < 3, k=9; end;
A = ceil( k*rand(m,n) );
.......................................
5 + 3*rand(n,1)
function A = randganz(m,n,k)
if nargin == 1, n=m; end;
163
Copyright c G. Gramlich
14
1
2
3
4
5
6
7
8
9
10
11
ans =
-0.4326
-1.6656
0.1253
0.2877
-1.1465
1.1909
1.1892
-0.0376
0.3273
0.1746
15
16
17
18
Will man eine normalverteilte n-wertige Zufallsfolge mit Mittelwert 10 und Standardabweichung 5 erzeugen, so erreicht man dies
durch:
1
10+5*randn(n,1)
subplot(2,1,1)
yg = rand(10000,1);
3
4
5
6
7
8
9
hist(yg,25)
h = findobj(gca,Type,patch);
set(h,FaceColor,b,EdgeColor,
w)
axis([-1 2 0 600])
title(Gleichmigverteilte
Zufallszahlen)
10
11
12
13
hist(yn,x)
h = findobj(gca,Type,patch);
set(h,FaceColor,b,EdgeColor,
w)
title(Normalverteilte
Zufallszahlen)
yn = randn(10000,1);
x = min(yn):0.2:max(yn);
subplot(2,1,2)
Punkte = rand(10000,2);
subplot(1,2,1)
plot(Punkte(:,1),Punkte(:,2),.)
title(Gleichmigverteilte
Zufallszahlen)
axis([0 1 0 1])
axis(square)
8
9
164
Punkte = randn(10000,2);
Copyright c G. Gramlich
Gleichmigverteilte Zufallszahlen
600
400
200
0
1
0.5
0.5
1.5
(a) 10*rand(10,1).
(b) -1+2*rand(1,10).
Normalverteilte Zufallszahlen
1000
(c) -20+30*rand(1,10).
500
0
4
(d) -pi+2*pi*rand(1,10).
.......................................
3
subplot(1,2,2)
plot(Punkte(:,1),Punkte(:,2),.)
title(Normalverteilte
Zufallszahlen)
axis([-3 3 -3 3])
axis(square)
(b) rand(1000,1)-0.5
(c) sqrt(12)*(rand(1000,1)-0.5)
Gleichmigverteilte Zufallszahlen
1
Normalverteilte Zufallszahlen
3
0.8
(d) sqrt(3*12)*(rand(1000,1)-0.5)
mit den Funktionen mean und var knnen Sie
das berprfen; am Besten mit noch mehr Zahlen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
0.6
0
0.4
0.2
0
0
2
0.5
165
Copyright c G. Gramlich
(b) 0.25*randn(1000,1)-5.5;.
20
10
0
0
Values
166
Copyright c G. Gramlich
n=100
n=1000
0.14
0.12
0.12
0.10
0.10
0.08
0.08
0.06
0.06
0.04
0.04
0.02
0.14
0.02
0.5
0.5
1
2
3
n=4;
Inside=0;
VolBn=zeros(500,1);
for k=1:500
A=-1+2*rand(n,100);
Inside=Inside+sum(sum(A.^2)<=1);
VolBn(k)=Inside/(k*100)*2^n;
end
plot(VolBn)
VolBn(500)
167
Copyright c G. Gramlich
14
15
h=
16
17
18
+ sum(x.^2+y.^2<=1);
PiNaeherung(k) =
4*AnzahlimKreis/(k*100);
end
plot(PiNaeherung)
title(sprintf(Nherung von Pi =
%5.3f,PiNaeherung(end)));
xlabel(mal Hundert)
In einer Spielshow ist als Hauptpreis ein Auto ausgesetzt. Hierzu sind auf der Bhne drei
verschlossene Tren aufgebaut. Hinter einer
rein zufllig ausgewhlten Tr bendet sich
der Hauptpreis, hinter den beiden anderen jeweils eine Ziege. Der Kandidat whlt eine der
Tren, beispielsweise Tr 1 aus; diese bleibt
aber vorerst verschlossen. Der Spielleiter, der
wei, hinter welcher Tr das Auto steht, net
daraufhin mit den Worten: Soll ich Ihnen mal
etwas zeigen?eine der beiden anderen Tren,
168
Copyright c G. Gramlich
33
34
35
36
37
38
39
40
41
42
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
43
44
45
46
47
48
49
50
51
52
169
Copyright c G. Gramlich
16
17
18
19
20
21
22
23
24
25
26
for i=1:n
a = g-g(i)*ones(n,1);
if( sum(~a)>=2 )
%Zwei Zahlen sind
%gleich.
r = r+1;
break
end
end
end
%Wahrscheinlichkeit.
p = r/kmax;
[n,p]
end
n
5
10
15
20
22
23
25
30
35
40
45
50
55
Theorie
0.0271
0.1169
0.2529
0.4114
0.4757
0.5073
0.5687
0.7063
0.8144
0.8912
0.9410
0.9410
0.9863
Simulation
0.0248
0.1118
0.2526
0.4216
0.4846
0.5156
0.5642
0.6980
0.8064
0.8910
0.9424
0.9700
0.9880
170
Copyright c G. Gramlich
x x dx
0
kann von Matlab nicht exakt (symbolisch) berechnet werden, siehe Abschnitt 61. Wir knnen aber mit Hilfe der Nherung
1
0
1
f (x) dx
n
f (xi )
i=1
>> n = 1000;
>> x = rand(n,1);
>> y = x.^x;
>> sum(y)/n
ans =
0.7850
x x dx 0.7850
0
Symbolische Rechnungen basieren auf Variablen, denen nicht unbedingt Zahlen zugewiesen sind. Man rechnet mit Symbolen und Termen, wie man es vom Rechnen mit Papier
und Bleistift kennt. Arithmetische Operationen knnen exakt durchgefhrt werden. Auerdem kann man Nherungen bis auf eine
beliebig vorgegebene gewnschte Anzahl von
Stellen nden. Man kann Polynome oder rationale Ausdrcke symbolisch addieren, subtrahieren und dividieren. Ausdrcke knnen
dierenziert werden und man erhlt die gleichen Ergebnisse, die bisher nur mit Bleistift
und Papier zu erzielen waren. Ausdrcke knnen sogar unbestimmt integriert werden, sofern
sie Integrale in geschlossener Form besitzen.
Diese Mglichkeiten erleichtern das ermdende und fehlerbedrohte Manipulieren komplizierter Ausdrcke, das auch hug das Vorspiel numerischer Behandlung bildet. Mit symbolischem Rechnen lassen sich auch kleinere lineare Gleichungssysteme ohne Rundungsfehler lsen. Auf jeden Fall ist symbolisches
Rechnen ein sich stndig entwickelndes Gebiet, dessen Bedeutung fr das wissenschaftliche Rechnen zunehmen wird.
Um mit Matlab symbolisch rechnen zu knnen, muss die Symbolic Math Toolbox instalAchtung! Seit Matlab 7.7 (R2008b) basiert
liert sein.
171
Copyright c G. Gramlich
1
2
3
4
1 1+ 5 6
1 1 5 6
2
2
5
5
berechnen. Besttigen Sie dies.
Lsung: Es ist
Durch
1
>> syms x t
a2 b2
= a + b.
ab
3
4
Mit der Funktion simplify knnen symbolische Terme vereinfacht werden. In der Mathematik lernt man die Gltigkeit von sin(x)2 +
cos(x)2 = 1. Mit der Funktion simplify kann
man dies besttigen:
>> syms a b
>> simplify((a^2-b^2)/(a-b))
ans =
a+b
Es ist
(a + b + c) = a + b + c + 2(ab + ac + bc)
2
a = expand(((1+sqrt(sym(5)))/2)^6)
;
b = expand(((1-sqrt(sym(5)))/2)^6)
;
simplify(1/sqrt(5)*a-1/sqrt(5)*b)
ans =
8
.......................................
Bekanntlich ist
>> 3*x^2+x*t-1
ans =
3*x^2+x*t-1
>> syms a b c
>> expand((a+b+c)^2)
ans =
a^2+2*a*b+2*a*c+b^2+2*b*c+c^2
1
2
3
4
>> syms x
>> simplify( sin(x)^2+cos(x)^2 )
ans =
1
172
Copyright c G. Gramlich
4
1
2
3
4
>> syms x
>> subs( sqrt(1-x^2),x,cos(x) )
ans =
(1-cos(x)^2)^(1/2)
5
6
7
b) >> sym(2+3*4)
ans =
14
8
9
c) >> sym(1+2/3*4)
>> syms x
>> f = 2*x^2+3*x+4;
4
5
6
>> diff(f)
ans =
4*x+3
ans =
a^(m+n)
>> simplify(a^m/a^n)
ans =
a^(m-n)
.......................................
16 + cos(/3)
Aufgabe 146 (Rangordnung) Berechnen Sie
3
8+4
symbolisch:
symbolisch und numerisch.
(a) 210/10
Lsung: Symbolische Rechnung:
(b) 2+3*4
Sowohl
(c) 1+2/3*4.
3
Lsung: Es ist
1
2
3
a) >> sym(2^10/10)
ans =
512/5
>> sym((sqrt(16)+cos(pi/3))
/(8^(1/3)+4))
also auch
173
Copyright c G. Gramlich
1
2
3
liefert
4
1
2
ans =
3/4
Numerische Rechnung:
1
2
3
>> (sqrt(16)+cos(pi/3))/(8^(1/3)
+4)
ans =
0.7500
ist. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Aufgabe 151 (Potenzieren) Berechnen Sie
(1 + x)4 .
.......................................
Lsung: Mit
1
2
x2 + 2xy + y2
x 2 y2
3
4
Lsung: Mit
1
2
>> syms x
>> expand((1+x)^4)
ans =
1+4*x+6*x^2+4*x^3+x^4
>> syms x y
>> simplify((x^2-2*x*y+y^2)/(x^2-y
^2))
erhlt man
1
>> syms x
>> collect( (x^2+x+1)*(x^3-x^2+1))
ans =
x^5+x+1
ans =
(-y+x)/(x+y)
x6 + x4 x2 1.
Lsung: Mit
x2 + 2xy + y2
xy
=
.
2 y2
x+y
x
1
2
3
>> syms x
>> factor(x^6+x^4-x^2-1)
ans =
(x-1)*(1+x)*(1+x^2)^2
ist. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
174
Copyright c G. Gramlich
Die Funktion maple erlaubt es, jede MapleFunktion direkt zu verwenden. Kennt man den
Namen der gewnschten Maple-Funktion, so
kann man mit
1
mhelp <Name>
Matlab verfgt ber viele eingebaute Mathematische Funktionen mit denen man symbolisch rechnen kann. Mit diesen vordenierten
Funktionen ist es uns dann auch mglich, weitere Funktionen zu konstruieren, indem man
die entsprechenden Funktionsterme f (x) miteinander verkpft.
1
1
>> syms x
>> f = 2*x^2+3*x+4;
Da man auf diese Art die Syntax der Maple- Danach kann man zum Beispiel f (x) = 4x + 3
Funktion gcd erfahren hat, kann man nun die bilden.
Funktion maple benutzen, um gcd zu verwen1
>> diff(f)
den. Die folgenden Zeilen zeigen, wie man
2
ans =
den grten gemeinsamen Teiler der Polyno- 3 4*x+3
me x2 y2 und x3 y3 berechnet:
1
2
3
4
5
6
>> syms x y
p1 = x^2-y^2;
p2 = x^3-y^3;
maple(gcd,p1,p2)
ans =
-y+x
mglich. Hierdurch wird das symbolische Objekt f erzeugt, das wie f (x) agiert, das heit,
dem Objekt f ist bekannt, dass eine unabhngige Variable x existiert. Das dem so ist, zeigen
die folgenden Zeilen.
Die Anweisungen
1
2
3
>> f = sym(f(x))
>> maple(gcd,225,725)
ans =
25
175
1
2
>> diff(f)
ans =
Copyright c G. Gramlich
3
4
5
6
diff(f(x),x)
>> diff(f,t)
ans =
0
2
3
4
5
diff(f/g)
ans =
diff(f(x),x)/g(x)-f(x)/g(x)^2*
diff(g(x),x)
/h
ans =
(f(xbar+h)-f(xbar))/h
1
2
3
4
1
2
3
>> limit(ans,h,0)
ans =
D(f)(xbar)
5
6
1
2
3
2
3
>> diff(f*g)
ans =
diff(f(x),x)*g(x)+f(x)*diff(g(x),x
)
und symbolisch:
1
2
>> subs(f,2)
ans =
1.4142
f (x)
g(x)
1/2
2
>> syms x
>> f = sqrt(x);
>> pretty(subs(f,sym(2)))
f = sym(f(x)); g = sym(g(x));
176
Copyright c G. Gramlich
1
2
3
1
2
3
>> double(ans)
ans =
0.9975
>> sin(sym(pi/4))
ans =
1/2*2^(1/2)
Die Sinusfunktion f = sin und die ExponenWir knnen auch die Funktion subs verwentialfunktion g = exp sind eingebaute Funkden, um Funktionswerte zu berechnen.
tionen. Wir knnen damit die Summenfunktion f + g = sin + exp oder die Verkettung 1 >> syms x
f g = esin dieser beiden Funktionen bilden. 2 >> exp(sin(x));
Die folgenden Anweisungen zeigen die Um- 3 >> subs(ans,sym(2))
4
ans =
setzung:
5
exp(sin(2))
1
2
3
4
5
6
7
>> syms x
>> sin(x) + exp(x)
ans =
sin(x)+exp(x)
>> exp(sin(x))
ans =
exp(sin(x))
>> double(ans)
ans =
2.4826
oder direkt
oder alternativ mit der Funktion compose fr
die Komposition.
1
2
3
1
2
3
>> syms x
>> compose(exp(x),sin(x))
ans =
exp(sin(x))
>> exp(sin(x));
>> subs(ans,2)
ans =
2.4826
1
2
3
177
>> syms x
>> f = cos(x);
>> maple(type,f,evenfunc(x))
Copyright c G. Gramlich
4
5
ans =
true
7
8
ans =
x^(1/2)
Die Exponentialfunktion exp ist dagegen we- Die Umkehrfunktion von der quadratischen
der gerade noch ungerade.
Funktion f (x) = x2 , x R ist die Wurzelfunktion, der Denitionsbereich dieser ist aber
1
>> g = exp(x);
nicht ganz R, sondern R0 .
2
>> maple(type,g,evenfunc(x))
3
ans =
false
>> maple(type,g,oddfunc(x))
ans =
false
1
2
3
4
5
>> syms x
>> f = exp(x);
>> finverse(f)
ans =
log(x)
5
6
7
true
>> maple(iscont,1/x,x=-1..3)
ans =
false
>> g = x^2;
>> finverse(g)
Warning: finverse(x^2) is not
unique.
> In C:\MATLAB6p1\toolbox\symbolic
\
@sym\finverse.m at line 43
2
3
4
5
6
7
8
9
10
11
178
f =
PIECEWISE([x, x <= 0],[1/x, 0 < x
])
>> diff(f)
ans =
PIECEWISE([1, x < 0],[NaN, x = 0],
[-1/x^2, 0 < x])
>> int(f)
ans =
PIECEWISE([1/2*x^2, x < 0],
[NaN, x = 0],[log(x), 0 < x])
Copyright c G. Gramlich
2
3
ans =
2.1716
Mit der Funktion solve kann man Gleichungen lsen. Das folgende Beispiel lst x2 x = und mit dem Starwert x0 = 1 die zweite L0.
sung
1
2
3
4
>> solve(x^2-x = 0)
ans =
[0]
[1]
1
2
3
>> fzero(exp(x)+2*exp(-x)-9,-1)
ans =
-1.4784
.......................................
Findet man keine exakte symbolische Lsung,
Aufgabe 155 (Algebraische Gl.) Berechnen
so wird die Lsung in variabler Genauigkeit
Sie die Lsung der Gleichung xe x = 1.
ausgegeben.
Lsung:
1
2
3
>> solve(cos(x) = x)
ans =
.739...87
1
2
3
4
>> solve(x*exp(x)=1)
ans =
lambertw(1)
>> double(ans)
ans =
0.5671
>> solve(cos(x)=exp(x))
ans =
0
>> solve(exp(x)+2*exp(-x)-9=0)
ans =
[ log(9/2+1/2*73^(1/2))]
[ log(9/2-1/2*73^(1/2))]
>> double(ans)
ans =
2.1716
-1.4784
3x2 + 2y = 0
2x 3y2 = 0
Lsung:
1
3
4
5
6
7
>> fzero(exp(x)+2*exp(-x)-9,1)
179
Copyright c G. Gramlich
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
y =
[0]
[-1/3*18^(1/3)]
[1/6*18^(1/3)-1/6*i*3^(1/2)
*18^(1/3)]
[1/6*18^(1/3)+1/6*i*3^(1/2)
*18^(1/3)]
>> double(x), double(y)
ans =
0
0.7631
-0.3816 - 0.6609i
-0.3816 + 0.6609i
ans =
0
-0.8736
0.4368 - 0.7565i
0.4368 + 0.7565i
3
4
ans =
exp(1)
Matlab
limit(f)
lim f (x)
limit(f,x,a)
lim f (x)
oder limit(f,a)
limit(f,x,a,left)
lim f (x)
limit(f,x,a,right)
x0
xa
xa
x<0
xa
x>0
.......................................
Besitzt
der
Dierenzenquotient
( f (x) f ( x))/(x x) der Funktion f fr
67.5. Grenzwerte
Die Folge
an =
2n + 1
,
4n
n1
f ( x) = lim
x x
f (x) f ( x)
.
xx
hat den Grenzwert 1/2. Der folgende MatlabMan nennt den Grenzwert auch DierenzialCode besttigt dies:
quotient und die Berechnungsmethode von
1
>> limit((2*n+1)/(4*n),inf)
f ( x) die x-Methode.
ans =
1/2
Wir knnen limit einsetzen, um die Ableitung einer Funktion f an der Stelle x zu berech
Die Eulersche Zahl e = 2.7183 . . . ist der nen. Als Beispiel berechnen wir fr die FunkGrenzwert der Folge mit der Bildungsvor- tion f (x) = 3/x, x > 0 die Ableitung f (2).
schrift (1 + 1/n)n , n 1 fr n . Die fol- 1 >> syms x
genden Anweisungen zeigen dies:
2
>> limit( (3/x-3/2)/(x-2) ,x,2 )
3
1
2
>> syms n
>> limit((1+1/n)^n,inf)
180
ans =
-3/4
Copyright c G. Gramlich
und
lim
3/x 3/2
3
lim
=
x2
x2
4
x0
x<0
f ( x) = lim
h0
abs(x) abs(0)
= 1
x0
2
3
4
f ( x + h) f ( x)
.
h
5
6
-3/4
d
cos(x + h) cos(x)
cos(x) = lim
h0
dx
h
= sin(x)
xx
Dies knnen wir mit der limit-Funktion befr die Betragsfunktion f (x) = abs(x) = |x|, sttigen.
x R und x = 0, keinen Grenzwert. In Matlab 1 >> syms x h
erhalten wir:
2
>> limit( (cos(x+h)-cos(x))/h, h,
1
2
3
4
>> syms x
>> limit((abs(x)-abs(0))/(x-0),x
,0)
ans =
NaN
3
4
0)
ans =
-sin(x)
lim cos(x) = 1
x0
1
abs(x) abs(0)
lim
=1
x0
x0
2
3
>> syms x
>> limit(cos(x))
ans = 1
x>0
181
Copyright c G. Gramlich
1
2
3
4
>> syms x
>> limit(x*exp(-x),inf)
ans =
0
>> syms x
>> limit( sin(x)/x )
ans =
1
(x + h)3 x3
.
h0
h
lim
sin(x)
lim
= 1.
x0
x
>> syms h
>> limit( (cos(h)-1)/h )
ans =
0
Aufgabe 161 (Grenzwerte) Besttigen Sie zunchst rechnerisch mit Bleistift und Papier und
dann in Matlab die folgenden Grenzwerte:
cos(h) 1
lim
= 0.
h0
x
.......................................
(d) lim 3 x /4 x = 0
x
x1
x0
lim xe
1
2
182
>> limit((x^2-2*x+5)/(cos(x)),x,0)
ans =
Copyright c G. Gramlich
Ob die Summe einer unendlichen Reihe existiert und welchen Wert sie gegebenenfalls hat,
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . lsst sich ebenfalls mit der Matlab-Funktion
Aufgabe 162 (Grenzwerte) Die folgenden symsum beantworten. In der Analysis beweist
4
Grenzwerte existieren nicht. Was liefert Mat- man :
1
2
lab?
= .
6
n2
n=1
3
x0
x0
x>0
x0
x<0
Lsung:
1
2
1
2
3
4
5
6
7
8
9
>> limit(1/x,0)
ans =
NaN
>> limit(1/x,x,0,right)
ans =
Inf
>> limit(1/x,x,0,left)
ans =
-Inf
3
4
>> syms n
>> symsum(1/n^2,1,inf)
ans =
1/6*pi^2
.......................................
1
2
>> syms k
>> symsum(1/k,1,10)
erhlt man
10
2 = 2 + 4 + 8 + + 1024
k
k=1
k=1
1
7381
=
.
k
2520
ans =
2046
183
Copyright c G. Gramlich
(a)
(b)
(c)
n(n+1)
n
k=1 k =
2
n
k2 = n(n+1)(2n+1)
k=1
6
2
2
n
3 = n (n+1) .
k=1 k
4
.......................................
Aufgabe 166 (Unendliche Summen) Besttigen Sie, dass fr die harmonische Reihe gilt
(1)k1
>> syms k n
k=1
so erhlt man
1
2
3
Lsung: Mit
a) >> simple(symsum(k,1,n))
ans =
1/2*n*(n+1)
1
2
4
5
6
7
1
= ln(2).
k
>> syms k
>> symsum( (-1)^(k-1)/k,1,inf)
erhlt man
b) >> simple(symsum(k^2,1,n))
ans =
1/6*n*(n+1)*(2*n+1)
1
2
ans =
log(2)
8
9
10
11
c) >> simple(symsum(k^3,1,n))
ans =
1/4*n^2*(n+1)^2
.......................................
.......................................
(1)k
Aufgabe 165 (Unendliche Summen) Berechnen Sie die Summe der Reihe
k=1
1
.
4k2 1
k=1
Lsung: Mit
1
2
Lsung: Mit
1
2
>> syms k
>> symsum( 1/(4*k^2-1),1,inf)
ans =
1/2
>> syms k
>> symsum( (-1)^k/(2*k+1),1,inf)
erhlt man
erhlt man
1
1
2k + 1
ans =
-1+1/4*pi
k=1
1
1
= .
21
2
4k
(1)k
k=1
= 1.
2k + 1
4
.......................................
184
Copyright c G. Gramlich
(2k 1)
k=1
4
1
(2k 1)2 = n3 n.
3
3
k=1
.......................................
(2k 1) = n .
2
2
3
k=1
>> syms x
>> f = x^2*exp(x);
>> diff(f)
.......................................
k=1
ans =
2*x*exp(x)+x^2*exp(x)
>> simplify(symsum((2*k-1)^2,1,n))
Lsung: Mit
1
erhlt man
2
1
2
ans =
-1/3*n+4/3*n^3
3
4
185
>> syms x
>> diff(x^2*exp(x))
ans =
2*x*exp(x)+x^2*exp(x)
Copyright c G. Gramlich
ist. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
2
>> syms w x y
>> diff(sin(w*x*y))
>> syms x
>> diff(atan(x))
ans =
1/(1+x^2)
>> diff(sin(w*y))
d
1
arctan(x) =
dx
1 + x2
>> diff(sin(w*y),w)
ist. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
2
ans =
cos(w*y)*y
>> syms x
>> diff(x^(x^x))
ans =
x^(x^x)*(x^x*(log(x)+1)*log(x)
+x^x/x)
x+2y
+ 2 sin(z) + z2 y
e
2e x+2y + z2 x
f (x) =
2x cos(z) + 2xyz
x
d xx
xx
x = x x x x (ln (x) + 1) ln (x) +
dx
x
186
Copyright c G. Gramlich
1
2
3
4
5
6
und
H f (2, 3) =
In Matlab:
1
2
3
4
5
6
7
2x4
Bei Funktionen mehrerer Vernderlicher berechnet man die Funktionalmatrix oder Jacobi-Matrix mittels jacobian. Will man die Jacobi-Matrix der Funktion
24x2 + 6y 6x + 6y2
.
6x + 6y2 12xy + 8
f:
3
4
5
6
7
8
9
10
46
72
>> subs(gradf,{x,y},{-2,3})
ans =
-46
-72
>> subs(hessf,{x,y},{-2,3})
ans =
114
42
42 -64
114
42
.
42 64
R3
R3
(x, y, z) (xy, x, z)
1
2
3
4
>> syms x y z
>> J = jacobian([x*y,x,z],[x,y,z])
J
[
[
[
=
y, x, 0]
1, 0, 0]
0, 0, 1]
187
Copyright c G. Gramlich
Punkt (x, y) R2 . Wie lautet die Jacobi-Matrix (t ist der Parameter) empelt es sich x und t als
im Punkt (1, 0)?
symbolische Variablen zu denieren. Als BeiLsung: Es ist
spiel betrachten wir (xt)2 dx = 1/3(xt)3 +c
1
2
3
4
5
6
>> syms x y
>> J = jacobian([x+y,x^2*sin(y),
exp(x*y)],[x,y])
J =
[
1,
1]
[ 2*x*sin(y), x^2*cos(y)]
[ y*exp(x*y), x*exp(x*y)]
1
2
>> syms x t
>> pretty(int((x-t)^2))
3
4
5
3
1/3 (x - t)
f (x) dx
>> subs(J,[x,y],[1,0])
ans =
1
1
0
1
0
1
t =
.......................................
f (x, t) dx
a
67.12. Integration
sin(x) dx = 2.
Als erstes Beispiel wollen wir die Gleichung Wir besttigen dies mit der Funktion int aus
der Symbolic Math Toolbox.
sin(x) dx = cos(x) + c besttigen.
1
2
3
4
5
>> syms x
>> f = sin(x);
>> int(f)
ans =
-cos(x)
1
2
3
>> int(sin(x),0,pi)
ans =
2
f (x, t) dx
x sin(x) dx.
Lsung: Mit
188
Copyright c G. Gramlich
1
2
3
4
>> syms x
>> int(x*sin(x))
ans =
sin(x)-x*cos(x)
1
1
dx =
5
4
1 x
ist. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Aufgabe 177 (Integration) Berechnen Sie das
uneigentliche Integral
sin(2t)est dt
0
ist. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
symbolisch.
Aufgabe 175 (Integration) Berechnen Sie das Lsung: Mit
bestimmte Integral
1
x sin(x) dx
0
symbolisch.
Lsung: Mit
1
2
3
4
4
5
>> syms x
>> int(x*sin(x),0,pi)
ans =
pi
sin(2t)est dt =
0
x sin(x) dx =
ist. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
dx.
x5
Lsung: Mit
1
2
3
4
>> syms x
>> int(x^(-5),1,inf)
ans =
1/4
2
s2 + 4
ist. Es handelt sich hier um die LaplaceTransformierte der Funktion f (t) = sin(2t),
t R. Mit der eingebauten Funktion laplace
kann man die Laplace-Transformierte auch unmittelbar berechnen:
2
3
4
>> syms t;
>> laplace(sin(2*t))
ans =
2/(s^2+4)
.......................................
Aufgabe 178 (Ableitungen, Integrale) Berechnen Sie symbolisch mit den MatlabFunktionen diff und int die Ableitungen
bzw. Integrale folgender Exponentialfunktionen:
189
Copyright c G. Gramlich
(a) e x
(b)
67.13. Polynome
2x
(c) 10 x
(d) a x
Lsung: Es ist
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
>> syms x a
>> diff(exp(x))
ans =
exp(x)
>> int(exp(x))
ans =
exp(x)
>> diff(2^x)
ans =
2^x*log(2)
>> int(2^x)
ans =
1/log(2)*2^x
>> diff(10^x)
ans =
10^x*log(10)
>> int(10^x)
ans =
1/log(10)*10^x
>> diff(a^x)
ans =
a^x*log(a)
>> int(a^x)
ans =
1/log(a)*a^x
1
2
3
4
5
>> syms x
>> p = -3*x^3+3*x^2+10*x+5;
>> ph = horner(p)
ph =
5+(10+(3-3*x)*x)*x
>> subs(ph,x,3)
ans =
-19
Will man den Grad eines Polynoms bestimmen, so hilft die Maple-Funktion degree.
1
2
3
>> maple(degree,p)
ans =
3
f (x)
ex
ln(2)2 x
ln(10)10 x
ln(a)a x
67.14. Taylor-Polynome
f (x) dx
ex + c
2 x / ln(2) + c
10 x / ln(10) + c
a x / ln(a) + c
.......................................
190
>> syms x
>> taylor(sin(x))
Copyright c G. Gramlich
Funktion
coeff
convert
degree
factor
horner
solve
subs
Bedeutung
Koezient (Maple)
Konvertiert (Maple)
Grad des Polynoms (Maple)
Linearfaktoren (Maple)
Horner-Darstellung
Nullstellen
Ersetzen
ans =
x-1/6*x^3+1/120*x^5
>> syms x
>> taylor(cos(x),5,x,0)
ans =
1-1/2*x^2+1/24*x^4
67.16. Mehrdimensionale
Taylor-Polynome
d.h. das Taylor-Polynom der KosinusFunktion vom Grad vier im EntwicklungsZur Berechnung des Taylor-Polynoms eipunkt 0 ist
ner reellwertigen Funktion mehrerer Variablen
kann man die Funktion mtaylor aus Maple
x2 x4
verwenden.
f (x) = 1
+
.
2
24
Das Taylor-Polynom zweiten Grades der
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Funktion f (x, y) = e x+y , (x, y) R2 mit
191
Copyright c G. Gramlich
1
2
3
>> simplify(T2)
ans =
x^2+y^2+x+y
.......................................
Aufgabe 181 (Taylor) Approximieren Sie die
Funktion f (x, y) = xey x3 y, (x, y) R2 in
der Nhe des Nullpunktes durch ihr TaylorPolynom T 2 zweiten Grades. Vergleichen Sie
dann die Funktionswerte von f und T 2 an der
Stelle (0.5, 0.5), indem Sie den relativen Fehler
|T 2 (0.5, 0.5) f (0.5, 0.5)|/| f (0.5, 0.5)| berechnen.
Lsung: Es ist
3
4
1
2
3
>> syms x y
>> T2 = maple(mtaylor,exp(x+y),
[x,y],3)
T2 =
1+x+y+1/2*x^2+x*y+1/2*y^2
4
5
6
Aufgabe 180 (Taylor) Berechnen Sie das Taylor-Polynom zweiter Ordnung mit dem Entwicklungspunkt (1/2, 1/2) der quadratischen Funktion q(x, y) = x2 + y2 + x + y,
(x, y) R2 .
Lsung: Die folgenden Matlab-Zeilen berechnen die Lsung:
1
2
3
4
>> syms x y
>> T2 = maple(mtaylor,x^2+y^2+x+
y,[x=-1/2,y=-1/2],3)
T2 =
-1/2+(x+1/2)^2+(y+1/2)^2
8
9
10
11
12
13
>> syms x y
>> f = x*exp(y)-x^3*y;
>> T2 = maple(mtaylor,f,[x,y]
,3)
T2 =
x+x*y
>> subs(T2,[x,y],[0.5,0.5]),subs(f
,[x,y],[0.5,0.5])
ans =
0.7500
ans =
0.7619
>> abs(subs(T2,[x,y],[0.5,0.5])subs(f,[x,y],[0.5,0.5]))/abs(
subs(f,[x,y],[0.5,0.5]))
ans =
0.0156
192
Copyright c G. Gramlich
67.18. Dierenzengleichungen
Aufgabe 182 (Dierenzengleichungen) Besttigen Sie die Lsung yt = (0.5)t (y0 12) + 12
Maple kann Dierenzengleichungen lsen. der Dierenzengleichung
Die Funktion rsolve kann lineare Dierenzengleichungen mit konstanten Koezienten,
yt = 0.5yt1 + 6
Systeme linearer Dierenzengleichungen mit
konstanten Koezienten und manche nicht- Lsung: Es ist
lineare Gleichungen erster Ordnung. Implementiert sind Standardtechniken wie erzeugen- 1 >> maple(rsolve,y(t)=0.5*y(t-1)
+6,y(t))
de Funktionen und z-Transformationen, sowie
2
ans =
Methoden basierend auf Substitutionen und 3 y(0)*(1/2)^t-12*(1/2)^t+12
charakteristischen Gleichungen.
Die lineare Dierenzengleichung erster Ord- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
nung
In Abschnitt 72 wird gezeigt, wie man Dieyt = 0.9yt1
renzengleichungen mit Simulink numerisch sihat die Lsung
muliert.
yt = (1)t (0.9)t y0 .
67.19. Dierenzialgleichungen
Hier die Besttigung in Matlab.
Mit Hilfe der Matlab-Funktion dsolve ist es
mglich, allgemeine Lsungen von Dierenzialgleichungen zu berechnen, Anfangswertauf2
gaben und Randwertaufgaben zu lsen. Hier3
bei kann eine einzelne Dierenzialgleichung
Die Komplexitt der Gaussschen Elimination oder aber auch ein System von Gleichungen
vorliegen. Mit der Funktion pdsolve knnen
ist
sogar einfache partielle Dierenzialgleichun1
>> maple(rsolve,{T(n)=T(n-1)
gen bzw. partielle Dierenzialgleichungssyste2
+n^2,T(1)=0},T(n))
me gelst werden.
3
ans =
1
>> maple(rsolve,y(t)=-0.9*y(t
-1),y(t))
ans =
y(0)*(-9/10)^t
-3*(n+1)*(1/2*n+1)+n+2*(n+1)*
(1/2*n+1)*(1/3*n+1)
>> factor(sym(maple(rsolve,{T(n
)=T(n-1)+n^2,T(1)=0},T(n))
))
ans =
1/6*(n-1)*(2*n^2+5*n+6)
5
6
7
8
193
Copyright c G. Gramlich
Aufgabe 183 (Dierenzialgleichung) Berechnen Sie die allgemeine Lsung der gewhnlichen Dierenzialgleichung
2
3
>> y = dsolve(D2y+144*y=cos(11*t)
,
y(0)=0,Dy(0)=0)
y =
-1/23*cos(12*t)+1/23*cos(11*t)
0.05
2
3
>> y = dsolve(Dy=-y-5*exp(-t)*sin
(5*t),y(0)=1)
y =
exp(-t)*cos(5*t)
0.05
0.1
0
10
t
15
.......................................
AWA :
t0
be
y(0) =, y (0) = 0
u = 6x
RWA :
0 x 1.
und stellen Sie die Lsung im Intervall [0, 6]
u(0) = 0, u(1) = 1
dar.
Lsung: Die Lsung ist
aus Abschnitt 62.2.
194
Copyright c G. Gramlich
1
2
3
4
>> u = dsolve(D2u-6*x=0,
u(0)=0,u(1)=1,x)
u =
x^3
1
2
>> maple(pdsolve,utt-c^2*uxx)
u(x,t) = _F1(t*c+x)+_F2(t*c-x)
Hierbei sind _F1 und _F2 zwei beliebige zweiAufgabe 186 (Randwertaufgabe) Berechnen mal stetig dierenzierbare Funktionen. Whlt
man fr diese beiden Funktionen die Funktion
Sie die Lsung der Randwertaufgabe
2
ez , z R und fr den Parameter c den Wert
y = y
exp((t+x)2)+exp((tx)2)
>> y = dsolve(D2y=-y,y(0)=3,
y(pi/2)=7,x)
y =
7*sin(x)+3*cos(x)
1.5
1
6
0.5
.......................................
2
5
0
2
4
Mit der Maple-Funktion pdsolve kann man
t
5
6
x
einfache partielle Dierenzialgleichungen lsen. Als Beispiel betrachten wir die eindimen- Abbildung 75: Lsung der eindimensionalen
sionale homogene Wellengleichung
Wellengleichung
utt c2 u xx = 0
(c
0).
axu x + btut = 0.
195
Copyright c G. Gramlich
y(1) = 4,
Lsung: Es ist
1
2
3
4
5
6
7
[4, 4].
Lsung: Es ist
>> syms x t a b
u = sym(u(x,t));
ux = diff(u,x);
ut = diff(u,t);
maple(pdsolve,a*x*ux+b*t*ut)
ans =
u(x,t) = _F1(t/(x^(b/a)))
1
2
3
>> dsolve(Dy+t*y=t,y(0)=-1)
ans =
1-2*exp(-1/2*t^2)
.......................................
Fourier-Transformation
f() =
f (t)eit dt.
R
Aufgabe 189 (Dierenzialgleichung) Benutzen Sie dsolve, um die Lsung der folgenden
196
Copyright c G. Gramlich
Originalbereich (Zeitbereich) in den Bildbereich (Frequenzbereich) ab. Die inverse Fourier-Transformation (ICFT) transformiert umgekehrt.
Fr den Rechteckimpuls
f (t) =
0, sonst
5
6
7
(t/T),t,w)))
ans =
2/w*sin(w)
Das folgende Beispiel zeigt, dass die FourierTransformierte f() einer Funktion f () im allgmeinen eine komplexwertige Funktion ist.
f (t) =
net werden. Es ergibt sich
0,
sonst
f() =
=
f (t)eit dt =
T
eit
eit dt
T
1 iT
(e
eiT )
i
f() =
i T
2 1 iT
e eiT
=
2i
2 sin(T )
=
.
f (t)eit dt
aebt eit dt = a
0
e(b+i) dt
0
e(b+i)t
=a
(b + i)
t=
a
=
.
b + i
t=0
Die folgenden Anweisungen besttigen die
Rechnung.
Die folgenden Anweisungen besttigen das Ergebnis symbolisch in Matlab.
1
>> syms t T
2
3
4
5
1
2
3
4
5
>> maple(assume(a>0,b>0));
>> maple(fourier(a*exp(-b*t)
*Heaviside(t),t,w))
ans =
a/(b+i*w)
Die folgenden Anweisungen geben eine zweite Beachten Sie, dass die Konstanten a und b,
Mglichkeit, obiges Resultat zu besttigen. Es so wie es die Theorie erfordert, grer als
ist T = 1.
Null deniert werden mssen, weil sonst gegebenenfalls das Integral bzw. die Fourier1
>> maple(T:=1);
Transformation nicht existiert.
2
>> maple(Rechteck(t/T):=
3
4
Heaviside(t+T)-Heaviside(t-T):);
>> maple(simplify(fourier(
Rechteck
197
Copyright c G. Gramlich
ist
f() =
2 /4
e
.
2
3
4
>> syms x
>> f = exp(-x^2);
>> fhat = fourier(f)
fhat =
pi^(1/2)*exp(-1/4*w^2).
1
2
3
4
5
>> syms x
>> f = exp(-abs(x));
>> fhat = fourier(f)
fhat =
2/(1+w^2)
Aufgabe 190 (Fourier-T.) Berechnen Sie zunchst per Hand und dann mit Matlab die Fourier-Transformierte von
2/(1+w )
exp(abs(x))
1
0.9
1.8
0.8
1.6
0.7
1.4
0.6
1.2
0.5
0.8
0.3
0.6
0.2
f (x) = e|x| .
0.4
0.4
0.1
2
,
1 + 2
e|x| eix dx +
e|x| eix dx
ex eix dx +
0
ex eix dx
0
e
0
x(1i)
er-Transformierte f. . . . . . . . . . . . . . . . . . . . .
e|x| eix dx
0
4
denn
f() =
0.2
dx +
e x(1+i) dx
0
ex(1+i) ex(1i)
+
= lim
r 1 i
1 + i
1
1
=
1 i 1 + i
2
=
.
1 + 2
x=r
x=0
67.21. Laplace-Transformation
Die Laplace-Transformation kann symbolisch
mit der Funktion laplace berechnet werden.
Siehe Aufgabe 177 fr ein Beispiel.
Aufgabe 191 (Laplace-T.) Berechnen Sie die
Laplace-Transformation von der Funktion
f (t) = eat , t R, wobei a ein reeller Parameter ist.
Lsung: Es ist
1
2
198
>> syms a t
laplace(exp(-a*t))
Copyright c G. Gramlich
ans =
1/(a+s)
>> digits
Digits = 32
4
5
6
7
>> vpa(pi)
ans =
3.1415926535897932384626433832795
>> digits(50);
>> x = vpa(sym(exp(1)))
x =
2.71828182845904523536028747135266
24977572470937000
>> vpa(log(x))
ans =
1.00000000000000000000000000000000
00000000000000000
Vorsicht Falle:
199
1
2
3
4
5
6
>> x = vpa(sym(exp(1)))
x =
2.71828182845904553488480814849026
50117874145507813
>> vpa(log(x))
ans =
Copyright c G. Gramlich
7
8
1.00000000000000011018891328384949
58218182413442295
Wir haben auf die Hochkomma in exp(1) verzichtet. Das Resultat ist, dass Matlab exp(1)
mit doppelter Genauigkeit berechnet, diese 16stellige Dezimalzahl in eine 50-stellige Dezimalzahl transformiert (34 Stellen sind somit bedeutungslos) und dann den Logarithmus
anwendet, was zu einem ungenauen Ergebnis
fhrt. Erst die Hochkomma sorgen dafr, dass
der Matlab-Interpreter bergangen wird, damit Maple den Ausdruck auswerten kann.
(c) Vergleichen Sie nun die Konvergenzgeschwindigkeiten der beiden Folgen, die
fr n = 0, 1, 2, . . . durch sn = n 1/k!
k=0
und an = (1 + 1/n)n gegeben sind, indem
Sie die folgende Tabelle vervollstndigen.
n
sn
an
2 2.5000000000 2.2500000000
4 2.7083333333 2.4414062500
6
8
Aufgabe 192 (Symbolisches Rechnen) Be10
rechnen Sie auf 50 Stellen genau!
12
Lsung: Sowohl
14
1
>> digits(50)
16
2
>> vpa(pi)
18
20
als auch
Lsung:
1
>> vpa pi 50
liefern
2
1
2
3
ans =
3.14159265358979323846264338327
95028841971693993751
.......................................
n=0
1
1
= lim
n! n k=0 k!
>> symsum(1/sym(n!),0,inf)
ans =
exp(1)
>> limit((1+1/n)^n,inf)
ans =
exp(1)
als auch
1
lim (1 + )n
n
n
ergeben die Eulersche Zahl e = 2.71 . . ..
3
4
200
>> digits(11)
>> e = vpa(exp(1))
e =
2.7182818285
Copyright c G. Gramlich
>>
>>
>>
>>
n = 2:2:20;
an = (1+1./n).^n;
for i=1:10
sn(i,1) = symsum(1/sym(k!
),0,n(i));
>> end
Die Extended Symbolic Math Toolbox besitzt alle Funktionalitten der Standard
Symbolic Math Toolbox, und darber hinaus besteht die Mglichkeit, die MapleProgrammierstrukturen, die Ein- und Ausgabe Mglichkeiten als auch Funktionen
und Kommandos spezieller Maple-Pakete
zu nutzen.
>> digits(11)
>> [vpa(sn) vpa(an)]
ans =
[ 2.5000000000, 2.2500000000]
[ 2.7083333333, 2.4414062500]
[ 2.7180555556, 2.5216263717]
[ 2.7182787698, 2.5657845140]
[ 2.7182818011, 2.5937424601]
[ 2.7182818283, 2.6130352902]
[ 2.7182818285, 2.6271515563]
[ 2.7182818285, 2.6379284974]
[ 2.7182818285, 2.6464258211]
[ 2.7182818285, 2.6532977051]
Wenn Sie sich nun nher fr ein Paket interessieren, zum Beispiel fr das Paket mit
den kombinatorischen Funktionen, so hilft der
67.24. berblick ber alle symbolischen Aufruf mhelp combinat weiter. Dieser lisFunktionen
tet dann alle relevanten Funktionen auf. Mit
maple(with(combinat)) laden Sie das
Mit doc symbolic (help symbolic) erhal- Paket und mit mhelp binomial erhalten Sie
ten Sie einen berblick ber alle Funktionen zum Beispiel weitere Informationen ber die
der Symbolic Math Toolbox.
Funktion binomial, etwa wie man sie aufzurufen hat.
.......................................
Das Paket LinearAlgebra enthlt die Funktion Basis. Mit mhelp Basis erhalten Sie die
Meldung
1
2
Die Standard Symbolic Math Toolbox verfgt ber annhernd 50 eingebaute Mat-
201
3
4
Copyright c G. Gramlich
2
3
4
5
6
7
8
9
10
11
Mit der Optimization Toolbox kann man Optimierungsaufgaben lsen, insbesondere solche,
wo Nebenbedingungen (Restriktionen) auftreten. Diese sind in der Praxis auch meist vorhanden. Sie treten linear als auch nichtlinear auf. Fr folgende Optimierungsmodelle ste1
function F = MyFunction(x)
hen Matlab-Funktionen zur Verfgung: Linea2
F = [16*x(1)^4+16*x(2)^4+x(3)
re Optimierung, Quadratische Optimierung,
^4-16;
Minmax Optimierung, Mehrzielige Optimie3
x(1)^2+x(2)^2+x(3)^3-3;
4
x(1)^3-x(2)];
rung, Semiinnite Optimierung und Nichtlineare Optimierung. Siehe doc optim (help
Dann rufen wir den Lser fsolve auf und er- optim) fr eine komplette bersicht ber alle in Matlab lsbaren Optimierungsmodelle.
halten eine Nullstelle des Systems:
202
Copyright c G. Gramlich
Zu beachten ist, dass jedes Optimierungs- Das erste Argument c der Funktion linprog
problem als Minimierungsproblem formuliert beinhaltet die Koezienten der Zielfunktion.
werden muss.
Die Matrix A beinhaltet die Koezienten der
linearen Ungleichungen, wobei die Koezienten der rechten Seiten der Ungleichungen im
69.1. Lineare Optimierung
Vektor b stehen. Schlielich werden die unteren Grenzen der Variablen im Vektor u gespeiAn einem einfachen Beispiel zur Linearen Opchert und als sechstes Argument in linprog
timierung zeigen wir, wie man unter Matlab
bergeben. Das vierte und fnfte Argument der
solche Probleme lst. Als Beispiel betrachten
Funktion linprog ist fr eventuell vorkomwir die Optimierungsaufgabe (u.d.N. steht als
mende lineare Gleichungen vorgesehen.
Abkrzung fr unter den Nebenbedingungen)
Allgemein gilt: Mit der Funktion linprog
knnen lineare Optimierungsaufgaben der
Minimiere
2x1 3x2
2
Form
(x1 , x2 ) R
x1 + 2x2 10
Minimiere
cT x
x1 + x2 6
u.d.N.
x Rn
x1 0, x2 0
Ax b
Bx = d
u.d.N.
Mit den Anweisungen
lxu
1
2
c = [-2;-3]; A = [1 2; 1 1];
b = [10;6]; l = [0;0];
[x,fWert] = linprog(c,A,b,B,d,l,u)
[x,fWert] = linprog(c,A,b,[],[],l)
erfolgreich war, ndet man in der Variablen x den berechneten Lsungsvektor und in
erhalten wir die Ausgabe
der Variablen fWert den zugehrigen Wert
1
Optimization terminated success...
der Zielfunktion cT x =: f (x). Wie bei al2
x =
len anderen Matlab-Funktionen entsprechen3
2.0000
den Typs knnen Argumente weggelassen wer4
4.0000
den, wenn nicht alle Formen der Nebenbe5
fWert =
6
-16.0000
dingungen auftreten. Damit aber die Reihenfolge erhalten bleibt, mssen gegebenenfalls
= (x , x ) = (2, 4) die eckige Klammern [] hierfr geschrieben werDas bedeutet, dass x
1 2
Minimalstelle des linearen Optimierungspro- den. Ferner knnen Optionen gesetzt werblems ist, und (2)(2) (3)(4) = 16 der Ziel- den und weitere Ausgabeargumente angegeben werden. Fr weitere Hinweise verweisen
funktionswert, das heit das Minimum ist.
203
Copyright c G. Gramlich
9
10
11
3.0000
fx =
-7.0000
x1 x2
x1 + 3x2 13
3x1 + x2 15
x1 + x2 3
x1 0, x2 0
0
0
c = [-1 -1];
A = [1 3; 3 1; -1 1];
b = [13; 15; 3];
lb = [0; 0];
[x,fx] = linprog(c,A,b,[],[],lb)
Optimization terminated.
x =
4.0000
Minimiere
x Rn
u.d.N.
1 T
2 x Hx
+ cT x
Ax b
Bx = d
lxu
204
Copyright c G. Gramlich
[x,qWert] = quadprog(H,c,A,b,B,d,l
,u)
1
2
H
A
b
l
=
=
=
=
9
10
Minimiere
x R2
u.d.N.
11
q(x1 , x2 )
x1 + x2 200
1.25x1 + 0.75x2 200
x2 150
x1 0, x2 0.
A=
4 8
4
, c=
,
8 8
5
1
1
200
150
0
1
150.0000
qWert =
-155950
Maximiere
x R2
u.d.N.
x1 x2
x1 + x2 = 20
x1 0, x2 0
205
Copyright c G. Gramlich
5
6
7
8
14
15
16
1.2000
fx =
-7.2000
.......................................
Aufgabe 197 (Quadratische Optimierung) Lsen Sie in Matlab die Quadratische OptimieDas Rechteck mit dem grten Flcheninhalt rungsaufgabe (Skript: Optimierung)
ist also das Quadrat mit der Seitenlnge 10.
Minimiere
q(x, y) = x2 + x
(x, y) R2
Aufgabe 196 (Quadratische Optimierung) Lsen Sie in Matlab die folgende quadratische Erklren Sie!
Lsung: Aus der Theorie (Skript: OptimieOptimierungsaufgabe
rung) wissen wir, dass es unendlich viele LMinimiere
2 2x x + 2x2 2x 6x sungen gibt. Eine davon berechnet uns Matlab:
x1
1 2
1
2
2
(x1 , x2 ) R2
1
>> H = [2 0; 0 0]; b = [1; 0];
x1 + x2 2
2
>> [x,q] = quadprog(H,b)
x1 2x2 2
u. d. N.
3
Warning: Large-scale method does
x1 0, x2 0
not currently solve this
9
>>
>>
>>
>>
>>
>>
H = [2 -2; -2 4];
f = [-2; -6];
A = [1 1; -1 2];
b = [2; 2];
lb = [0; 0];
[x,fx] = quadprog(H,f,A,b
,[],[],lb)
Warning: Large-scale method does
not currently solve this
problem formulation,
switching to medium-scale method.
9
10
11
12
13
> In C:\MATLAB6p5\toolbox\optim\
quadprog.m at line 213
Optimization terminated
successfully.
x =
0.8000
4
5
6
7
8
9
10
11
problem formulation,
switching to medium-scale method.
> In quadprog at 242
Optimization terminated.
x =
-0.5000
0
q =
-0.2500
.......................................
Aufgabe 198 (Quadratische Optimierung) Lsen Sie in Matlab die Quadratische Optimierungsaufgabe (Skript: Optimierung)
Minimiere
(x, y) R2
q(x, y) = x2 + x + y
Erklren Sie!
Lsung: Aus der Theorie (Skript: Optimie-
206
Copyright c G. Gramlich
7
8
9
1
2
3
4
5
6
8
9
10
11
12
13
10
11
x =
-0.5000
-0.5000
q =
-0.5000
.......................................
A = eye(3); b = zeros(3,1);
C = [1 2 4]; d = [7];
[x,q] = lsqlin(A,b,[],[],C,d)
Minimiere
(x, y) R2
q(x, y) = x2 + y2 + x + y
q =
2.3333
Erklren Sie!
des mathematischen Modells
Lsung: Aus det Theorie (Skript: OptimieMinimiere
2
2
2
rung) wissen wir, dass es genau eine Lsung
q(x) = x1 + x2 + x3
x R3
gibt. Hier die Besttigung in Matlab.
u. d. N.
x1 + 2x2 + 4x3 = 7
1
2
3
4
5
6
207
Copyright c G. Gramlich
der Lsungsvektor x nur nichtnegative Koordi- und deniert sind. Wie bei entsprechennanten hat. Das mathematische Optimierungs- den anderen Matlab-Funktionen knnen Armodell ist also von der Form
gumente weggelassen werden, wenn nicht alle
Formen der Nebenbedingungen auftreten. Um
Minimiere
Ax b 2
aber die Reihenfolge zu gewhrleisten, mssen
2
x Rn
gegebenenfalls leere Klammern [] eingefgt
u.d.N.
xo
werden. Auch knnen Optionen gesetzt werden und weitere Ausgabeargumente angegeben
69.4. Nichtlineare Optimierung
werden. Fr weitere Hinweise verweisen wir
wieder auf die Online-Hilfen.
Mit der Funktion fmincon aus der Optimization Toolbox kann man nichtlineare Optimie- Als Beispiel betrachten wir die Aufgabe
rungsaufgaben mit (nichtlinearen) GleichungsMinimiere
2
2
und Ungleichungsnebenbedingungen lsen.
e x1 (4x1 + 2x2 + 4x1 x2 + 2x2 + 1)
x R2
Die Funktion fmincon ist eine Implementiex1 x2 x1 x2 1.5
rung des SQP-Verfahrens mit BFGS-Update
u.d.N.
x1 x2 10.
(Quasi-Newton Methode). Gegeben sind Funktionen f , g und h, Matrizen A und B, sowie die Es handelt sich um eine nichtlineare OptimieVektoren b, d, l und u. Gesucht ist ein Vektor rungsaufgabe, in der sowohl die Zielfunktix, der die folgende Aufgabe lst:
on als auch die Nebenbedingungen nichtlineMinimiere
x Rn
f (x)
u.d.N.
g(x) 0
h(x) = 0
Ax b
Bx = d
lxu
ar sind. Lineare Nebenbedingungen und Boxbeschrnkungen treten keine auf. Auch gibt es
keine Gleichungsrestriktionen. Die Zielfunktion f ist durch
2
2
f (x1 , x2 ) = e x1 (4x1 + 2x2 + 4x1 x2 + 2x2 + 1)
g(x1 , x2 ) =
[x,fWert] = fmincon(@Zielf,x0,A,b,
B,d,l,u,@Nebenb,Options)
x1 x2 x1 x2 + 1.5
x1 x2 10
erfolgreich war, nden Sie in der Variablen x gegeben. Die Zielfunktion spezizieren wir im
den Lsungsvektor x und in fWert den da- Function-File Zielf.m.
zugehrigen Wert der Zielfunktion f (x ). Die 1 function f = Zielf(x)
Argumente Zielf und Nebenb im Funktions- 2 %-Zielfunktion.
aufruf sind Matlab-Funktionsnamen in denen 3 f = exp(x(1))*(4*x(1)^2+2*x(2)
^2+4*x(1)*x(2)+2*x(2)+1);
die Zielfunktion f bzw. die Nebenbedingungen
208
Copyright c G. Gramlich
Bisher haben wir weder Ableitungen der Zielfunktion noch Nebenbedingungen mitberck5
sichtigt bzw. als Argumente im FunktionsaufBevor wir die Funktion fmincon aufrufen, de- ruf bergeben. Die Funktion fmincon berechnieren wir den Startvektor x0 und setzen die net in diesem Fall die Ableitungen numerisch
ber nite Dierenzen. Alternativ dazu knOption (LargeScale,off).
nen die Ableitungen analytisch berechnet und
1
>> x0 = [-1,1];
dann bergeben werden. Typischerweise kann
2
>> options = optimset(LargeScale
in solch einem Fall das Problem genauer und
,off);
ezienter gelst werden. Dazu erweitern wir
3
>> [x,fWert] = fmincon(@Zielf,x0
den File Zielf.m wie folgt:
,[],[],[],[],[],[],@Nebenb,
4
options)
1
2
4
5
6
7
8
9
10
Optimization terminated
successfully:
Search direction less than 2*
options.TolX and
maximum constraint violation is
less than options.TolCon
Active Constraints:
1
2
x =
-9.5474 1.0474
fWert =
0.0236
4
5
>> g = Nebenb(x)
g =
1.0e-015 *
-0.8882
4
5
6
7
8
209
Copyright c G. Gramlich
6
7
8
9
10
11
12
5
6
8
9
10
11
12
13
2
3
4
Minimiere
x R2
u.d.N.
(x1
2)2
+ (x2
1)2
2
x1 x2 0
x1 + x2 2.
210
Minimiere
(x, y) R2
u. d. N.
y
PA + PB = 8
Copyright c G. Gramlich
mit PA =
(x 0)2 + (y 5)2 und PB = mit zi = (x0 xi )2 + (y0 yi )2 .
2 + (y 2)2 .
Lsung: Mit
(x 3)
Lsung: Die Function
1
1
2
3
5
6
7
8
9
10
11
12
13
function NLinOpt
x0 = [-1,1];
options = optimset(LargeScale,
off);
[x,fWert] = fmincon(@Zielf,x0
,[],[],[],[],[],[],@Nebenb,
options)
%-Zielfunktion.
function f = Zielf(x)
f = x(2);
%-Nebenbedingungen
function [g,h] = Nebenb(x)
%-Ungleichungen.
g = [];
%-Gleichungen.
h = sqrt((x(1)-0).^2+(x(2)-5).^2)+
sqrt((x(1)-3).^2+(x(2)-2).^2)
-8;
2
3
4
8
9
10
11
12
13
x =
2.1068 -0.2081
fWert =
-0.2081
3
4
14
15
16
17
18
Aufgabe 202 (fmincon) Finden Sie die Lsung des nichtlinearen Optimierungsmodells
19
function NLinOpt
clear all; close all, clc;
x0 = ones(10,1);
options = optimset(LargeScale,
off);
lb = [-inf,-inf,2,6,-inf,-inf
,-3,-2,-inf,-inf];
ub = [inf,inf,4,8,inf,inf,-1,2,inf
,inf];
[x,fWert] = fmincon(@Zielf,x0
,[],[],[],[],lb,ub,@Nebenb,
options)
%-Zielfunktion.
function f = Zielf(x)
f = sqrt((x(1)-x(9))^2+(x(5)-x(10)
)^2)+...
sqrt((x(2)-x(9))^2+(x(6)-x(10))
^2)+...
sqrt((x(3)-x(9))^2+(x(7)-x(10))
^2)+...
sqrt((x(4)-x(9))^2+(x(8)-x(10))
^2);
%-Nebenbedingungen
function [g,h] = Nebenb(x)
%-Ungleichungen.
g = [(x(1)-1)^2+(x(5)-4)^2-4;(x(2)
-9)^2+(x(6)-5)^2-1];
%-Gleichungen.
h = [];
z1 + z2 + z3 + z4
u.d.N.
(x1
+ (y1
2
2 + (y 5)2 1
(x2 9)
2
2 x3 4
3 y3 1
6 x4 8
2 y4 2
1)2
4)2
3
4
5
6
7
8
211
...
x =
2.8569
8.2930
4.0000
6.0000
3.2571
4.2928
Copyright c G. Gramlich
9
10
11
12
13
14
-1.0000
2.0000
6.0000
2.0000
fWert =
10.2334
4
5
fWert =
-1.0000
6
7
8
9
10
11
12
13
14
1
2
3
4
6
7
8
9
10
11
12
13
14
function NLinOpt
clear all; close all, clc;
x0 = [-3,-2];
options = optimset(LargeScale,
off,Display,iter);
[x,fWert] = fmincon(@Zielf,x0
,[],[],[],[],[],[],@Nebenb,
options)
%-Zielfunktion.
function f = Zielf(x)
f = x(1);
%-Nebenbedingungen
function [g,h] = Nebenb(x)
%-Ungleichungen.
g = [-(x(1)+1)^2-x(2)^2+1;x(1)^2+x
(2)^2-2];
%-Gleichungen.
h = [];
...
x =
0.0000 -1.0000
212
...
x =
Copyright c G. Gramlich
-1.0000 -1.0000
fWert =
-1
Basislsung: x = A\b.
Lsung kleinster Lnge: x = pinv(A)*b.
Mit doc optim (help optim) erhalten Sie Lineare Ausgleichsprobleme mit polynomiaeinen berblick ber alle Funktionen der Op- ler Modellfunktion knnen alternativ mit der
Funktion polyfit und interaktiv aus jeder Fitimization Toolbox.
gure unter Tools Basic Fitting gelst werden.
Siehe auch Abschnitt 55.
Lineare Ausgleichsaufgaben mit linearen Nebenbedingungen werden in Abschnitt 69.3 beLineare Ausgleichsaufgaben knnen mit Mat- handelt.
lab auf mehrere Arten gelst werden. Zum Nichtlineare Ausgleichsaufgaben werden in
Einem ist da der \-Operator (Backslash- Abschnitt 71 besprochen.
Operator), siehe Abschnitt 49.4 und Abschnitt
50.1.2. Zum Anderen gibt es die Funktionen
70.1. Weitere Aufgaben zur linearen
pinv und inv.
Liegt eine berbestimmte lineare Ausgleichsaufgabe Ax b vor, so gibt es stets eine Lsung. In Matlab knnen wir zur Berechnung
einer Lsung den Backslash-Operator \ verwenden. Ist die Ausgleichsaufgabe eindeutig
lsbar, weil Rang( A) = n ist, so bekommt man
mit der Anweisung A\b diese eindeutige Lsung. Ist Rang( A) < n, so liefert A\b eine Basislsung. In jedem Fall bekommt man mit A\b
eine Lsung der Ausgleichsaufgabe.
Ausgleichsrechnung
Aufgabe 205 Berechnen Sie die Nherungslsung (im Sinne der linearen Ausgleichsrechnung) von Ax = b und den orthogonalen Projektionsvektor p von b auf den Spaltenraum
von A des Systems
1 1
7
x1
1 1
= 0 .
x2
1 2
7
213
Copyright c G. Gramlich
Lsungen.
1
2
3
4
5
6
7
8
9
10
11
>> A = [1 1; -1 1; -1 2];
>> b = [7; 0 ; -7];
>> x = A\b
x =
5.0000
0.5000
>> p = A*x
p =
5.5000
-4.5000
-4.0000
4.8
4.6
4.4
4.2
3.8
0
0
3.825
0.2
4.528
0.4
4.746
0.6
4.873
0.8
4.865
0.2
0.4
0.6
0.8
sollen im Sinne der linearen Ausgleichsrech- Lineare Ausgleichsprobleme mit polynomianung an eine Funktion der Form
ler Modellfunktion knnen alternativ mit der
Funktion polyfit und interaktiv aus jeder Fif (t, x) = x1 + x2 t + x3 cos(t)
gure unter Tools Basic Fitting gelst werden.
angepasst werden. Zeichnen Sie die Datenpunkte und die Ausgleichsfunktion, nachdem Aufgabe 207 (Basislsung und Lsung kleinster Lnge) Zeigen Sie, dass die ErsatzaufgaSie die Lsung berechnet haben.
be des berbestimmten linearen GleichungsLsung:
systems
1
2
3
4
5
6
7
8
9
10
11
12
13
4x1 8x2 = 12
3x1 6x2 =
2x1 + 4x2 = 6.
unendlich viele Lsungen hat und berechnen
Sie die Lsung kleinster Lnge sowie eine Basislsung (vgl. Aufgabe 1.9 in [5]).
Lsung: Zunchst ist
1
2
3
214
>> rank(A)
ans =
1
Copyright c G. Gramlich
und damit gibt es unendlich viele Lsungen. Lsung: Da A rangdefekt ist, gibt es unendlich viele Lsungen. Die Lsung mit kleinster
Die Lsung kleinster Lnge ist
Lnge erhlt man durch pinv(A)*b. Das Er1
>> x = pinv(A)*b
gebnis ist:
2
x =
3
4
0.6000
-1.2000
1
2
3
>> x = A\b
x =
0
-1.5000
>> pinv(A)*b
ans =
2.0000e-001
4.0000e-001
Um alle Lsungen angeben zu knnen, bentigt man eine Basis des Nullraumes von A. Eine solche erhlt man durch null(A). Man bekommt
1
2
3
4
>> null(A)
ans =
-8.9443e-001
4.4721e-001
b durch
2x1 3x2 = 1
x1 + x2 = 3
0x1 + 0x2 = 2
2x1 3x2 = 1
0x1 + 0x2 = 2
Lsung: Da die Matrix A vollen Rang hat, ergibt sich in allen drei Fllen die eindeutige L
sung x = (2, 1).
Lsung: In Matlab gilt:
Aufgabe 209 (Rangdefekt) Bestimmen Sie alle
Lsungen von Ax b mit
1
2
3
A=
1
2
2
4
1 2
und
3
b = 2 .
1
4
5
6
215
Copyright c G. Gramlich
Beachten Sie, dass Sie das gleiche Ergebnis Aufgabe 212 Berechnen Sie per Hand ber
mit
die Normalgleichungen die Ausgleichslsung
2
1
x1 + x2 = 3
2x1 3x2 = 1
0x1 + 0x2 = 2
Aufgabe 211 Berechnen Sie die Nherungsl- (c) Verizieren Sie r Null(AT ).
sung (im Sinne der linearen Ausgleichsrechnung) von Ax = b und den orthogonalen Pro- Lsung:
jektionsvektor p von b auf den Spaltenraum (a) Die eindeutige Lsung ist:
von A des Systems
1
>> A = sym([1 1;2 -3;0 0]);
2
>> b = sym([3;1;2]);
1 1
7
3
>> xbar = inv(A*A)*A*b
x1
1 1
= 0 .
4
xbar = [ 2] [ 1]
x2
1 2
7
(b) Die Projektion auf den Bildraum von A ist
A
x
b
dann:
1
>> A = [1 1; -1 1; -1 2];
>> b = [7; 0 ; -7];
>> x = A\b
x =
5.0000
0.5000
>> p = A*x
p =
5.5000
-4.5000
-4.0000
>> y = A*xbar
y = [ 3] [ 1] [ 0]
>> r = A*xbar-b
r = [ 0] [ 0] [ -2]
>> A*r
ans = [ 0] [ 0]
216
Copyright c G. Gramlich
2
3
4
5
b
A
x
x
6
7
0
0
2
6
5
7.9
7
8.5
9
12
= [0,6,7.9,8.5,12,21.5,35];
= [ones(7,1),t];
= A\b
=
0.6831
1.4353
t
b
A
x
x
=
=
=
=
=
x = 3 + 2 cos(t)
[0,2,5,7,9,13,24];
[0,6,7.9,8.5,12,21.5,35];
[ones(7,1),t,t.^2];
A\b
y = 1 + 2 sin(t)
mit t [0, 2]. Verwenden Sie Matlab und berechnen Sie die Punkte auf
7
dem Kreis fr die dreizehn Parameterwerte
8
t = 0.0, 0.5, 1.0, . . . , 6.0. Stren Sie diese
Punkte nun mit xs=x+0.1*rand(13,1) und
Die quadratische Ausgleichsfunktion ist daher
ys=y+rand(13,1); das heit mit Zufallszah2 (t) = x1 +x2 t+x3 t2 0.8977+1.3695t+0.0027t2
len, die gleichmig zwischen 0 und 1 verteilt
sind. Berechnen Sie nun den Kreis, der die geSomit gilt 1 (5) = 7.8596 und 2 (5) = 7.8127.
strten Punkte bestmglichst im Sinne kleinsDie Werte der beiden Modellfunktionen unterter Quadrate ausgleicht. Zeichnen Sie anschliescheiden sich also erst ab der zweiten Nachend die gestrten Punkte und den optimalen
kommastelle.
Kreis.
Aufgabe 214 Bestimmen Sie die Gleichung Lsung: Das mathematische Modell ist das
der Ausgleichsgeraden fr den funktionalen folgende berbestimmte lineare Gleichungs6
0.8977
1.3695
0.0027
217
Copyright c G. Gramlich
system:
3.5
3
1 0 cos(t1 )
xs1
xs
1 0 cos(t2 )
2
.
. .
.
.
. .
.
. .
.
c1
1 0 cos(t13 )
c = xs13
2
0 1 sin(t1 )
r ys1
ys
0 1 sin(t2 )
.
. .
.
.
. .
.
. .
.
0 1 sin(t13 )
ys13
2.5
2
1.5
1
0.5
0
0.5
1
2
3
>>
>>
>>
>>
>>
>>
t = [0:0.5:6];
x = 3+2*cos(t);
y = 1+2*sin(t);
xs = x+rand(13,1);
ys = y+rand(13,1);
A = [ones(13,1) zeros(13,1) cos
(t); zeros(13,1) ones(13,1) sin
(t)];
>> b = [xs; ys];
>> k = A\b
k =
3.4520
1.4948
1.9886
71. Nichtlineare
Ausgleichsaufgaben
1
2
>> tt = [0:0.1:6.3];
>> plot( k(1)+k(3)*cos(tt),k(2)+k
(3)*sin(tt),xs,ys,xr)
>> axis equal
t
y
218
0.0
2.0
1.0
0.7
2.0
0.3
3.0
0.1
Copyright c G. Gramlich
(t, x) = x1 e x2 t .
1
2
tt = linspace(0,3);
ff = x(1)*exp(x(2).*tt);
plot(tt,ff,t,y,ro), grid,
t = [0:3];
y = [2 0.7 0.3 0.1];
fxt = @(x,t) x(1)*exp(x(2)*t);
x0 = [1,0];
[x,resnorm]=lsqcurvefit(fxt,x0,t,y
)
Optimization terminated
successfully:
Relative function value changing
by less than OPTIONS.TolFun
x =
1.9950 -1.0095
resnorm =
0.0020
72. Simulink
219
Copyright c G. Gramlich
220
Copyright c G. Gramlich
also geformt. Da Signale eine bestimmte Fluss- mit y(t) = F(t) und x(t) = f (t) ist.
richtung haben, sind Blockdiagramme gerich- Lsung: Nennen wir den Ausgang des Integratorblocks y(t), so hat man zwischen Eintete Graphen.
gangssignal x(t) und Ausgangssignal y(t) die
Beziehung
y(t) =
x() d + y(0).
Bevor wir mit dem Blockdiagramm jedoch ei0
ne Simulation durchfhren knnen, sind noch
weitere Arbeitsschritte durchzufhren:
Durch Dierenziation dieser Gleichung erhlt
man y (t) = x(t). . . . . . . . . . . . . . . . . . . . . . . . .
Parametrierung der verwendeten Blcke,
Festlegung des numerischen Lsungsverfahrens (Integrator),
72.4.1. Konstruktion des Blockdiagramms
Angabe der Anfangswerte, Simulationsdauer usw., also allgemeine Parameter der Si- Wir nen ein neues Fenster und speichern
es unter dem Namen ErstesBeispiel.mdl
mulation,
(mdl steht abkrzend fr model) ab. In das lee Dokumentation.
re Fenster ziehen wir aus der Block Library mit
Hilfe der Maus den Block Sine Wave; dieser
bendet sich in der Bibliothek Sources. Glei72.4. Ein erstes Beispiel
chermaen verfahren wir mit den Blcken InWir konstruieren uns nun ein einfaches Bei- tegrator (Continuouse), Mux (Signal Routing)
spiel (Modell) eines Blockdiadramms unter Si- und Scope (Sinks). Jetzt werden die Blcke
mulink, fhren die zur Simulation notwendi- verbunden. Der Ausgang von Sine Wave mit
gen Arbeitsschritte durch und machen mit die- dem Eingang von Integrator, der Ausgang von
Integrator mit einem Eingang von Mux und
sem Modell ein paar Simulationen.
Es soll ein Quellsignal, die Sinusfunktion der Ausgang von Mux mit dem Eingang von
f (t) = 2 sin(t), t R, (Amplitudenwert 2) inte- Scope. Schlielich verbinden wir den zweigriert werden, und samt ihrer Integralfunktion ten Eingang von Mux mit der Verbindungslit
F(t) = 2 0 sin() d = 2 cos(t)+2 von [0, 15] nie (Signalkante) zwischen Sine Wave und Integrator. Hierzu beginnt man mit dem Eingang
grasch ausgegeben werden.
von Mux. Bei einer Verbindung um die Ecke
Aufgabe 217 berlegen Sie, warum das Er- muss die Maustaste zwischendurch losgelasgebnis der Simulation die Lsung der Anfangs- sen werden. Man beachte auch, dass die Verwertaufgabe
bindung zu einer Signalkante (wie hier zwischen Sine Wave und Integrator) erst dann voll
y (t) = x(t)
221
Copyright c G. Gramlich
die Dokumentation (Beschriftung, Hervorhebung durch Farbe usw.). Durch einen Doppelklick in Modellfenster erscheint ein blickender Cursor. Hier kann frei Text eingetragen werden, der ber den Menpunkt FormatFont noch nach Geschmack im Erscheinungsbild verndert werden kann.
Der Block Mux hat zwei Eingnge, was in un- Das Ergbenis all unserer Bemhungen sehen
serem Beispiel gerade passend ist. Hier ist also Sie in Abbildung 81.
nichts zu tun. Prima! Die Zahl der Eingnge
kann jedoch im Allgemeinen eingestellt werden.
Mein erstes Simulink Modell
Der Integratorblock (Integrator) verlangt unter
anderem den Anfangswert der Integration. Fr
1
s
das Beispiel soll der Wert auf der voreingestellSine Wave
Integrator
ten Null stehen bleiben. Die brigen ParameScope
ter betreen spezielle Formen von Integratoren und bleiben fr unser Beispiel auf den voreingestellten Werten. Der Eintrag 1/s im InteAbbildung 81: Erstes Beispiel
gratorblock deutet an, dass es sich um die Laplace-Transformierte der Integration handelt.
Die meisten (linearen) Funktionsblcke sind
mit der Laplace-Transformierten bzw. dem Das eingestellte numerische Lsungsverfahren
diskreten Pendant dazu, der Z-Transformation, ist ode45 (unten im Fenster ErstesBeispiel).
gekennzeichnet.
Wir ndern daran nichts. Wenn Sie doch eine
Der Scope-Block sollte auch parametriert wer- nderung durchfhren wollen, dann unter Siden. Ein Doppelklick auf den Block und ein mulation und weiter unter Conguration ParaKlick aus das Parameters-Icon net ein Kar- meters. Es wrde an dieser Stelle zu weit fhteifenster in dem Parameter eingestellt wer- ren, im Einzelnen auf die numerischen Integraden knnen. Interessant ist die Mglichkeit, tionsverfahren einzugehen. Eine tiefe Diskusdas angezeigte Signal direkt in einer Matlab- sion der Verfahren wrde den Rahmen dieser
Variablen speichern zu lassen. Man achte dar- Einfhrung bei weitem sprengen. Es sei jedoch
auf, an dieser Stelle auf das Array-Format um- bemerkt, dass die modernsten mathematischen
zustellen, wenn man von dieser Mglichkeit Verfahren zum Einsatz kommen [29, 30], siehe
des Datenexports in den Matlab-Workspace auch Abschnitt 61.
Gebrauch machen will.
Den Wert der Simulationsdauer setzen wir von
Den letzten Schli gibt dem Ganzen nun noch 10 auf 15 (zweite Zeile von oben rechts).
222
Copyright c G. Gramlich
72.4.3. Simulation
wertaufgabe
ge. Drcken Sie einfach auf das Dreieckssymbol in der zweite Zeile des Modellfensters. Im
Scope-Block bauen sich dann das in Abbildung die wir bereits in Abschnitt 62.1 numerisch und
82 dargestellte Sinussignal f und die zugeh- in Abschnitt 67 symbolisch behandelt haben.
Die Lsung ist
y(t) = et cos(5t).
Als ersten Schritt lst man die gegebene Dierenzialgleichung nach der hchsten Ableitung
auf. In diesem Fall ist diese eins und die Gleichung braucht nicht umgeformt zu werden
y (t) = y(t) 5et sin(5t).
72.5. Beispiele
In diesem Absschnitt betrachten wir nun weitere Simulink-Modelle. Hierbei handelt es sich
um das Lsen von Dierenzial- und Dierenzengleichungen unter Simulink, oder anders
gesagt, um die Simulation dynamischer Systeme.
Als erstes Beispiel whlen wir die Anfangs-
223
Copyright c G. Gramlich
10
1
s
Constant
Scope
y(t)
Integrator
Scope
1
s
Integrator
224
Copyright c G. Gramlich
und 0 t 20.
Lsung: Die Abbildung
y_t
86
zeigt
y_t1
z
Unit Delay
72.6. Vereinfachungen
Scope
K
Gain
225
Copyright c G. Gramlich
Mit Hilfe verschiedenster Blcke aus der Bibliothek Sinks ist es mglich mit Matlab zu
kommunizieren. Als Beispiele seien die Blcke Scope und To Workspace erwhnt.
Rechnet man mit einer Matrix, so geht Matlab davon aus, dass diese dicht besetzt ist, das
heit, nur wenige Matrixelemente sind Null.
Sind in einer Matrix jedoch viele Elemente
Null (zum Beispiel 95% oder mehr) so spricht
man von einer Sparsematrix oder von einer
dnn besetzten Matrix. Liegt solch eine Sparsematrix vor und mchte man Matrixoperationen mit dieser durchfhren, so kann man meistens Gleitpunktoperationen auf den Nullelementen einsparen. Darber hinaus muss man
nicht die ganze Matrix abspeichern, sondern es
gengt, nur die von Null verschiedenen Elemente abzulegen. Trgt man diesen Sachverhalten Rechnung, so lsst sich die Ezienz von
Algorithmen in bezug auf Speicher- und Zeitaufwand reduzieren. Damit ist es mglich, grere Probleme zu lsen, die sonst nicht lsbar
wren. Matlab kann die dnne Besetztheit einer Matrix ausnutzen.
>> F = -triu(tril(ones(6),1),-1)
+3*eye(6)
226
1
2
F =
2
-1
Copyright c G. Gramlich
3
4
5
6
7
-1
0
0
0
0
2
-1
0
0
0
-1
2
-1
0
0
0
-1
2
-1
0
0
0
-1
2
-1
sich zum Beispiel eine dnn besetzte Bandmatrix erzeugen. Obige Bandmatrix F kann somit
direkt wie folgt erstellt werden:
0
0
0
-1
2
1
2
3
S =
(1,1)
(2,1)
(1,2)
(2,2)
(3,2)
(2,3)
(3,3)
(4,3)
(3,4)
(4,4)
(5,4)
(4,5)
(5,5)
(6,5)
(5,6)
(6,6)
>> m = 6; n = 6;
>> e = ones(n,1); d = 2*e;
>> A = spdiags([-e,d,-e],[-1,0,1],
m,n);
Der Vektor [-1,0,1] gibt an, in welcher Diagonalen die Spalten von [-e,d,-e] stehen.
Fhren Sie die Anweisungen aus und sehen
Sie sich die volle Matrix mit full(A) an. Alternativ dazu knnen Sie sich mit spy(A) die
Struktur der Matrix A grasch betrachten. Die
zu eye, zeros, ones, rand und randn analogen Sparsefunktionen sind: speye, sparse,
spones, sprand, und sprandn.
2
-1
-1
2
-1
-1
2
-1
-1
2
-1
-1
2
-1
-1
2
>> F = full(S)
1
2
lsst sich dies rckgngig machen. Der Funktionsaufruf nnz(F) zeigt Ihnen die Anzahl der
von Null verschiedenen Elemente der Matrix
F.
3
4
5
227
Copyright c G. Gramlich
0
20
40
60
80
Bildet man eine Blockmatrix und ist eine Untermatrix eine Sparsematrix, so ist auch die
Blockmatrix vom Speichermodus sparse.
100
0
50
nz = 298
100
Aufgabe 221 (Sparsematrizen) Erzeugen Sie Matrix S nach den folgenden Anweisungen
eine (100, 100)-Sparsematrix A, die in der Dia- aus? berlegen Sie zuerst und berprfen Sie
gonalen lauter 4-en hat und die obere und un- danach Ihre Antwort mit full(S).
tere Nebendiagonale besteht aus lauter Zahlen 1 n = 6;
-1. Plotten Sie die Sparsematrix A und bestim- 2 D = sparse(1:n,1:n,2*ones(1,n),n,n
);
men Sie die Anzahl der von Null verschiede3
U = sparse(2:n,1:n-1,-ones(1,n-1),
nen Elementen.
n,n);
Lsung: Man deniert zunchst
4
1
2
3
>> n = 100;
>> e = ones(n,1);
>> d = 4*e;
L = sparse(1:n-1,2:n,-ones(1,n-1),
n,n);
S = L+D+U;
1
2
A = spdiags([-e,d,e],[-1,0,1],n,n)
;
3
4
5
>> full(S)
ans =
2
-1
0
-1
2
-1
0
-1
2
0
0
-1
0
0
0
0
0
0
0
0
-1
2
-1
0
0
0
0
-1
2
-1
0
0
0
0
-1
2
228
Copyright c G. Gramlich
mit Dierenzenverfahren und nach der Methode der niten Elemente, entstehen Matrizen, deren n2 Elemente nicht in den Hauptspeicher passen, sehr viele Nullelemente haben, aber ihre nichtverschwindenden Elemente
sehr wohl in den Arbeitsspeicher passen, wenn
man spezielle Speichertechniken verwendet.
Im allgemeinen sind dann Eliminationsverfahren (LU- bzw. QR-Zerlegungen) nicht anwendbar, weil in Ihrem Verlauf Nichtnullemente an vorher noch nicht belegten Positionen entstehen knnen. Dieses Phnomen
der Erzeugung von Nichtnullelementen bezeichnet man als ll-in. Das folgende Beispiel zeigt solch ein ll-in. Denieren Sie hierzu die Matrix A durch die Anweisung A =
gallery(redheff,20). Schauen Sie sich
mit help private/redheff an, wie die Matrix deniert ist. Mit Hilfe der Funktion lu enthlt man in Matlab eine LU-Zerlegung (Siehe
zum Beispiel [6]). Plotten Sie sodann die Matrizen A, L und U mit der Funktion spy.
Lsung: Die LU-Zerlegung der Matrix A erhlt man mit
1
10
15
20
0
10
nz = 85
1
2
3
4
5
6
7
8
9
>>
>>
>>
>>
>>
>>
>>
>>
>>
figure
plot(3,1,1)
spy(A)
title(Plot der Matrix A)
subplot(1,2,1)
spy(L)
title(Plot der Matrix L)
subplot(1,2,2)
spy(U)
20
15
10
10
15
15
20
0
10
nz = 160
20
20
0
10
nz = 147
20
229
Copyright c G. Gramlich
10
3
4
.......................................
5
6
7
8
9
1
3
5
A(:,:,2)
7
9
11
2
4
6
=
8
10
12
Funktionen, die elementweise arbeiten, knnen auch auf mehrdimensionale Arrays angewendet werden, zum Beispiel arithmetische,
logische und relationale Operatoren. zum Beispiel geben die Ausdrcke A.*A, exp(A),
Mit den Funktionen zeros, rand und randn 3.A und A>0 die erwarteten Ergebnisse.
knnen mehrdimensionale Arrays erzeugt wer- Der (konjugiert) tranponierte Operator und die
Funktionen diag, inv, eig und \ aus der Liden. Zum Beispiel wird durch
nearen Algebra sind fr Arrays der Dimension
1
randn(3,4,5)
grer als zwei nicht deniert, also nur fr Matrizen (zweidimensionale Arrays).
ein (3, 4, 5)-Array mit insgesamt 3 4 5 = 60
Die Tabelle 37 gibt weitere Matlabnormalverteilten Zufallszahlen erzeugt.
Funktionen an, die speziell zum Manipulieren
Ein dreidimensionales Array knnte zum Bei- von mehrdimensionalen Arrays geeignet sind.
spiel dreidimensionale physikalische Daten
darstellen, etwa die Temperatur in einem Raum
Funktion
Bedeutung
ber den Punkten eines rechteckigen Gitters.
cat
Verkettet Arrays
Es knnte auch eine Folge von Matrizen Ak rendims
Gre, Ordnung
prsentieren bzw. Abtastwerte einer zeitabhnndgrid
Erzeugt Arrays
gigen Matrix A(t) bezeichnen. Das (i, j)-te Elepermute
Permutiert Dimension
ment der k-ten Matrix ist dann A(i, j, k) = ai jk .
ipermute Inverse Permutation
Mit Hilfe der cat-Funktion kann man ein
shiftdim Verschiebt Dimension
mehrdimensionales Array durch Angabe der
squeeze
Verschiebt Dimension
Elemente in einer Anweisung denieren. Das
erste Argument gibt die Dimension des Arrays.
Tabelle 37: Array-Funktionen
Die folgende Anweisung erzeugt ein dreidimensionales Array der Gre 3 2 2.
Aufgabe 224 (Mehrdim. Arrays) Verwenden
1
>> A = cat(3,[1 2;3 4;5 6],[7 8;9
Sie dreidimensionale Arrays, um die folgen10;11 12])
de symmetrische Matrix fr verschiedene re2
A(:,:,1) =
230
Copyright c G. Gramlich
0
0
t 1 0
1 t 1 0
0 1 t 1 0 .
At =
0 1 t 1
0
0
0 1 t
(d) Der erste Parameterwert, fr den die Matrix At singulr wird, ist t = 1.
.......................................
for i=1:length(T)
A(:,:,i) = A0+T(i)*diag(ones(5,1))
;
end
231
Copyright c G. Gramlich
13
14
>> M = sym(123);
>> N = ss(1,1,1,1);
>>
>>
>>
>>
>>
>>
>>
>>
E.field = 1;
F = int8(123);
G = uint8(123);
H = int16(123);
I = uint16(123);
J = int32(123);
K = uint32(123);
L = single(123);
232
Copyright c G. Gramlich
nicht deniert. Hierzu muss man gegebenenfalls auf den Inhalt zugreifen. Strukturen und
Zellen sind hnlich. Ein Unterschied besteht
jedoch darin, dass Strukturen durch Namen
und nicht durch Zahlen identiziert werden.
1
2
3
4
n = 2;
M.Name = Hilbert;
M.Matrix = hilb(n);
M.Eigenwerte = eig(sym(hilb(n)));
Die Datentypen cell und struct erlauben es, Gibt man M ein, so erhlt man die Feldnamen,
unterschiedliche aber logisch zusammengeh- aber nicht deren Inhalt:
rige Daten (Felder) zu einer Variablen zusam- 1 >> M
menzufassen. Zum Beispiel knnen Zeichen- 2 M =
Name: Hilbert
ketten und numerische Felder unterschiedli- 3
4
Matrix: [2x2 double]
cher Gre in einer Zelle gespeichert werden.
Eigenwerte: [2x1 sym]
Mathematische Operationen sind darauf aber 5
233
Copyright c G. Gramlich
1
2
3
4
5
>> M.Matrix
ans =
1.0000 0.5000
0.5000 0.3333
>> Z{2,1}
ans =
1
1
1
2
1
3
1
3
6
2
3
4
3.1416
ABC
Ein Zellenarray erlaubt es somit, Arrays verschiedener Datentypen zu einem Objekt zusammenzufassen. Im obigen Beispiel besteht
das Zellenarray Z aus Arrays des Typs double
und char. Sind die Zellen nicht zu gro, so
werden sie am Bildschirm angezeigt. Lsst es
der Raum aber nicht zu, so erscheint nur die
Gre der jeweiligen Zelle. Eine Zelle kann
auch eine mehrdimensionale Struktur sein. Die
Inhalte von einzelnen Zellen sind zur Ausgabe
mit Indizes in geschweiften Klammern anzugeben. Beispiel:
1 2 3 4 5
6 7 8 9 10
A=
11 12 13 14 15 ,
16 17 18 19 20
durch Indexadressierung in einem (2, 2)Zellenarray A ab.
Lsung: Die entsprechenden Zeilen lauten:
234
1
2
Copyright c G. Gramlich
3
4
.......................................
Aufgabe 227 (Zellenarrays) Speichern Sie im
(2, 2)-Zellenarray Z orthonormale Basen fr alle vier fundamentalen Unterrume von
1 1 1
0 0
A=
1 1
1
2 4
In der (1,1)-Zelle soll eine orthonormale Basis von Bild(AT ) stehen, in der (1,2)-Zelle eine Basis von Null(A), in der (2,1)-Zelle von
Bild(A) und in der verbleibenden Zelle eine orthonormale Basis von Null(A)T .
Lsung: Die Singulrwertzerlegung
Analoge Signale, also wert- und zeitkontinuierliche Signale, knnen mit Hilfe eines
Analog-Digital-Umsetzers (A/D-Umsetzer)
durch Abtastung und Quantisierung in ein
digitales (wert- und zeitdiskretes) Signal
berfhrt werden. Umgekehrt lassen sich aus
digitalen Signalen mit einem Digital-AnalogUmsetzer (D/A-Umsetzer) analoge Signale
erzeugen. Wichtige Parameter dabei sind die
Abtastfrequenz fS , das heit die Hugkeit
der Abtastungen pro Sekunde, und die Wortlnge w, das heit die Zahlendarstellung der
Amplituden des digitalen Signals.
A = USV T
Eine moderne PC Sound Card besitzt A/Dund D/A-Umsetzer mit einer typischerweise
liefert orthonormale Basen fr alle vier fundavon 5 bis 44.1 kHZ einstellbaren Abtastfrementalen Unterrume von A.
quenz und einer Wortlnge von 8 oder 16 Bit.
1
>> A = [1 -1 1;1 0 0;1 1 1;1 2 4];
Sie erreicht dann theoretisch eine Hrqualitt
2
>> [U,S,V] = svd(A);
vergleichbar zur Audio-CD.
3
>>
>>
>>
>>
>>
Z = cell(2,2);
Z(1,1) = {V};
Z(1,2) = {[]};
Z(2,1) = {U(:,1:3)};
Z(2,2) = {U(:,4)};
>>
>>
>>
>>
Z{1,1}
Z{1,2}
Z{2,1}
Z{2,2}
1
2
3
=
=
=
=
orth(A);
null(A);
orth(A);
null(A);
235
Copyright c G. Gramlich
77. WWW-Seiten
Die Firma MathWorks kann ber das World
Wide Web (WWW) erreicht werden. Die URLAdresse5 lautet: http://www.mathworks.
5
236
Copyright c G. Gramlich
Besonders interessant nde ich Cleves Corner. Darin benden sich interessante Artikel
rund um Matlab von Cleve Moler, siehe www.
mathworks.com/company/newsletters/
news_notes/clevescorner/index.html.
81. Handbcher
Die Handbcher [13, 15, 16, 18, 19, 20, 21, 22]
sind als PDF-Files unter http://www.
mathworks.de/access/helpdesk/help/
helpdesk.html erhltlich.
82. Progammiertips
Das Handbuch [20] gibt Ihnen Tips
zum ezienten Programmieren in Matlab. Es ist als PDF-File verfgbar unter
Matlab-Logo erhlt man durch das Kommanhttp://www.mathworks.de/access/
do logo (doc logo).
helpdesk/help/pdf_doc/matlab/
programming_tips.pdf.
Abbildung 93: Das Matlab-Logo
79. Studentenversion
Eine Studentenversion von Matlab erhalten 83. Literatur
Sie unter https://www.academic-center.
Bcher zu und ber Matlab ndet man unde/cgi-bin/home.
ter http://www.mathworks.de/support/
6
etwa wie ein Tambourin (eine lngliche, zylindrische books. Darunter auch das sehr empfehlenswerte Buch von Cleve Moler, siehe [24].
Trommel, die mit zwei Fellen bespannt ist).
237
Copyright c G. Gramlich
238
Copyright c G. Gramlich
A. Glossar
objekt-orientiertes
Graksystem, dem die Grak von Matlab unterliegt. Objekte sind hierachisch
organisiert und werden durch Handles
manipuliert.
typ in Matlab.
Standard-Gleitpunktsystem,
Matlab realisiert ist.
das
in
Ein Tool, das frher eingebaute MatLAPACK. Eine Bibliothek von FORTRAN
lab Kommandos anzeigt, sowohl fr
77 Programmen zur Lsung linearer
die gegenwrtige als auch fr frhere
Gleichungen,
Ausgleichsaufgaben,
Sitzungen.
Eigenwert- und SingulrwertberechCommand Window (Kommando-Fenster).
nnungen. Viele Matlab-Funktionen zur
Das Fenster, in dem Matlab den Prompt
linearen Algebra basieren auf LAPACK.
anzeigt und man Kommandos einLaunchpad. Ein Fenster fr den Zugang zu
geben kann. Es ist Teil der Matlab
Tools, Demos und Dokumentationen von
Arbeitsoberche.
MathWorks Produkten.
Current Directory Browser. Aktueller
M-File. Ein File mit der Endung .m, der MatVerzeichnis-Browser. Ein Browser, in
lab Kommandos beinhaltet. Ein m-File ist
dem m-Files und andere Files angezeigt
entweder ein Function oder Script-File.
werden. Es knnen auch Operationen
MAT-File. Ein File mit der Endung .mat, der
angewendet werden.
Matlab Variablen beinhaltet. Es wird mit
Editor/Debugger. Ein Tool zum Erzeugen,
den Kommandos save und load erzeugt
Editieren und zur Fehlersuche von Files.
bzw. eingeladen.
FIG-le. Ein File mit der Endung .fig, der
Matlab desktop (Arbeitsoberche). Eine
eine Matlab-Figur speichert und in MatBenutzer-Arbeitsoberche, um Files,
lab eingeladen werden kann.
Tools und Anwendungen mit Matlab zu
Figure. Ein Matlab-Fenster zur Anzeige von
bearbeiten.
Grak.
MEX-File. Ein Unterprogramm mit C oder
Function M-File. Ein Typ von m-File, der
239
Copyright c G. Gramlich
den Funktionsumfang von Matlab erweitert, gewhnlich im Hinblick auf ein spezielles Anwendungsfeld.
Workspace. Arbeitsspeicher, der ber die
240
Copyright c G. Gramlich
Arrays
Arraygre
Vektorlnge
ndert Form
Doppelpunkt
Letzter Index
Diagonalmatrizen
Dreiecksmatrizen
Dreiecksmatrizen
Blockmatrix
Kontrollstrukturen
error
Fehlermeldung
for
For-Schleife
if
If-Abfrage
switch, case Fallunterscheidung
while
Wiederholungen
Spezielle Variablen/Konstanten
ans Nullarray
eps Maschinengenauigkeit
i
Imaginre Einheit
j
Imaginre Einheit
inf
NaN Not a Number
pi
Kreiszahl
all
any
find
isempty
isequal
size
length
reshape
:
end
diag
tril
triu
repmat
max
min
mean
std
sum
prod
sort
Logische Operatoren
Test auf Nichtnullen
Test fr ein Nichtnullelement
Findet Indizes
Test auf leeres Array
Test auf Gleichheit
Datenanalysis
Maximum
Minimum
arithm. Mittelwert
Standardabweichung
Summe
Produkt
Sortieren
Lineare Algebra
norm Norm
cond Kondition
\
Lst LGS
eig
Eigensysteme
lu
LU-Faktorisierung
qr
QR-Faktorisierung
svd
Singulrwertzerlegung
241
Copyright c G. Gramlich
edit
lookfor
nargin
nargout
type
which
m-Files
Editor
Suche
Anzahl Input-Argumente
Anzahl Output-Argumente
Listet File
Pfadname
Numerische Methoden
bvp4c
Randwertaufgabe
fft
FFT
fminbnd Minimierung
interp1 Interpolation
ode45
Lst ODE
polyfit Polynomt
quadl
Numerische Integration
roots
Nullstellen
spline
Splines
Gemischtes
clc
Lscht
demo
Demonstrationen
diary
Aufzeichnungen
dir
Verzeichnis
doc
Hilfe
help
Hilfe
tic, toc Zeitmessung
what
Listet Files
plot
fplot
ezplot
semilog
bar
hist
axis
xlim
ylim
grid
xlabel
ylabel
title
legend
text
subplot
hold
contour
mesh
surf
spy
print
clf
close
Datentypen
double
Double Precision
char
Zeichen
cell
Zelle
num2str Zahl2Zeichen
sparse
Sparsematrix
struct
Struktur
Workspace
clear
Lscht
who
Listet Variablen
load
Ld Variablen
save
Speichert
exit, quit Beendet
Ein- und Ausgabe
disp
Zeigt Text oder Array
fprintf Schreibt Daten
sprintf Schreibt Daten
input
Prompt fr Eingabe
242
Grak
x, y-Plot
Funktionsplot
Funktionsplot
Halblogarithmisch
Barplot
Histogramm
Axen
x-Achse
y-Achse
Gitter
x-Label
y-Label
Titel
Legende
Text
Subplot
Einfrieren
Hhenlinien
3D-Netz
3D-Flchengraph
Sparsestruktur
Drucken
Lscht Figur
Schliet Figur
Copyright c G. Gramlich
Literatur
Die Literaturangaben sind alphabetisch nach
den Namen der Autoren sortiert.
[1]
[2]
[3]
[4]
[5]
[6]
[7]
243
Copyright c G. Gramlich
MathWorks, Natick, MA, USA, 2009. [30] Shampine, L. F., Reichelt, M. W.: The
MATLAB ODE suite. SIAM J. SCI. Comhttp://www.mathworks.de.
puting, (18):122, 1997.
[19] Matlab: Programming Fundamentals.
The MathWorks, Natick, MA, USA, [31] Simulink: Simulation and Model-Based
Design. The MathWorks, Natick, MA,
2009. http://www.mathworks.de.
USA, 2009. http://www.mathworks.
[20] Matlab: Programming Tips.
The
de.
MathWorks, Natick, MA, USA, 2009.
http://www.mathworks.de.
[32] Smith, B., Boyle, J., Dongarra, J., Garbow, B., Ikebe, Y., Kleme, V., Moler,
[21] Matlab: Statistics Toolbox. The MaC.: Matrix Eigensystem Routines-Eispack
thWorks, Natick, MA, USA, 2009.
Guide. Springer Verlag, 1976.
http://www.mathworks.de.
[22] Matlab: Symbolic Math Toolbox. The [33] Weigand, H., Weth, T.: Computer im Mathematikunterrricht. Spektrum AkademiMathWorks, Natick, MA, USA, 2009.
scher Verlag, 2002.
http://www.mathworks.de.
[23] Meister, A.: Numerik linearer Gleichungssysteme. Vieweg Verlag, 2005.
[24] Moler, C.: Numerical Computing with
Matlab.
Society for Industrial and
Applied Mathematics, Philadelphia, PA,
USA, 2004.
[25] Nitschke, M.: Geometrie. MathematikStudienhilfen. Fachbuchverlag Leipzig
im Carl Hanser Verlag, 2005.
[26] Rieder, A.: Keine Probleme mit Inversen
Problemen. Vieweg Verlag, 2003.
[27] Saad, Y.: Iterative Methods for Sparse Linear Systems. Society for Industrial and
Applied Mathematics, Philadelphia, PA,
USA, 2. Auflage, 2003.
[28] Schott, D.: Ingenieurmathematik mit
Matlab. Fachbuchverlag Leipzig im Carl
Hanser Verlag, 2004.
[29] Shampine, L., Gladwell, I., Thompson,
S.: ODEs with Matlab. Cambridge,
2003.
244
Copyright c G. Gramlich
Stichwortverzeichnis
, 44
*, 10, 15, 29, 32, 48
+, 29, 32, 48, 50
-, 29, 32, 48, 50
-all, 27
-realmin, 34
.*, 50
.+, 50
./, 15, 50
., 50
.\, 50
/, 15, 29, 32
:, 42, 241
, 29, 48
\, 92, 99, 106, 109, 112, 113, 213, 230, 241
Axiom, 238
axis, 70, 242
axis equal, 70
axis square, 70
backsub, 110, 111
bar, 72, 242
bar3, 72
bar3h, 72
barh, 72
Basis, 201
Basislsung, 213
bench, 29
Bessel, 38
bicg, 123
bicgstab, 123
binomial, 201
binopdf, 158
Blas, 92
blkdiag, 52
box off, 62
box on, 62
bvp4c, 154157, 242
bvpinit, 155
abs, 33
acos, 39
acosd, 38
acsc, 39
Albrecht D rer, 12
u
all, 241
all(any(B)), 54
angle, 33
ans, 29, 32, 241
any, 241
any(all(B)), 54
any(B(1:2,1:3)), 54
any(B), 54
Ascii, 25
asec, 39
asin, 39
asind, 38
atan, 39
atan2, 38
245
246
Copyright c G. Gramlich
doc specfun, 38
doc specgraph, 63
doc stats, 158
doc strfun, 232
doc symbolic, 172, 201
doc uicontrol, 76
doc vissuite, 74
dot, 96, 107
double, 3, 9, 31, 33, 35, 36, 115, 230, 231,
234, 242
dsolve, 150, 152, 193
ezplot3, 66
ezsurf, 68
factor, 191
factorial, 159, 161
feval, 128, 172
fft, 143, 242
fftw, 145
Fibonacci, 172
filebrowser, 22
find, 241
find(B), 54
finite(B(:,3)), 54
finverse, 178
fix(x), 39
fliplr, 52, 53
fliplr(A), 53
flipud, 11, 52
floor, 163
floor(x), 39
fminbnd, 131, 142, 242
fmincon, 208212
fminsearch, 142
fopen, 58
for, 79, 80, 241
format, 31, 56
format bank, 31
format long, 31
format short, 31
Fortran, 17, 83, 113
Fourier, 143145, 196198
fourier, 198
fplot, 59, 63, 64, 86, 242
fprintf, 57, 58, 242
fread, 58
Frobenius, 115
fscanf, 58
fsolve, 139, 202
echo off, 82
echo on, 82
edit, 84, 242
eig, 84, 101, 102, 104107, 122, 125, 228,
230, 241
eigs, 2, 104, 125, 228
eigshow, 103, 104
Eispack, 16
ellipsoid, 76
end, 130, 241
eps, 32, 34, 113, 121, 241
eps*realmin, 34
error, 241
Euklid, 37
Euler, 180, 199, 200, 238
evalin, 172
Excel, 23, 25
exist, 28, 88, 92
exit, 19
exit, quit, 242
exp, 39, 128
expand, 172
expm, 52, 106, 107, 126
eye, 44, 107, 227, 241
ezmesh, 63, 68
ezplot, 63, 64, 66, 69, 127, 128, 242
247
Copyright c G. Gramlich
Hesse, 187
Higham, 123
Highams, 45
hilb, 45, 92
Hilbert, 45, 92, 116, 122
HiQ, 238
hist, 72, 242
hold, 242
Horner, 87
horner, 190, 191
hostid, 28
humps, 64, 138, 145, 149
Galilei, 9
gallery, 45
Gap, 238
Gauss, 112, 193
Gauss-Jordan, 109
Gauss, 238
gausselim, 109112
gaussjord, 109, 112
gcd, 175
gemres, 123
geomean, 158
geopdf, 158
get, 76
getVar, 172
global, 88
gmres, 123, 124
grid, 60, 242
gsvd, 131
guide, 76
i, 32, 241
IDL, 238
Ieee, 31, 33, 34
if, 79, 81, 241
ifft, 143
imag, 33
image, 75, 76
imagesc, 75, 76
imfinfo, 75, 76
imread, 75, 76
imwrite, 75, 76
Inf, 32, 34, 35
inf, 32, 241
input, 56, 242
inputname, 84
int, 150, 188
int16, 35
int32, 35
int8, 35, 36
interp1, 137, 242
interp2, 65
intmax, 36
intmin, 36
inv, 93, 105107, 113, 213, 230
inverse, 27
Hadamard, 45
hadamard, 45, 131
handel, 235
Hankel, 38, 45
hankel, 45
Hdf, 25
Heaviside, 85
heaviside, 85
help, 2527, 241, 242
Hermite, 118, 122, 123, 125
248
Copyright c G. Gramlich
logo, 237
logspace, 42
lookfor, 26, 27, 84, 242
lookfor complex, 33
ls, 28
lsqcurvefit, 218, 219
lsqlin, 207
lsqnonlin, 218
lsqnonneg, 207
lsqr, 123
lu, 107, 117, 229, 241
luinc, 123
invhilb, 45
ipermute, 230
isa, 232
iscount, 178
isempty, 241
isequal, 241
iskeyword, 88
isvarname, 32
j, 32, 241
Jacobi, 187, 188
jacobian, 186, 187
Java, 17, 38
Jordan, 106
jordan, 106
Macsyma, 238
mad, 158
magic, 10, 45
Magma, 238
Maple, 12, 109, 159161, 172, 175, 178,
191, 193, 195, 199201, 238
maple, 109, 172, 175, 201
maple(with(combinat)), 201
Mathcad, 238
Mathematica, 238
Matlab, 87, 206208
matlabrc, 29
matlabroot, 28
max, 37, 53, 54, 241
Maxima, 238
mean, 53, 82, 158, 165, 241
median, 53, 82, 158
mesh, 63, 157, 242
meshgrid, 63
mfun, 199
mhelp, 190
mhelp Basis, 201
mhelp binomial, 201
mhelp combinat, 162, 201
mhelp LinearAlgebra[Basis], 202
Kash, 238
kron, 51
Kronecker, 51
Lapack, 92, 113
Laplace, 189, 198, 222
laplace, 189, 198
legend, 242
Leibniz, 184
length, 241
license, 28
limit, 180, 181
LinearAlgebra, 201
Linpack, 16
linprog, 203, 204
linsolve, 106
linspace, 42, 157, 241
load, 21, 45, 242
log, 39
log10, 39
log2, 39
loglog, 70
logm, 52
249
Copyright c G. Gramlich
mhelp(LinearAlgebra,Basis), 202
min, 53, 54, 241
minres, 123
mode, 158
movie, 76
mtaylor, 191
multinomial, 160
MuPAD, 172, 238
mupad, 172
Pari/gp, 238
Pascal, 17, 45, 83, 233
pascal, 45
patch, 77
path, 28
Path Browser, 28
pathtool, 28
pcg, 123, 124
pcm, 124
pdepe, 156, 157
pdsolve, 193, 195
peaks, 65
perms, 159, 161
permute, 230
pi, 31, 32, 241
pie, 72
piecewise, 178
pinv, 122, 213
pinv(A)*b, 108
plot, 15, 59, 6164, 242
plot3, 62
plotyy, 71
pol2cart, 71
polar, 71
poly, 102, 106, 107, 132, 135
polyder, 133, 135
polyfit, 135, 213, 214, 242
polyint, 134, 135
polyval, 134, 135
pretty, 172
print, 75, 242
private, 130, 131
prod, 53, 159, 161, 241
PV-WAVE, 238
pwd, 28
namelengthmax, 31
NaN, 32, 34, 85, 241
nargchk, 84
nargin, 84, 242
nargout, 84, 242
nchoosek, 159
ndgrid, 230
ndims, 230
norm, 37, 114, 115, 241
normest, 115
normpdf, 129, 158
null, 97, 106, 107, 121
num2str, 232, 242
Octave, 238
ode113, 153
ode15i, 152, 153
ode15s, 153
ode23, 153
ode23s, 153
ode23t, 153
ode23tb, 153
ode45, 59, 131, 151153, 222, 224, 242
odeset, 142
ones, 44, 227, 241
optimset, 138, 139, 142
optimset(fminbnd), 142
optimset(fminsearch), 142
250
Copyright c G. Gramlich
qmr, 123
qr, 107, 119, 241
quad, 40, 59, 145, 147, 148, 150
quad, quadl, 131
quadl, 145, 147, 148, 150, 242
quadv, 150
quit, 19
quiver, 72, 73
quiver3, 73
Runge-Kutte, 153
Sage, 238
save, 21, 242
saveas, 75
Scilab, 238
sdvs, 125
sec, 39
semilog, 242
semilogx, 70
semilogy, 70
set, 76
setVar, 172
Shampine, 153
shiftdim, 230
sim, 226
simplify, 172
simulink, 220
sin, 26, 39, 59, 92, 128
sind, 38
single, 35, 36
Singular, 238
size, 44, 45, 84, 241
solve, 109, 112, 141, 179, 191, 233
sort, 53, 54, 82, 241
soundsc, 235
sparse, 226, 227, 242
spdiags, 227
speye, 227
sph2cart, 71
sphere, 76, 77
spline, 137, 233, 242
spones, 227
sprand, 227
sprandn, 227
sprintf, 57, 242
spy, 229, 242
sqrt, 25, 33, 39, 41
251
Copyright c G. Gramlich
uiimport, 25
uint16, 35
uint32, 35
uint8, 35, 36
unidpdf, 158
unifpdf, 158
sqrtm, 52
squeeze, 230
startup, 29
std, 53, 82, 158, 241
stem, 72
str2num, 232
struct, 230233, 242
subplot, 62, 242
subs, 172, 176, 177, 191
sum, 53, 241
surf, 63, 242
svd, 92, 106, 107, 228, 241
svds, 125, 228
switch, 79, 81
switch, case, 241
sym, 231, 234
symmlq, 123
symsum, 183
vander, 45
Vandermonde, 45
var, 53, 131, 158, 165
varargin, 131, 233
varargout, 131, 233
vectorize, 56, 90
ver, 29
version, 29
vpa, 199
Wathen, 123
wav, 236
wavread, 236
what, 28, 242
whatsnew, 29
which, 28, 92, 242
while, 79, 80, 241
who, 21, 242
whos, 9, 21
whos global, 88
why, 131
Wilkinson, 45
wilkinson, 45
T plitz, 45
o
tabulate, 158
tan, 39
Taylor, 191, 192
taylor, 190
taylortool, 191, 192
text, 242
tic, 125
tic, toc, 242
title, 60, 62, 242
toc, 125
toeplitz, 45
trapz, 148, 150
tril, 52, 106, 107, 241
triplequad, 148, 150
triu, 52, 106, 107, 241
triu(B), 53
type, 28, 92, 177, 242
252
Copyright c G. Gramlich