Einführung in MATLAB

Als pdf oder txt herunterladen
Als pdf oder txt herunterladen
Sie sind auf Seite 1von 252

aus Sicht eines Mathematikers.

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.

atlab1 ist ein sehr leistungsfhiges Softwaresystem fr alle Arten


von Berechnungen. Der Numeriker
Cleve Moler hat die erste Version
von Matlab in FORTRAN Ende der siebziger
Jahre geschrieben. Es wurde in Lehre und Forschung beliebt und mndete in ein kommerzielles Softwaresystem. Matlab wird nun in
Hochschulen und Industrie eingesetzt.

Der Umfang von Matlab ist in den letzten


Jahren stark angestiegen. An den Dokumentationen knnen Sie dies gut erkennen, siehe
[13, 15, 16, 19, 17]. Hier ein kleiner Abriss
Matlab dient im Gegensatz zu Computeralge- ber die verschiedenen Versionen:
brasystemen (CAS) nicht primr der symboli- 1978: Klassisches Matlab
FORTRAN-Version.
schen, sondern der numerischen (zahlenmigen) Lsung von Problemen.
1984: Matlab 1
C-Version.

Heutzutage werden viele physikalische, biologische, technische, informationstechnische


und konomische Produkte am Computer entwickelt. Hierbei ist eine Simulation ein wesentlicher Bestandteil. Mit Hilfe einer Simulation kann ein Funktionsnachweis oft schneller erbracht werden. Auerdem ist sie meist
schneller als ein Experiment, kann daher ein
Projekt zeitlich verkrzen und so die Kosten
reduzieren. Durch Computeranimationen entsteht eine Anschaulichkeit und auerdem ist
eine Simulation vllig ungefhrlich. Mit dem
Softwaresystem Matlab lassen sich realittsnahe Anwendungen rasch und unaufwendig
bereits mit wenigen Codezeilen programmieren bzw. simulieren.

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.

Den vorliegenden Text habe ich vollstndig in


A
LTEX erstellt. Die Literaturhinweise wurden
mit BibTEX und der Index mit MakeIndex erzeugt. Alle Bilder habe ich mit Matlab gemacht.

2004: Matlab 7 (R14)


Mathematik auch auf nicht doubleDatentypen
(single precision,
integer); Anonymous Functions; Nested
Functions; m-Files knnen in HTML,
A
LTEX, usw. publiziert werden; erweiterte
und verbesserte Plot-Mglichkeiten.

Die Mathematik habe mit den dort blichen


Symbolen und der dort blichen Schreibweise ausgedrckt. Vektoren sind kleine (a, b,
2008: Matlab 7.6 (R2008a)
Bessere
Untersttzung
der
objekt- c usw.) und Matrizen sind groe lateinische
orientierten Programmierung innerhalb Buchstaben (A, B, C usw.). Funktionen, Kommandos, Codes, usw. aus Matlab habe ich in
von Matlab.
die Schriftart Typwriter gesetzt. Das Ende
2008: Matlab 7.7 (R2008b)
von Aufgaben habe ich wie folgt gekenntzeichFunction Browser (Help Leiste), neue Alnet: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
gorithmen fr Zufallszahlen, Symbolic Toolbox verwendet standardmig nun MuPAD2 Fr jede Anregung, ntzlichen Hinweis oder
statt Maple. Weitere Neuerungen ndet man Verbesserungsvorschlag bin ich dankbar. Sie
erreichen mich am Besten ber E-Mail:
im Hilfesystem unter Release Notes.
gramlich@hs-ulm.de. Dank an Markus
2009: Matlab 7.8 (R2009a)
Sommereder (Wien) fr den ein oder anderen
Neuerungen ndet man im Hilfesystem unFehlerhinweis.
ter Release Notes.
Nun viel Freude und Erfolg mit Matlab!
Nicht nher gehe ich auf die Themen: Objektorientiertes Programmieren mit Matlab, JavaSchnittstellen, GUI (Graphical User InterGnter Gramlich
face) Werkzeuge und die Publikationstools wie Ulm, 30. Juni 2009
2

MuPAD (Multi Processing Algebra Data tool) ist


ein kommezielles Computeralgebrasystem. Es wurde an der Universitt Paderborn unter Leitung von B.
Fuchssteiner entwickelt.

Eine Erklrung des Begris Toolbox ndet man im


Glossar. Eine Liste aller Toolboxen nden Sie auf der
Homepage von The MathWork bzw. in den Release
Notes.

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.

Was macht den Erfolg von Matlab


aus?
18 22.

4.

Starten und beenden

5.
5.1.
5.2.
5.3.
5.4.

Die Arbeitsoberche
Das Command Window .
Command History . . . .
Der Workspace Browser
Current Directory . . . .

6.

Der Help Browser

22

7.

Der Array Editor

22

8.

Der Editor/Debugger

23

9.

Plots

24

10.

Der Import Wizard

25

11.

Matlab unterbrechen

25

12.

Lange Eingabezeilen

13.

Eine Sitzung aufzeichnen

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

Der Path Browser

28

Den Datentrger verwalten

28

Wie man weitere Systeminformationen erhlt


28
Neuigkeiten und Versionen

28

Voreinstellungen

29

Einfaches Rechnen

29

Welche arithmetische Operation


hat Vorang?
29

27.

Zahlen und Formate

30

28.

Variablen und Konstanten

31

29.

Komplexe Zahlen

32

30.

Ieee-Arithmetik und double

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

41 40.19. Flchenstcke (Patches) . . . . .

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.

Ein- und Ausgabe


Benutzereingabe . . . . . . . . .
Bildschirmausgabe . . . . . . .
Dateien lesen und schreiben . . .

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.

Globale und lokale Variablen

87

46.

Namenstest

88

47.

Wie man eziente Programme


schreibt
88

48.

Built-in Functions

49.
49.1.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

Lineare Algebra (Teil 1)


Lineare Gleichungssysteme und
Matrizen . . . . . . . . . . . . .
49.2. Vektoren in der Ebene und im
Raum . . . . . . . . . . . . . .

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.

Analytische Geometrie von Geraden und Ebenen . . . . . . . . 97


Reelle Vektorrume und Unterrume . . . . . . . . . . . . . . 97
Determinanten . . . . . . . . . . 101
Eigenwerte und Eigenvektoren . 101
Lineare Abbildungen und Matrizen105
Matlab-Funktionen fr die Lineare Algebra im berblick . . . 105

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.

Zusammenfassung . . . . . . . . 150 67.4.


67.5.
Dierenzialgleichungen
150 67.6.
Anfangswertaufgaben . . . . . . 151 67.7.
Randwertaufgaben . . . . . . . 153 67.8.
Partielle Dierenzialgleichungen 156 67.9.
67.10.
Statistik
158
67.11.
Kombinatorik
159 67.12.
67.13.
Fakultten, Binomial- und Polynomialzahlen . . . . . . . . . . 159 67.14.
Permutationen ohne Wiederholung 160 67.15.
Variationen ohne Wiederholung . 161
67.16.
Kombinationen ohne Wiederholung . . . . . . . . . . . . . . . 161
Permutationen mit Wiederholung 161 67.17.
Variationen mit Wiederholung . 161 67.18.
Kombinationen mit Wiederholung 161 67.19.
Weitere Funktionen . . . . . . . 161 67.20.
Zufallszahlen
Gleichverteilte Zufallszahlen . .
Normalverteilte Zufallszahlen .
Im Vergleich: Gleich- und normalverteilte Zufallszahlen . . . .
Andere Verteilungen . . . . . .

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

Nichtlineare Gleichungen (2)

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

Nichtlineare Ausgleichsaufgaben 218 82.

Progammiertips

237

83.

Literatur

237

84.

hnliche Systeme

238

A.

Glossar

239

B.

Die Top Matlab-Funktionen

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

Dnn besetzte Matrizen


226
Sparsematrizen erzeugen . . . . 227
Mit Sparsematrizen rechnen . . 227

74.

Literatur

230

75.
Datentypen (Klassen)
231
75.1. Zeichenketten (char) . . . . . . 232
75.2. Zellen- und Strukturenarrays . . 233
76.

Audiosignale (Tne, Musik)

235

77.

WWW-Seiten

236

Copyright c G. Gramlich

1. Einfhrung

1.1. Erste Schritte

It is probably fair to say that one of the three


or four most important developments in
numerical computation in the past decade has
been the emergence of Matlab as the
preferred language of tens of thousands of
leading scientists and engineers.
Lloyd N. Trefethen, 1997.

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.

Variablen werden nach dem Prompt erzeugt


und mssen mit einem Buchstaben beginnen. Matlab unterscheidet zwischen Gro- und
Der Fortschritt der Menschheit ist eng mit Kleinbuchstaben. Die Anweisung
der Verwendung von Werkzeugen verbunden. 1 >> x = 3;
Werkzeuge wie Hammer, Zange oder Baukran
verstrken menschliche Fhigkeiten. Werkzeu- erzeugt die Variable x und ordnet ihr den Wert
ge wie Fernglas, Mikroskop oder Flugzeug 3 zu. Das Semikolon am Ende der Anweisung
verleihen sogar neue Fhigkeiten. Auch Com- unterdrckt die Ausgabe im Command Winputer und Computerprogramme sind Werkzeu- dow. Nach Voreinstellung ist x vom Datentyp
ge. Sie ermglichen es dem Menschen Berech- double und belegt acht Byte Speicherplatz.
nungen schneller durchzufhren, auf Knopf- Diese Informationen knnen mit dem Komdruck Diagramme zu erzeugen und Daten mando whos erfragen:
mit hoher Geschwindigkeit ber das Internet
1
>> whos
zu transportieren. Werkzeuge sind zum einen 2
Name Size Bytes Class
das Ergebnis menschlichen Erndungsgeistes, 3
zum anderen sind sie aber auch die Grundlage 4
x
1x1
8 double array
fr neue Erkenntnisse und neu Denk- und Ar- 5
beitsweisen. So ermglichte erst die Erndung 6 Grand total is 1 element ...
des Rades den einfachen Transport grerer
Gter ber weitere Entfernungen, mit dem Auerdem hat die Variable x die Size (Gre,
Fernrohr entdeckte Galilei die Jupitermonde Ordnung) 1x1 was bedeutet, dass sie ein Skalar
und mit dem Computer lassen sich Berechnun- ist. Ein Skalar ist ein Array mit einer Zeile und
gen durchfhren, die jenseits der Mglichkei- einer Spalte.
ten von Papier und Beistift liegen. Werkzeuge Zeichenketten (Strings) werden in Hochkomhaben aber auch eine didaktische Dimension, mas erzeugt.
da ihr Einsatz geplant und der Umgang mit ih- 1 >> s = Ich bin ein String;
nen gelernt und gelehrt werden muss. Darber
hinaus ziehen neue Werkzeuge auch neue Ver- Ein Zeichen bentigt zwei Byte Speicherplatz.
fahren, Arbeits- und Denkweisen nach sich. Entsprechend ergeben sich bei 18 Zeichen 36
([33])
Bytes.

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

1.2. Magische Quadrate (magic)

Magische Quadrate sind interessante Matrizen.


In diesem Beispiel die erste Zeile und die zwei- Mit
te Spalte der Matrix A.
1
>> help magic
Es gibt in Matlab eingebaute Funktionen, die
Ihnen viel Arbeit abnehmen. So gibt es zum erhalten wir den folgenden Text:
Beispiel Funktionen, um Matrizen aufzubau1
MAGIC(N) is an N-by-N matrix
en, ohne sie mhsam eingeben zu mssen. Ein 2 constructed from the integers
Beispiel ist die Funktion rand. Diese Funktion 3 1 through N^2 with equal row,
erzeugt eine Zufallsmatrix mit Elementen zwi- 4 column, and diagonal sums.
schen 0 und 1. Die Gre der Matrix bestim- 5 Produces valid magic squares
6
for all N > 0 except N = 2.
men Sie.
1
2
3
4
5

>> B = rand(3)
B =
0.4447 0.9218
0.6154 0.7382
0.7919 0.1763

0.4057
0.9355
0.9169

Wir erzeugen das magische Quadrat der Ordnung drei.


1
2

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

Drehungen und Spiegelungen der Matrix A.


Genauso viele Mglichkeiten, wie eine Folie
auf den Overhead Projektor zu legen. Hier sind
sie:
1
2

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

Funktionen drfen geschachtelt werden! Auch


die Summe der Diagonalelemente ist 15:
2

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

Man kann sie wie folgt erzeugen.

>> sum(diag(A))
ans =
15

1
2
3
4

for k=0:3
rot90(A,k)
rot90(A,k)
end

Die Gegendiagonale hat auch die Summe 15.


Die Gegendiagonale ist fr die Lineare Alge- Nun ein etwas Lineare Algebra. Es ist
bra weniger interessant, deshalb ist deren Ans1
>> det(A)
rechbarkeit auch trickreicher.
2
1
2
3

>> sum(diag(flipud(A)))
ans =
15

ans =
-360

und die Inverse ist

Die Funktion flipud vertauscht die Zeilen 1 >> X = inv(A)


2
X =
von oben nach unten. Warum ist die Summe 3
0.1472 -0.1444 0.0639
gleich 15? Die Anwort ist: Die Summe der 4
-0.0611 0.0222 0.1056
ersten neun ganzen Zahlen ist 45 und da jede 5
-0.0194 0.1889 -0.1028
Spaltensumme gleich sein muss, gilt 45/3 =
15. Wieviele magische Quadatrate der Ord- Diese sieht vertrauter aus, wenn wir die Matrinung drei gibt es? Antwort: Acht! Es gibt acht xelemente als Brche schreiben:

11

Copyright c G. Gramlich

1
2
3
4
5
6

>> format rat


>> X
X =
53/360
-13/90
-11/180
1/45
-7/360
17/90

Maple basiert, siehe Abschnitt 67. Die Anweisung


1

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

Ein Beispiel eines magischen Quadrats der


Ordnung vier ndet sich in der Renaissanceradierung Melancholie des deutschen Knsters
Albrecht D rer. Diese Radierung steht uns
u
in Matlab elektronisch zur Vefgung. Die Anweisungen
1
2

>> load durer


>> whos

ergeben die Ausgabe


1

Wir sehen, dass der magische Summenwert 15


in allen drei Gren vorkommt.

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

Grand total is 330272 elements ...

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

erzeugt, siehe Abbildung 1. Betrachtet man das

200
250
300
350

100

100

200

300

200
300

Abbildung 2: Ausschnitt der Radierung

400
500
600

100 200 300 400 500

2
3
4

Abbildung 1: Radierung von A. D rer


u

Bild genauer, so stellt man fest, dass sich in


ihm tatschlich ein magisches Quadrat bendet. Zoomen Sie mit der Lupe in den rechten
oberen Teil des Bildes und Sie knnen das magische Quadrat der Ordnung vier gut erkennen.
Mit den Anweisungen
1
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

erhalten wir in einer hheren Ausung den


rechten oberen Teil des Bildes mit dem magischen Quadrat, siehe Abbildung 2. Die Anweisung
1

A =

2
3
4
5
6

>> A = A(:,[1 3 2 4])


A =
16
3
2
13
5
10
11
8
9
6
7
12
4
15
14
1

>> A = magic(4)

D rer hat wahrscheinlich dieses magische


u
erzeugt das folgende magische Quadrat der Quadrat gewhlt, weil es in der Mitte der letzOrdnung vier
ten Zeile die Zahl 1514 enthlt, was das Jahr

13

Copyright c G. Gramlich

ist, in dem er diese Zeichnung getan hat.

17
18

Es stellt sich heraus, dass es 880 magische


Quadrate der Ordnung vier und 275 305 224
magische Quadrate der Ordnung fnf gibt. Es
ist bisher ein ungelstes mathematische Problem, die Anzahl der verschiedenen magischen
Quadrate der Ordnung 6 oder grer anzugeben.
Die Determinante von A ist null. Deshalb hat
die Matrix A auch keine Inverse. Das heit,
es gibt magische Quadrate, die singulr sind.
Welche? Der Rang einer quadratischen Matrix
ist die Anzhal der linear unabhngigen Spalten (oder Zeilen). Eine (n, n)-Matrix ist genau
dann singulr, wenn der Rang kleiner n ist. Die
Anweisungen
1
2
3
4

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 das Bild in Abbildung 3. Die BeobRang magischer Quadrate


25

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

Abbildung 3: Rang magischer Quadrate


achtungen sind folgende:
Ist n = 3, 5, 7, . . ., so haben die Matrizen
vollen Rang. Sie sind also regulr und besitzen jeweils eine Inverse.
Ist n = 4, 8, 12, . . ., so hat die Matrix den

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

plexere Datenstrukturen. Alle Datenstrukturen


lassen sich unter dem Oberbegri des mehrdimensionalen Arrays einordnen. Aus Matlab ist
sozusagen nun ein Arrlab (Array Laboratory)
geworden. Das numerische zweidimensionale
Array, also die klassische Matrix, ist in diesem
Konzept nur noch ein Spezialfall, aber natrlich ein sehr wichtiger.

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.

Der Einsatz von Matlab lohnt sich. Neben


den sonst blichen Lehrbuchbeispielen knnen kompliziertere und praxisbezogene AufTypische Anwendungen sind:
gaben schon im Ausbildungsprozess bearbeitet
Numerische Berechnungen aller Art.
werden. Matlab erhht die Leistungsfhigkeit,
Entwicklung von Algorithmen.
Probleme aus Wirtschaft, Technik und Natur
Modellierung, Simulation und Entwicklung zu lsen, und erhht die Motivation sich mit
von Prototypen technischer und wirtschaft- Mathematik zu beschftigen.
licher Probleme.
Der Umfang von Matlab ist in den letzten Jah Analyse, Auswertung und grasche Darstel- ren stark angestiegen. Informationen ber die
lung von Datenmengen; Visualisierungen.
neuste Version und andere Hinweise nden Sie
Wissenschaftliche und technische Darstel- unter http://www.mathworks.de.
lungen.
Die drei Hauptkomponenten von Matlab sind:
Applikationsentwicklung mit Aufbau einer Berechnung
graschen Benutzerschnittstelle.
Visualisierung
In den siebziger Jahren wurde in den USA
Programmierung
eine intensive Aktivitt zur Entwicklung
hochqualitativer Software gestartet, das Berechnung. Matlab verfgt ber eine numeNATS-Projekt. 1976 lag als Ergebnis dieser rische qualitativ hochwertige ProgrammBemhungen das Softwarepaket Eispack zur sammlung. Dem Benutzer bleibt es dadurch
Lsung algebraischer Eigenwertprobleme vor erspart, Standardalgorithmen neu programmie[32]. Im Jahr 1975 begannen die Arbeiten an ren zu mssen. Er kann auf grundlegende,
einem ezienten und portablen Softwarepaket gut ausgetestete Programme zurckgreifen und
zur Lsung linearer Gleichungssysteme. Das darauf aufbauend eigene Algorithmen realisieErgebnis war das Softwarepaket Linpack [2]. ren.
Linpack und Eispack gewhrleisteten lange Visualisierung. Matlab verfgt ber moderne
Zeit die zuverlssige und portable Lsung von Visualisierungsmglichkeiten. Dadurch ist der
Problemen der Linearen Algebra. Um diese Benutzer in der Lage, Daten auf verschiedene
beiden Pakete leichter handhabbar zu machen, Art und Weise darzustellen.
wurde Matlab geschrieben. Damit bestand Programmierung. Matlab verfgt ber eine
auch die Mglichkeit, ausgereifte Software eigene hhere Programmiersprache. Der Be-

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

Handle Graphics (Graken bearbeiten).


Das Matlab-Graksystem umfasst Hochsprachenbefehle fr die Darstellung von zwei- und
dreidimensionalen Datenstrukturen, fr die
Bildverarbeitung, fr Trickbewegungen und
Prsentationsgraken. Hierzu gehren auch
einfache Befehle, mit denen sich Graken kundenspezisch gestalten oder auch vollstndig
grasche Benutzerschnittstellen fr eigene Applikationen aufbauen lassen.
Bibliothek von mathematischen Funktionen. Matlab verfgt ber eine umfangreiche
Sammlung von mathematischen Algorithmen
und Funktionen. Diese Funktionalitt reicht
von elementaren Funktionen ber Eigenwertberechnungen bis hin zur schnellen FourierTransformation.
Application Program Interface (API). Diese
Anwenderschnittstelle ermglicht die Erstellung von Programmen in C/C++ und Fortran,
um sie dann in Matlab einzubinden.
Simulink. Simulink ein Partnerprogramm zu
Matlab ist ein blockorientiertes, interaktives System zur Simulation linearer und nichtlinearer dynamischer Systeme. Es handelt sich
um ein mausgesteuertes Grakprogramm, das
ein Modell eines technischen, natrlichen oder
wirtschaftlichen Systems, das als Blockdiagramm (Blockschaltbild) auf dem Bildschirm
darzustellen ist, unter dynamischen Einwirkungen nachbildet. Es kann fr lineare, nichtlineare, zeitkontinuierliche oder zeitdiskrete
Prozesse eingesetzt werden. Grundlage sind
Matlab-Funktionen zur Lsung gewhnlicher
Dierenzialgleichungen (DGL-Lser, ODELser).
Blocksets sind Ergnzungen zu Simulink, die
weitere Bausteinbibliotheken fr Spezialan-

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.

3. Was macht den Erfolg von


Matlab aus?
Matlab hat gegenber der traditionellen numerischen Programmierung (wie zum Beispiel
mit FORTRAN, C/C++ oder dem Aufruf von
numerischen Bibliotheken) folgende Vorteile:
Matlab verfgt ber eine benutzerfreundliche und intuitive Syntax; die Syntax ist kurz
und einfach.
Die numerischen Programme zeichnen sich
durch eine hohe Qualitt aus.
In einer eingebauten hheren Programmiersprache lassen sich Algorithmen schnell und
leicht realisieren.
Datenstrukturen erfordern minimale Auf-

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].

4. Starten und beenden

Abbildung 5: Die Arbeitsoberche

Bei vielen kommandoorientierten Rechnersystemen wird Matlab durch das Kommando


matlab gestartet. Oder bei graschen Oberchen klickt man nach dem Start auf ein
entsprechendes Matlab-Icon. Bei manchen Installationen ist es auch mglich, dass Sie Matlab aus einem Men heraus aufrufen knnen.

beitsoberche von Matlab besteht aus dem


Command Window zur Befehlseingabe, dem
Current Directory mit dem Inhlatsverzeichnis, dem Workspace mit den Variablen des
Speicherbereiches des Command Windows,
der Command History, verschiedener Menzeilen sowie dem Start Button. Die einzel-

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.

blttert werden. Erzeugte Variablen werden im


Workspace Window aufgelistet, Befehle in der
Kommando History.

5.2. Command History


Im Command History werden die eingegebene Befehle zur Wiederverwendung nach dem
Datum geordnet abgespeichert. Durch Doppelklick knnen diese Befehle direkt ausgefhrt werden und mit der linken Maustaste in
das Command Window zur erneuten Bearbeitung verschoben wrden. Die linke Maustaste
geneinsam mit der Sift- oder Steuerungstaste
erlaubt die Auswahl von Gruppen der im History Window gespeicherten Kommandos. Mit
der rechten Maustaste net sich ein Fenster,
das das Kopieren der ausgewhlten Befehle,
das direkte Erzeugen von m-Files und Shortcuts oder das Lschen aus der Command History erlaubt.

Der Start Button erlaubt den direkten Zugri


auf unterschiedliche Funktionalitten, nicht
nur unter Matlab, sondern auch auf Funktionalitten von Toolboxen, Simulink, Stateflow und Blocksets. Hier bendet sich auch
ein einfacher Zugang zu den erwhnten Shortcuts oder interessanten Matlab Seiten, Hilfe5.3. Der Workspace Browser
seiten und Demos, um nur eine kleine Auswahl
zu nennen.
Der Workspace Browser zeigt die aktuellen Variablen des Base-Speicherbereichs (Command
Window) oder beim Debuggen die des zugeh5.1. Das Command Window
rigen Funktionsspeicheraumes an. Die VariaDas Command Window dient dem Aufruf von blen sind alphabetisch geordnet, knnen aber
Matlab Befehlen, Erzeugen von Variablen und auch durch Anklicken der Spaltenberschrifdem Anzeigen von Ergebnissen. Die Eingabe ten nach den damit verkpften Eigenschaften
umgeordnet werden.
erfolgt hinter dem Matlab Prompt
Die Menleiste des Workspace Browser bie1
>>
tet mit dem Plot-Zeichen einen bequemen ZuBefehle knnen auch abgekrzt werden und gang zu grasch gesteuertem Plotten einer oder
mit der Tab-Taste ergnzt werden. Zu frheren mehrerer Variablen.
Eingaben kann mit den Kursortasten zurckge- Ist der Workspace Browser im Vordergrund,

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

>> A(2,:) = [2.0 6.2];

und das Schreiben in eine Datei mit Namen


data.out erfolgt mit
1

>> fprintf(data.out,%1.1f %1.1f


\n,A)

oder alternativ mit


1

Tabelle 1: Workspace verwalten

>> save data.out A -ASCII

.......................................
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). . . .

5.4. Current Directory

Der Current Directory Browser hat gegenber


den Vorgngerversionen an Funktionalitt hinzugewonnen und geht weit ber das reine Auflisten der Dateien des aktuellen Verzeichnisses
Aufgabe 2 (Workspace verwalten) Schreiben hinaus. Durch Anwhlen kann direkt in UnterSie einen Datenle mit dem Namen data.in, verzeichnisse gesprungen werden.

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.

6. Der Help Browser

Im Navigator stehen die Kartenreiter Contents,


Index, Search und Demos zur Auswahl. Das
Docksymbol erlaubt wieder das Anbinden an
das Desktop-Fenster.
Unter Contents verbirgt sich eine vollstndige
Dokumentation aller installierten Produkte bestehend aus den User Guides. Zu den User Guides gehrt auch eine vollstndige Funktionsbersicht der einzelnen Matlab Funktionen/Kommandos, die stets aus einer bersicht der
erlaubte Syntax, aus einer ausfhrlichen Beschreibung, gegebenenfalls ergnzenden Hinweisen, einem Beispielteil und einem Verweis
auf verwandte Matlab Funktionen/Kommandos sowie in einigen Fllen ergnzende Literaturangaben besteht. Unter Contens ndet
sich auch das Kapitel Printable Dokumentation, das direkt auf die MathWorks Internetseite
mit den pdf-Dokumenten verweist.

Matlab verfgt ber ein sehr umfangreiches


Hilfe- und Dokumentationsfenster, den Help
Browser, siehe Abbildung 6. Der Help Brow- Der Kartenreiter Index stellt ein alphabetisch
geordnetes Register zur Verfgung und Search
ein Suchfenster. Die Treer werden im Navigatorteil aufgelistet und durch anklicken im
rechten Textfenster dargestellt. Dabei wird
unter allen installierten Produkten gesucht.
Soll die Suche auf betsimmte Toolboxen oder
Blocksets eingeschrnkt werden, so kann unter
den Preferences im Men File ein Produktlter
genutzt werden.
Abbildung 6: Der Help Browser

Unter Demos werden Beispiele zu verschiedenen Funktionalitten bereit gehalten.

ser kann aus dem Desktop entweder unter dem


Menpunkt Help oder ber das ?-Symbol oder 7. Der Array Editor
mit dem Befehl doc genet werden. Der Help
Browser besteht aus dem Navigator und auf der Der Array Editor dient dem Visualisieren
rechten Seite aus dem eigentlichen Hilfetext. und interaktiven Editieren von Workspace-

22

Copyright c G. Gramlich

Variablen und wird durch Klicken auf die 8. Der Editor/Debugger


Variable im Workspace genet, siehe Abbildung 7. Alternativ kann der Array Editor Der Matlab Editor und Debugger, siehe Abbildung 8 dient dem Schreiben von Matlab

Abbildung 7: Der Array Editor

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.

Abbildung 8: Der Editor/Debugger


Scripts und Functions sowie dem grasche Debuggen. Der Editor hebt dabei Matlab Schlsselwrter oder Kommentare in unterschiedlichen Farben hervor, erkennt aber auch andere
Formate wie beispielsweise HTML. Aufgerufen wird der Editor entweder mit
1

>> editor Fname

zum Editieren des Files Fname oder aus dem


Desktop unter File New m-le oder durch
Klicken auf eine Datei im Current Directory
Browser.
Unter dem Menpunkt Edit des Editors bendet sich ein Search and Replace-Fenster, mit
dem Begrie im lokalen File oder auch auer-

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

ty Editor aufgerufen, mit dem interaktiv Ei- 12. Lange Eingabezeilen


genschaften der Grak verndert und smtliche Eigenschaften mit dem Property Inspector Ist Ihre Eingabezeile lang, so knnen Sie dieangesprochen werden knnen. Insert erlaubt se mit drei Punkten beenden ... und in der
das interaktive Einfgen von zum Beispiel Le- nchste Zeile fortfahren.
gende und Farbbalken. Unter Tools nden sich
1
>> s = 1+1/2+1/3+1/4+1/5+1/6+...
Eigenschaften wie Pan zum interaktiven Ver- 2
1/7+1/8+1/9+1/10
schieben von Plotlinien und insbesondere auch 3 s =
das Basic Fitting und Data Statistic Tool.
4
2.9290

10. Der Import Wizard

13. Eine Sitzung aufzeichnen

Der Import Wizard (Zauberer) lsst sich ber


den Befehl uiimport, durch Doppelklicken
auf einen Datenle im Current Directory Window oder ber File Import Data nen.
In diesem Fall wird ber einen File Browser
der entsprechende Datenle ausgewhlt. Der
Import Wizard erlaubt das interaktive Einlesen von Ascii-Files, binren mat-Dateien, Excel-Files, wav-Dateien, Bilddateien oder HdfDaten, um nur Einige zu nennen. Bei formatierten Daten kann ein geeigneter Spaltenseparator angeklickt werden, und, falls dies nicht
automatisch erkannt wird, die Zahl der Kopfzeilen vorgegeben werden. Numerische Daten werden dann als Array, Textdaten wie beispielsweise Spaltenberschriften als Zellenvariablen abgespeichert.

Das Kommando

11. Matlab unterbrechen

Das folgende Beispiel zeigt, wie man sich


Informationen ber die eingebaute MatlabFunktion sqrt verschat.

Mit ctrl-c knnen Sie Matlab jederzeit unterbrechen.

>> diary MeineSitzung

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.

14. Das help-Kommando


Das help-Kommando ist eine einfache Mglichkeit, Hilfe ber eine Matlab-Funktion im
Command Window zu erhalten. Hierzu gibt
man help und den Funktionsnamen, das Kommando oder das Symbol ein.

25

>> help sqrt

Copyright c G. Gramlich

erhalten Sie eine Liste aller elementarer mathematische Funktionen in Matlab.

2
3
4

SQRT Square root.


SQRT(X) is the square ...

Auallend ist, dass in der Erklrung der Name


der sqrt-Funktion gro geschrieben ist. Dies
dient lediglich dazu, diesen Namen vom brigen Text abzusetzen. Der richtige Name ist
sqrt, klein geschrieben. Matlab unterscheidet
zwischen Gro- und Kleinbuchstaben, deshalb
liefert die Eingabe help SQRT eine Fehlermeldung.
1

SQRT.m not found.

Matlab-eigene Funktionsnamen bestehen stets aus Kleinbuchstaben.


Nur im Hilfetext werden sie gro geschrieben.

15. Das doc-Kommando


Eine konfortablere Hilfe erhalten Sie mit dem
doc-Kommando. Beispielsweise erhalten Sie
mit doc sin eine HTML-Dokumentation ber
die sin-Funktion. Mit doc elfun bekommen
Sie eine Liste aller elementaren mathematischen Funktionen, die in Matlab realisiert
sind.

16. Demos
Durch den Aufruf

Das help-Kommando ist nur geeignet, wenn 1 >> demo


man den Namen der Funktion kennt, zu der
man Hilfe sucht. Was aber, wenn man ihn nicht wird das Hilfe-Fenster genet und Sie knnen sich Demos ber Matlab und seine Toolkennt?
boxen anschauen. Dort nden Sie in Form von
Alle Matlab-Funktionen sind in logische
Video-Tutorials die neuen Features der neusGruppen (Themen) eingeteilt, und die Matlabten Matlab-Version. Weitere Info erhalten Sie
Verzeichnisstruktur basiert auf dieser Einteimit doc demo (help demo) oder doc demos
lung. Gibt man help alleine ein, so wird diese
(help demos).
Gruppierung angezeigt.
1
2

>> help
HELP topics

17. Das lookfor-Kommando

3
4

matlab\general
matlab\ops
matlab\lang matlab\elmat usw.

- General ...
Operators ...
Programming ...
Elementary ...

Basierend auf einem Schlsselwort knnen Sie


mit dem lookfor-Kommando nach Funktio6
nen suchen. Dabei wird die erste Zeile des
7
8
help-Textes jeder Matlab-Funktion zurckgegeben, die das entsprechende Schlsselwort
Mit help elfun (doc elfun) zum Beispiel enthlt. Zum Beispiel gibt es in Matlab keine
5

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

INVHILB Inverse Hilbert matrix.


IPERMUTE Inverse permute array ...
ACOS Inverse cosine.
ACOSH Inverse hyperbolic cosine.
ACOT Inverse cotangent.
ACOTH Inverse hyperbolic ...
ACSC Inverse cosecant.
ACSCH Inverse hyperbolic cosecant.
ASEC Inverse secant.
ASECH Inverse hyperbolic secant.
ASIN Inverse sine.
ASINH Inverse hyperbolic sine.
ATAN Inverse tangent.
ATAN2 Four quadrant inverse ...
ATANH Inverse hyperbolic tangent.
ERFCINV Inverse complementary ...
ERFINV Inverse error function.
INV
Matrix inverse.
PINV Pseudoinverse.
IFFT Inverse discrete Fourier
transform.
usw...

nden Sie das Kommando clc. Damit wird das


Kommandofenster gelscht, nicht jedoch der
Workspace. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18. Alle Funktionen?


Alle Matlab-Funktionen nden Sie im Help
Browser. Geben Sie doc ein, dann nden
Sie unter Help Navigator Contents Matlab in
Function Alphabetical List eine alphabetische Auistung aller Matlab-Funktionen und
in Functions Categorial List alle Funktionen
in Gruppen eingeteilt.

Will man, dass alle help-Zeilen durchsucht


werden, so muss man im Aufruf die Option
-all verwenden:
1

>> lookfor inverse -all

>> lookfor command

19. Wichtige Funktionen?


Wichtige und hug vorkommende Funktionen habe ich Ihnen im Anhang B abgedruckt.

27

Copyright c G. Gramlich

20. Der Path Browser

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

Tabelle 2: Den Datentrger verwalten

22. Wie man weitere


Systeminformationen erhlt
Die Tabelle 3 zeigt Matlab-Funktionen, die
Funktion
computer
hostid
license

Abbildung 9: Der PathBrowser

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.

21. Den Datentrger verwalten

23. Neuigkeiten und Versionen

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

Matlab nennt das Ergebnis ans (kurz fr answer).

Tabelle 4: Weitere Infos

Geben Sie dem Ergebnis keinen Variablennamen (siehe Abschnitt 28),


so whlt Matlab standardmig
(default) den Variablennamen ans.

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.

25. Einfaches Rechnen

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. . . . . . . .

26. Welche arithmetische


Operation hat Vorang?

Addition +, Subtraktion -, Multiplikation *, Die arithmetischen Operationen von Matlab


Division / und Potenzieren sind grundlegen- gengen den gleichen Vorrangsregeln wie in
de Rechenoperationen. Hier ein paar Beispiele: vielen Computersprachen und Taschenrechnern. Grob gesprochen gelten die blichen
1
>> 3+4
Rechenregeln Punktrechnung vor Strichrech2
ans =
nung. Die Regeln sind in Tabelle 5 aufge3
7
zeigt (Eine komplette Tabelle fr alle Matlab4
>> 9/3

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)

Aufgabe 5 (Rechnen) Ermitteln Sie das Ergebnis von


1

>> 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

Alle Zahlen werden intern im double-Format


(Langformat) gem der Spezikation durch
die Gleitpunktnorm der Ieee abgespeichert.
Matlabs Zahlenausgabe folgt mehreren Regeln. Ist das Ergebnis ganzzahlig, so wird eine ganze Zahl ausgegeben. Wenn das Ergebnis
eine reelle Zahl ist, dann gibt Matlab das Resultat standardmig auf 4 Dezimalen gerundet aus. Ist das Matrixelement grer als 103
oder kleiner als 103 , so wird es in exponentieller Form auf dem Bildschirm dargestellt. Sollen Zahlen in einem anderen Format ausgegeben werden, so hilft das Matlab-Kommando
format, siehe doc format (help format).
Die Tabelle 7 gibt mgliche numerische Zahlenformate an.
Kommando
format short
format long
format bank

Beispiel: pi
3.1416
3.14159265358979
3.14

Tabelle 7: Zahlenausgabe in Matlab

28. Variablen und Konstanten


Ein Variablenamen muss mit einem Buchstaben beginnen und darf aus maximal 63
Buchstaben, Zahlen und Unterstrichen bestehen (Bis Release 6.1 lag der Wert noch bei 31).
namelengthmax liefert die maximale Lnge
(63 Zeichen), die zur Unterscheidung eines
Namens (Variablen, Dateien, usw.) erlaubt ist,
zurck.
1
2

31

>> namelengthmax
ans =

Copyright c G. Gramlich

Spezielle Variable
ans
computer
eps
i
Inf, inf
j
NaN
pi

63

Umlaute sind nicht erlaubt! Erlaubt sind zum


Beispiel
1
2

MeineVariable Anna x1 X3
z23c1 My_Var

Nicht erlaubt sind


1

Meine-Variable 2Var \$2 &x

Bedeutung
Resultat (Default)
Identiziert
Maschinengenauigkeit
Imaginre Einheit
Innity
Imaginre Einheit
Not-a-Number
Kreiszahl 3.14

Tabelle 8: Spezielle Variablen


Mit der Funktion isvarname knnen Sie die
Gltigkeit eines Variablenamens berprfen.
1
2
3
4
5
6

>> isvarname(My_Var)
ans =
1
>> isvarname(2Var)
ans =
0

Vermeiden Sie das berschreiben


spezieller Variablen!
Weitere Infos unter doc elmat (help elmat)
bzw. doc lang (help lang).

29. Komplexe Zahlen

1 (wahr) wird zurckgegeben, falls ein gltiger


Variablenname vorliegt, ansonsten 0 (falsch). Komplexe Zahlen knnen wie folgt eingegeFr weitere Infos, siehe auch Abschnitt 46.
ben werden:
Aufgabe 7 (Variablennamen) Wieviel ver- 1 >> z1 = 3+4*j, z2 = 1-3i
schiedene Matlab Variablenamen stehen in 2 z1 =
folgender Zeile?
3
3.0000 + 4.0000i
1

anna ANNA anNa aNna_anna

z2 =
1.0000 - 3.0000i

Lsung: Vier verschiedene Variablennamen.


Wie Sie sehen kann die imaginre Zahl i mit
....................................... 2
i = 1 als i oder j eingegeben werden, wobei
Achten Sie in Matlab unbedingt auf
das Multiplikationszeichen * wahlweise verGro-und Kleinschreibung!
wendet werden kann. Die Operatoren +, -, *
und / sind bei Verwendung komplexer Zahlen
Darber hinaus gibt es vordenierte (vorbelegdie komplexe Addition, komplexe Subtraktion,
te) Variablen, siehe Tabelle 8. Achtung! Sie
komplexe Multiplikation und die komplexe Diknnen diese spezielle Variablen berschreivision. Hier zwei Beispiele:
ben; vermeiden Sie dies aber, wenn immer
mglich.
1
>> z1+z2

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

Die konjugiert komplexe Zahl zu 1 + 3i ist


1
2
3

>> 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

.......................................

Den Absolutbetrag und Phasenwinkel einer


30. Ieee-Arithmetik und double
komplexen Zahl z kann mit abs bzw angle berechnet werden. Weitere Funktionen, die beim
Standardmig ist in Matlab ist der IEEERechnen mit komplexen Zahlen von BedeuStandard 754 mit doppelt genauer Gleitpunktatung sein knnen, siehe doc elfun.
rithmetik realisiert. So wird jede Zahl defaultAufgabe 8 (Komplexe Zahlen) Gegeben ist die mig in den Datentyp double konvertiert. Jekomplexe Zahl z = 4i/(1 + i). Wie lautet die de Zahl vom Datentyp double belegt einen
zu z konjugiert komplexe Zahl? Wie gro sind Speicherplatz von 64 Bits. Von Null verschieAbsolutbetrag und Phasenwinkel von z?
dene positive Zahlen liegen daher ungefhr
Lsung:
zwischen 10308 und 10+308 und die relative
Rechengenauigkeit (unit roundo) ist 253
1
>> z = 4i/(1+i);
1.11 1016 . Das wesentliche Merkmal der re2
>> conj(z)
3
ans =
lativen Rechengenauigkeit ist, dass sie eine re4
2.0000 - 2.0000i
lative Fehlerschranke fr das Konvertieren ei5
>> phi = angle(z)*180/pi
ner reellen Zahl in eine Gleitpunktdarstellung
6
phi =
und auch eine Schranke fr den relativen Feh7
45
ler darstellt, der entsteht, wenn man zwei Gleit8
>> a = abs(z)
punktzahlen addiert, subtrahiert, multipliziert
9
a =
oder dividiert, oder die Quadratwurzel aus ei10
2.8284
ner Gleitpunktzahl zieht. Grob gesagt: Matlab
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . speichert und fhrt elementare Rechenopera-

33

Copyright c G. Gramlich

tionen mit einer Genauigkeit von ungefhr 16


Dezimalstellen durch.

8
9
10

>> 0*inf
ans =
NaN

Die Funktion eps (machine precision) gibt den


Abstand von 1.0 zur nchst greren GleitHat man einmal ein NaN erzeugt, so panzt sich
punktzahl zurck.
dies im Laufe der Rechnung fort.
1
2
3

>> eps
ans =
2.2204e-016

1
2
3

252 ,

>> 3+NaN
ans =
NaN
>> NaN-NaN
ans =
NaN
>> 0*NaN
ans =
NaN

Dieser Abstand ist


also zweimal der re- 4
lativen Rechengenauigkeit. Da Matlab den Ie- 5
6
ee-Standard realisiert, erzeugt jede Rechnung
7
eine Gleitpunktzahl, womglich aber in einem 8
besonderen Format. Ist das Ergebnis einer Be- 9
rechnung grer als realmax, dann tritt ein
Overow ein und das Resultat ist Inf, was fr Die Funktion realmin gibt die kleinste posiunendlich (innity) steht. Ist das Resultat klei- tive normalisierte Gleitpunktzahl zurck. Jede
ner als -realmin, so kommt -inf heraus.
Rechnung, deren Ergebnis kleiner als realmin
ist, erzeugt einen Underow und wird auf Null
1
>> realmax
2
ans =
gesetzt, wenn sie kleiner als eps*realmin ist
3
1.7977e+308
oder erzeugt eine nichtnormale Zahl (subnor4
>> -1.1*realmax
mal number) mit fhrendem Bit 0 in der Man5
ans =
tisse.
6
7
8
9

-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

int32 und uint32

>> 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).

Aufgabe 10 (Arithmetik) Berechnen Sie:


(a) e700

Ganzzahlige Datentypen knnen ganze Zahlen


in einem bestimmten Bereich speichern. Zum
Beispiel ist uint8 ein ganzzahliger Datentyp
der im Speicher acht Bits bentigt, um Zahlen im Bereich von 0 bis 255 zu spreichern;
28 = 256. Die Tabelle 9 zeigt die ganzzahligen Datentypen mit Speicherbedarf und Wertebereich. Die folgende Anweisung erzeugt die

(b) e710
Beschreiben Sie die Resultate.
Lsung:
1
2
3

1
2
3

>> exp(700)
ans =
1.0142e+304
>> exp(710)
ans =
Inf

In (b) wird Inf ausgegeben, da das Ergebnis


die grte positive Gleitkommazahl in Matlab
bersteigt. Diese Zahl ist
1
2
3

>> 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

Tabelle 9: Ganzzahlige Datentypen

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Variable x vom Datentyp uint8 und ordnet ihr


die Zahl 7 zu.
1

31. Nicht double-Datentypen

2
3

>> x = uint8(7)
x =
7

Auer double werden in Matlab auch noch


andere Datentypen zur Verfgung gestellt, um Hier ein paar Rechnungen:
Zahlen zu speichern und mit diesen zu rechnen. 1 >> x+4
Diese sind
2
ans =
single

3
4

int8 und uint8

int16 und uint16

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

so wird aufgerundet, falls die Zahl positiv und


abgerundet, falls die Zahl negativ ist. . . . . .
Mit den Funktionen intmax und intmin knnen Sie die grte bzw. kleinste Zahl des jeweiligen Datentyps ermitteln.
1
2
3

>> intmax(int32)
ans =
2147483647

Um eine Zahl mit dem Datentyp single zu


Die Rechnungen zeigen mehrere Eigenschaf- speichern, braucht man nur halb so viel Speiten. Das Ergebnis ist stets vom Datentyp cher wie mit dem Datentyp double. Dies zeiuint8 auch dann, wenn eine double-Zahl hin- gen die folgenden Zeilen.
zuaddiert wird. Diese wird zuvor gerundet.
1
>> a = single(5);
Wird die grte Zahl 255 berschritten, so 2 >> b = 5;
wird das Ergebnis gleich dieser grten Zahl 3 >> whos
gesetzt. Analog verhlt es sich, wenn das Er- 4 Name Size Bytes Class
gebnis kleiner als Null ist.
5
6

1x1

4 single array

>> single(4.1)+double(3)
ans =
7.1000
>> whos
Name Size Bytes Class

Aufgabe 11 (int8-Rechnungen) Finden Sie 7 b


1x1
8 double array
heraus, wie eine double-Zahl auf den Datentyp int8 gerundet wird.
single-Zahlen knnen mit double-Zahlen
Lsung: Die Rechnungen
verknpft werden. Das Ergebnis ist single.
1
2
3
4
5
6
7
8
9
10
11
12

>> 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

Ganzahlige und single-Datentypen


knnen nicht verknpft werden.

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

32. Merkmale von Matlab

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

zu einem Vektor der Lnge 5 erweitert. An jetzt


gibt es einen Zeilnvektor x der Lnge 5.

32.2. Variable Argumentenliste


Matlab verfgt ber eine groe Sammlung
von Funktionen. Diese knnen kein Eingabeargument oder mehrere Eingabeargumente und
kein Ausgabeargument oder mehrere Ausgabeargumente haben. Zwsichen Ein- und Ausgabeargument wird deutlich unterschieden. Die

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

specfun (help specfun) fr spezielle Funktionen. Zu den grundlegenden Funktionen


Gibt man ein zweites Ausgabeargument an, gehren die
so wird zustzlich der Koordinatenindex der trigonometrische Funktionen,
grte Koordinate mit ausgegeben.
Exponentialfunktionen,
3

1
2
3
4
5

>> [m,k] = max(x)


m =
4
k =
2

Logarithmusfunktionen,
hyperbolische Funktionen,
Potenzfunktionen,
Wurzelfunktionen,
Restbildungsfunktionen,
Vorzeichenfunktionen,

32.3. Komplexe Arrays und Arithmetik


Der fundamentale Datentyp ist in Matlab ein
mehrdimensionales Array bestehend aus komplexen Zahlen, wobei Real- und Imaginrteil Gleitpunktzahlen sind, die doppelt genau
gespeichert sind. Wichtige Spezialflle sind
Matrizen (zweidimensionale Arrays), Vektoren und Skalare. Die meisten Berechnungen
werden in Gleitpunktarithmetik durchgefhrt
und das in komplexer Arithmetik, wenn Daten
komplex auftreten. Dies steht im Unterschied
zu C/C++ und Java, wo nur reelle Zahlen und
reelle Arithmetik untersttzt werden.
Matlab verfgt jedoch auch ber ganzzahlige
Datentypen (siehe Abschnitte 31 und 75), die
jedoch hauptschlich aus Speicherplatzezienzgrnden anstatt zu Berechnungen verwendet werden.

33. Mathematische Funktionen

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.

Matlab verfgt ber viele mathematische


Funktionen, siehe doc elfun (help elfun)
fr grundlegende Funktionen und doc

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

Aufgabe 13 (Logarithmen) Finden Sie heraus,


welche Logarithmusfunktionen Ihnen in Matlab zur Verfgung stehen?
Lsung: Die Tabelle 11 zeigt die Logarithmusfunktionen. . . . . . . . . . . . . . . . . . . . . . . . .

Tabelle 10: Trigonometrische Funktionen

3
4
5
6

6.1232e-017
>> cosd(90)
ans =
0

Mathematisches Symbol
ln = loge
lb = log2
lg = log10

Aufgabe 12 (Trigonometrische F.) Besttigen


Sie die Tabelle

(in Grad) 90 180 270 360


cos
0 1
0
1

33.1. Rundungsfunktionen
In Matlab gibt es die folgenden Rundungsfunktionen:

Lsung: Hier die Besttigung:


1
2
3
4
5
6
7
8

Matlab
log
log2
log10

Tabelle 11: Logarithmusfunktionen

x
1/2 3/2 2
cos x
0
1
0
1
und die Tabelle

>> sqrt(4), exp(4), log(x^2+1)


ans =
2
ans =
54.5982
ans =
2.8332

ceil(x) Rundet x zur nchsten ganzen Zahl


auf (Runden nach Unendlich).

>> x = pi*[1/2 1 3/2 2];


>> cos(x)
ans =
0.0000 -1.0000 -0.0000 1.0000
>> phi = 180*[1/2 1 3/2 2];
>> cosd(phi)
ans =
0
-1
0
1

fix(x) Whlt von x den ganzzahligen Anteil


(Runden nach Null).
floor(x) Rundet x zur nchsten ganzen
Zahl ab (Runden nach minus Unendlich).
round(x) Rundet x zur nchsten ganzen
Zahl.

39

Copyright c G. Gramlich

Aufgabe 14 (Rundungsfunktionen) Berechnen Matlab auf zwei Arten bekannt machen:


Sie die folgenden Ausdrcke per Hand und Sie denieren den Funktionsterm in einer
berprfen Sie Ihre Ergebnisse mit Matlab.
function als m-File, siehe Abschnitt 44.
(a) round(-2.6)
Zum Beispiel erklrt man die quadratische
Funktion f (x) = x2 , x R durch folgenden
(b) fix(-2.6)
function-File f.m:
(c) floor(-2.6)
1

(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

Achten Sie darauf, Funktionsterme gleich in


vektorieller Form zu denieren, da diese meist
vektoriell ausgewertet werden bzw. weil Funktionen wie zum Beispiel quad (eine Funktion zur numerischen Integration, siehe Abschnitt 61) dies auch so verlangen. Funktionen
mit mehreren Variablen knnen ebenso erklrt
werden.

Wir zeichnen die Funktion round.


1
2
3

>> f = @(x) x.^2;

>> x = linspace(-3,3,1000);
>> y = round(x);
>> plot(x,y)

.......................................

Weitere Informationen nden Sie mit doc


function und doc function_handle
(help function
bzw.
help
function_handle).
Fr
symbolische
Funktionen, siehe Abschnitt 67.

Aufgabe 15 (Funktionen) Denieren Sie in


2
2
Matlab die Funktion f (x, y) = xye2(x +y ) ,
33.2. Verwendung mathematischer
(x, y) R2 und werten Sie diese an den Stellen
Funktionen in Matlab
(0, 0) und (1, 1) aus.
Lsung: Dies kann man zum Beispiel wie
Liegt Ihnen der Funktionsterm einer mathe- folgt erreichen:
matischen Funktion vor, so knnen Sie diesen

40

Copyright c G. Gramlich

2
3
4
5
6

>> f = @(x,y) -x.*y.*exp(-2*(x.^2+


y.^2));
>> f(0,0), f(1,1)
ans =
0
ans =
-0.0183

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

erhalten werden. Die Matlab-Funktion sqrt


angewendet auf einen Vektor x gibt nmlich
die Anweisung: Nimm von jedem Element von
x die Wurzel und schreib das Ergebnis als entsprechendes Element eines neuen Vektors (hier
y genannt). Man spricht von vektorielle Auswertung oder allgemein: In Matlab kann man
vektoriell programmieren! Diese einfache Art,
einen Befehl (hier das Wurzelziehen) elementweise anzuwenden, ist eine groe Strke von
Matlab. Sie ermglicht eine rasche Verarbeitung von groen Datenmengen. Der Vektor x
kann krzer eingegeben werden: x = 0:2:8.
Die Schreibweise bedeutet: Beginne mit 0 und
zhle 2 dazu, dann zhle wieder 2 dazu, usw.
bis die Grenze 8 erreicht ist. Diese Anweisung
ist bei der Eingabe von Vektoren mit vielen
Elementen sehr ntzlich.

Nehmen wir an, es sollen die Quadratwurzeln


der Zahlen 0, 2, 4, 6, 8, 10 berechnet werden.
Hier kommt uns Matlab sehr entgegen. Wir Aufgabe 16 (Vektoren erzeugen) Erzeugen Sie
fassen die x-Werte zu einem Zeilenvektor (ein- einen Zeilenvektor mit der ersten Koordinate
29 und der letzten 1, wobei sich die Koodinaten
dimesionales Array, Liste) zusammen:
absteigend um 2 unterscheiden sollen.
1
>> x = [0 2 4 6 8]
Lsung: Dies kann man wie folgt erreichen:
2
3

x =

1
2

>> x = 29:-2:0
x =
Columns 1 through 11
29
27
25 usw.
Columns 12 through 15
7
5
3
1

Vektoren werden in eckigen Klammern 3


(brackets) eingegeben. Die einzelenen Ele- 4
5
mente (Koordinaten) des Vektors sind dabei 6
durch Leerzeichen oder Kommas zu trennen.
Die Funktionswerte fr die einzelnen Werte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
von x mssen nun nicht einzeln berechnet
werden, sondern knnen alle auf einmal mit
Ist die Schrittweite gleich 1, so kann man die

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 =

1.0000 1.5000 2.0000


>> x = linspace(10,40,4)
x =
10
20
30
40
>> x = linspace(1,1.2,3)
x =
1.0000 1.1000 1.2000
>> x = linspace(0,1,3)
x =
0
0.5000 1.0000

4
5
6

Aufgabe 17 (Vektoren erzeugen) Geben Sie


die Vektoren a und b mit den Elementen
10, 8, . . . , 10 und 10, 9, 8, . . . mit kurzen
Anweisungen ein.
Lsung: Das geht wie folgt:
1

7
8
9
10
11
12

>> a = -10:2:10; b = 10:-1:0;

Mit der Funktion logspace ist es mglich,


. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . einen Vektor zu erzeugen, dessen KomponenAufgabe 18 (Vektoren erzeugen) Erzeugen Sie ten logarithmischen Abstand haben. Allgemein
x = logspace(a,b,n) quivalent zu xk =
einen Vektor y, der die Funktionswerte des na- ist a+(ba) k1
n1 , wobei k = 1, . . . , n und a, b reelle
10
trlichen Logarithmus an den Stellen 1, 3, 5, 7
Zahlen sind.
enthlt. Was ist y(1)?
Lsung: Das geht wie folgt:
1
2
3
4

>> 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)

Wir geben die Koordinaten explizit ein.


Wir verwenden eingebaute MatlabOperatoren oder Funktionen, wie zum
Beispiel: : oder linspace.
Wir lesen einen entsprechenden Datenle
ein, siehe Abschnitt 38.3.

35. Vektorenoperationen
Vektoren sind spezielle Matrizen. Fr Vektorenoperationen siehe die Abschnitte 36.3, 49,

42

Copyright c G. Gramlich

vor, zum Beispiel

50 und 51.

A=

36. Matrizen

1
7

2 2
.
3

Die Matrix A knnen wir nun Zeile fr Zeile


Ein rechteckiges Zahlenschema mit m Zeilen wie folgt in Matlab eingeben
und n Spalten heit (m, n)-Matrix. Vektoren
sind spezielle Matrizen. Ist n = 1, so liegt ein 1 >> A = [1 sqrt(2) -2; 7 -3 pi]
Spaltenvektor vor und ist m = 1, so handelt es 2 A =
3
1.0000 1.4142 -2.0000
sich um einen Zeilenvektor. Skalare sind (1, 1)- 4
7.0000 -3.0000 3.1416
Matrizen. Es ist blich, eine Matrix in eckige
oder runde Klammern zu setzen; wir whlen Die Zeilen werden durch ein Semikolon und
die eckige Schreibweise.
die Spalten durch ein Leerzeichen getrennt.
Matrizen sind in Matlab (und darberhinaus) Spalten knnen auch durch ein Komma gefundamental. In der Version 3 von Matlab und trennt werden. Besteht eine Matrix nur aus eiin frheren Versionen war die (komplexe) Ma- ner Zeile, so liegt eine Zeilenmatrix bzw. ein
trix berhaupt der einzige Datentyp. Nun gibt Zeilenvektor vor. Analog spricht man von eies in Matlab aber mehrere Datentypen, sie- ner Spaltenmatrix bzw. von einem Spaltenvekhe Abschnitt 75 und Matrizen sind speziel- tor, wenn die Matrix nur eine Spalte hat. Eile mehrdimensionale numerische Arrays, sie- ne Zeilenmatrix hat die Gre (1, n) und eine
he Abschnitt 74. Liegt eine Matrix vor und Spaltenmatrix (m, 1).
stehen nicht mathematische Operationen im Will man nun einzelne Elemente der Matrix A
Vordergrund, so nennt man eine Matrix ein ndern, so kann dies auf zwei Arten geschezweidimensionales Array. Dann steht das da- hen. Die Anweisung A(1,3) = 5 ndert zum
tentechnische, eziente Arbeiten im Vorder- Beispiel das Elemente a = 2 der Matrix A
13
grund. Steht die Mathematik im Vordergrund, zu a = 5 ab. Eine zweite Mglichkeit dies
13
dann siehe auch die Abschnitte zur Linearen zu tun besteht darin, den Workspace Browser
Algebra 49, 50 und 51.
zu verwenden und das Symbol fr die Matrix
Mit doc elmat (help elmat) erhalten Sie A anzuklicken. Der Array-Editor wird genet
viele Infos rund um Matrizen; unter doc ops und Sie knnen die Elemente interaktiv ndern.
(help ops) sind die Operatoren zu nden.
Besteht eine Matrix nur aus einer Zeile, so liegt
eine Zeilenmatrix bzw. ein Zeilenvektor vor.
Einen Zeilenvektor mit Zahlen gleichen Ab36.1. Matrizen erzeugen
stands kann man zum Beispiel wie folgt erzeuEs gibt mehrere Mglichkeiten, Matrizen in gen
Matlab zu erzeugen.
1
>> x = 2:6
Ist m = 2 und n = 3, so liegt eine (2, 3)-Matrix

43

x =

Copyright c G. Gramlich

Funktion
zeros
ones
eye
rand
randn

Die Schrittweite muss nicht notwendigerweise


Eins sein. Im folgenden Beispiel ist die Schrittweite 0.2:
1
2
3

>> x = 1.3:0.2:1.8
x =
1.3000 1.5000

Bedeutung
Nullmatrix
Einsmatrix
Einheitsmatrix
Zufallsmatrix
Zufallsmatrix

Tabelle 12: Elementare Matrizen

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

Eine (n, n)-Matrix heit quadratische Matrix;


dann gengt ein Argument, um zum Beispiel
die (3, 3)-Einheitsmatrix mit der Funktion eye
zu erzeugen.
1
2
3

>> eye(3)
ans =
1
0
0
1
0
0

Ntzliche und hug verwendete Matrizen 4


0
1
stellt Matlab als eingebaute Funktionen zur 5
Verfgung, siehe Tabelle 12. Um sie zu erzeugen, muss man nur die Gre angeben. Die Aufgabe 19 (Symmetrische Matrizen) ErzeuFunktion ones erzeugt eine Matrix mit lauter gen Sie eine 10 10 symmetrische Matrix S
Einsen.
mit Zufallswerten zwischen 0 und 8!
Lsung:
1
>> ones(2,3)
2
3
4

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

Tabelle 13: Spezielle Matrizen

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;

ihre Inverse mit invhilb. Die Funktion magic


0.4
3.1
5.5

erzeugt magische Quadrate.

9.4

5.5
3.3

Mit der load Funktion besteht eine weitere

4.6 4.3 .
A = 0.3

Mglichkeit, Matrizen zu erzeugen.

0.4 4.6

9.0

5.0
5.5
7.7
7

36.2. Der Doppelpunkt


Wie kann man in Matlab die Gre von A bestimmen? Geben Sie die Ordnung (Gre) dieser Matrix an!
Lsung: Die Ordnung der Matrix A ist (5, 3).
Mit der Funktion size kann man die Ordnung
in Matlab bestimmen. Die Indizes sind: 1, 1,
2, 2 und 5, 2. . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

Soll die Schrittweite s sein, so ist die Syntax: 14


1
2
3
4
i:s:j. Diese Konstruktion funktioniert auch, 15
wenn die Zahlen nicht notwendig ganz sind.
Mit dem Doppelpunkt kann man eine Matrix
Wir geben Beispiele.
in einen langen Vektor umwandeln. Die Ele1
>> 1:5
mente werden spaltenweise aneinandergefgt.
2
ans =
3
4
5
6
7
8
9

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.

Die folgenden Beispiele zeigen, wie man aus


einer gegebenen Matrix, einzelne Elemente,
ganze Zeilen oder Spalten sowie Untermatrizen anspricht. Zunchst wird von der Matrix

>> 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

Die folgenden Anweisungen zeigen, wie man


aus einer Matrix die zweite Spalte streicht.
Hierzu benutzt man die leere Matrix []. Vollkommen analog kann man Zeilen streichen.
1
2
3
4
5
6
7
8

>> C = [1 2 3;4 5 6]
C =
1
2
3
4
5
6
>> C(:,2) = []
C =
1
3
4
6

Wir fassen zusammen:


A(z,s): Adressiert eine (Unter-) Matrix
von A, die durch den Indexvektor z fr die

46

Copyright c G. Gramlich

Zeilen und durch den Indexvektor s fr die Matrix


Spalten bestimmt ist.
A(z,:): Adressiert eine (Unter-) Matrix
von A, die durch den Indexvektor z fr die
Zeilen und durch alle Spalten bestimmt ist.

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

A(:,s): Adressiert eine (Unter-) Matrix


von A, die durch alle Zeilen und durch den
Indexvektor s fr die Spalten bestimmt ist. Welches sind die Werte der folgenden Ausdrcke? berlegen Sie sich die Resultate, be A(:): Adressiert alle Matrixelemente von A
vor Sie die Rechnung am Computer durchfhals einen (langen) Spaltenvektor, indem alle
ren.
Spalten aneinandergefgt werden.
A(i): Adressiert eine (Unter-) Matrix von 1 A(2,:) A(:,1)
2
A(:,5) A(1,1:2:5)
A, die durch den einzigen Indexvektor i be3
A([1,5]) A(4:-1:1,5:-1:1)
stimmt ist, indem A als (langer) Spaltenvektor interpretiert wird.
Lsung:
Aufgabe 22 (Doppelpunkt) Gegeben sei die 1 >> A = [1 2 3 4 5; 6 7 8 9 10; 11
folgende Matrix A:
12 13 14 15; 16 17 18 19 20; 21
2

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

Aufgabe 23 (Doppelpunkt) Gegeben ist die

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

Matlab. Es handelt sich hierbei um Operationen der Matrizenalgebra (Lineare Algebra).


Die Operatoren + und - knnen eingesetzt
werden, um Matrizen miteinander zu addieren
bzw. zu subtrahieren. Der Operator * mulitpliziert zwei Matrizen miteinander, wenn die
Multiplikation deniert ist, das heit wenn die
Matrizen die entsprechenden Gren haben.

16
11
6
1

.......................................

Aufgabe 24 (Zeile lschen) Lschen Sie von


der Matrix

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.

die zweite Zeile.


Lsung:
1

>> 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 = [1 -2; 3 2]; x = [3; 1];


>> A*x
ans =
1
11

Aufgabe 25 (Matrizenoperationen) Es seien A,


B, C und D die folgenden denierten Matrizen.

36.3. Matrizen- und Arrayoperationen


2
1
1 3

A = 2 4 B = 4 2

Die Tabelle 14 zeigt Matrizenoperationen in

7 1
3 1
Symbol
Bedeutung
1 5
+
Addition
C=
5 3
Subtraktion
*
Multiplikation
und

Potenzieren
3 2

0
5 .
D= 1

Tabelle 14: Matrizenoperationen


2 1
6
.......................................

48

Copyright c G. Gramlich

Berechnen Sie zunchst per Hand folgende


Matrizenalgebra. Geben Sie die Matrizen dann
in Matlab ein und vergleichen Sie die jeweiligen Resultate.

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

(b) B + C ist nicht deniert.


(c)
1
2
3
4
5

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

den Operationen ausgefhrt haben. berprfen


Sie Ihre Ergebnisse in Matlab.
1
2

a = [2 -1 5 0];
b = [3 2 -1 4];

(a) c = b+a-3;
(b) c = a./b;

Tabelle 15: Elementweise Operationen

(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

>> B = [7 8; 9 10; 11 12];


>> A.*B
ans =
7
16
27
40
55
72

1
2
3
4
5
6

>> C = [1 2; 3 4];
>> D = [5 6; 7 8];
>> C.*D
ans =
5
12
21
32

Aufgabe 26 (Operationen) Berechnen Sie A2


und A.2 von der Matrix
Aufgabe 28 (Matrizenoperationen) Warum
gibt es in Matlab keinen .+-Operator?
1
>> A = [1 2; 3 4];
Lsung: Die Matrizenaddition ist bereits
elementweise deniert. . . . . . . . . . . . . . . . . .
Lsung: Es ist
1
2
3
4
5

>> 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

Im Spezialfall, wenn x und y Spaltenvektoren


sind, ist x*y das Skalarprodukt. Dies lsst
sich auch mit dot(x,y) berechnen. Mit der
.......................................
Funktion cross kann man das Kreuzprodukt
Aufgabe 27 (Arrayoperationen) Geben Sie je- ausrechnen. Fr weiter Einzelheiten siehe Abweils den Vektor c an, nachdem Sie die folgen- schnitt 49.
6
7

50

Copyright c G. Gramlich

Aufgabe 29 (Matrizenoperationen) Es seien


zwei Vektoren a und b wie folgt deniert:

1
2

a = [2,4,6]; b = [1,2,3];

3
4
5

Fhren Sie die folgenden Matlab-Operationen


durch. Welche sind deniert und welche nicht?
Erklren Sie! Was sind die Resultate?
1
2
3
4
5
6
7
8
9
10
11
12

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

>> A = [1 2 3; 3 1 -2; 5 -1 0];


>> B = [1 3; -1 5; 2 -2];
>> kron(A,B)
ans =
1
3
2
6
3
9
-1
5
-2
10
-3
15
2
-2
4
-4
6
-6
3
9
1
3
-2
-6
-3
15
-1
5
2 -10
6
-6
2
-2
-4
4
5
15
-1
-3
0
0
-5
25
1
-5
0
0
10 -10
-2
2
0
0

.......................................
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

Das Signal hat 101 Werte. . . . . . . . . . . . . . . .

1 2
A= 3

5 1
0
Wird ein Skalar in Matlab zu einer Matrix addiert oder Subtrahiert, so wird die Zahl zu jeund

dem Matrixelement addiert bzw. subtrahiert.


3

Das Gleiche gilt auch bei Mulitplikation und


.
1

5
B=

Division mit einer Zahl. Beispiel:


2 2
1

Lsung: Das direkte Produkt ist auch unter


dem Namen Kronecker-Produkt bekannt und
kann mit der Funktion kron berechnet werden.

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

Die Funktion reshape ndert die Ordnung


einer Matrix: reshape(A,m,n) erzeugt eine
(m, n)-Matrix aus der Matrix A, wobei die Elemente spaltenweise extrahiert werden.
1
2
3
4
5
6
7

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)

Matrizen manipulieren kann.

52

Copyright c G. Gramlich

36.5. Datenanalye

(b) rot90(A,3)
(c) fliplr(A)

Die Tabelle 17. zeigt grundlegende Funktio-

(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

Tabelle 17: Datenanalye

nen zur Analyse von Daten. Der einfachste Gebrauch dieser Funktionen ist, wenn die Daten
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . in Vektoren gegeben sind. Zum Beispiel:
6

Aufgabe 35 (fliplr) Spiegeln Sie von der


Matrix

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

Die Funktion sort sortiert in aufsteigender


Ordnung; absteigende Ordnung erhlt man
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . durch das Extraargument descent. Sind die
6

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

Aufgabe 36 (Datenanalye) Gegeben seien die


Vektoren
1
2

25
26
27

x = [0 3 -2 7];
y = [3 -1 5 7];

und die Matrix

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

.......................................

Aufgabe 37 (Datenanalye) Bestimmen Sie die


Werte der folgenden Ausdrcke. berprfen
Bestimmen Sie folgende Ausdrcke, zunchst Sie Ihre Ergebnisse dann in Matlab.

mit Bleistift und Papier, danach mit Matlab.


1 0 4

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

37. Vektorielle Programmierung


Eine der groen Vorzge von Matlab besteht
darin, dass man Ausdrcke vektoriell programmieren und so auf Schleifen weitgehend verzichten kann. Was ist damit gemeint? Wir zeigen die Idee am Besten an einem einfachen
Beispiel. Will man zum Beispiel den Funktionsterm y = x2 im Punkt x = 1.4 auswerten, so
geht das wie folgt
1
2

>> 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

Aufgabe 38 (Grtes Element) Bestimmen Sie 1 >> x = linspace(0,3,100);


2
>> y = x.^2;
von der Matrix

1 2 3

In der ersten Anweisung werden hundert x

A= 4 5 6

Werte (ein Vektor mit hundert Koordinaten) er7 8 9


zeugt (hundert quidistante Punkte im Interdas grte Element.
vall [0, 3]) und in der zweiten Anweisung wird
Lsung: Dies kann man wie folgt erreichen:
der Vektor y mit hundert Koordinaten gene1
>> A = [1 2 3; 4 5 6; 7 8 9];
riert, der die entsprechenden Funktionswerte
2
>> max(max(A))
enthlt.
3

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

und das Programm schneller abluft. Einge- 38.1. Benutzereingabe


baute Matlab-Funktionen erlauben als Eingabeparameter fast immer Vektoren. Daher gilt: Mit der Funktion input kann der Benutzer interaktiv Daten eingeben.
Programmieren Sie vektoriell, wenn
1
>> x = input(Startwert: )
immer dies mglich ist!
2

Startwert: 1.5

Der Befehl vectorize kann in der ein oder


3
x =
anderen Situation hilfreich sein, siehe doc 4
1.5000
vectorize (help vectorize). In Abschnitt
47 gehen wir auf diese Thematik nochmals In diesem Beispiel wartet Matlab auf die Einausfhrlicher ein.
gabe eines Wertes durch den Benutzer. Ich haAufgabe 39 (Vektorielle Prog.) Berechnen Sie be 1.5 eingegeben und dieser Wert wird dann
2
ex in 200 quidistanten Punkten zwischen -3 der Variablen x zugewiesen. Die Eingabe wird
und 3 und speichern Sie die Werte in der Varia- als String interpretiert, wenn ein zweites Argument s angehngt wird:
blen y.
Lsung: Hier ein mglicher Lsungsweg:
1
>> MeinTitel = input(Titel: ,s
1
2

>> 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

>> disp(Die (2,2)-Hilbert-Matrix


)

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

Mehr Ausgabemglichkeiten hat man mit der


Funktion fprintf. In dem Beispiel

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

ist das Zeichen % der Beginn einer Formatbe- 19


zeichnung. 6.3f bedeutet, dass der Wert der 20
Variablen mit der Feldgre (zur Verfgung 21
gestellte Gesamtbreite) 6, 3 Nachkommastel- 22
23
len und in Fliepunktdarstellung ausgegeben
24
wird. Das Zeichen \n gibt einen Zeilenvor- 25
schub an, ohne dieses die folgende Ausgabe
in die aktuelle Zeile geschrieben werden wr- Lsung: Der Inhalt des Script-Files knnte etde. Siehe doc fprintf (help fprintf) fr wa wie folgt lauten:
weitere Informationen und Beispiele.
1

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))

Aufgabe 40 (Tabellen) Schreiben Sie einen


Script-File ExpTabelle und erzeugen Sie auf 7
dem Bildschirm die folgende Ausgabe der Exponentialfunktion e x . Whlen Sie 21 quidi- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
stante Punkte im Intervall [0, 1]. Verwenden
Sie dazu die Funktionen disp und sprintf
38.3. Dateien lesen und schreiben
oder fprintf.
1

Werte der exp-Funktion

2
3
4
5
6
7

k
exp(x(k))
---------------------1
1.0000
2
1.0513
3
1.1052

Eine groe Anzahl von Funktionen stehen zur


Verfgung, um formatierte Textdateien aus einer Datei zu lesen oder in eine Datei zu schreiben. Hierbei knnen Sie zwischen binrem und
lesbarem Ascii-Format whlen. Binrdateien
haben gegenber Ascii-Dateien die Vorteile,

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

Der File kann wie folgt zurckgelesen werden.

1
2

Tabelle 18: Dateien lesen und schreiben


3

te Funktionsliste erhalten Sie mit doc iofun


(help iofun).

4
5
6

Wir zeigen nun an einem Beispiel, wie man


Daten in einen File schreibt und lesen sie anschlieend wieder heraus. Bevor man mit einer Datei arbeiten kann, muss man sie mit der
Funktion fopen nen. Das erste Argument ist
der Dateiname und fr das zweite Argument
hat man mehrere Mglichkeiten unter anderem die Zeichen r fr Lesen (read) und w
fr Schreiben (write). Durch den Aufruf von
fopen wird eine Fileidentizierung zurckgegeben, die in den folgenden Anweisungen verwendet werden kann, um den File zu spezizieren. Die Daten werden mit der Funktion
fprintf geschrieben, wobei als erstes Argument die Fileidentizierung anzugeben ist. Das
Script
1
2
3

>> a = [30 40 50];


>> fid = fopen(MeinOutput,w);
>> fprintf(fid,%g m/h = %g km/h\n
,[a;8*a/5]);
>> fclose(fid);

7
8
9
10

>> fid = fopen(MeinOutput,r);


>> x = fscanf(fid,%g m/h = %g km/
h)
x =
30
48
40
64
50
80
>> fclose(fid);

Hierbei liest die Funktion fscanf die Daten


in dem angegebenen Format (hier %g, general oating point number), wobei die Strings
m/h = und g km/h bergangen werden.
Dies wiederholt sich so lange, bis der gesamte
File gelesen wurde und die Zahlen im Vektor x
gespeichert wurden.

39. Function Functions


In Matlab hat sich der Begri function function eingebrgert. Damit ist eine MatlabFunction gemeint, die ihrerseits als Eingabeargument eine Function bentigt. (MatlabFunctions werden wir noch ausfrhrlich behandeln). Ein Beispiel einer Function Functi-

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.

graphical. In the next twenty years an equally


great change will occur as we begin to
communicate with machines by speech.
Lloyd N. Trefethen

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

Hierzu nehmen wir an, dass die Messung des


zeitlichen Verlaufs der Abkhlung einer Flssigkeit die Werte aus der Tabelle 19 ergab. Wir

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 )

x = [0 0.5 1 1.5 2 2.5 3 3.5 4];


y = [62 55 48 46 42 39 37 36 35];

k=1:n

3. Ein Streckenzug muss gezeichnet werden,


der die Punkte (x1 , y1 ), (x2 , y2 ), . . . ,(xn , yn )
verbindet.
Das folgende Script zeigt die Realisierung:
1

Der Befehl
1

3.5

2. Die Funktion muss an jedem Diskretisierungspunkt ausgewertet werden:

wollen dieses Messergebnis nun grasch darstellen. Hierzu speichern wir die Zeitpunkte im
Vektor x und die Temperaturwerte in y, also
2

Abbildung 10: Abkhlung einer Flssigkeit

Tabelle 19: Abkhlung einer Flssigkeit

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)

Hierzu haben wir das Intervall [0, 2] in 20


quidistante Punkte eingeteilt und die Werte dem Vektor x zugeordnet. Die Sinusfunktion ist eine eingebaute Matlab-Funktion, die
Vektoren als Argumente verarbeiten kann. Dadurch wird der Vektor y erzeugt. Mit grid
zeichnen wir noch ein Gitter und geben mit
title der Abbildung noch eine berschrift.
1
2

0 = x1 < x2 < < xn = 2

60

>> grid
>> title(Die Sinusfunktion im
Intervall [0,2\pi])

Copyright c G. Gramlich

Die Abbildung 11 zeigt das Ergebnis.

Graph der Funktion

1 |x| 0.5

rect(x) =
0 sonst

Die Sinusfunktion im Intervall [0,2]


1

0.5

ber dem Intervall [3, 3].


Lsung: Wir denieren zunchst die Funktion rect in einem Function-File und zeichnen
dann mit plot den Graph der Funktion.

0.5

1
0

2
3
4

Abbildung 11: Ein einfacher Plot

function y = rect(x)
n = length(x);
y = zeros(n,1);
y = (x<0.5)-(x<-0.5);

Die folgenden Befehle zeichnen den Graph.


Aufgabe 41 (2D-Grak) Erzeugen Sie mit ei1
x = linspace(-3,3,1000);
nem einzigen plot-Befehl die Graphen der
2
y = rect(x);
Funktionsterme sin(kx) ber dem Intervall 3 plot(x,y)
[0, 2] fr k = 1 : 5.
4
axis([-3 3 -0.5 1.5])
Lsung: Dies kann man zum Beispiel mit den
beiden folgenden Methoden erreichen.
.......................................
1
2
3

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

Aufgabe 43 (2D-Grak) Geben Sie folgende


Befehle in Matlab ein.
1
2

x = linspace(0,1,200);
y = sqrt(1-x.^2);

Stellen Sie nun den Kreis x2 + y2 = 1 grasch


dar ohne dabei zustzliche Berechnungen anzustellen.
Lsung: Die Eingabe lautete
1
2

x = linspace(0,1,200);
y = sqrt(1-x.^2);

Dabei sei zu bemerken, das x.^2 und nicht


x^2 verwendet wurde. Hierbei wird durch
den Punkt sichergestellt, dass das Quadrieren
.......................................
Komponentenweise erfolgt und nicht die VekAufgabe 42 (2D-Grak) Zeichnen Sie den toroperation x x ausgefrt wird. Man will nun
13
14

61

Copyright c G. Gramlich

den Kreis in R2 zeichnen.


plot(x,y) liefert nur den Graphen im ersten
Quadranten. Also kann man durch geeignete
Spiegelung den Graph auch in den anderen drei
Quadranten zeichnen. Der Kreis kann in Matlab etwa wie folgt gezeichnet werden:
2
3
4
5
6
7

>>
>>
>>
>>
>>
>>
>>

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)

Abbildung 12: 3D-Plot mit plot3


Mit der Funktion subplot besteht die Mglichkeit, mehrere Bilder untereinander und/oIn diesem Beispiel haben wir die Funktioder nebeneinander in einer Figur zusetzen, sienen xlabel, ylabel, title und entsprehe doc subplot (help subplot).
chend zlabel zur Beschriftung der Abbildung verwendet. Die Notation \it im titleKommando stammt aus TEX, um Italic-Text zu
40.2. 3D-Grak
erzeugen. Farben, Marken und Linienstile knDie zur plot-Funktion analoge Funktion fr nen in der gleichen Weise wie bei der plotdie 3D-Welt ist die plot3-Funktion. Die Ver- Funktion beeinusst werden. So erzeugt zum
wendung von plot3 ist hnlich wie die von Beispiel plot3(x,y,z,r ) eine rot gestriplot, wobei statt Paare nun Tripel von Daten chelte Linie. Beachten Sie, dass fr 3D-Plots
einzugeben sind. Das folgende Beispiel zeigt box off gesetzt ist. Mit box on knnen Sie
den einfachsten Gebrauch: plot3(x,y,z) Ihrem Plot eine Box hinzufgen.
zeichnet eine Kurve im Raum, indem die Punk- Will man den Graph eines Funktionsterms
te x(i),y(i),z(i) in der vorgegebenen Rei- f (x, y) mit den beiden unabhngigen Variablen
henfolge verbunden werden. Das Ergebnis ist x, y zeichnen, so muss man die Funktionswerin Abbildung 12 zu sehen.
te auf einem zweidimensionalen Gitter in der
1

x, y-Ebene auswerten. Das Gitter kann mit der

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)

Als Beispiel soll der Graph der Funktion 6


2
2
f (x, y) = xye2(x +y ) ber dem Bereich
[2, 2] [2, 2] gezeichnet werden.
.......................................
1

2
3
4

>> [X,Y] = meshgrid


(-2:0.1:2,-2:0.1:2);
>> f = -X.*Y.*exp(-2*(X.^2+Y.^2));
>> mesh(X,Y,f)
>> xlabel(x), ylabel(y),
zlabel(f(x,y))

Die Abbildung 13 zeigt das Ergebnis.

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

mit den Funktionen mesh und ezmesh ber


dem Quadrat 3 x 3, 3 y 3.
Lsung:

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

oder als Einzeiler mit ezmesh.


Abbildung 13: f (x, y) = xye

2(x2 +y2 )

>> f = @(x,y) 1/5*cos(x)+y.*exp(-x


.^2-y.^2);
>> ezmesh(f,[-3,3])

Aufgabe 44 (3D-Grak) Zeichnen Sie den


Graph der Funktion
.......................................
f (x1 , x2 ) =

1
2 x2 + 2 fr x1 , x2 0
2
sonst.

40.3. Funktionsdarstellungen

im Bereich (x1 , x2 ) [2, 2]2 .


Kennt man den Funktionsterm einer reellwerLsung: Den Graph kann man wie folgt plot- tigen Funktion einer reellen Variablen, so kann
ten.
man mit den Funktionen fplot und ezplot
(easy plotting) den Graph einfacher darstel1
>> [X,Y] = meshgrid
(-2:0.1:2,-2:0.1:2);
len als mit plot. Die Funktion fplot ver-

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

im Intervall [3, 3]. Mit


1

5
6

>> fplot(@humps,[-2,2])

7
8

plottet man im Intervall [2, 2] die eingebaute


humps-Funktion
1
f (x) =
(x 0.3)2 + 0.01
1
+
6,
(x 0.9)2 + 0.04

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])

Der Graph ist in Abbildung 15 dargestellt.

Die Abbildung 14 zeigt den Graph von humps

sin(x.2)2 cos(x)
3

100

2
80

1
60

0
40

20

2
0

20
2

x
1

Abbildung 15: Graph

Abbildung 14: Graph der humps-Funktion


im Intervall [2, 2].

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

Abbildung 16: Darstellungen


Funktion

der

0
2

2
x

peaksAbbildung 17: Graph

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])

Die Abbildung 18 zeigt Hhenlinien der


peaks-Funktion, wobei die Hhenlinien nun
mit der Funktion interp2 geglttet sind. Auerdem bekommen die Hhenzahl einen leicht
gelblichen Hintergrund mit einem leicht grauen Rahmen. Die Figure wurde mit Hilfe der
Anweisungen erzeugt:
1
2
3
4

Die Abbildung 17 zeigt den Graph der Funkti2


2
on f (x, y) = xe x +y , (x, y) R2 , wobei hier die

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

x = cos(3 t) cos(t), y = cos(3 t) sin(t)

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

Abbildung 18: Geglttete Hhenlinien


peaks-Funktion

0.5

der

Abbildung 19: Bltenblattkurve

40.4. Parametrisierte Kurven

ezplot(t-sin(t),1-cos(t),[0,4*
pi])
grid on, xlabel(x(t)),
ylabel(y(t))

Mit Hilfe der Funktionen ezplot und 2


3
ezplot3 lassen sich Kurven in Parameterdarstellung in zwei und drei Dimensionen
darstellen. Als Beispiel einer ebenen Kurve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
betrachten wir eine dreiblttrige Bltenblatt- Aufgabe 48 (Ebene Kurve) Zeichnen Sie die
kurve (Trochoide) Sie hat die Parameterform Kurve
x = cos(3t) cos(t), y = cos(3t) sin(t),
t [0, 2]. Mit Hilfe der Anweisung
x = sin(t) + t
1
2
3

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.

erzeugt man die Abbildung 19.


1

Aufgabe 47 (Ebene Kurve) Plotten Sie die Zykloide (Rollkurve)

ezplot(sin(-t)+t,1-cos(-t)
,[0,4*pi])

.......................................

x(t) = t sin t

Aufgabe 49 (Ebene Kurve) Zeichnen Sie die


Kurve

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

erzeugen die rumliche Kurve in Abbildung


20. Durch das zustzlich Argument animate
x = exp(0.2 t) cos(t), y = exp(0.2 t) sin(t), z = t

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

Abbildung 20: Rumliche Kurve

im x, y, z-Raum fr 0 t 20. Animieren


Sie!
Lsung: Die Schraubenlinie mit Animation
erhlt man wie folgt:

im Funktionsaufruf erhlt man eine Animati- 1 >> ezplot3(cos(t),sin(t),t


,[0,20*pi],animate)
on der rumlichen Kurven in dem Sinn, dass
ein roter Punkte vom Anfagang- zum Endpunt
.......................................
luft.
Aufgabe 50 (Rumliche Kurve) Plotten Sie die Aufgabe 52 (Rumliche Kurve) Zeichnen Sie

67

Copyright c G. Gramlich

die konische Spirale

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

im x, y, z-Raum fr 0 t 20. Animieren


Sie!
Lsung: Die konische Spirale mit Animation
erhlt man wie folgt:

2
0
2
10

>> ezplot3((1-t)*cos(t), (1-t)*


sin(t), t, [0,20*pi],
animate)

10

0
y

.......................................

40.5. Parametrisierte Flchen


Mit den Matlab-Funktion ezmesh und
ezsurf knnen parametrisierte Flchen im R3
dargestellt werden.

5
10

0
10

Abbildung 21: Ein Torus


Aufgabe 53 (Parametrisierte Flchen) Welche
Flche entsteht durch den folgenden Aufruf:
1

ezsurf(2*cos(u)*cos(v),2*sin(u)
*cos(v),2*sin(v),[-pi/2,pi
/2]),
axis equal

Ein Torus entsteht, wenn ein Kreis um eine


2
Achse rotiert, die in der Ebene des Kreises,
aber auerhalb des Kreises verluft. Eine PaLsung: Es entsteht eine Halbkugel. . . . .
rameterdarstellung eines Torus ist:
Aufgabe 54 (Parametrisierte Flchen) Welche
x = (a + b cos ) cos
Flche entsteht durch den folgenden Aufruf:
y = (a + b cos ) sin
1
ezsurf(u*cos(v),u*sin(v),2*v
z = b sin

,[0,8*pi]), 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

Abbildung 22: Wendelche

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;

x-Achse einschliesst, so ist eine Parameterdar- 40.7. Implizite Flchen


stellung der Wendelche durch
Implizit denierte Flchen knnen ebenfalls
c
x = lt cos , y = lt sin , z =
,
dargestellt werden. Hier ein Beispiel, siehe Ab2
bildung 23.
fr 0 , 0 t 1 gegeben. Der Parameter c bezeichnet die Ganghhe, das heit den
Hhengewinn bei einer vollen Umdrehung.

40.6. Implizite Kurven


Mit der Funktion ezplot lassen sich auch implizit denierte Kurven darstellen. Der folgende Script gibt einige Beispiele:
1
2

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;

Abbildung 23: Implizite Flche


1
2

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

camlight, lighting gouraud,

40.8. Koordinatenachsen skalieren


Beachten Sie, dass Matlab die x- und y-Achse
(und natrlich auch die z-Achse im 3D Fall)
automatisch skaliert. Wollen Sie diesen Automatismus nicht, so knnen Sie mit axis (doc
axis) per Hand die Achsen begrenzen.
Zum Beispiel erzeugt axis([-4,4,-2,2])
ein Koordinatensystem, dessen x-Achse von -4
bis 4 und deren y-Achse von -2 bis 2 begrenzt
ist. Wenn Sie mchten, dass die x- und y-Achse
gleich lang, also quadratisch sind, dann mssen Sie axis square eingeben (Quadratische
Bildche). Wollen Sie dagegen, dass die xund y-Achse die gleiche Skalierung haben, so
geht das mit dem Befeht axis equal. Die
Abbildung 24 zeigt dies anhand des Bereichs

Beschreibung
Logarithmisches KO-System
x-Achse logarithmisch
y-Achse logarithmisch

Tabelle 20: Logarithmische Skalierungen


Aufgabe 55 (Skalierungen) Zeichnen Sie den
Graph der Funktion y = 3e1/2x , x R in
einem rechtwinkligen Koordinatensystem von
x = 0 bis x = 10, wobei die y-Achse logarithmisch skaliert sein soll.
Lsung: Mit
1
2
3

>> x = linspace(0,10);
>> y = 3*exp(-0.5*x);
>> semilogy(x,y); grid;

erhalten wir die Abbildung 25. Der Graph der


1

10
normal
2

10

0
2
4
2

0
equal

4
1

10
0
2

2
2

0
square 2

10

10

Abbildung 25: y = 3e1/2x , x R

2
4 2 0 2 4

Abbildung 24: Skalierungen

Exponentialfunktion ist wie erwartet eine Gerade. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

[4, 4] [2, 2].

Aufgabe 56 (Skalierungen) Zeichnen Sie den

Um logarithmische Skalierungen zu erhalten, Graph der Funktion y = x, x R in einem


stehen spezielle Funktionen zur Verfgung, rechtwinkligen Koordinatensystem von x = 1
siehe Tabelle 20.
bis x = 1000, wobei die x- und y-Achse loga-

70

Copyright c G. Gramlich

rithmisch skaliert sein soll.


Lsung: Mit

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

Abbildung 27: Zwei Skalierungen

x, x 1

Quadratwurzelfunktion ist wie erwartet eine Achse ist gewhnlich linear skaliert, whrend
Gerade. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . die rechte y-Achse logarithmisch skaliert ist.

40.9. Zwei y-Achsen

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

40.11. Spezielle Grakfunktionen

feld wurde mit


1

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

>> [X,Y] = meshgrid(-2:0.5:2);


>> quiver(X,Y,-Y,X), grid,
>> axis equal

erzeugt. Jeder Vektor ist tangential zu einem


Kreis um den Ursprung. Die Lnge des Vektors ist durch den Radius des Kreises gegeben.
Das Vektorfeld kann als Geschwindigkeitsfeld
eines Rades interpretiert werden, das sich gegen den Uhrzeigersinn dreht.
Aufgabe 57 (Vektorfeld) Stellen Sie das ebene
Vektorfeld
f : R2 R2
(x, y) (x, y)

Tabelle 21: Weitere Grakfunktionen

dar.
Lsung: Die Anweisungen

40.12. Vektorfelder visualisieren

1
2

>> [X,Y] = meshgrid(-2:0.5:2);


>> quiver(X,Y,X,Y), grid
>> axis equal

Mit der Funktion quiver (doc quiver, help 3


quiver) knnen Sie Vektorfelder darstellen.
Das ebene Vektorfeld f (x, y) = (y, x), (x, y) erzeugen die Abbildung 29. . . . . . . . . . . . . .
R2 ist in Abbildung 28 dargestellt. Das Vektor2
2

1
y

0
0
1
1
2
2

0
x

Abbildung 29: Vektorfeld


Abbildung 28: Vektorfeld

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

>> [X,Y,Z] = meshgrid(-2:1:2);


>> quiver3(X,Y,Z,X,Y,Z,0)
>> xlabel(x), ylabel(y),

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

>> [X,Y] = meshgrid(0:2:8,0:2:8);


>> quiver3(X,Y,zeros(5),2*ones(5)
,0,ones(5),0)
>> xlabel(x), ylabel(y)

5
0
y

0
5 5

Abbildung 31: Vektorfeld

erzeugen die Abbildung 30. . . . . . . . . . . . . .

Aufgabe 60 (Vektorfeld) Stellen Sie mit der


Funktion quiver das ebene Vektorfeld

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,

Abbildung 30: Vektorfeld


erzeugen die Abbildung 32. . . . . . . . . . . . . .
Aufgabe 59 (Vektorfeld) Stellen Sie mit der Aufgabe 61 (Vektorfeld) Stellen Sie mit der
Funktion quiver3 das rumliche Vektorfeld
Funktion quiver das ebene Vektorfeld
f:

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

Textverarbeitungssystem einbinden. Soll das


Grakformat Encapsulated PostScript sein
(Dateiendung: eps), so geht das zum Beispiel
wie folgt:

6
4
2
0

2
2

4
6
6

3
4

5
6
7

Abbildung 32: Zu Aufgabe 60

%-Erzeuge eine Grafik.


surf(peaks(30));
%-Setze den Hintergrund blau.
set(gcf,Color,blue);
set(gcf,InvertHardCopy,off);
%-Exportiere in File MyFile.eps
print -depsc2 MyFile.eps

[X,Y] = meshgrid(-6:2:6);
quiver(X,Y,2*X-3*Y,2*X+3*Y), grid

Alternativ knnen Sie die Grak auch ber


das Graphical User Interface exportieren. Dies
geht wie folgt:

erzeugen die Abbildung 33. . . . . . . . . . . . . .

1. Erzeugen Sie eine Figure, zum Beispiel mit


surf(peaks(30));.

1
2

2. Whlen Sie aus dem Edit Men die Figure


Properties. Dies spricht die Property Editor Dialogbox an.

10

3. Whlen Sie den Style Panel, skrollen Sie


auf die Farbe Blue, klicken Sie unten auf
Apply und dann auf OK.

10
10

4. Whlen Sie aus dem File Men das Page


Setup. Dies spricht die Page Setup Dialogbox an.

10

5. Whlen Sie den Axes und Figure tap und


klicken Sie auf Keep screen background
color, damit Matlab nicht auf den weien
Hintergrund umschaltet, wenn Sie die Grak expotieren.

Abbildung 33: Zu Aufgabe 61


Weitere Informationen siehe doc vissuite.

6. Klicken Sie auf OK.

40.13. Graken exportieren und drucken


Hat man eine Grak erzeugt, so will man diese
hug in einem bestimmten Grakformat abspeichern und gegebenenfalls in ein Satz- oder

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

>> load gatlin

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

40.14. Digitale Bilder

>> image(X), colormap(map),


>> axis image

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

Abbildung 35: Pioniere der Mathematik

Abbildung 34: Das bin ich

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).

40.16. Handle Graphics

50

100

150

200

50

100

150

200

250

300

Abbildung 36: Clown

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.

40.17. Graphical User Interface (GUI)

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

Das Matlab-Graksystem verfgt auer der


Handle-Graphics ber eine weitere objektorientierte Grakkapazitt: Graphical User Interface (GUI). Damit hat man die Mglichkeit, Sliders, Buttons, Mens und andere Grakobjekte zu erzeugen, um so interaktive Benutzerschnittstellen zu generieren. Hierzu steht
eine GUI-Entwicklungsumgebung zur Verfgung, siehe guide. Fr weitere Einzelheiten
siehe doc uicontrol (help uicontrol).

Tabelle 22: Pixelbilder

40.18. Geometrische Krper


Zum Zeichnen der geometrischen Krper Ellipsoid, Kugel und Zylinder stehen die Funktionen ellipsoid, sphere und cylinder zur

76

Copyright c G. Gramlich

Verfgung.

Pyramide mit der quadratischen Grundche


Mit
[X,Y,Z]=ellipsoid(xm, ym, zm, A, B, C, D und der Spitze S wurde mit den
xr, yr, zr, n) werden die Koordina- folgenden Anweisungen erzeugt.
tenwerte eines Ellisoids berechnet, die mit 1 %-Ecken.
3D-Grakfunktionen dann geplottet wer- 2 E = [0 0 0; 1 0 0; 1 1 0; 0 1 0;
den knnen. Die ersten drei Argumente 3
0.5 0.5 1];
4
%-Kanten.
xm,ym,zm legen das Zentrum und die Argumente xr,yr,zr die Halbachsen fest. Das 5 K = [1 2 3 4;
1 2 5 nan;
optionale Argument n (Voreinstellung n=20) 6
7
2 3 5 nan;
bestimmt die Ausung bzw. die Dimension
8
3 4 5 nan;
der 3D-Koordinatenarrays X, Y und Z.
9
4 1 5 nan];
Die Funktionen sphere und cylinder knnen hnlich eingesetzt werden.

10

11
12

40.19. Flchenstcke (Patches)

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

Abbildung 37: Pyramide

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

se Eigenschaft besteht oder nicht, geben sie


dann einen entsprechenden Wahrheitswert zurck, der in Bedingungen fr Schleifen oder
Verzweigungen weiterverwendet werden kann.
In Matlab gibt es wie auch in C/C++, aber
anders als etwa in Pascal keinen expliziten
Datentyp, der die Wahrheitswerte wahr und
falsch speichern kann. Statt dessen wird ein
numerischer Wert ungleich 0 als wahr und der
Wert 0 als falsch betrachtet. Vergleichsoperatoren haben, hinter den arithmetischen, vor den
logischen Operatoren, die zweithchste Prioritt bei der Abarbeitung von Ausdrcken.

%-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),

Die Abbildung 38. zeigt die Situation grasch.

42. Logische Operatoren und


logische Funktionen

10
5
z

Logische Operatoren existieren im Prinzip in


allen allgemein verwendbaren Programmiersprachen. Sie dienen dazu, Wahrheitswerte
miteinander zu verknpfen. In den meisten
Sprachen haben sie Namen wie and, or und
not und sind damit Schlsselwrter fr den
Compiler. In Matlab wie auch in C/C++
ist dies nicht der Fall; die logischen Operatoren sind hier aus Sonderzeichen aufgebaut.

0
5
10
0
10
x

10

10

Abbildung 38: Pyramide mit Inkugel


.......................................

42.1. Logische Operatoren

41. Vergleichsoperatoren,
Vergleichsfunktionen

Werden Matrizen mit logischen Operatoren


verknpft, so geschieht dies komponentenweise. Die Tabelle 23 zeigt die logischen OperatoVergleichsoperatoren und Vergleichsfunktio- ren.
nen dienen dazu, zwei Matrizen elementwei- Verknpft man zwei Matrizen mit einem logise hinsichtlich einer bestimmten Eigenschaft schen und, so ist die entsprechende Ergebniszu vergleichen. In Abhngigkeit davon, ob die- komponente 1, wenn die beiden Komponenten

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

Tabelle 23: Logische Operatoren

(c) k

(d) b-k > a

von Null verschieden sind.


1
2
3
4
5

>> x =
>> y =
>> x &
ans =
1

(e)

[1 0 2 3 0 4];
[5 6 7 0 0 8];
y
0

= 0
(a == 3*b)

(f) -k <= k+6


(g) a<10 & a>5
0

(h) abs(k)>3 | k<b-a

43. Steuerstrukturen

42.2. Logische Funktionen

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

Darber hinaus gibt es zustzliche Funktionen,


die die Existenz spezieller Werte oder Bedingungen testen und ein logisches Resultat zurckgeben. Weitere Informationen ber logische Operatoren und Funktionen ndet man
mit doc ops (help ops).

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

schlieend schrittweise mit Werten fllt.


Betrachten wir hierzu obige erste forSchleife und wie die Variable x zu einem 11-dimensionalen Zeilenvektor wird.
Im ersten Schleifendurchlauf ist x ein Vektor der Lnge 1 (ein Skalar). Im zweiten Durchlauf weist x(2) den Speichermanager an, x zu einem zweidimensionalen Vektor zu machen. Im dritten Durchlauf wird der Speichermanager durch x(3)
angewiesen, x in einen Vektor der Lnge 3
umzuformen. Dies setzt sich fort, bis das
Ende der for-Schleife erreicht ist und x
11 Koordinaten hat. Es ist eine Konvention in Matlab, dass durch diese Konstruktionsweise ein Zeilenvektor entsteht.

>> f(1) = 0; f(2) = 1;


>> for i=3:20
f(i) = f(i-1)+f(i-2);
end

Der Zeilenvektor f beinhaltet die Zahlenwerte. Bekannterweise nhern sich die Quotienten zweier benachbarter Fibonacci-Zahlen

der Zahl ( 5 1)/2. Sie knnen das mit


f(1:19)./f(2:20) nachvollziehen.
Will man innerhalb einer Schleife eine Matrix
(Vektor) erzeugen, so wie in dem Beispiel
1
2
3

>> for k = 1:11


x(k) = (k-1)*(1/10);
end

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);

Anschlieend werden die Zustandsvektoren 10


gezeichnet. Die Anzahl der Iterationen knnen
Weitere Informationen ber Steuerstrukturen
Sie eingeben.
ndet man mit doc lang (help lang).
1
2
3
4
5

A = [0.8 0.3; 0.2 0.7];


z = [1;0]; x = z; k = 0;
kend = input(Iterationen: );
while k < kend
z = A*z;
x = [x z];
k = k+1;
end
plot(0:kend,x,o-), grid

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

Ein Script-File (Kommando-File) ist eine Folge von gewhnlichen Matlab-Anweisungen.


Die Anweisungen in einem Script-File wer43.4. switch-Anweisung
den ausgefhrt, wenn man den File-Namen ohHat im folgenden Beispiel die Variable x den ne das Krzel angibt. Ist zum Beispiel der
Wert -1, so wird x ist -1 auf dem Bild- File-Name versuch.m, so gibt man einfach
schirm ausgegeben. Entsprechendes geschieht versuch ein. Variablen in einem Script-File
sind global, siehe Abschnitt 45. Auch kann
bei den anderen Fllen.

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)

Dieser Script-File sortiert den Spaltenvektor


Daten mit der Funktion sort und berechnet
den arithmetischen Mittelwert (mean), den Median (median) und die Standardabweichung
(std) der Werte im Datenvektor Daten. Gibt
man den Namen ErstesScript nach dem
Matlab Prompt ein, so erhlt man folgende
Ausgabe:
1
2
3
4
5
6
7
8
9
10
11
12
13
14

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)

Dieser Script-File erzeugt 1000 Zufallszahlen


und zeichnet ein Histogramm der Verteilung
der Anzahl der reellen Eigenwerte. Die Abbildung 39 zeigt ein mgliches Resultat. Wollen
Sie sehen, wie Ihr Script-File den von Ihnen
geschriebenen Code abarbeitet, so geben Sie
echo on ein. Mit echo off knnen Sie den
Vorgang wieder rckgngig machen.

82

Copyright c G. Gramlich

600

beachten.

500

Damit ein File ein Function-File ist, muss er


mit dem Schlsselwort function beginnen,
dann folgen die Ausgabeargumente (in eckigen
Klammern), der Funktionsname und schlielich die Eingabeargumente (in runden Klammern). Die Form aller Function-Files ist

400

300

200

100

1
0

2
0

function [Out_1,...,Out_n] =
Name(In_1,...,In_m)
< Irgendwelche Anweisungen >

Abbildung 39: Histogramm zum Script

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

heaviside. Wo gibt es Unterschiede?


Lsung: Die Funktion h ist durch den
Seit Matlab 7 knnen Sie auch Blcke von Co- Function-File
des auskommentieren, indem Sie den Code in
1
function y = h(t)
zwei spezielle Kommentarzeielen setzen:
2
1
2
3

%{
<Block>
%}

y = ( t>=0 );

deniert und mit den Anweisungen


1

fplot(@h,[-3,3,-0.5,1.5]), grid

<Block> steht fr eine beliebige Anzahl von


Codezeilen. Matlab betrachtet dann alle Zeilen erhlt man die Abbildung 40.
zwischen %{ und %} als Kommentar. Blockkommentare knnen auch geschachtelt wer1.5
den.
1

44.7. bungsaufgaben

0.5

Aufgabe 64 (Function-File) Schreiben Sie


einen Function-File, der von einem Vektor x
den arithmetischen und geometrischen Mittelwert berechnet und die Werte zurckgibt.
Lsung: Die folgende Funktion tut das Gewnschte.
1
2
3

function [aM,gM] = Mittelwerte(x)


aM = mean(x);
gM = prod(x)./length(x);

.......................................
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

Abbildung 40: Sprungfunktion


Die Funktion heaviside aus Matlab ist an
der Stelle t = 0 undeniert, das heit Matlab
ordnet dem Nullpunkt NaN zu. . . . . . . . . . . .
Aufgabe 66 (Function-File) Zeichnen Sie die
Graphen der verschobenen Sprungfunktionen
h(t + T ), t R und h(t T ), t R fr T = 2 im
Intervall [4, 4].
Lsung: Die Funktionen knnen mit dem
Function-File
1

function y = hT(t,T)

berechnet. Zeichnen Sie diese Funktion im 2 y = ( t>=-T );


Intervall [2, 2]. Vergleichen Sie die Funktion h mit der in Matlab denierten Funktion berechnet werden. Die Anweisungen

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

erzeugen die Abbildung 41. . . . . . . . . . . . . .


h(t+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

Abbildung 41: Verschobene Sprungfunktionen

4
5

Aufgabe 67 (Function-File) Schreiben Sie jeweils einen Function-File, um die folgenden


stckweise denierten Funktionen zu berechnen:

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

erzeugen die Abbildung 42. . . . . . . . . . . . . .


Aufgabe 68 (Function-File) Schreiben Sie
einen Function-File, um folgende Funktion zu
berechnen:

x x < 0

f (x) = x2 0 x < 2

4 x 2

Testen Sie Ihre Funktion fr die Werte x =


2, 1.5, 2 und 6. Zeichnen Sie die Funktion f
mit fplot ber dem Intervall [3, 3]!
Zeichnen Sie die Graphen der Funktionen im Lsung: Der folgende Function-File deniert
Intervall [2, 2].
die Funktion f .

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

Abbildung 42: Graph der Funktionen

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

Fr das Polynom p(x) = x2 + 3x + 2 liefert der


kann man den Graph mit fplot(@f,[0,1]) Aufruf Horner([2,3,1],[2,3]) die Werte
zeichnen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12=p(2) und 20 = p(3).
Aufgabe 70 (Function-File) Zeichnen Sie die
konstante Funktion f (x) = 5, x R im Inter- 45. Globale und lokale Variablen
vall [0, 2].
Lsung: Eine Mglichkeit ist:
Die Variablen innerhalb jeder Funktion sind
1
>> f = @(x) 5;
lokal, die in Script-Files sind global. Globale

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);

Die analoge Version dieses kleinen Programms


in Matlab wre:
1
2
3
4
5

s = 0;
for n=1:100
s = s+n;
end
s

Dieser skalare Matlab-Code kann ezienter


und bersichtlicher geschrieben werden:
1
2

88

N = 1:100;
s = sum(N)

Copyright c G. Gramlich

Der erste Befehl erzeugt den Zeilenvektor N =


[1,2,...,100]. Die zweite Anweisung summiert die Koordinaten des Vektors N auf. sum
ist eine eingebaute Matlab-Funktion und vertrgt Vektoren als Argumente. Viele MatlabFunktionen knnen Vektoren oder Matrizen als
Argumente verarbeiten. Dies lsst eine vektorielle Verarbeitung zu.
Die rationale Funktion
f (x) =

1+

x
24

x
12

8
x2
384

stellt im Intervall [0, 1] eine Approximation an


die Exponentialfunktion e dar.
Der folgende Script zeigt, wie man die Auswertung dieser Funktion in einer skalaren Programmiersprache wie zum Beispiel FORTRAN oder C/C++ vornehmen msste.
1
2
3
4
5

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

In Matlab aber sind Vektoroperationen erlaubt,


das heit die for-Schleife kann durch eine einzige vektorwertige Anweisung ersetzt werden.
Der folgende Script-File zeigt eine vektorielle Implementierung der Funktion f . Der bersichtlichkeit wegen splitten wir den Term f (x)
in mehrere Terme auf.
1
2
3
4

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

durch die entsprechende Koordinate des Vek- 5 x/12+x^2/384))^8);


tors Nenner dividiert und anschlieend der 6 y = eval(vs,x);
Variablen Quotient zugeordnet. Schlielich 7 plot(x,exp(x),x,y,ro)
wird durch die Anweisung y = Quotient.8 8 legend(e,f)
punktweise potenziert, das heit jede Koordi.......................................
nate des Vektor Quotient wird mit 8 potenziert, bevor das Resultat der Variablen y zuge- Nicht alle Berechnungen sind jedoch vektoriordnet wird.
sierbar. In diesen Fllen muss man auf SchleiDie Matlab-Funktion vectorize vektorisiert fen zurckgreifen. Um diese Berechnungen
einen String automatisch. Hierzu betrachten jedoch schneller auszufhren, sollte man die
wir folgendes Beispiel. Sind die Vektoren Ausgabematrizen mit Nullen vorbesetzen (Preallokieren). Wir erlutern an einem Beispiel,
Zaehler und Nenner wie folgt deniert:
was damit gemeint ist. Angenommen es sei die
1
Zaehler = [1 2 3];
Matrix
2
Nenner = [4 5 6];
0.8 0.3
A=
0.2 0.7
dann ist Zaehler/Nenner keine vektorielle
Divsion, da vor dem Divisionszeichen / der gegeben und wir wollen die Eigenwerte der
Matrizen Ak fr k = 1, 2, . . . , 10 berechnen.
Punkt . fehlt. Die Anweisung
Die Eigenwerte sollen spaltenweise in der Aus1
>> vectorize(Zaehler/Nenner)
gabematrix E gespeichert werden. Das folgen2
ans =
de Script realisiert dies:
3
Zaehler./Nenner
1

erzeugt die gewnschte Syntax. Analog setzt


der Befehl vectorize vor den Zeichen * und
einen Punkt und ermglichst somit eine vektorisierte Operation.
Aufgabe 72 (Eziente Programme) Vektorisieren Sie den String ((1+x/24)/
(1-x/12+x2/384))8 und zeigen Sie grasch, dass f eine Approximation im Intervall
[0, 1] an die Exponentialfunktion e ist.
Lsung: Die folgenden Zeilen lsen die
Aufgabe.
1
2
3
4

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

Wir fassen noch einmal zusammen: Das Erset- Funktion


zen einer Schleife durch eine Vektoroperation
f (x) =2 sin(x) + 3 sin(2x) + 7 sin(3x)
nennt man Vektorisierung und hat drei Vorteile:
+ 5 sin(4x), x R
Geschwindigkeit. Viele eingebaute MatlabFunktionen werden schneller ausgefhrt, im Intervall [10, 10].
wenn man anstelle eines mehrfachen Auf- Lsung: Wir nutzen die vektorielle Programmierfhigkeit von Matlab, sowie etwas Matrirufs als Argument einen Vektor bergibt.
zenrechnung und knnen f so wie folgt ezi bersichtlichkeit. Es ist bersichtlicher, ein
ent darstellen.
vektorisiertes Matlab-Script zu lesen, als
1
n = 200;
das skalare Gegenstck.
2

Ausbildung. Im wissenschaftlichen Rechnen


ist man bei verschiedenen Rechnern interessiert, vektorisierte Algorithmen zu entwickeln und zu implementieren. Matlab untersttzt dies.

4
5

Der Graph der Funktion f ist in Abbildung 43


zu sehen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Somit gilt:
Vermeiden Sie Schleifen in Matlab,
wann immer dies mglich ist.

20

Vektorisieren Sie ihre Rechnungen,


wann immer dies mglich ist.

10

Aufgabe 73 (Programmierung) Schreiben Sie


die folgenden Matlab-Zeilen vektoriell.
1
2
3

10

for x = 1:10
y = sqrt(x);
end

20
10

Lsung: Die vektorielle und ezientere Programmierung ist:


1
2

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

Abbildung 43: Zu Aufgabe 74

48. Built-in Functions

.......................................

Wir haben breits gesehen (siehe Abschnitt


Aufgabe 74 (Programmierung) Plotten Sie die 37 und Abschnitt 47), dass viele Matlab-

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

>> which sin


built-in (C:\Programme\MATLAB\
R2009a\toolbox\matlab\elfun\
@double\sin) % double method

Diesen Abschnitt habe ich im Zusammenhang


mit meinem Buch [5] geschrieben. Viele Beispiele sind daraus. Im Folgenden werden wir je
nach Bedarf zwischen numerischen und symbolischen Funktionen hin und her wechseln,
das heit zwischen Grundfunktionen aus Matlab und zwischen Funktionen aus der Symbolic
Toolbox, siehe Abschnitt 67.

49.1. Lineare Gleichungssysteme und


Matrizen
Zu Matrizen siehe auch Abschnitt 36. Das lineare Gleichungssystem
x + y + 2z = 9

Im Gegensatz zu M-le functions kann man


den Quellcode dieser Funktionen nicht sehen.

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

Der Rckgabewert 5 bedeutet, dass es sich bei


der Funktion sin um eine built-in Funktion
handelt.

3
4
5
6

>> A = [1 1 2; 2 4 -3; 3 6 -5];


>> b = [9; 1; 0];
>> x = A\b
ans =
1.0000
2.0000
3.0000

brigens: Mit type kann man sich den M- 7


Code von Funktionen anschauen, die keine
built-ins sind. Zum Beispiel zeigt type hilb Alternativ knnen wir die Funktion rref verden M-Code der Funktion hilb, die eine Hil- wenden. Diese transformiert eine gegebene
bert-Matrix erzeugt. type pinv liefert den Matrix in reduzierte Zeilenstufenform.

92

Copyright c G. Gramlich

1
2
3
4
5

>> rref([A b])


ans =
1
0
0
0
1
0
0
0
1

Lsung: Die allgemeine Lsung ist die eindeutige Lsung x = (1, 2, 2). Dies zeigen die
folgenden Matlab-Zeilen.

1
2
3

1
2
3

Die Lsung kann nun direkt abgelesen werden.


Die Funktion inv berechnet die Inverse einer
Matrix. Daher nden wir die Lsung auch wie
folgt (Satz 1.8 aus [5])
1
2
3
4
5

>> x = inv(A)*b
x =
1.0000
2.0000
3.0000

4
5
6
7

Die Lsung ist eindeutig, sonst wre die Matrix


A singulr und Matlab htte mit einer Fehlermeldung geantwortet. Hier noch alternativ die
symbolische Lsung.
1

Wir besttigen Satz 1.9 aus [5] in Matlab.


1
2
3
4
5
6

>> A = [2 4 -2; 4 9 -3; -2 -3 7];


>> b = [2; 8; 10];
>> x = A\b
x =
-1.0000
2.0000
2.0000

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]

.......................................

Die Funktion inv kann sowohl fr


numerische als auch fr symbolische
Rechnungen verwendet werden. Dies
gilt auch fr viele andere Funktionen.

Aufgabe 76 (Lineare Systeme) Berechnen Sie


die allgemeine Lsung des linearen Gleichungssystems
4x1 8x2 = 12
3x1 6x2 =

2x1 + 4x2 = 6.

Aufgabe 75 (Lineare Systeme) Berechnen Sie


die allgemeine Lsung des linearen GleiLsung: Die allgemeine Lsung knnen wir
chungssystems
aus

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

ablesen. Demnach ist: x = (3, 0) + t(2, 1), t R


die allgemeine Lsung. Dieses Beispiel zeigt,
dass auch berbestimmte Systeme unendlich
viele Lsungen haben knnen. . . . . . . . . . . .

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]

Aufgabe 77 (Lineare Systeme) Berechnen Sie


die allgemeine Lsung des linearen Glei- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
chungssystems
Aufgabe 79 (Lineare Systeme) Berechnen Sie
die allgemeine Lsung von Ax = b mit
x2 + 3x3 = 1

3x1 + 6x2 3x3 = 2


4 1 0 0 0
4.1

1 4 1 0 0

2.4

6x1 + 6x2 + 3x3 = 5.

0 1 4 1 0 , b = 4.2 ,

A=

0 0 1 4 1
2.4

Lsung: Die allgemeine Lsung ist die ein0 0 0 1 4


4.1
deutige Lsung x = (3, 2, 1/3), denn es gilt
wobei es ganz Ihnen berlassen ist, wie Sie die
1
>> A = [0 -1 3; 3 6 -3; 6 6 3];
allgemeine Lsung herausbekommen.
2
>> b = [1; -2; 5];
Lsung: Die eindeutige Lsung ergibt sich
3
>> sym(A)\b
4
ans =
aus den folgenden Anweisungen.
5
6
7

[
3]
[ -2]
[ -1/3]

.......................................

Aufgabe 78 (Lineare Systeme) Berechnen Sie


die allgemeine Lsung des linearen Gleichungssystems

5
6
7

x1 + x2 + 2x3 = 8

8
9

x1 2x2 + 3x3 = 1

10

3x1 7x2 + 4x3 = 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

Aufgabe 80 (Beispiel 1.24 in [5]) Berechnen


Sie die Inverse der Matrix
A=

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

>> A = [1 -2; 3 2];


>> inv(sym(A))
ans =
[ 1/4, 1/4]
[ -3/8, 1/8]

1
2
3

>> det(S)
ans =
a*e*i-a*f*h-d*b*i+d*c*h+g*b*f-g*c*
e

zeigt, dass dies gerade die Determinante von S


ist. Setzt man fr a = 1, b = 1, . . ., i = 5 nach
Aufgabe 81 (Inverse) Finden Sie mit Matlab Beispiel 1.26 in [5], so erhlt man die Inverse
die Inverse der Matrix
zu

2 17 11
a b c

11 7 .

S= d e f

0
3 2
g h i
.......................................

Unter welchen Bedingungen existiert diese?


brigends die Determinante der Matrix ist 1.
Besttigen Sie mit diesem Ergebnis die Inverse
.......................................
in Beispiel 1.26 aus [5].
Aufgabe 82 (Symmetrische Matrizen) AngeLsung: Die Inverse erhalten wir durch
nommen Sie wollen einen Algorithmus testen,
1
>> syms a b c d e f g h i
der als Eingabe eine symmetrische Matrix be2
>> S = [a b c; d e f; g h i];
ntigt. Finden Sie eine Mglichkeit eine belie3
>> pretty(inv(S))
bige symmetrische Matrix in Matlab zu erzeu4
[ e i - f h
gen.
5
[ --------- usw.
6
[
%1
Lsung: Nach den folgenden Zeilen
7
8
9
10
11
12
13
14

[
[ d i - f g
[- --------- usw.
[
%1
[
[ -d h + e g
[- ---------- usw.
[
%1

1
2
3

n = 44; %-zum Beispiel 44.Ordnung


A = rand(n);
B = A + A;

steht in der Matrix B eine symmetrische Matrix


aus R4444 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

Die Lnge des Vektors v = (4, 3) ist


1
2
3

Mit der cross-Funktion knnen wir das


Kreuzprodukt berechnen. Wir besttigen damit
Beispiel 2.13

>> norm([4;-3])
ans =
5

1
2

Das Skalarprodukt der beiden Vektoren u =


(0, 0, 1) und v = (0, 2, 2) haben wir in Beispiel 2.8 ausgerechnet; hier die Besttigung
mit der dot-Funktion
1
2
3
4

3
4
5
6

Den Winkel aus Beispiel 2.9 berechnen wir wie


folgt

2
3
4
5
6

>> KosWinkel = dot(u,v)/(norm(u)*


norm(v))
KosWinkel =
0.5000
>> phi = acos(KosWinkel)
phi =
1.0472

>> u = [1;2;-2]; v = [3;0;1];


>> cross(u,v)
ans =
2
-7
-6

Das dyadische Produkt abT von Vektor a =


(1, 2) und b = (4, 1, 4, 3) berechnet sich wie
folgt

>> u = [0;0;1]; v = [0;-2;2];


>> dot(u,v)
ans =
2

>> p = (u*a)/(norm(a)^2)*a
p =
2.8571
-0.7143
1.4286

3
4
5

>> a = [1;2]; b = [4;1;4;3];


>> a*b
ans =
4
1
4
3
8
2
8
6

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

(c) a = (1, 1, 1); b = (2, 2, 2)

49.4. Reelle Vektorrume und


Unterrume

(d) a = (2, 2, 2); b = (3, 3, 3)


Lsung:
(a)

Zur Berechnung einer orthonormalen Basis des


Nullraumes und des Spaltenraumes stehen uns
1
>> dot([1,0],[0,1])
die Funktionen null und orth zur Verfgung.
2
ans =
3
0
Die Funktion null liefert auch von symbolischen Matrizen eine Basis; diese ist im AllgeDas bedeutet, dass die beiden Vektoren meinen aber nicht orthogonal. Um symbolisch
senkrecht aufeinander stehen.
eine Spaltenraumbasis zu erhalten, knnen wir
(b)
colspace verwenden. Auch hier gilt, dass die1
>> dot([1,0,0],[0,1,0])
se im Allgemeinen nicht orthogonal ist. Wir
2
ans =
betrachten Zahlenbeispiele mit der Matrix A
3
0
aus Beispiel 4.23.
Das bedeutet, dass die beiden Vektoren
senkrecht aufeinander stehen.
(c)
1
2
3

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

49.3. Analytische Geometrie von


Geraden und Ebenen

Wir berechnen den Normalenvektor aus Beispiel 3.12 in [5]


2
3

>> A = [1,2; 3 6];


>> null(A)
ans =
-0.8944
0.4472

Die beiden Anweisungen


1
2

>> A = sym([1,2; 3 6]);


>> null(A)
ans =
[ -2]
[ 1]

>> cross([1 0 2],[0 -5 8])


ans =
10
-8
-5

3
4
5

>> A = sym([1,2; 3 6]);


>> colspace(A)
ans =
[ 1]
[ 3]

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.

>> A = [1,2; 3 6];


>> orth(A)
ans =
-0.3162
-0.9487

Wir besttigen Satz 4.12.


1
2
3
4
5
6
7
8
9
10
11
12

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]

Basen der Lnge 1 erhalten wir wie folgt


1
2
3
4
5
6
7

Den Rang einer Matrix knnen wir mit der


Funktion rank bestimmen. Wir berechnen den
Rang der Matrix A aus Beispiel 4.26.
1

2
3
4

>> A = sym([1,2; 3 6]);


>> null(A)
ans =
[ -2]
[ 1]
>> colspace(A)
ans =
[ 1]
[ 3]
>> null(A)
ans =
[ -3]
[ 1]
>> colspace(A)
ans =
[ 1]
[ 2]

>> 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

>> A = [1,2; 3 6];


>> null(A)
ans =
-0.8944
0.4472
>> orth(A)
ans =
-0.3162
-0.9487
>> null(A)
ans =
-0.9487
0.3162
>> orth(A)
ans =
-0.4472
-0.8944

Copyright c G. Gramlich

Der Spaltenraum von A und der Nullraum


von AT sind orthogonale Komplemente im Rm .
Hier eine Besttigung

10
11
12
13

1
2
3
4

>> A = [1,2; 3 6];


>> orth(A)*null(A)
ans =
-1.6653e-016

14
15
16
17
18

bzw. analog im Rn , nun symbolisch.


1
2
3

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

>> A = [1,0; 1 1; 1 2];


>> b = [6;0;0];
>> A\b
ans =
5.0000
-3.0000

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]

Aufgabe 84 (Lineare Unabhngigkeit) Sind


.......................................
die Vektoren a = (1, 2, 3), b = (5, 6, 1) und
c = (3, 2, 1) linear unabhngig (Beispiel 4.16 Aufgabe 85 (Basen) Bestimmen Sie von der
Matrix
in [5])?

1 0

Lsung: Die folgenden Matlab-Zeilen zeigen

A= 1 1

auf verschiedene Weisen, dass die drei Vekto

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

>> null(A), colspace(A)


ans =
[ empty sym ]

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]

Lsung: Die folgende Zeilen geben die Lsungen.


1
2
3
4
5
6
7
8
9
10

>> 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

Fr eine numerische Lsung bentzt man die 11


Funktionen null und orth; diese liefern sogar
orthonormale Basen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Aufgabe 86 (LGS und Rang) Wie knnen Sie Aufgabe 89 (Ausgleich) Die Datenpunkte
(in Matlab) entscheiden, ob ein lineares Gleichungssystem eine Lsung hat?
ti
bi
Lsung: Zum Beispiel mit der Funktion
0 3.825
rank. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
0.2 4.528
0.4 4.746
Aufgabe 87 (LGS und Rang) Wenn ein linea0.6 4.873
res Gleichungssystem eine Lsung hat, wie
0.8 4.865
knnen Sie dann (in Matlab) entscheiden, ob
1.0 4.813
es genau eine oder mehrere gibt?
Lsung: Zum Beispiel mit der Funktion
rank. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sollen im Sinne der linearen Ausgleichsrechnung an eine Funktion der Form
Aufgabe 88 (Ausgleich) Berechnen Sie die
Nherungslsung (im Sinne der linearen Ausf (t, x) = x1 + x2 t + x3 cos(t)
gleichsrechnung) von Ax = b und den orthogonalen Projektionsvektor p von b auf den angepasst werden. Zeichnen Sie die Datenpunkte und die Ausgleichsfunktion, nachdem
Spaltenraum von A des Systems
Sie die Lsung berechnet haben.

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

Die folgende Zeile besttigt das Ergebnis aus


Beispiel 5.10.
1
2
3
4

>> A = [1 1 1; 2 4 -3; 3 6 -5];


>> det(A)
ans =
-1

Die Abbildung 78 zeigt die grasche DarstelAufgabe 90 (Determinanten) Berechnen Sie


die Determinante von

2
1 1

A = 2 4 3

3 6 5

4.8

4.6

4.4

4.2

Lsung: Hier die symbolische Lsung.

3.8
0

1
0.2

0.4

0.6

0.8

2
3

Abbildung 44: Zu Aufgabe 89

>> A = sym([1 1 2; 2 4 -3; 3 6


-5]);
>> det(A)
ans =
-1

lung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

49.5. Determinanten

Die numerische Berechnung der Determinante


geschieht ber die LU-Faktoren.

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

>> A = sym([1,1; -2,4]);

Copyright c G. Gramlich

2
3
4
5
6
7
8

wir, dass dies jedoch nicht immer fr Matrizen


der Ordnung 5 oder grer mglich ist. Es sei

12
4
6

8 21 8
A=

29
72 27

>> [X,D] = eig(sym(A))


X =
[ 1, 1]
[ 1, 2]
D =
[ 2, 0]
[ 0, 3]

gegeben. Wir wollen Matlab verwenden, um


Das charakteristische Polynom einer Matrix folgende Frage zu beantworten: Ist A reell diaerhalten wir mit der Funktion poly; siehe Bei- gonalisierbar, das heit, knnen wir eine Maspiel 6.2.
trix X nden, so dass X1 AX diagonalisierbar ist? Die Eigenwerte von A nden wir mit
1
>> A = sym([1 1; -2 4]);
eig(sym(A)). Matlab antwortet mit:
2
>> poly(A)
3
4

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

>> A = [4,2,2; 2,4,2; 2,2,4];


>> [X,D] = eig(sym(A))
X =
[ 0, 1, 1]
[ -1, -1, 1]
[ 1, 0, 1]
D =
[ 2, 0, 0]
[ 0, 2, 0]
[ 0, 0, 8]

Wie ndet man X? Die Spalten von X knnen als Eigenvektoren zu den Eigenwerten -1,2 und 3 gewhlt werden. Gibt man

Wir machen die Probe.


1
2
3
4
5

ans =
[ 3]
[ -2]
[ -1]

>> X*D*inv(X)
ans =
[ 4, 2, 2]
[ 2, 4, 2]
[ 2, 2, 4]

>> [X,D] = eig(sym(A))

ein, so gibt Matlab in der Diagonalmatrix D


die Eigenwerte zurck und die Spalten von X
sind dazugehrige Eigenvektoren:
1
2

Fr eine symbolische Matrix versucht die


Funktion eig ein exaktes Eigenwertsystem
zu berechnen. Aus der Galois-Theorie wissen

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]

Die Anweisung J = jordan(A) berechnet


die Jordan-Matrix von A und [V,J] =
4
jordan(A) zustzlich die hnlichkeitstransformation V. Die Spalten von V sind die verAufgabe 91 (Eigensysteme) Gegeben ist die allgemeinerten Eigenvektoren von A.
4 4 Matrix
1
>> A = sym([3/2 1;-1/4 1/2]);

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]

Zeigen Sie mit Matlab, dass die Eigenwerte


8
von A reell und voneinander verschieden sind.
Finden Sie eine Matrix X, so dass X1 AX diaIn Matlab gibt es die Funktion eigshow, die
gonal ist.
das Eigenwertproblem fr eine (2, 2)-Matrix
Lsung:
visualisiert. Beim Aufruf sieht man den Ein1
>> A = [ 12 48 68 88;
heitsvektor x = (1, 0) und mit der Maus kann
2
-19 -54 -57 -68;
man diesen auf dem Einheitskreis bewegen.
3
22 52 66 96;
Zur gleichen Zeit wird Ax angezeigt und be4
-11 -26 -41 -64];
wegt. Manchmal ist Ax vor x, manchmal aber
5
>> [X,D] = eig(sym(A))
auch hinter x. Ax kann zu x auch parallel sein.
6
X =
In diesem Augenblick gilt Ax = x und x
7
[
1, -12/11,
0,
-2]
8
[
-2,
1,
1,
2]
ist ein Eigenvektor. Der Eigenwert bestimmt
9
[
1, -14/11,
-2,
-2]
sich aus der Lnge und Richtung von Ax. Die
10
[
0, 7/11,
1,
1]
zur Verfgung stehenden Matrizen illustrieren
11
D =
folgende Mglichkeiten:
12
13
14

[ -16, 0, 0,
[ 0, -4, 0,
[ 0, 0, -8,

0]
0]
0]

1. Es gibt keine (reellen) Eigenvektoren. x


und Ax sind nie parallel. Die Eigenwerte

103

Copyright c G. Gramlich

und Eigenvektoren sind komplex. Es gibt oder so


keinen Eigenraum von R2 .
2. Es gibt nur eine Gerade, auf der die Eigenvektoren liegen. Dies ist der einzige Eigenraum von R2 .

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

>> [Q,D] = eig(A)

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

49.7. Lineare Abbildungen und Matrizen

Wir visualisieren lineare Abbildungen im R2 .


Diese knnen durch (2, 2)-Matrizen beschrieben werden. Wir zeichnen ein Haus und betrachten das neue Haus nach linearen Abbildungen. Die folgende Matlab-Funktion zeichnet ein Haus in der Ebene, indem sie Datenpunkte, die in der Matrix H angegeben werden
mssen, miteinander verbindet.

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

Abbildung 45: Durch die Datenpunkte in H erzeugte Haus

Die beiden Anweisungen


1

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)

erzeugen das Bild 45.


Um nun lineare Abbildungen zu sehen , mssen wir eine lineare Abbildung als Matrix A
denieren und diese mit H multiplizieren. Als
Beispiel betrachten wir eine Drehung um 60
und eine Spiegelung an der x-Achse. Im ersten
Fall ist
cos 60 sin 60
sin 60
cos 60

A=
und im Zweiten

A=

1
0
.
0 1

49.8. Matlab-Funktionen fr die Lineare


Algebra im berblick
Zusammenfassend habe ich in den Tabellen 24
und 25 die wichtigsten Funktionen aus Matlab
zur Linearen Algebra zusammengestellt. Beachten Sie, dass zum Beispiel die Funktionen
eig, inv usw. vom Overloading Gebrauch machen. Overloading ist ein Mechanismus, der es
erlaubt verschiedene Typen von Funktionsargumenten zu verwenden. So kann A beim Aufruf von eig(A) eine symbolische oder eine numerische Matrix sein.

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

Abbildung 46: Nach Drehung

Tabelle 24: Lineare Algebra

50. Lineare Algebra (Teil 2)

10
8
6

50.1. Lineare Gleichungssysteme (2)

4
2
0
2
4
6
8
10
10

Abbildung 47: Nach Spiegelung

10

In vielen Anwendungen muss man lineare


Gleichungen lsen. Daher ist es in Matlab besonders einfach, solche zu lsen. Hierzu dient
der \-Operator (Backslash-Operator), siehe
doc slash (help slash). Auch die Funktion linsolve lst lineare Gleichungssysteme. Unter Verwendung dieser Funktion ist es
mglich, lineare Systeme ezienter zu lsen,
wenn die Struktur der Koezientenmatrix (Systemmatrix) bekannt ist, siehe doc linsolve
(help linsolve).

106

Copyright c G. Gramlich

50.1.1. Quadratische Systeme


Ist A eine regulre (quadratische) Matrix, so
gibt es genau eine Lsung des linearen Systems Ax = b und zwar fr jede rechte Seite
b. Zum Beispiel ist die Matrix
A=
Numerische Funktionen
cross Kreuzprodukt
det
Determinante
diag
Diagonalmatrix
dot
Skalarpordukt
eig
Eigenwerte und -vektoren
eye
Einheitsmatrix
expm
Exponentialfunktion
inv
Inverse
lu
LU-Faktorisierung
null
Orth. Basis fr Nullraum
orth
Orth. Basis fr Spaltenraum
poly
Charakteristisches Polynom
qr
QR-Faktorisierung
rank
Rang
rref
Reduzierte Zeilenstufenform
svd
Singulrwertzerlegung
tril
Untere Dreiecksmatrix
triu
Obere Dreiecksmatrix
zeros Nullmatrix
Tabelle 25: Lineare Algebra

1 2
3
2

regulr und daher gibt es fr b = (1, 11) genau


eine Lsung; diese ist x = (3, 1). In Matlab
lst man dies in einem Einzeiler, nachdem man
A und b eingegeben hat.
1
2
3
4
5
6

>> A = [1 -2; 3 2];


>> b = [1; 11];
>> x = A\b
x =
3
1

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

>> A = [2 4 -2; 4 9 -3; -2 -3 7];

Copyright c G. Gramlich

2
3
4
5
6
7

Ax

>> b = [2; 8; 10];


>> x = A\b
x =
-1.0000
2.0000
2.0000

b mit

1 0

A= 1 1

1 2

und


6




b = 0 .



0

Lsung: Die eindeutige Lsung ist x =


(5, 3). Diese kann auf die folgenden drei ArDie Lsung ist eindeutig, sonst wre die Matrix
ten berechnet werden.
A singulr und Matlab htte mit einer Fehlermeldung geantwortet. Hier noch alternativ die 1 >> A = [1 0; 1 1; 1 2];
2
>> b = [6; 0; 0];
symbolische Lsung.
3
1
2
3
4
5

>> x = sym(A)\b
x =
[ -1]
[ 2]
[ 2]

5
6
7
8
9
10

.......................................

11
12
13
14

50.1.2. berbestimmte Systeme

>> x = A\b
x =
5.0000
-3.0000
>> x = pinv(A)*b
x =
5
-3
>> x = inv(A*A)*A*b
x =
5
-3

.......................................

Gibt es mehr Gleichungen als Unbekannte, so


nennt man Ax = b berbestimmt. Das System Ax = b hat in der Regel keine Lsung,
aber das Ersatzproblem Ax
b (die lineare
Ausgleichsaufgabe) ist stets lsbar. Entweder
hat das Ersatzproblem genau eine oder aber
unendlich viele Lsungen, je nachdem ob die
Spalten von A linear unabhngig sind oder
nicht. Im Fall, dass es unendlich viele Lsungen gibt erhlt man durch A\b eine Basislsung. Mit pinv(A)*b erhlt man den Lsungsvektor kleinster Lnge.

Aufgabe 95 (Lineare Systeme) Berechnen Sie


in Matlab x = A\b und x = pinv(A)*b mit

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

Aufgabe 94 (Ausgleich) Berechnen Sie die


Lsung des linearen Ausgleichsproblems und

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

Beides sind spezielle Lsungen der allgemei- und


nen Lsung x = (x1 , x2 ) = (1 2t, 2), t R
1
>> x = A*inv(A*A)*b
der linearen Ausgleichsaufgabe. x = A\b be2
x =
rechnet eine Basislsung (t = 0.5) und x = 3
3
pinv(A)*b die Lsung kleinster Lnge (t = 4
3
0.4). Da inv(A*A) nicht existiert, kann ber
diesen Weg keine Lsung berechnet werden. Dies sind spezielle Lsungen der allgemeine

Lsung x = (x1 , x2 ) = (6 t, t), t R des


linearen Gleichungssystems x1 + x2 = 6. x =
A\b berechnet eine Basislsung (t = 0) und
50.1.3. Unterbestimmte Systeme
x = pinv(A)*b bzw. x = A*inv(A*A)*b
Ein lineares System Ax = b heit unterbe- die Lsung kleinster Lnge (t = 3). . . . . . . .
stimmt, wenn weniger Gleichungen als Unbekannte vorliegen; in der Regel hat Ax = b dann
unendlich viele Lsungen. In diesem Fall wird
durch A\b die Lsung kleinster Lnge berechnet, das heit von allen Lsungen x wird diejenige ermittelt, wo die Lnge von x am kleinsten ist. Hat das System Ax = b keine Lsung,
so wird eine Basislsung des Ersatzproblems
Ax b berechnet.

50.2. Lineare Gleichungssysteme (3)

Lineare Gleichungssysteme lassen sich


symbolisch in Matlab mit den Funktionen
solve und \ lsen. Darberhinaus gibt es
noch die Maple-Funktionen gausselim und
gaussjord, die mit der maple-Funktion
angesprochen werden knnen. Fr das mapleKommando verweise ich sie auf Abschnitt
Aufgabe 96 (Lineare Systeme) Berechnen Sie
67.2.
in Matlab x = A\b x = pinv(A)*b und x =
Der Prozess einer Matrix auf reduzierte ZeilenA*inv(A*A)*b
stufenform zu transformieren wird als GaussJordan-Verfahren bezeichnet. Daher haben
A= 1 1
und b = 6 .
auch die beiden Funktionen gaussjord und
Interpretieren Sie die Ergebnisse.
rref die gleiche Wirkung. Das folgende BeiLsung: Es ist
spiel zeigt dies:
1
2
3

>> A = [1 1]; b = [6];


>> x = A\b, x = pinv(A)*b,
x =

109

>> maple(gaussjord,sym([1 1 2 9;
2 4 -3 1; 3 6 -5 0]))
ans =

Copyright c G. Gramlich

3
4
5

rametrisiert angegeben werden:

[ 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

Die backsub-Funktion erlaubt es dann die Lsung durch Rckwrtseinsetzen zu gewinnen:


1
2
3

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]

Die Lsungen erhalten wir auch wie folgt


Wir betrachten das folgende unterbestimmte lineare Gleichungssystem

1
2
3

2x3 + 7x5 = 12

2x1 + 4x2 10x3 + 6x4 + 12x5 = 28

2x1 + 4x2 5x3 + 6x4 5x5 = 1

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]

mit der erweierten Matrix

A b

7 12
0 0 2 0

= 2 4 10 6 12 28

2 4 5 6 5 1

Dagegen liefern die Anweisungen

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]

Demnach ist: x = (3, 0) + t(2, 1), t R die


allgemeine Lsung. Mit

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

Lsen wir das Beispiel numerisch, so erhalten 4


wir die spezielle Lsung x = (0, 0, 1, 7/3, 2),
erhalten wir die spezielle Lsung (3, 0). Hier
wie die folgende Zeile zeigt:
ist t = 0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
>> double(A)\double(b)
2
3
4
5
6
7

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

Aufgabe 97 (Lineare Systeme) Berechnen Sie


die allgemeine Lsung des linearen Gleichungssystems

2x1 3x2 = 2
2x1 + x2 = 1
3x1 + 2x2 = 1

4x1 8x2 = 12
3x1 6x2 =

inkonsistent. Dies knnen wir mit der rrefFunktion sofort berprfen:

2x1 + 4x2 = 6.

mit Hilfe der Funktionen gausselim und


backsub, siehe Aufgabe 76.
Lsung: Die allgemeine Lsung erhalten wir
durch

2
3
4
5

1
2
3

>> A = sym([4 -8; 3 -6; -2 4]);


>> b = sym([12; 9; -6]);
>> maple(gausselim,[A b])

6
7
8

111

>> Ab = sym([2 -3 -2; 2 1 1; 3 2


1])
Ab =
[ 2, -3, -2]
[ 2, 1, 1]
[ 3, 2, 1]
>> rref(Ab)
ans =
[ 1, 0, 0]

Copyright c G. Gramlich

9
10

[ 0, 1, 0]
[ 0, 0, 1]

Die letzte Zeile der erweiterten Matrix besagt


0x1 + 0x2 = 1.

3
4

Wir testen die anderen Funktionen, die uns zur


Lsung linearer Gleichung symbolisch oder
numerisch in Matlab zur Verfgung stehen.
Das Gauss-Verfahren liefert
1
2
3
4
5

>> 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 ]

Numerisch dagegen erhalten wir die Lsung


0.6429:
1
2

>> double(A)\double(b)
ans =
0.6429

Auch hier erkennt man an der letzten Zeile der


3
Matrix die Unlsbarkeit des linearen Systems,
denn die Gleichung 0x1 +0x2 = 7/8 hat keine
Dies ist die eindeutige Lsung des dazugehriLsung. Das Rckwrtseinsetzen besttigt die
gen linearen Ausgleichsproblems. Fr weitere
Beobachtung
Einzelheiten hierzu verweisen wir auf [6].
1
2
3
4

>> maple(backsub,ans)
??? Error using ==> sym/maple
Error, (in backsub) inconsistent
system

Die Tabelle 26 zeigt zusammenfassend die


Matlab-Syntax
\
rref
solve
gausselim
gaussjord

Was liefert A\b?


1
2
3
4

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.

Tabelle 26: Lineare Gleichungssysteme symbolisch lsen

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

ren. Die Funktion rref bzw. das Kommando \


stehen auch fr numerische Berechnungen zur
Verfgung.

50.3. Lineare Gleichungssysteme (4)

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.

ber lineare Gleichungssysteme haben wir in


den vorhergehenden Abschnitten schon viel
gesagt. Hier soll noch ergnzt werden, dass
der \-Operator (Backslash-Operator) auch verwendet werden kann, um Matrizengleichungen
AX = B zu lsen. Hier ist die Rechte Seite B Beachten Sie: Die Inverse einer Matrix muss
eine Matrix mit p Spalten. In diesem Fall lst explizit in der Praxis nur sehr selten berechnet werden. Zum Beispiel ist das Berechnen
Matlab AX(:, j) = B(:, j) fr j = 1 : p.
eines quadratischen lineare Gleichungssystems
Ax = b mit A\b zwei bis dreimal schneller
50.4. Inverse
als durch inv(A)*b. Gewhnlich ist es mglich, das Berechnen der Inversen einer Matrix
Die Inverse einer (n, n)-Matrix ist die Matrix
in Termen eines linearen Gleichungssystems
X, die den Gleichungen AX = X A = En geauszudrcken, so dass die explizite Inversion
ngt. Hierbei ist En die (n, n)-Einheitsmatrix,
vermieden werden kann.
die in Matlab mit eye(n) erzeugt werden
kann. Eine Matrix, die keine Inverse hat, heit
singulr. Eine singulre Matrix kann auf meh- 51. Lineare Algebra (Teil 3)
rere Arten charakterisiert werden: Die Determinante ist Null oder es gibt einen Vektor v o Matlab wurde ursprnglich entwickelt, um numit Av = o.
merische Berechnungen in der Linearen AlDie Inverse einer quadratischen Matrix kann gebra durchzufhren. Daher ist es nicht bermit der Funktion inv (auch symbolisch) be- raschend, dass viele Funktionen zum Lsen
rechnet werden. Zum Beispiel
linearer Gleichungssysteme und Eigenwertaufgaben zur Verfgung stehen. Sehr viele
1
>> A = pascal(3), X = inv(A)
dieser Funktionen basieren auf der Fortran2
A =
3
1
1
1
Bibliothek Lapack [1].
1
1

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

Tabelle 27: Vektornormen

Eine Norm ist ein skalares Ma fr die Gre


eines Vektors oder einer Matrix. Die p-Norm
eines n-Vektors x ist deniert durch
p

1
2
3

|xi |

p 1/p

1 p < .

4
5

i=1

Fr p = ist

7
8

= max |xi |.

10

1in

11

Die Funktion norm kann verwendet werden,


um jede p-Norm auszurechnen. Der Aufruf ist
norm(x,p), wobei p = 2 standardmig eingestellt ist. Im Fall p=-inf wird mini |xi | berechnet.
1
2

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

berechnet die Normen. Die Funktion


Vektornormen ist wie folgt realisiert.

Die Tabelle 27 zeigt die Vektornormen bersichtlich.


Aufgabe 98 (Vektornormen) Berechnen Sie
fr den Vektor x = (1, 2, 3) die Normen x p
fr p = 1, 1.5, 2, . . . 9.5 und fr p = .
Lsung: Der Aufruf Vektornormen

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

Die 2-Norm von A kann berechnet werden


als der grte singulre Wert von A, also
9
max(svd(A)). Matrizennormen werden ebenfalls mit der Funktion norm berechnet. Fr Ma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . trizen funktioniert der Aufruf norm(A,p) mit
Aufgabe 99 (Vektornormen) Berechnen Sie p=1,2,inf und p=fro, wobei
die 1, 2 und -Norm der Vektoren v1 = (2, 1),
m n
1/2
v2 = (1, 0) und v3 = (1, 1).
A F=
|ai j |2
Lsung: Wir erhalten:
i=1 j=1
8

disp(sprintf(%2.1f %15.4f ,p,


norm(x,p)))
end

>> v1= [2,1];


[norm(v1,1) norm(v1,2) norm(v1,inf
)]
ans =
3.0000 2.2361 2.0000
>> v2= [1,0];
[norm(v2,1) norm(v2,2) norm(v2,inf
)]
ans =
1
1
1
>> v3= [1,-1];
[norm(v3,1) norm(v3,2) norm(v3,inf
)]
ans =
2.0000 1.4142 1.0000

3
4
5
6

7
8
9
10

11

die Frobenius-Norm ist. Beachten Sie: Die


Funktion norm ist ein Beispiel einer Funktion
mit einem Argument, das einen unterschiedlichen Datentyp haben kann; hier double und
char (String). Hier noch ein Beispiel:
1
2

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

Ist das Berechnen der Matrixnorm fr p = 2 zu


aufwendig, so kann mit der Funktion normest
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ein Nherungswert berechnet werden. Die Tabelle 28 zeigt die Matrizennormen bersichtDie p-Norm einer Matrix ist deniert durch
12

= max
x o

Ax p
.
x p

Matlab
norm(A)=norm(A,2)
norm(A,1)
norm(A,inf)
norm(A,fro)

Die 1- und -Norm einer (m, n)-Matrix A sind


(Maximale Spaltensumme)
m

= max

1 jn

|ai j |

Tabelle 28: Matrizennormen

i=1

und (Maximale Zeilensumme)

Bedeutung
A2
A1
A
A F

lich.

= max

1im

|ai j |.
j=1

Aufgabe 100 (Matrizennormen) Berechnen


Sie die 1-, 2-, - und Frobenius-Norm fr die

115

Copyright c G. Gramlich

sagt, dass A gut oder schlecht konditioniert


ist, wenn ( A) klein bzw. gro ist, wobei
klein und gro vom Kontext abhngig
sind. Die Kondition kann mit der Funktion
cond berechnet werden, wobei die Normen
p=1,2,inf,fro untersttzt werden.

Matrizen
A=

0 1
,
1 0

B=

1 2
2 2

und
C=

1 4
.
1 2

Aufgabe 101 (Konditionszahlen) Berechnen


Sie die Konditionszahl bezglich der 2-Norm
fr die Hilbert-Matrix H10 . Besttigen Sie anschlieend, dass die Kondition gleich dem maximalen Singulrwert dividiert durch den minimalen Singulrwert dieser Hilbert-Matrix ist.
Lsung: Es ist

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+

deniert ist, wobei A+ die Pseudoinverse von


A ist.

( 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

Eine LU-Faktorisierung einer quadratischen


Matrix A ist eine Faktorisierung der Form A =
LU, wobei L eine untere Dreicksmatrix mit
Einsdiagonale und U eine obere Dreicksmatrix
sind. Nicht jede Matrix kann in dieser Form
faktorisiert werden, lsst man aber Zeilenvertauschungen zu, so ist dies immer mglich und
solch eine Faktorisierung existiert immer. Die
Funktion lu berechnet eine LU-Faktorisierung
mit teilweiser Pivotisierung P A = LU, wobei P eine Permutationsmatrix ist. Der Aufruf
[L,U,P] = lu(A) gibt die Dreiecksmatrizen
und die Permutationsmatrix zurck. Mit zwei
Ausgabeargumenten, [L,U] = lu(A) wird U
und L = PT L zurckgegeben, das heit L
ist eine Dreiecksmatrix bis auf Zeilenvertauschungen. Wir geben ein Beispiel.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

>> A = [1 2 -1; -2 -5 3; -1 -3 0];


[L,U,P] = lu(A)
L =
1.0000
0
0
-0.5000 1.0000
0
0.5000 1.0000 1.0000
U =
-2.0000 -5.0000 3.0000
0 -0.5000 0.5000
0
0 -2.0000
P =
0
1
0
1
0
0
0
0
1
>> [L,U] = lu(A)
L =
-0.5000 1.0000
0
1.0000
0
0
0.5000 1.0000 1.0000
U =
-2.0000 -5.0000 3.0000

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);

Hier ist ein Beispiel.


1
2
3
4
5
6
7
8
9
10
11
12
13

>> A = [1 1 2; 2 4 -3; 3 6 -5];


>> b = [9;1;0];
>> x = A\b
x =
1.0000
2.0000
3.0000
>> [L,U] = lu(A);
>> x = U\(L\b)
x =
1.0000
2.0000
3.0000

Der Vorteil dieser Vorgehensweise ist, dass


man sich Rechnungen einspart, wenn ein Gleichungssystem mit mehreren rechten Seiten
oder eine Matrixgleichung vorliegt, weil dann
die Faktorisierung nur einmal gemacht werden
muss.
Aufgabe 102 (LU-Faktorisierung) Berechnen

117

Copyright c G. Gramlich

Sie von der Matrix

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

>> A = [1 1 2; 2 4 -3; 3 6 -5];


>> [L,U,P] = lu(A)
L =
1
0
0
0.33333
1
0
0.66667
0
1
U =
3
6
-5
0
-1
3.6667
0
0
0.33333
P =
0
0
1
1
0
0
0
1
0

12
13
14

-0.33333

U =

die LU-Faktorisierung mit teilweiser Pivotisierung.


Lsung: Es ist
1

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

Aufgabe 103 (LU-Faktorisierung) Berechnen


Sie von der Matrix

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

Und die Probe:


die LU-Faktorisierung mit teilweiser Pivotisierung.
Lsung: Es ist
1
2
3
4
5

>> A = [2 4 -2; 4 9 -3; -2 -3 7];


>> [L,U,P] = lu(A)
L =
1
0
0
-0.5
1
0

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

eine QR- und


Faktorisierung.
Lsung: Es ist

119

eine

reduzierte

QR-

Copyright c G. Gramlich

1
2
3
4
5
6

>> [Q,R] = qr(A)


Q =
-0.5000 0.6708 0.5000
-0.5000 0.2236 -0.5000
-0.5000 -0.2236 -0.5000
-0.5000 -0.6708 0.5000

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

In der orthogonalen Matrix Q fehlt nun die


letzte Spalte und in der Dreiecksmatrix R die
letzte Nullzeile. . . . . . . . . . . . . . . . . . . . . . . . .
Aufgabe 106 (QR-Faktorisierung) Berechnen
Sie von der Matrix

1 0

A= 1 1

1 2

Die Singulrwertzerlegung (Singular Value


Decomposition, kurz: SVD) einer (m, n)Matrix A hat die Form A = USV , wobei U eine unitre (m, m)-Matrix, S eine reelle (m, n)-Diagonalmatrix und V eine unitre
(n, n)-Matrix ist. Die Diagonalelemente von S
sind die singulren Werte si mit s1 s2
smin{m,n} 0. Die Anweisung [U,S,V]
= svd(A) berechnet eine Singulrwertzerlegung. Gibt man nur eine Ausgabevariable an,
so ist dies der Vektor, der aus den singulren Wert besteht. Die Anweisung [U,S,V]
= svd(A,0) liefert eine reduzierte Singulrwertzerlegung (economy size), wenn m > n
ist. Dann ist U eine (m, n)-Matrix mit orthonormalen Spalten und S hat die Gre (n, n).
Die Anweisung [U,S,V] = svd(A,econ)
liefert das gleiche Ergebnis wie [U,S,V] =
svd(A,0), wenn m n ist, ist aber m < n,
so hat V die Gre (n, m) mit orthonormalen
Spalten, und S ist quadratisch mit Ordnung m.
Hier ist ein Beispiel [6]:

eine reduzierte QR-Faktorisierung.


Lsung: Es ist

1
2

120

>> A = [1 2 1 -2; 4 2 3 1];


>> [U,S,V] = svd(A,econ)

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

-0.4157 -0.7245 0.5498


-0.8587 0.1135 -0.4997
>> rank(A)
ans =
3
>> null(A)
ans =
Empty matrix: 3-by-0
>> orth(A)
ans =
-0.1517 0.8959 -0.3525
-0.0612 0.4013 0.6207
-0.3215 0.0406 0.6671
-0.9327 -0.1861 -0.2134

Die Funktionen rank, null und orth berech- 32


nen den Rang, eine orthonormale Basis fr den 33
Nullraum und eine orthonormale Basis fr den
Spaltenraum der Argumentmatrix. Alle drei Aufgabe 107 (SVD [4]) Berechnen Sie eine
Funktionen basieren auf der Singulrwertzer- Singulrwertzerlegung der Matrix

legung, wobei Ein Toleranzwert proportional


1 1

zu eps verwendet wird, um zu entscheiden,

A = 1 1 .

wann ein singulrer Wert als Null betrachtet


0 0
werden kann. Wir geben ein Beispiel.
Lsung: Es ist
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

>> [U,S,V] = svd(A)


U =
-0.7071 -0.7071
0
-0.7071 0.7071
0
0
0
1.0000
S =
2.0000
0
0
0.0000
0
0
V =
-0.7071 0.7071
-0.7071 -0.7071

Man erkennt, dass die Matrix A den Rang 1


hat; die singulren Werte sind s11 = 2 und
s22 = 0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die verallgemeinerte Singulrwertzerlegung
(Generalized Singular Value Decomposition,

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

Aufgabe 108 (SVD [6]) Plotten Sie die zehn


singulren Werte der Hilbert-Matrix H10 .
Lsung: Die Zeile
1

7
8
9
10

>> semilogy(svd(hilb(10)),o),
grid

11
12
13

zeigt wie man Abbildung 48 erzeugen kann.

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

Die eziente numerische Berechnung von Eigensystemen (Eigenwerte und Eigenvektoren)


ist ein komplexer Akt. Die Matlab-Funktion
eig vereinfacht diesen Lsungsprozess, indem
sie die Anzahl der Eingabematrizen, sowie deren Struktur und die Ausgabe bercksichtigt.
Sie unterscheidet intern zwischen 16 verschiedenen Algorithmen:

10

10

10

15

10

10

Abbildung 48: Die singulren Werte von H10


Beachten Sie den logarithmischen Mastab auf
der y-Achse. . . . . . . . . . . . . . . . . . . . . . . . . . . .

51.7. Pseudoinverse

Standardproblem (eig(A)) oder verallgemeinertes Problem (eig(A,B)),


reelle oder komplexe Matrizen A und B,
symmetrische/Hermitesche Matrizen A und
B mit B positiv denit oder nicht,

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

51.9. Iterative Methoden


In diesem Abschnitt besprechen wir iterative Methoden. Solche Verfahren werden hauptschlich bei groen und mglicherweise dnn
besetzten (sparse) Problem eingesetzt; also immer dann, wenn direkte Verfahren zu inezient oder gar unmglich anwendbar sind. Dnn
besetzte Matrizen behandeln wir in Abschnitt
73. Es gibt in Matlab iterative Methoden fr lineare Gleichungssysteme und iterative Verfahren fr Eigensysteme.
51.9.1. Iterative Methoden fr lineare
Gleichungssysteme

den verwenden Matrix-Vektor Produkte Ax


bzw. A x und bentigen die Matrixelemente von A nicht explizit. Bis auf gemres (siehe unten) haben alle Funktionen den gleichen Funktionsaufruf. Die einfachste Form
ist x = solver(B,b), wobei solver eine
Funktion aus Tabelle 29 ist. Alternativ kann
man auf x = solver(B,b,tol) mit einem
Konvergenztoleranzwert tol, der standardmig auf 106 gesetzt ist. Konvergenz tritt ein,
wenn norm(b-A*x) <= tol*norm(b) erfllt
ist. Das Argument A kann eine voll oder dnn
besetzt (sparse) Matrix sein, oder eine Funktion, die x als Eingabe und A*x als Ausgabe hat.

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

gesetzt haben. Der Toleanzwert 106 wurde er


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

>> [x,flag,relres,iter] = pcg(A,b


,1e-6,100,diag(diag(A)));
>> flag, relres, iter
flag =
0

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

51.9.2. Iterative Methoden fr Eigensysteme

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

51.10. Funktionen einer Matrix

Besttigen Sie diese Aussagen symbolisch.

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

Dagegen ist aber


1

Weitere Funktionen fr Matrixfunktionen nden Sie mit help matfun.

2
3
4

Aufgabe 110 (Matrixfunktionen) In dieser


Aufgabe geht es um e A , wobei A eine quadratische Matrix ist.

1
2
3

0 1
.
1
0

Vergleichen Sie die Resultate mit exp(A)


bzw. exp(sym(A)). Erklren Sie den Unterschied!

>> exp(A)
ans =
1.0000
2.7183

0.3679
1.0000

und

(a) Berechnen Sie e A numerisch und symbolisch fr


A=

>> A = [0 -1; 1 0]; expm(A)


ans =
0.5403 -0.8415
0.8415 0.5403
>> expm(sym(A))
ans =
[ cos(1), -sin(1)]
[ sin(1), cos(1)]

>> exp(sym(A))
ans =
[
1, exp(-1)]
[ exp(1),
1]

In den letzten beiden Fllen werden von


den Matrixelementen die Exponentialwerte ausgerechnet.
(b) Es ist mit A wie in (a) und

(b) Berechnen Sie nun symbolisch e At , t R,


und deuten Sie das Ergebnis.
(c) Ist X eine quadratische Matrix, dann gilt

>> 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)]

(c) Nach der Deklaration


1

(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)

52. Mehr zu Funktionen

(e) e At =

und
1
2
3

Funktionen spielen in Matlab eine sehr groe


Rolle. Seit Matlab 7 ergaben sich diesbezgbesttigen.
lich einige Neuerungen. Wir wollen deshalb in
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . diesem Abschnitt mehr zu Matlab-Funktionen
Aufgabe 111 (Matrixfunktionen) Berechnen sagen. Eine erste Einfhrung ndet man in AbSie die Matrix e At , t R fr folgenden Ma- schnitt 44.
trizen:
1 0
52.1. Function-Handles
(a) A =
0 2
(b) A =

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

tervall [2, 2] zeichnet. Ist nun zum Beispiel 3


0.9129
fun eine m-Function, so geschrieben wie es
als
die Funktion ezplot verlangt, dann funktio- ein, so erhalten wir 0.9129 Nherung fr
f (0.3), wobei hier f (x) = x ist. Standardniert
mig haben wir h 1.5 108 gewhlt. Soll h
1
ezplot(@fun)
grer oder kleiner sein, so kann dies im dritten Argument eingestellt werden. Dieses Beifun kann aber auch eine Matlab-Funktion
spiel zeigt, die Funktionsweise eines Functionsein, wie zum Beispiel sin, cos oder exp. Der
Handles. Wir bergeben den Function-Handle
Aufruf
als Argument und diese wird an den ent1
ezplot(@cos)
sprechenden Stellen ausgewertet. Diese direkte Auswertung ist neu in Matlab 7. In frheren
zeichnet die Kosinusfunktion im Intervall Versionen musste hier mit der Funktion feval
[2, 2].
gearbeitet werden.
Function-Handles wurden in Matlab 6 einge- Weitere Informationen nden Sie mit doc
fhrt und ersetzen die frhere Syntax, nach function_handle.
der ein Funktionsname als eine Zeichenkette (String) bergeben werden sollte, also zum
52.2. Anonymous Functions
Beispiel ezplot(cos).
Die Idee des nchsten Beispiels ist es, den Dif- Anonymous Functions wurde in Matlab 7 einferenzenquotient
gefhrt. Anonymous Functions stellen einen
Weg dar, eine one line-Funktion zu erzeuf (x + h) f (x)
gen, ohne einen m-File schreiben zu mssen. In
h
Abschnitt 39 haben wir dies bereits zum ersten
in einer Matlab-Funktion zu realisieren, um Mal gezeigt.
diesen dann fr kleines h als Nherung fr
1
>> f = @(x) exp(x)-2
den Dierenzialquotient f (x) zu berechnen.
2
>> f(1)
Die m-Function
3
ans =
1
2

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

Der Ausdruck einer Anonymous Function


kann auch Variable haben, die nicht in der
Argumentenliste vorkommen. So deniert die
Anweisung
1
2

>> a = 2; b = 3;
>> g = @(x,y) a*x^2+b*exp(x);

3
4
5
6

fplot(f,[-4,4]), hold on,


sigma = 2;
f = @(x) normpdf(x,mu,sigma);
fplot(f,[-4,4]),

erzeugen die Abbildung 49. . . . . . . . . . . . . .


0.4

den Mathematischen Funktionsterm g(x, y) =


ax2 + be x mit a = 2 und b = 3.

=0
=1

0.3

Die Anweisungen und Ausgaben


0.2
1
2
3
4
5
6
7

>> g(3,4)
ans =
78.2566
>> a = 10;
>> g(3,4)
ans =
78.2566

=0
=2

0.1

0
4

Abbildung 49: Normalverteilungen

zeigen, dass die Variablenwerte so lange gltig


bleiben, bis man die Anonymous Function neu
52.3. Subfunctions
konstruiert.
Aufgabe 112 (Anonymous Functions) Die
Dichtefunktion f einer normalverteilten
Zufallsvariablen ist die parameterabhngige
Funktion

Ein Function m-File kann weitere Funktionen


beinhalten, die man subfunctions (Unterfunktionen) nennt. Diese knnen in einem m-File in
irgendeiner Reihenfolge nach der Hauptfunktion (main function, primary function) stehen.
2
1
(x)
f (x, , ) = e 22 , x R
Subfunctions sind nur der Hauptfunktion und
2
den anderen im m-File bendlichen Subfunctiwobei und > 0 reelle Parameter (Erwar- ons sichtbar.
tungwert und Standardabweichung) sind. Die- Wie Subfunctions verwendet werden knnen,
se Funktion ist in der Statistics-Toolbox unter zeigen wir in den folgenden Abschnitten, siehe
dem Namen normpdf implementiert. Zeich- zum Beispiel Abschnitt 62.2.
nen Sie die Graphen der Funktionen f (, 0, 1)
und f (, 0, 2) im Intervall [4, 4].
52.4. Nested Functions
Lsung: Die Anweisungen
1
2

mu = 0; sigma = 1;
f = @(x) normpdf(x,mu,sigma);

Man kann eine und mehr Funktionen in einer


Funktion schachteln. Es muss darauf geachtet

129

Copyright c G. Gramlich

werden, dass die end-Anweisung am Ende der


eingebauten und der Hauptfunktion steht. Es
gehrt zum guten Stil, die eingebaute Funktion einzurcken.

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

angegeben, dass sie auch fr weitere Implementierungen in anderen Objekten existiert.

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

52.6. Private Functions


Private Functions dienen dazu, eigene Implementierungen einer bereits existierenden Function gleichen Namens bereitszustellen, ohne
die Originalfunktion umzubenennen oder lschen zu mssen. Dazu muss die private Function in einem Unterverzeichnis des Arbeitsverzeichnisses mit dem Namen private gespeichert werden. Da Matlab bei der Suche nach
Funktionen immer zuerst nach solchen Unterverzeichnissen sucht, bevor die im Suchpfad

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.

durch einfachere anzunhern. Polynome lassen


sich einfach dierenzieren und integrieren, und
man wei, wie man numerische Nherungen
fr die Nullstellen ndet. Numerische Schwierigkeiten knnen auftreten, wenn man mit Polynomen hherer Ordnung arbeitet.

In Matlab gibt es eine Reihe von Funktionen,


die es ermglichen, ezient mit Polynomen zu
52.7. Beispielhafte Funktionen
arbeiten. Zum symbolischen Rechnen mit PoDer wahrscheinlich beste Weg gute Matlab- lynomen siehe Abschnitt 67.13.
Funktionen zu schreiben, besteht darin, sich
Beispiele von vorbildlich geschriebenen Funk53.1. Darstellung von Polynomen
tionen anzusehen und sich daran zu orientieren. Solche Funktionen werden natr- Polynome werden in Matlab durch einen Zeilich mit Matlab mitgeliefert. Schauen Sie lenvektor reprsentiert, wobei die Koordinaten
sich diese an! Mit type <Funktionsname> die Koezienten des Polynoms darstellen. Die
bekommen Sie ein Listing und mit edit Reihenfolge ist absteigend festgelegt, das heit
<Funktionsname> knnen Sie die Funktion die erste Koordinate des Vektors ist der Koefin den Matlab-Editor laden. Hier sind ein paar zient des Monoms hchster Ordnung und die
Beispiele:
letzte Kooordinate ist der Koezient des kon cov: Verwendung von varargin

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.

var: berprfung der Argumente


hadamard: Aufbau einer Matrix
why: Subfunctions
fminbnd: Schleifenkonstruktionen
quad, quadl: Rekursive Funktionen

gsvd: Subfunctions

2
3

ode45: Verwendung von varargin und


varargout

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

Polynoms zu berechnen, das heit diejenigen


Werte zu bestimmen, fr die das Polynom den
Wert Null annimmt. roots(p2) berechnet die
Nullstellen des Polynoms 2x2 + 1, gibt sie als
Spaltenvektor zurck und weist diese der Variablen r zu.
1
2
3
4

>> r = roots(p2)
r =
0 + 0.7071i
0 - 0.7071i

5
6
7
8
9
10
11
12
13
14
15
16

Kennt man die Nullstellen eines Polynoms,


nicht aber das Polynom selbst, so kann man mit
der Funktion poly das Polynom konstruieren.
Da ein Polynom aber durch seine Nullstellen
nur bis auf ein Vielfaches eindeutig bestimmt
ist, whlt Matlab das Polynom mit Koezient
1 im hchsten Monom.
poly(r) berechnet aus den Nullstellen in r
das Polynom x2 + 1/2.
1
2
3

>> poly(r)
ans =
1.0000

.......................................

53.3. Multiplikation von Polynomen


Mit der Funktion conv kann man Polynome miteinander multiplizieren. Das Polynom
p1 (x) = x2 + 2x 3 multipliziert mit dem Polynom p2 (x) = 2x3 x2 + 3x 4 ergibt das
Polynom p3 (x) = p1 (x) p2 (x) = 2x5 + 3x4
5x3 + 5x2 17x + 12

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

>> roots([1 -5 2 8])


ans =
4.0000
2.0000

-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

53.4. Addition und Subtraktion von


Polynomen
In Matlab gibt es keine Funktion zur Addition zweier Polynome. Haben die Polynome den gleichen Grad, werden die entsprechenden Zeilenvektoren addiert. Das Polynom
p1 (x) = x2 + 2x 3 addiert mit dem Polynom p4 (x) = x2 + 3x 4 ergibt das Polynom

132

Copyright c G. Gramlich

p5 (x) = p1 (x) + p4 (x) = 5x 7


1
2
3
4
5

>>
>>
>>
p5

p1 = [1 2 -3];
p4 = [-1 3 -4];
p5 = p1+p4
=
0
5
-7

Um die Funktion addpoly zu verstehen, betrachte man die folgenden Zeilen:


1
2
3

>> 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

53.5. Division von Polynomen

Mit der Funktion deconv kann man Polynome


3
2
Die folgende Matlab-Funktion automatisiert dividieren. Das Polynom p2 (x) = 2x x +
3x 4 dividiert durch das Polynom p1 (x) =
diesen Prozess.
x2 + 2x 3 ergibt das Polynom q(x) = 2x 5
1
function p1undp2 = addpoly(p1,p2)
mit dem Restpolynom r(x) = 19x 19.
2
3
4
5
6
7
8
9
10
11
12
13
14
15

%-------------------------------%-Addiert zwei Polynome


%-------------------------------if nargin < 2
error(Zu wenig Argumente.)
end
%-Stellt sicher, dass p1 und p2
%-Zeilenvektoren sind.
p1 = p1(:);
p2 = p2(:);
lp1 = length(p1); %Lnge von p1.
lp2 = length(p2); %Lnge von p2.
p1undp2 = [zeros(1,lp2-lp1) p1]+
[zeros(1,lp1-lp2) p2];

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

53.6. Ableiten von Polynomen


Die Matlab-Funktion polyder dierenziert
ein Polynom. Die Ableitung des Polynoms

133

Copyright c G. Gramlich

p2 (x) = 2x3 x2 + 3x 4 ergibt das Polynom Aufgabe 114 (Polynomfunktionen) Gegeben


p2 (x) = 6x2 2x + 3.
seien die folgenden Polynomfunktionsterme
1
2
3
4

>> 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

53.7. Integrieren von Polynomen

Die Matlab-Funktion polyint integriert ein


Polynom. Die Integration des Polynoms p(x) = Zeichnen Sie die Polynome im Intervall [0, 4].
6x2 2x + 3 ergibt das Polynom q(x) = 2x3 Benutzen Sie eingebaute Matlab-Funktionen,
x2 + 3x + c. Die Konstante c wird Null gesetzt. um folgende Polynome in den Punkten 0 und 1
auswerten zu knnen.
1
>> p = [6 -2 3];
2
3
4

>> q = polyint(p)
q =
2
-1
3

(a) f2 (x) 2 f4 (x)


(b) 3 f5 (x) + f2 (x) 2 f3 (x)

(c) f1 (x) f3 (x)


(d) f4 (x)/(x 1)

53.8. Auswerten von Polynomen


Polynome knnen mit der Funktion polyval
ausgewertet werden. Die folgenden Kommandos berechnen p(2.5) fr das Polynom p(x) =
4x3 2x2 + x 7.

Lsung: Das folgende Script lst die Aufgabe.


1
2
3
4

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

rechnen das Polynom und stellen das Problem


grasch dar.

In Matlab gibt es eine Reihe von ntzlichen


Funktionen, die dem Anwender das Arbeiten
mit Polynomen erleichtern. Dies kommt vor
allem dann zum Tragen, wenn Interpolationsund Approximationsaufgaben behandelt werden. Die Tabelle 36 fasst die Funktionen nochmals zusammen, siehe doc polyfun (help
polyfun).
Funktion
conv
deconv
poly
polyder
polyint
polyval
roots

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

Tabelle 30: Polynome in Matlab

1.5

0.5

0.5

Abbildung 50: Polynominterpolation

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-

Lsst man sich den Zeilenvektor x ausgeben,


so ndet man darin die gewnschten Koezienten des quadratischen Polynom; man erhlt
p2 (t) = 1 + 5t 4t2 .

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

Punkte zu legen. Die folgenden Matlab-Zeilen


zeigen, wie man das Polynom zweiten Grades
ndet und wie man die Ergebnisse grasch darstellen kann.

ter Fehlerquadrate zu verstehen ist:


Minimiere
x Rn

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

Abbildung 51: Polynomapproximation


Lsst man sich den Zeilenvektor x ausgeben,
so ndet man darin die gewnschten Koezienten des quadratischen Polynom; man erhlt
p2 (t) = 2.1757 + 2.6704t 0.2384t2 . Diese Polynom ist das beste Polynom zweiten Grades in
dem Sinne, dass es die Summe der Fehlerquadrate minimiert.

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

56. Kubische Splineinterpolation

10
9
8

Polynom
Daten
Spline

Fr viele Anwendungen ist die Polynominterpolation ungeeignet, insbesondere dann, wenn


der Grad des Interpolationspolynoms gro
gewhlt werden muss. Abhilfe schat in diesem Fall eine stckweise polynomiale Interpolation, insbesondere eine kubische Splineinterpolation. In Matlab kann man ein kubisches Splineinterpolationspolynom mithilfe
der Funktion spline berechnen. Ein kubischer
Spline ist ein stckweises kubisches Polynom,
das zweimal stetig dierenzierbar ist. Das folgende Beispiel zeigt eine kubische Splineinterpolation im Vergleich zu einer ungeeigneten
Polynominterpolation anhand von neun Datenpunkte, die zur Quadratwurzelfunktion gehren. Whrend das Interpolationspolynom achten Grades zu Ozillationen fhrt, ist eine kubische Splineinterpolation gut geignet die gegebenen Punkte zu interpolieren.

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

Abbildung 52: Kubische Splineinterpolation

57. Stckweise lineare


Interpolation
Angenommen es sind m Punkte (ti , yi ) gegeben. Setzt man t = (t1 , t2 , . . . , tm ) und
y = (y1 , y2 , . . . , ym ) und fhrt plot(t,y)
aus, so werden diese m Punkte geradlinig verbunden, das heit man sieht den Graph einer stckweisen (an) linearen Interpolationsfunktion. Mithilfe der Funktion interp1 kann
man stckweise lineare Interpolationsfunktionen berechnen. Wir zeigen dies an einen Beispiel. Angenommen es soll die stckweise lineare Interpolationsfunktion zu den Punkten
(ti , yi ) mit t = linspace(0,3,10) und y =
humps(t) berechnet werden, so kann man das
mit den folgenden Zeilen erreichen. Beachten Sie, dass humps eine eingebaute MatlabFunktion ist, deren Funktionsterm gegeben ist
durch hums(t) = 1/ (t 0.3)2 + 0.01 + 1/ (t
0.9)2 + 0.04 6.
1
2
3

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

Das zweite Argument des Funktionsaufrufes


gibt jeweils den Startpunkt des iterativen Verfahren an, x0 = 1 bzw. x0 = 3. Wir wollen fzero noch an der nichtlinearen Gleichung
x2 4 sin(x) = 0 illustrieren. Die Gleichung hat
die beiden Nullstellen: x1 = 0 und x2 1.9.
Man erhlt diese durch zum Beispiel durch

Interpolationsfunktion
Punkte
humps

80

60

40

20

20
0

1
0.5

1.5

2.5

2
3

Abbildung 53: Lineare Interpolation

>> f = @(x)x^2-4*sin(x);
>> x1 = fzero(f,1)
x1 =
-1.2470e-026

bzw.

58. Nichtlineare Gleichungen (1)

1
2

In Matlab gibt es die eingebaute Funktion


fzero zur Lsung einer nichtlinearen Gleichung in einer Variablen. Der Algorithmus
ist eine Kombination aus dem Intervallhalbierungsverfahren, der Sekantenmethode und
der inversen quadratischen Interpolation. Dieses hybride Verfahren hat eine lange und interessante Geschichte, siehe [6]. Es ist ein guter
Algorithmus, aber leider nur fr skalarwertige
Funktionen mit einer skalaren Variablen einsetzbar. Den m-File fzero ndet man im Verzeichnis Toolbox/MATLAB/funfun.

>> x2 = fzero(f,3)
x2 =
1.9338

Sie knnen sich die einzelnen Iterationsschritte


auch ausgeben lassen, indem Sie die entsprechende Option mit der optimset-Funktion
setzen. Dies geht wie folgt:
1

>> options = optimset(Display,


iter);
>> x2 = fzero(f,1,options);

Mit der Matlab-Funktion optimset knnen


Sie verschiedene Parameter (zum Beispiel GeDie Buckelfunktion humps hat zwei Nullstel- nauigkeitswerte) von Optimierungsfunktionen
len, siehe Abbildung 14. Wir berechnen diese setzen. Da das Lsen nichtlinearer Gleichunmit fzero.
gen eng verwandt ist mit dem Lsen von

138

Copyright c G. Gramlich

exp(x)+2 x

Optimierungsproblemen wird auch der Name


optimset verstndlich.

10

Parameterabhngige nichtlineare Gleichungen


knnen Sie ebenfalls mit fzero lsen. Glei5
chungen mit Polynomfunktionen knnen Sie
ezient mit der Funktion roots lsen. Nicht0
lineare Gleichungen mit mehr als zwei Variablen sind mit der Funktion fsolve anzugehen,
5
2
1
0
1
2
siehe Abschnitt 68. Diese Funktion gehrt aber
x
zur Optimization Toolbox und ist deshalb nur
Abbildung 54: Graph von f (x) = e x +2x, x R
dann verwendbar, wenn diese installiert ist.
Aufgabe 115 (Nichtlineare Gl.) Berechnen Sie
mit fzero die Lsung der nichtlinearen Glei- positiven Nullstellen der folgenden Funktiochung
nen:
x
e =x
(a) f1 (x) = 1/2e x/3 sin(x)
(b) f2 (x) = log(x + 1) x2

Lsung: Die Lsung ndet man wie folgt:


1
2
3
4

(c) f3 (x) = e x 5x2

>> 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

.......................................

Aufgabe 116 (Nichtlineare Gl.) Berechnen Sie


mit fzero die Lsung der nichtlinearen Gleichung
e x + 2x = 0

2
3
4

Die Nullstelle liegt oensichtlich im Intervall [0,1]. Mit

Die Abbildung 54 zeigt die Geometrie.


Lsung: Die Lsung ndet man wie folgt:

1
1
2
3
4

>> f = @(x) exp(x)+2*x;


>> x = fzero(f,3)
x =
-0.3517

2
3

.......................................
Aufgabe 117 (Nichtlineare Gl.) Finden Sie die

>> f = @(x) 1/2*exp(x/3)-sin(x)


;
>> fplot(f,[0 10])
>> xlabel(x),ylabel(f(x))
>> grid on

>> fzero(f,[0,1])
ans =
0.6772

sieht man, dass die Nullstelle der Punkt


x = 0.6772 ist.
(b) Wir zeichnen zunchst den Graphen der
Funktion (s. Abbildung 56) mit

139

Copyright c G. Gramlich

sieht man, dass die Nullstelle im Punkt


x = 0.3696 liegt.

15

f(x)

10

(c) Statt des @-Befehls kann man auch ein


m-File verwenden, das die entsprechende
Funktion enthlt. Dazu legt man ein mFile unter dem Namen f3.m an, dass folgenden Inhalt hat:

5
0

10

Abbildung 55: Graph der Funktion f1 im Intervall [0,10]

Mit Hilfe des Graphen der Funktion, der


durch
1
2

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;

>> fplot(@f3,[0 6])


>> xlabel(x),ylabel(f(x))
>> grid on

erzeugt werden kann (s. Abbildung 57),


erkennt man, dass die beiden Nullstellen
250

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

im Intervall [0,1] und im Intervall [4,5]


liegen. Mit
1
2
3

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

erkennt man, dass sie bei x1 = 0.6053 und


x2 = 4.7079 liegen.

>> solve(log(x)/log(0.5)-x)
ans =
.64118574450498598448620048211482

oder
1
2

.......................................

>> solve(ln(x)/ln(0.5)-x)
ans =
.64118574450498598448620048211482

Aufgabe 118 (Exponentialgleichung) BerechDie Funktion solve ist eine symbolische


nen Sie in Matlab die Lsung von
Funktion, das heit es wird versucht, eine symx
bolische Lsung zu nden. Dies ist aber nicht
(0.5) = x
mglich, daher schaltet solve auf ein numeLsung: Erste Mglichkeit
risches Verfahren um und liefert eine numerische Lsung.
1
>> solve(0.5^x=x)
2
3

Zweite Mglichkeit:

ans =
.64118574450498598448620048211482

1
2

>> f = @(x) log(x)/log(0.5)-x;


>> fzero(f,[0.1,1])
ans =
0.6412

Die Funktion solve ist eine symbolische 3


Funktion, das heit es wird versucht, eine sym- 4
bolische Lsung zu nden. Dies ist aber nicht
mglich, daher schaltet solve auf ein nume- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
risches Verfahren um und liefert eine numeriAufgabe 120 (Polynomgleichungen) Berechsche Lsung.
nen Sie mit roots die Lsung der PolynomZweite Mglichkeit:
gleichung
1
2
3
4

>> f = @(x) 0.5^x-x;


>> fzero(f,[0,1])
ans =
0.6412

x3 + 6x2 11x 6 = 0
Lsung: Die drei Lsungen ndet man wie
folgt:

.......................................

Aufgabe 119 (Logarithmusgleichung) Berechnen Sie in Matlab die Lsung von

2
3
4

log0.5 x = x
Lsung: Erste Mglichkeit:

>> roots([1 6 -11 -6])


ans =
-7.3803
1.8256
-0.4453

. . . . . . . . . . . Alle drei Lsungen sind reell.

141

Copyright c G. Gramlich

59. Optimierung (Teil 1)

4
5

Matlab besitzt zwei Funktionen, um zu optimieren: fminbnd und fminsearch. Mit


fminbnd kann man ein lokales Minimum einer
reellwertigen Funktion einer reellen Variablen
ausndig machen und mit fminsearch kann
man eine reellwertige Funktion mehrerer Variablen minimieren.
Mit der Funktion optimset knnen Sie
sich alle bei einer Optimierung einstellbaren Parameter ansehen und speziell mit optimset(fminbnd) bzw.
optimset(fminsearch) die der Funktionen fminbnd bzw. fminsearch. Beachten Sie
die Analogie zu odeset.
Das Kommando x = fminbnd(fun, x1,
x2) versucht von der Funktion fun ber dem
Intervall [x1 , x2 ] ein lokales Minimum zu
nden. Im Allgemeinen hat eine Funktion
mehrere Minima. In Matlab gibt es jedoch
keine Funktion, dieses schwierige Problem
zu lsen, nmlich ein globales Minimum zu
nden.

-0.7854
fWert =
-1.4142

Der von fminbnd verwendete Algorithmus ist


eine Kombination des goldenen Schnittes und
parabolischer Interpolation.
Mit der Funktion fminsearch ist es mglich, ein lokales Minimum einer reellwertigen
Funktion von n 1 Variablen zu berechnen.
Die Syntax ist hnlich wie die von fminbnd:
x = fminsearch(fun,x0,options), auer
dass das zweite Argument x0 ein Startvektor ist anstatt eines Intervalls. Die quadratische
2
2
Funktion f (x1 , x2 ) = x1 + x2 x1 x2 , (x1 , x2 )
R2 hat in x = (0, 0) eine Minimalstelle, denn
es ist:
1

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 =

lokalen Minimum gelangt oder sehr langsam


konvergiert. Dagegen hat es den Vorteil, robust
gegenber Funktionsunstetigkeiten zu sein.
Weitere verfeinerte Algorithmen nden Sie in
der Optimization Toolbox, siehe doc optim
(help optim).
Aufgabe 121 (Optimierung) Lsen Sie das

142

Copyright c G. Gramlich

Problem

2
2
Minimiere e x1 x2 + x1 + x2 .
2
xR

5
6
7

Geben Sie die Lsung auf vier Nachkommastellen an.


2
Lsung: Die Lsung ist x = (x1 , x2 )
(0.2836, 0.2836) mit f (x1 , x2 ) 0.7281.
Mit der Matlab-Funktion fminsearch gewinnt man die Lsungen wie folgt. Man schreibe eine m-File, in dem man die Zielfunktion
deniert
1

[x,f] = fminsearch(@(x) Zielf(x,a,


b),[0.2])
%-Zielfunktion.
function y = Zielf(x,a,b)
y = a*x.^2-b*x;

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;

Die diskrete Fourier-Transformation (DFT) ist


eine unitre lineare Abbildung von Cn nach Cn ,
wobei einem Vektor x Cn der Vektor y =
und ruft dann die fminsearch Funktion auf.
Fn x zugeordnet wird. Hierbei ist Fn Cnn
die unitre Matrix, die die diskrete Fourier1
>> fminsearch(@myf,[1;1])
2
ans =
Transformation beschreibt. Fr n = 4 hat diese
3
-0.2836
die Form
4
0.2835

1
1
1 1

1 2 3

.......................................

2i/4
Fn =
.

1 2 4 6 , = e

Aufgabe 122 (Optimierung) Lsen Sie das

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;

Die schnelle Fourier-Transformation (Fast


Fourier Transform = FFT) ist ein ezientes
Verfahren um den Bildvektor y anstatt der obigen Matrix-Vektor Multiplikation zu berechnen. Die Funktion fft realisiert diese Methode
und wird mit y = fft(x) aufgerufen. Die Efzienz von fft hngt vom Wert n ab; Primzahlen sind schlecht, zerlegbare Zahlen sind besser und Vielfache von 2 sind am Besten. Die
inverse FFT, x = F1 y, wird durch die Funktin
on ifft ausgefhrt: x = ifft(y). Wir geben
ein Beispiel:

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

>> y = fft([1 1 -1 -1])


y =
0
2.0000 - 2.0000i
0
2.0000 + 2.0000i
>> x = ifft(y)
x =
1
1
-1
-1

1
2
3

>> y = fft([1 0 -1 0])


y =
0
2
0
2

.......................................

Aufgabe 125 (FFT, Sinus) Berechnen Sie


die diskrete Fourier-Transformation des Vektors x = (0, 1, 0, 1). Machen Sie sich jedoch
Aufgabe 123 (FFT, Konstante) Berechnen erst klar, was heraurauskommen sollte.
Sie die diskrete Fourier-Transformation des Lsung: Es ist
Vektors x = (1, 1, 1, 1). Machen Sie sich je- 1 >> y = fft([0,1,0,-1]).
doch erst klar, was heraurauskommen sollte.
2
y =
Lsung: Es ist
3
0
11
12

1
2
3

>> y = fft([1 1 1 1])


y =
4
0
0
0

5
6

0 - 2.0000i
0
0 + 2.0000i

Die Abbildung 58 zeigt die Vektoren x = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


Aufgabe 126 (FFT, Sinus) Berechnen Sie jex
y
1.5
4.5
weils die diskrete Fourier-Transformation
4

(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

Abbildung 58: Zu Aufgabe 126

5
6

(1, 1, 1, 1) und y = (4, 0, 0, 0). . . . . . . . . . . . .

Aufgabe 124 (FFT, Kosinus) Berechnen Sie

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

aptive Integrationsfunktionen zur Verfgung.


Sie berechnen eine Nherung an das bestimmb
te Integral a f (x) dx. Hierbei mssen die Integrationsgrenzen a und b endlich sein und der
Integrand f (x) darf im Intervall [a, b] keine
Singularitten besitzen.

>> y3 = fft([4,0,1,0,2,0,1,0]).
y3 =
8
2
4
2
8
2
4
2

Wir diskutieren die Funktion quad; quadl


funktioniert analog. Ein Aufruf der Form
1

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

Unter numerischer Integration versteht man die


Berechnung einer Approximation an bestimmb
te Integrale der Form a f (x) dx. Matlab stellt
die beiden Funktionen quad und quadl als ad-

145

0
0

0.2

0.4

0.6

0.8

Abbildung 59: Flche unter humps in [0, 1]

Copyright c G. Gramlich

von Graph und Flcheninhalt. Die Abbildung


wurde dabei mit folgenden Anweisungen erstellt:
1
2
3

0.8

>> x = linspace(0,1);
>> y = humps(x);
>> area(x,y,FaceColor,r,
LineWidth,2,EdgeColor,b);

0.6

0.4

0.2

Das bestimmte Integral

0.2

0.4

0.6

0.8

x x dx

Abbildung 60: Flche unter x x in [0, 1]

kann von Matlab nicht exakt (symbolisch) bevon t = 0 bis t = 2.


rechnet werden.
Lsung: Es ist f (t) = (1 cos t, sin t) und so1
>> syms x
mit gilt
2
3
4
5
6
7
8

>> 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

(1 cos t)2 + sin2 t dt

und damit in Matlab


1

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

Lsung: Ist die Funktion


f : R R2

t (t sin t, 1 cos t)

146

function f = fxlog(x)
f = x.*log(x);

Copyright c G. Gramlich

61.1. Mehrfachintegrale

deniert, so erhlt man nach Eingabe von

Man spricht von einem zweifachen Integral


(Doppelintegral) wenn es die Form
1
2
3

>> quad(@fxlog,2,4)
ans =
6.7041

f (x, y) dx dy
D

hat. Hierbei ist D ein beschrnktes Gebiet im


zweidimensionalen Raum R2 . Ein dreifaches
Integral (Dreifachintegral) liegt vor, wenn die
Gestalt
eine Approximation an das zu berechnende Integral.

f (x, y, z) dx dy dz
G

Beachten Sie die Array-Multiplikation .* in


hat, wobei G ein beschrnktes Gebiet im dreiobiger Funktion fxlog, damit die Funktion fr
dimensionalen Raum R3 ist. Analog sind viervektorwertige Eingabeargumente korrekt funkund mehrfache Integrale deniert. Die Berechtioniert. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
nung mehrfacher Integrale lsst sich auf die
Die Funktion quad basiert auf der Simpson- Berechnung mehrerer einfacher Integrale zuRegel, welche eine Newton-Cotes 3-Punkt Re- rckfhren.
gel ist, das heit sie ist fr Polynome bis zum Doppelintegrale knnen mit dblquad numeGrad 3 exakt. Die Funktion quadl setzt eine risch berechnet werden. Angenommen wir
genauere Gauss-Lobatto 4-Punkt Regel mit ei- wollen das Integral
ner 7-Punkt Kronrod Erweiterung ein. Somit
6
1
ist diese fr Polynome bis zum Grad 5 bzw.
(y2 e x + x cos y) dx dy
9 genau. Beide Funktionen arbeiten adaptiv.
y=4 x=0
Sie unterteilen das Integrationsintervall in Teilapproximieren, dann knnen wir wie folgt verintervalle und verwenden ber jedem Teilinfahren. Zunchst denieren wir den Integrantervall die zugrundeliegende Integrationsregel.
den, der nun ein Funktionsterm von zwei unDie Teilintervalle werden aufgrund des lokalen
abhngigen Variablen ist.
Verhaltens des Integranden gewhlt, wobei das
kleinste Intervall dort ausgesucht wird, wo der 1 function out = fxy(x,y)
Integrand sich am meisten ndert. Eine War- 2 out = y^2*exp(x)+x*cos(y);
nung wird ausgegeben, wenn die Teilintervalle
zu klein werden oder falls zu viele Funktions- Dann geben wir ein:
auswertungen gemacht werden mssen, wor- 1 >> dblquad(@fxy,0,1,4,6)
auf oft geschlossen werden kann, dass der In- 2 ans =
3
87.2983
tegrand eine Singularitt besitzt.

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.

61.2. Tabellarische Daten

Eine weitere Integrationsroutine ist trapz,


welche wiederholt die Trapezregel anwendet.
Sie unterscheidet sich von quad und quadl
dadurch, dass die Eingabeargumente Vektoren
xi , f (xi ) und nicht der analytische Funktionsterm f (x) ist. Deshalb kann die Funktion auch
Aufgabe 129 (Doppelintegral) Berechnen Sie
nicht adaptiv arbeiten. Wir zeigen die Funktidas Integral
onsweise an einem Beispiel. Der exakte Wert

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

Aufgabe 130 (Dreifachintegral) Berechnen Sie


das Integral
1

Wir zeigen noch ein Beispiel fr eine nicht


gleichmige Diskretisierung des Intervalls
[0, ]
1

(x3 ) dx dy dz
z=1

y=0

x=0

4
5

Lsung: Es ist
1

2
3

>> triplequad(@(x,y,z) x.^3, 0, pi


, 0, 1, -1, 1)
ans =
48.7045

>> trapz(x,y)
ans =
1.9993

>> x = sort(rand(1,101)*pi);
>> y = sin(x);
>> trapz(x,y)
ans =
1.9983

Im allgemeinen sind jedoch die Funktionen


quad und quadl vorzuziehen, wenn der Integrand analytisch verfgbar ist.

Steht der Integrand f in tabellarischer Form


. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (ti , f (ti )), i = 1, 2, . . . , m zur Verfgung und ist

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

>> plot(t,f,t,z), grid,


>> legend(f,F_{-1})

t1

interessiert, so kann man die Matlab-Funktion


cumtrapz verwenden. Das bestimmte Integral
von t1 bis zu irgendeinem Punkt x = ti wird
dann durch die Trapezregel berechnet. Der
Aufruf

erzeugt.

Aufgabe 131 (Integration) Zeichnen Sie den


Graph der Integralfunktion F3 von f (t) =

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

Die Abbildung 61 zeigt den Graph der humps-

0
3

100
f
F1

80

Abbildung 62: Die Graphen zu Aufgabe 131

60

f ist die Dichtefunktion und F ist die Verteilungsfunktion der Standardnormalverteilung


aus der Statistik. Der dazugehrige MatlabCode ist

40
20
0
20
1

0.5

0.5

1.5

2
3

Abbildung 61: humps-Funktion und Integralfunktion im Intervall [1, 2]

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})

Funktion und den Graph der dazugehrigen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

149

Copyright c G. Gramlich

61.3. Numerische uneigentliche


Integration

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)

In Matlab gibt es mehrere Funktionen, um


d y(t) = y(t) 5et sin(5t)

AWA : dt
Anfangswertaufgaben von gewhnlichen Dify(0) = 1

ferenzialgleichungen numerisch zu lsen. Anfangswertaufgaben haben folgende Form


mit ode45 zu lsen, kreieren wir als erstes den

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);

Danach machen wir folgende Eingabe


1
2
3
4

tspan = [0,3]; y0 = 1;
[t,y] = ode45(@rSeite,tspan,y0);
plot(t,y,-), grid,
xlabel t, ylabel y(t)

Dies erzeugt die Abbildung 63 (Beachten Sie,


dass wir beim Setzen der x- und y-Labels die
Kommando/Funktionsdualitt ausgenutzt haben). Die Eingabeargumente von ode45 sind
1

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

Abbildung 63: Skalares Anfangswertproblem

die Funktion rSeite, der 2-Vektor tspan,


der die Zeitspanne der Simulation speziziert
Um das skalare (m = 1) Anfangswertproblem und der Anfangswert y0. Zwei Argumente t

151

Copyright c G. Gramlich

und y werden zurckgegeben. Die t-Werte lie- 1 >> dsolve(Dy*y+t=0,t)


gen alle im Intervall [0, 3] und y(i) appro- 2 ans =
(-t^2+C1)^(1/2)
ximiert die Lsung zur Zeit t(i). Die Werte 3
4
-(-t^2+C1)^(1/2)
t(2:end-1) werden von der Funktion ode45
automatisch gewhlt. In den Bereichen, wo
Mit der Anfangsbedingung y(0) = 1 ergibt sich
sich die Lsungsfunktion rapid ndert, werden
die Konstante zu 1 und die Lsung ist
mehr Punkte ausgewhlt. Fr weitere Informationen siehe doc funfun (help funfun).
y(t) = 1 t2 .
Mit der Funktion ode15i kann man Anfangswertaufgaben,
deren
Dierenzial- Hier die Besttigung:
gleichung in impliziter Form vorliegt, 1 ytrue = dsolve(Dy*y+t=0,y(0)=1
numerisch lsen. Wir betrachten ein ska,t)
lares Problem. Die Eingabe ist entspre- 2 ytrue =
chend den anderen ODE-Funktionen: 3 (-t^2+1)^(1/2)
ode15i(odefun,tspan,y0,yp0).
Das
erste Argument speziziert die Funktion Wir lsen die Anfangswertaufgabe nun numef (t, y, y ), das Zweite und Dritte den Simu- risch mit ode15i. Die Funktion f denieren
lationsbereich (Integrationsintervall) [t0 , t f ] wir im m-File fuerode15i wie folgt:
bzw. den Anfangswert y(t0 ) und das vierte 1 function res = fuerode15i(t,y,yp)
Argument den Anfangswert der Ableitung, das 2 res = yp*y+t;
heit y (t0 ). Als Beispiel betrachten wir das
Dann ergibt sich die numerische Lsung durch
Anfangswertproblem
die Anweisungen:

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);

Die Abbildung 64 zeigt die numerische und


symbolische (analytische) Lsung der impliziten Anfangswertaufgabe. Die Abbildung wurde mit den Anweisungen
1
2
3

ezplot(ytrue,[0,0.9])
hold on
plot(t,y,ro)

erzeugt. Fr weitere Informationen siehe doc


ode15i (help ode15i).

152

Copyright c G. Gramlich

Verfahren der Ordnungen 2 und 3


1

ode23t fr mig steife Dierenzialgleichungen. Verfahren: Implizite Trapezregel


der Ordnungen 2 und 3

0.9

0.8
0.7

ode23tb fr steife Dierenzialgleichungen. Verfahren: Implizites Runge-KuttaVerfahren der Ordnungen 2 und 3

0.6
0.5
0.4
0

symbolisch
numerisch
0.2

0.4

0.6

Nicht alle schwierigen Probleme sind steif,


aber alle steifen Probleme sind schwierig fr
ODE-Lser, die nicht fr steife Probleme ausgelegt sind.

0.8

Abbildung 64: Implizites


Anfangswertproblem
Die folgende Aufzhlung gibt eine komplette
bersicht ber alle AWA-Lser in Matlab. Dazu wird angegeben fr welchen Problemtyp der
Lser geeignet ist und welches Verfahren dahinter steht.
ode45 fr nicht steife Dierenzialgleichungen. Verfahren: Runge-Kutte-Verfahren der
Ordnungen 4 und 5
ode23 fr nicht steife Dierenzialgleichungen. Verfahren: Runge-Kutte-Verfahren der
Ordnungen 2 und 3
ode113 fr nicht steife Dierenzialgleichungen. Verfahren: Explizites lineares
Mehrschrittverfahren der Ordnungen 1 bis
13

Die Entwickler dieser Algorithmen, Shampine


und Reichelt haben Ergebnisse ihrer Arbeit in
[30] dargestellt. Die Funktionen sind so konstruiert, dass man sie gegeneinander leicht austauschen kann. So ist es zum Beispiel leicht
mglich den ode45-Lser aus den obigen Beispielen durch einen anderen Lser auszutauschen. Aus [30] entnehmen wir:
The experiments reported here and others we
have made suggest that except in special
circumstances, ode45 should be the code tried
rst. If there is reason to believe the problem
to be sti, or if the problem turns out to be
unexpectedly dicult for ode45, the code
ode15s code should be tried.

ode15s fr steife Dierenzialgleichungen. 62.2. Randwertaufgaben


Verfahren: Implizites lineares MehrschrittTreten in den Bedingungsgleichungen zur einverfahren der Ordnungen 1 bis 5
deutigen Charakterisierung der Lsung einer
ode15i fr implizite Dierenzialgleichun- Dierenzialgleichung die Funktions- und Abgen. Verfahren: Implizites lineares Mehr- leitungswerte der gesuchten Funktion nicht nur
schrittverfahren der Ordnungen 1 bis 5
wie bei Anfangswertproblemen (AWP) an
ode23s fr steife Dierenzialgleichun- einer einzigen, sondern an zwei Stellen auf,
gen. Verfahren: Modiziertes Rosenbrock- und ist man nur an einer Lsung auf dem In-

153

Copyright c G. Gramlich

tervall zwischen diesen beiden Stellen interes- tige Lsung


u(x) = x3 .
siert, so spricht man von einer Randwertaufgabe (RWA) (Randwertproblem (RWP); englich: Dies sieht man so. Die allgemeine Lsung der
Boundary Value Problem (BVP)).
Dierenzialgleichung u = 6x ist
Die Funktion bvp4c realisiert eine
u(x) = x3 + c1 x + c2 .
Kollokationsmethode,
um
ZweipunktRandwertaufgaben zu lsen. Diese Syste- Die Randbedingungen bestimmen dann die
me knnen in folgender Form geschrieben Konstanten c und c
1
2
werden:

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.

Wir verwenden nun bvp4c, um diese Lsung


zu besttigen. Im einfachsten Fall hat bvp4c
drei Funktionsargumente: Eine Funktion, in
der das Dierenzialgleichungssystem deniert
ist, eine Funktion mit den Randbedingungen
und eine dritte Funktion, die ein Startgitter sowie eine Anfangsvermutung fr die Lsungsfunktion auf diesem Gitter beinhaltet. Das Differenzialgleichungssystem wird genauso gehandhabt wie bei den Anfangswertproblemen,
nmlich als System erster Ordnung. Es ist daher als erstes notwendig, die Dierenzialgleichung zweiter Ordnung in ein System erster
Ordnung umzuschreiben. Wir schreiben gleich
das ganze Randwertproblem zweiter Ordnung
in ein System erster Ordnung. Mit den Denitionen y1 (x) = u(x) und y2 (x) = u (x) erhalten
wir die Randwertaufgabe erster Ordnung:
Als Beispiel betrachten wir die Zweipunkt
y (x) = y2 (x)
1

Randwertaufgabe:

RWA : y2 (x) = 6x
0x1

u = 6x

y1 (0) = 0, y1 (1) = 1
RWA :
0 x 1.
u(0) = 0 u(1) = 1

Das Dierenzialgleichungssystem wird nun in


Diese ist analytisch lsbar und hat die eindeu- der Funktion odes deniert

154

Copyright c G. Gramlich

In odefun wird das Dierenzialgleichungssystem ausgewertet, in bcfun werden die Rand2


bedingungen ausgewertet, solinit beschreibt
den Anfangszustand, in options knnen OpDie Randbedingungen werden durch eine Retionen bergeben werden und die Eingabeargusiduenfunktion ausgedrckt. Die beiden Randmente p1, p2 erlauben zustzliche Parameter.
bedingungen y1 (0) = 0, y1 (1) = 1 werden dann
wie folgt (zum Beispiel in der Funktion bcs) Zusammenfassend sind fr die Durchfhrung
folgende Schritte empfehlenswert:
programmiert:
1

function dydx = odes(x,y)


dydx = [y(2);6*x];

function res = bcs(yx0,yxf)


res = [yx0(1);yxf(1)-1];

1. Schreiben Sie das Problem als Randwertproblem erster Ordnung.

Als Startlsungsfunktionen whlen wir die


Nullfunktion.
1
2

function yinit = guess(x)


yinit = [0;0];

2
3
4
5

3. Schreiben Sie eine Funktion fr die Randbedingungen.


4. Schreiben Sie eine Funktion fr die Startnherung.

Die folgenden Matlab-Zeilen berechnet die


Lsung und stellt sie grasch dar.
1

2. Schreiben Sie eine Matlab-Funktion, in


der das System erster Ordnung deniert ist.

solinit = bvpinit(linspace(0,1,5),
@guess);
sol = bvp4c(@odes,@bcs,solinit);
xint = linspace(0,1);
sxint = deval(sol,xint);
plot(xint,sxint(1,:))

5. Rufen Sie den RWA-Lser bvp4c auf.


6. Zeigen Sie die Resultate.
Aufgabe 132 (Randwertaufgaben) Wir betrachten die Randwertaufgabe

y = y

RWA :
y(0) = 3, y(/2) = 7 0 x /2.

(a) Zeigen Sie, dass

Der Aufruf der Funktion bvpinit kreiert die


Struktur solinit, welche die Daten beinhaltet, die durch Auswerten von guess an fnf
quidistanten Punkten von 0 bis 1 berechnet
werden; in diesem Fall alle Null.
Im Allgemeinen hat ein Aufruf von bvp4c die
Form:
1

sol = bvp4c(@odefun,@bcfun,solinit
,
options,p1,p2,...)

y(x) = 7 sin(x) + 3 cos(x), x [0, /2]


die eindeutige Lsung ist.
(b) Besttigen sie (a), indem Sie die Lsung
mit der Funktion bvp4c numerisch berechnen.
Lsung:
(a) Die allgemeine Lsung der Dierenzialgleichung ist
y(x) = c1 sin(x) + c2 cos(x).

155

Copyright c G. Gramlich

Die unbekannten Konstanten c1 und c2 62.3. Partielle Dierenzialgleichungen


knnen dann aus den Randbedingungen
Mit der Funktion pdepe kann man partibestimmt werden:
elle Dierenzialgleichungen lsen. Matlabs
pdepe lst eine Klasse von parabolischen bzw.
3 = y(0) = c1 sin(0) + c2 cos(0) = c2
elliptischen partiellen Dierenzialgleichungssysteme (PDE: Partial Dierential Equation).
und
Die allgemeine Klasse hat die Form:
7 = y(/2) = c1 sin(/2) + c2 cos(/2)

c(x, t, u, u x )ut =

= c1 .

xm (xm f (x, t, u, u x )) x + s(x, t, u, u x ),

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];

p x0 (x, t, u) + q x0 (x, t) f (x, t, u, u x ) = 0


gengen, wobei die Funktionen p x0 und q x0
gegeben sind. hnlich muss fr x = x f und
t0 t t f
p x f (x, t, u) + q x f (x, t) f (x, t, u, u x ) = 0
gelten, wobei die Funktionen p x f und q x f gegeben sind. Fr weitere Details siehe doc pdepe
(help pdepe).

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ein Aufruf von pdepe hat die allgemeine Form

156

Copyright c G. Gramlich

13
1

sol = pdepe(m,@pdefun,@pdeic,
@pdebc,xmesh,tspan,options,p1,
p2,...);

14
15
16

was der Syntax von bvp4c gleicht.

17

Als Beispiel betrachten wir die eindimensionale Wrmeleitungsgleichung

18

ut (x, t) = u xx (x, t)

21

19
20

22
23

fr 0 x 1 und 0 t 0.5 mit der Anfangsbedingung

24
25
26

u(x, 0) = sin(x)

27
28

und den Randbedingungen

29
30

u(0, t) = u(1, t) = 0.

31
32

Dieses Problem ist mit pdepe lsbar, da es


die von pdepe erlaubte Form besitzt. Es ist
m = 0, c(x, t, u) = 1, f (x, t, u, u x ) = u x und
s(x, t, u, u x ) = 0. Fr x = x0 sind p(x, t, u) = u
und q(x, t, u) = 0 die Randbedingungen, und
fr x = x f haben wir p(x, t, u) = u und
q(x, t, u) = 0. Die Function pdeWaerme realisiert die Lsung des Problems.
1
2
3
4
5
6
7
8
9
10
11
12

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

Abbildung 65: Lsung der PDE


eine Lsung des Wrmeleitungsproblems

ut (x, t) = u xx (x, t)

0 x 1, t 0
u(x, 0) = sin(x)

u(0, t) = u(1, t) = 0

Tabelle 32: Grundlegende Funktionen


ist.
2 t sin(x)
Lsung: Leiten wir u(x, t) = e
nach t ab, so erhalten wir die linke Seite der funktionen sind in Tabelle 33 zu sehen. Mit
Dierenzialgleichung
Dichtefunktionen
2
ut (x, t) = 2 sin(x)e t .
binopdf Binomialdichte
2
geopdf
Geometrische Dichte
Leiten wir u(x, t) = e t sin(x) zweimal nach
normpdf Normaldichte
x ab, so erhalten wir die rechten Seite der Difunidpdf Diskrete gleichmige Dichte
ferentialgleichung
unifpdf Stetige gleichmige Dichte
2
u xx (x, t) = 2 sin(x)e t .
Tabelle 33: Dichtefunktionen
Da beide Seiten fr alle x und t gleich sind, ist
alles gezeigt. . . . . . . . . . . . . . . . . . . . . . . . . . . .
der Funktion disttool knnen Sie Dichtefunktionen und Verteilungsfunktionen visualisieren. Die Abbildung 66 zeigt die Dichtefunk63. Statistik
tion der Standardnormalverteilung.
Vorhersagen sind schwierig vor allem ber Mit doc stats (help stats) erhalten Sie
die Zuknnft einen berblick ber alle Funktionen der StaNiels Bohr. tistics Toolbox.

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

Abbildung 66: disttool

1
2

Wir zeigen, wie man in Matlab kombinatorische Probleme lsen kann.

64.1. Fakultten, Binomial- und


Polynomialzahlen

2
3

Die Funktion factorial berechnet die


Fakultt-Funktion n!. Da in doppelter Genauigkeit nur ungefhr 15 Stellen exakt sind, ist
das Ergebnis nur fr n 21 exakt richtig.
Sonst sind nur die ersten 15 Stellen exakt
genau.
2
3

>> maple(6!)
ans =
720

Die Funktion perms gibt alle Permutationen


an. Von den drei verschiedenen Objekten 1, 2
und 3 gibt es genau sechs Permutationen. Diese sind:

>> factorial(6)
ans =
720

1
2

Eine Alternative stellt die Funktion prod dar.


2

>> maple(n!)
ans =
n!

da Maple das !-Zeichen als Fakulttszeichen


erkennt.

>> 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

Aufgabe 134 (Binomialzahlen) Wie viele


Mglichkeiten gibt es aus n = 49 verschiedenen Objekten k = 6 verschiedene Objekte
auszuwhlen?
Lsung: Es ist gibt n Mglichkeiten. Also
k
ist
1
2
3

>> nchoosek(49,6)
ans =
13983816

3
4
5
6
7
8
9
10
11
12
13

Demnach betrgt die Wahrscheinlichkeit beim


Lotto sechs richtige zu haben 1/13983816
7.1511 108 = 0.000000071511. . . . . . . . .

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

Mit der Maple-Funktion multinomial kann


man Polynomialzahlen berechnen.
Aufgabe 136 (Polynomialzahlen) Berechnen
8
Sie mit Matlab 2,3,3 .
Lsung: Es ist
1
2
3
4

>> maple(with(combinat));
>> maple(multinomial,8,2,3,3)
ans =
560

Aufgabe 135 (Binomialzahlen) Geben Sie alle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


Teilmengen der Menge {1, 2, 3, 4, 5, 6} mit genau vier Elementen an. Wieviel gibt es?
64.2. Permutationen ohne Wiederholung
Lsung: Es ist:
1
2

>> nchoosek(1:6,4)
ans =

Die Anzahl der Permutationen ohne Widerholung kann man mit den Funktionen

160

Copyright c G. Gramlich

factorial, prod, Maple-factorial und . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


dem Maple-Zeichen ! berechnen, siehe Abschnitt 64.1. Die Permutationen selbst sind mit
64.6. Variationen mit Wiederholung
der Funktion perms zu erhalten.
Aufgabe 138 (Variationen m.W.) Berechnen
Sie mit Matlab VW (26, 6).
Lsung: Es ist VW (n, k) = nk .

64.3. Variationen ohne Wiederholung


Die Anzahl der Variationen ohne Wiederholung kann mit den Funktionen zur Berechnung
der Fakultten und Binomialzahlen ausgerechnet werden, siehe Abschnitt 64.1.

1
2
3

>> VW = 26^6
VW =
308915776

Angenommen wir wollen V(30, 5) berechnen, . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


so geht das zum Beispiel wie folgt:
1
2
3

64.7. Kombinationen mit Wiederholung

>> factorial(30)/factorial(30-5)
ans =
17100720

Aufgabe 139 (Variationen m.W.) Berechnen


Sie mit Matlab KW (6, 2).
Lsung: Es ist KW (n, k) = n+k1 .
k

oder aber
1
2
3

>> factorial(5)*nchoosek(30,5)
ans =
17100720

1
2
3

>> KW = nchoosek(6+2-1,2)
KW =
21

oder

64.4. Kombinationen ohne Wiederholung

1
2

Siehe Abschnitt 64.1.

64.5. Permutationen mit Wiederholung

>> KW = maple(binomial,6+2-1,2)
KW =
21

.......................................

Aufgabe 137 (Permutationen m.W.) Berech- 64.8. Weitere Funktionen


nen Sie mit Matlab PW (2, 3, 3).
Lsung: Es ist PW (2, 3, 3) = 8!/(2! 3! 3!) Verfgt man ber die Extended Symbolic Toolauszurechnen.
box, also ber alle Maple-Funktionen, so gibt
es das combinat-Paket. Damit stehen noch
1
>> maple(with(combinat));
mehr Funktionen
2
>> maple(multinomial,8,2,3,3)
3
4

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

composition conjpart decodepart


encodepart fibonacci firstpart
graycode inttovec
lastpart
multinomial nextpart numbcomb
numbcomp numbpart
numbperm
partition permute
powerset
prevpart randcomb
randpart
randperm setpartition stirling1
stirling2 subsets
vectoint

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.

In Matlab gibt es zwei eingebaute Funktionen


rand und randn, mit denen man Zufallszahlen
erzeugen kann. Wir wollen im folgenden diese beiden Funktionen vorstellen und miteinander vergleichen. Dabei werden uns ihre statistischen Eigenschaften durch grasche Darstellungen verdeutlichen.

65.1. Gleichverteilte Zufallszahlen

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

Der Aufruf rand(50,2) erzeugt eine Matrix


mit 50 Zeilen und 2 Spalten mit Werten zwischen 0 und 1. Testen Sie dies! Allgemein
erzeugt der Aufruf rand(m,n) eine (m, n)Matrix mit gleichverteilten Zufallszahlen zwischen 0 und 1.

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

if nargin < 3, k=9; end;


A = floor( (2*k+1)*rand(m,n)-k );

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)

einen Spaltenvektor mit n gleichverteilten Wer- 65.2. Normalverteilte Zufallszahlen


ten im Intervall ]5, 8[.
Mit rand und der eingebauten MatlabFunktion floor lassen sich auch leicht ganzzahlige Zufallszahllen generieren. Die Rundungsfunktion floor(A) rundet alle Elemente von A auf die nchstkleinere ganze Zahl
(nchste ganze Zahl in Richtung ). Der
folgende Function-File realisiert das Erzeugen von ganzzahligen Zufallszahlen. Auer der
Gre der gewnschten Matrix lsst sich auerdem mit k ein Intervall [-k:k] angeben,
aus dem die Zahlen zufllig erzeugt werden.
Wird k nicht angegeben, so wird k=9 gewhlt.
1
2

function A = randganz(m,n,k)
if nargin == 1, n=m; end;

Erzeugen wir Zufallszahlen mit der Funktion


rand, so treten alle Werte in einem bestimmten
Intervall gleichmig hug auf. In den Anwendungen sucht man oft auch Zufallszahlen,
deren Werte nicht gleichmig auftreten, sondern wo bestimmte Werte huger vorkommen
als andere, man nennt sie normalverteilte Zufallszahlen (auch Gausssche Zufallszahlen genannt).
In Matlab erzeugt man normalverteilte Zufallszahlen mit Mittelwert 0 und Varianz
1 mit der Funktion randn. Der Befehl
randn(10,1) erzeugt zum Beispiel folgende
normalverteilte Zufallszahlen:

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)

65.3. Im Vergleich: Gleich- und


normalverteilte Zufallszahlen
Histogramme bieten eine geeignete Mglichkeit, um Zufallszahlen grasch darzustellen.
Der Script-File
1
2

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)

illustriert die beiden Matlab-Funktionen rand


und randn grasch, siehe Abbildung 67.
Das obere Histogramm zeigt, wie sich die
10000 Zufallszahlen gleichmig ber das
Intervall ]0, 1[ verteilen. Mit dem Befehl
rand(10000,1) wird ein Spaltenvektor mit
10000 Werten erzeugt und yg zugeordnet.
Die Matlab-Funktion hist erstellt nun das
Histogramm. Mit dieser Funktion kann man
verschiedene Ziele erreichen. Ein Aufruf wie
hist(yg,25) erzeugt ein Histogramm, das
angibt, wie oft ein Wert in einem Subintervall von ]0, 1[ vorkommt. Die Zahl 25 schreibt
vor, das Intervall ]0, 1[ in 25 gleichgroe Subintervalle einzuteilen und 25 Rechteckschen
zu zeichnen, deren Breite die Subintervallnge
und deren Hhe die Anzahl der Zufallswerte
in dem jeweiligen Subintervall angeben. Das
untere Histogramm in Abbildung 67 zeigt, wie
sich 10000 Zufallszahlen mit Mittelwert 0 und
Varianz 1 hnlich einer Gauschen Glockenkurve verteilen.
Der Skript-File
1
2
3
4
5

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

(c) zwischen -20 und 10.

400

(d) zwischen und .

200

Lsung: Dies kann wie folgt erreicht werden.

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

Aufgabe 142 (Zufallszahlen) Erzeugen Sie


tausend gleichverteilte Zufallszahlen

Abbildung 67: Zufallszahlen

(a) mit Mittelwert 1/2 und Varianz 1/12


10
11
12
13
14
15

(b) mit Mittelwert 0 und Varianz 1/12

subplot(1,2,2)
plot(Punkte(:,1),Punkte(:,2),.)
title(Normalverteilte
Zufallszahlen)
axis([-3 3 -3 3])
axis(square)

(c) mit Mittelwert 0 und Varianz 1


(d) mit Mittelwert 0 und Varianz 3
Lsung: Dies kann man wie folgt erreichen:
(a) rand(1000,1)

erzeugt die Abbildung 68, um Unterschiede

(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

Aufgabe 143 (Zufallszahlen) Erzeugen Sie


tausend normalverteilte Zufallszahlen

Abbildung 68: Zufallszahlen

(a) mit Mittelwert 1.0 und Varianz 0.5.

zwischen rand und randn klar zu machen.

(b) mit Mittelwert -5.5 und Standardabweichung 0.25.

Aufgabe 141 (Zufallszahlen) Erzeugen Sie


zehn gleichverteilte Zufallszahlen im jeweils
angegebenen Intervall

(c) mit Mittelwert -5.5 und Standardabweichung 1.25.

(a) zwischen 0 und 10.

Lsung: Dies kann wie folgt erreicht werden.


(a) sqrt(0.5)*randn(1000,1)+1;.

(b) zwischen -1 und 1.

165

Copyright c G. Gramlich

(b) 0.25*randn(1000,1)-5.5;.

denen Zufallseinsse auftreten. Stochastische Simulationsmethoden werden auch Mon(c) 1.25*randn(1000,1)-5.5;.


te Carlo Methoden genannt. Solche Methoden
Dies gilt wegen den Transformationsformeln
sind ntzlich bei:
fr den arithmetischen Mittelwert bzw. fr die
(stochastischen)
Varianz: Ist yi = axi + b, so gilt y = a x + b und Nichtdeterministischen

2 = a2 s2 . Hier gilt, dass die Zahlen x den


Prozessen.
sY
i
X
Mittelwert null und die Standardabweichung Deterministischen Systemen, die zu kompli(Varianz) eins haben. . . . . . . . . . . . . . . . . . . .
ziert sind, um sie analytisch zu behandeln.
Deterministischen Problemen, die so hoch
dimensional sind, dass Standarddiskretisie65.4. Andere Verteilungen
rungsverfahren ungeignet sind (zum Beispiel Monte Carlo Integrationen).
Wenn Sie ber die Statistik Toolbox verfgen,
so knnen Sie Zufallszahlen konfortabel und Die beiden grundstzlichen Voraussetzungen
interaktiv mit randtool erzeugen; fr inge- stochastischer Simulationsmethoden sind:
samt 20 verschiedene Verteilungen zum Bei- Kenntnis ber relevante Wahrscheinlichspiel fr die Exponential- oder Binomialverteikeitsverteilungen.
lungen. Die Abbildung 69 zeigt eine Exponen Untersttzung bei der Erzeugung von Zufallszahlen.
Samples
50
40
30
Counts

20
10
0
0

Values

Abbildung 69: Exponentialverteilung


tialverteilung mit Erwartungwert 1.

Mit gleichverteilten Zufallszahlen knnen wir


zum Beispiel Spiele mit dem Glcksrad am
Rechner simulieren. Wenn wir etwa die relative Hugkeit von Werten berechnen, die im
Intervall [0.2, 0.6] liegen, und mit der Wahrscheinlichkeit P(0.2 X 0.6) = 0.4 vergleichen, dann sollte fr greres n die relative
Hugkeit nach dem Gesetz groer Zahlen mit
hoher Wahrscheinlichkeit bei 0.4 liegen. Auch
sollte die empirische Verteilungsfunktion der
gezogenen Zahlen x1 , x2 , . . ., xn sich der [0, 1]Gleichverteilung annhern.

Wir spielen nun Glcksrad am Computer,


indem wir wiederholt auf [0, 1] gleichverteilter
66. Stochastische Simulationen
Zufallszahlen ziehen. Das Intervall [0, 1] wird
wie in Abbildung 70 in zehn Teilintervalle der
Eine stochastische Simulation liegt vor, wenn Lnge 0.1 zerlegt und zu jedem Spiel wird
es um die Lsung von Problemen geht, bei festgelegt, in welches Teilintzervall die gezo-

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

Wahrscheinlichkeit, dass einer dieser Vektoren


Vol(B
in Bn ist, ist Vol(Qn ) mit Vol(Qn ) = 2n . Ben)
trachtet man also z Zufallsvariablen, die durch
rand(n,1)*2-1 erzeugt werden und deniert
die Variable Inside als die Anzahl derjenigen
Vektoren, die in Bn liegen, so liefert Vol(Qn )
Inside
eine Schtzung fr Vol(Bn ). Man nennt
z
diese Methode Monte Carlo Methode.

0.14

0.02

0.5

0.5

Somit lst das folgende Matlab Script-File die


gestellte Aufgabe:

Abbildung 70: Empirische Verteilungen

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)

gene Zufallszahl fllt. Abbildung 70 zeigt links 4


das resultierende Histogramm mit den relati- 5
ven Hugkeiten fr die zehn Teilklassen nach 6
n = 100 Spielen. Man sieht, dass die relati- 7
ven Hugkeiten zum Teil noch deutlich von 8
dem zu erwartenden Wert 0.10 abweichen. Fr 9
n = 1000 haben sich diese Hugkeiten be- 10
reits wesentlich besser an den Wert 0.10 stabilisiert. Anders ausgedrckt: Die empirische . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Verteilung der gezogenen Zahlen approximiert
die wahre Gleichverteilung besser.
66.1. Nherung fr
Aufgabe 144 (Stochastische S.) Schreiben Sie
Mit stochastischen Simulationen ist es mgeine Simulation, die das Volumen der Einheitslich, Antworten auch auf nicht-stochastische
kugel {x R4 | |x|2 1} in R4 schtzt.
Fragestellungen zu geben. Mit einer stochasLsung: Sei
tischen Simulation werden wir nun eine Nherung fr die Kreiszahl = 3.14159 . . . berechn
Bn = {x R | |x| 1}
nen.
Wir denken uns zunchst folgendes Experiment, wozu man eine Zielscheibe und DartQn = [1, 1]n
pfeile bentigt. Die Zielscheibe besteht aus
n
einem Quadrat und einem einbeschriebenen
= {x R | |xi | 1, i = 1, .., n}
Kreis. Dann werfen wir nach dem ZufallsprinDann ist Bn Qn . rand(n,1)*2-1 erzeugt zip mit Dartpfeilen auf diese Scheibe und beuniform verteilte Zufallsvariablen in Qn . Die stimmen die relative Hugkeit der Kreistrefund sei

167

Copyright c G. Gramlich

fer, das heit

14
15

h=

Anzahl der Treer


.
Anzahl der Wrfe

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)

Hierbei werden nur Wrfe gezhlt, bei de- 19


nen mindestens das Quadrat getroen wurde. 20
Schreibt man die relativen Hugkeiten der 21
Kreistreer auf, so stellt man fest, dass sie sich
mit zunehmender Wurfzahl dem Wert /4 n- Die Abbildung 71 zeigt das Ergebnis der Sihert, denn die relative Hugkeit h der KreisNherung von Pi = 3.144
treer wird mit zunehmender Wurfzahl etwa
3.3
dem Verhltnis (Flcheninhalt des Kreises) zu
3.25
(Flcheninhalt des Quadrates) entsprechen. Ist
2
3.2
also r der Kreisradius, so gilt: h r 2 = und
4
4r
somit
3.15
4h.
3.1

Wir fhren dieses Experiment nicht real aus


3.05
(selbstverstndlich knnen Sie dies tun, wenn
0
100
200
300
400
500
mal Hundert
Sie wollen), sondern simulieren es auf dem
Computer. Wie ist das mglich? Die WahrAbbildung 71: Nherung fr
scheinlichkeit eines zuflligen Ereignisses ist
die idealisierte relative Hugkeit, mit welcher
mulation. Siehe auch Aufgabe 192.
dieses vorkommt, wenn das zugehrige Zufallsexperiment sehr oft wiederholt wird. Der
folgende Script-File realisiert die Simulation. 66.2. Zum Ziegenproblem
1
2
3
4
5
6
7
8
9
10
11
12
13

%--------------------------------% Script-File: Pfeilwurf.


%
% Simulation von 50 000 Pfeil% wrfen zur Nherungsberechnung
% von Pi.
%--------------------------------AnzahlimKreis = 0;
PiNaeherung = zeros(500,1);
for k=1:500
x = -1+2*rand(100,1);
y = -1+2*rand(100,1);
AnzahlimKreis = AnzahlimKreis

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

zum Beispiel Tr 3, und eine Ziege schaut ins


Publikum. Der Kandidat hat nun die Mglichkeit, bei seiner ursprnglichen Wahl zu bleiben
oder die andere verschlossene Tr (in unserem
Beispiel Nr.2) zu whlen. Er erhlt dann den
Preis hinter der von ihm zuletzt gewhlten Tr.
In dem folgenden Skript nden Sie die Antwort auf diese Frage.

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

%--------------------------------% Script-File: Ziegen


%
% Simulation des Ziegenproblems.
% Es werden zehn Versuche mit
% jeweils zehntausend
% Durchgngen simuliert.
%--------------------------------%Zehn Versuche.
for i=1:10
%Zehntausend Durchgnge.
%Zufall wird vorbereitet.
%Es wird eine (10000,3)-Zu%fallsmatrix mit den Werten
% 1,2 und 3 erzeugt.
a = ceil(3*rand(10000,3));
%Zufallswahl der Autotr A.
A = a(:,1);
%Zufllige Erstwahl W1.
W1 = a(:,2);
%Moderator will Tr M ffnen.
M = a(:,3);
%M darf keine Autotr (A) sein
%und auch nicht die gewhlte
%Tr (W1).
for j=1:10000
while ( (M(j)==A(j)) | (M(j)
==W1(j)) )
M(j) = ceil(3*rand(1,1));
end
end
%W2 wre die Tr, zu der nun
%gewechselt werden kann. Es

43
44
45
46
47
48
49
50
51
52

%muss sein: M+W1+W2=6.


W2 = 6-M-W1;
%Wenn W2 die Autotr ist, ein
%Punkt fr Wechseln ist
%richtig. Sonst ein Punkt fr
%Wechseln ist falsch, da W1
%gleich A ist. Die Variablen R
%und F zhlen das richtige bzw.
%falsche Wechseln.
R = sum(W2==A);
F = 10000-R;
sprintf(Wechseln ist richtig:
%3.0f\t Wechseln ist falsch:
%3.0f,R,F)
subplot(2,5,i); pie([R,F]);
end
%Grafische Ausgabe als
%Kreisdiagramm.
legend(Wechseln ist richtig,
Wechseln ist falsch);

66.3. Das Geburtstagsparadox


Stellen wir uns vor, dass sich in einem Raum
eine gewisse Anzahl von Personen bendet.
Wir interessieren uns dafr, ob zwei am gleichen Tag Geburtstag haben. Wie viele Personen mssen vorhanden sein, damit garantiert
zwei am gleichen Tag Geburtstag haben? Das
ist eine einfache Frage: Da das Jahr 365 Tage hat, haben von 366 Personen bestimmt zwei
am gleichen Tag Geburtstag (Wir gehen auf
Schaltjahre nicht ein). Eine wesentlich interessantere Frage ist: Wie viele Personen mssen vorhanden sein, damit es wahrscheinlich
ist, dass zwei am gleichen Tag Geburtstag
haben? Genauer: Wie viele Personen braucht
man, dass mit einer Wahrscheinlichkeit von
ber 50% zwei am gleichen Tag Geburtstag

169

Copyright c G. Gramlich

haben? Die Antwort ist berraschend: Bereits


23 Personen reichen aus, um die Wahrscheinlichkeit fr einen gleichen Geburtstag auf ber
50% zu bringen. Achtung: Es ist weder danach
gefragt, dass zwei am 1. Januar Geburtstag haben oder dass jemand am gleichen Tag wie Sie
Geburtstag hat, sondern danach, ob zwei Leute
am 1. Januar oder am 2. Januar oder usw. Geburtstag haben.

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

In einem Raum sind n Personen versammelt.


27
Unter der Voraussetzung, dass jedes Jahr 365 28
Tage hat (es gibt keine Schaltjahre) und dass 29
die Geburtstage bers Jahr gleichverteilt sind,
ist die Wahrscheinlichkeit dafr, dass mindestens zwei Personen am gleichen Tag GeburtsDie Ergebnisse der theoretischen Berechnuntag haben gegeben durch die Formel:
gen und der Simulation sind in Tabelle 34 ge364 363 (365 n + 1)
genbergestellt.
P=1
n1
365
Fr n = 23 ergibt sich 0.5073 = 50.73% und
fr n = 50 bereits 0.9704 = 97.04%.
Diese Resultate der Wahrscheinlichkeitsrechung lassen sich simulationsmig besttigen. Dazu dient der folgende Script-File.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

%--------------------------------% Script-File: Geburtstag


%
% Das Geburtstagsparadox.
%--------------------------------clear all
%kmax: Anzahl der Simulationen.
kmax = 5000;
%n: Anzahl der Personen im Raum.
for n = [5:5:55]
r = 0;
for k=1:kmax
%Zufallszahlen zwischen 1
%und 365.
g = ceil(365*rand(n,1));

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

Tabelle 34: Zum Geburtstagsparadox

170

Copyright c G. Gramlich

66.4. Bestimmte Integrale


Das bestimmte Integral
1

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

einen geschtzten Wert erhalten. Hierbei sind


xi gleichmig verteilte Zufallszahlen aus dem
Intervall ]0, 1[.
1
2
3
4
5
6

>> n = 1000;
>> x = rand(n,1);
>> y = x.^x;
>> sum(y)/n
ans =
0.7850

Somit ist also


1

x x dx 0.7850
0

67. Symbolisches Rechnen


Symbolisches Rechnen ist der Versuch, die
Methoden, die man beim Rechnen mit Papier
und Bleistift kennt, auf Computern abzubilden
und dort schlielich durchzufhren.

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

die Symbolic Math Toolbox auf MuPAD und


nicht mehr auf Maple. Ist Maple nicht zustzlich installiert, so knnen Maple-Funktionen
nicht mehr aus Matlab heraus verwendet werden. Dafr steht nun das CA-System MuPAD
zur Verfgung. Mit der Funktion mupad knnen Sie ein MuPAD Notebook erzeugen und
ber die Funktionen getVar und setVar ist
zwischen den beiden Systemen Matlab und
MuPAD ein Datenaustausch mglich. Mit den
Funktionen evalin und feval (statt maple)
knnen MuPAD Ausdrcke in Matlab verwendet werden, siehe doc symbolic.

1
2
3
4

Mit dem pretty-Befehl kann man Formeln in


etwas lesbarerer Form ausgeben.
Aufgabe 145 (expand-Funktion) Die 6. Fibonacci-Zahl ist 8. Diese kann man durch

1 1+ 5 6
1 1 5 6

2
2
5
5
berechnen. Besttigen Sie dies.
Lsung: Es ist

67.1. Erste Schritte

Durch
1

>> syms x t

werden die beiden symbolischen Variablen x


und t erzeugt, mit denen man durch
1
2
3

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

den Ausdruck 3x2 + xt 1 kreiert.

>> 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

Substitutionen knnen mit der Funktion subs


durchgefhrt werden. Die folgenden Anweisungen substituieren cos(x) anstelle von x.

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)

Matlab verfgt ber viele eingebaute mathe- 10


ans =
11/3
matische Funktionen mit denen man symbo- 11
lisch rechnen kann. Mit diesen vordenierten
Funktionen ist es uns dann mglich, weite- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
re Funktionen zu konstruieren, indem man die Aufgabe 147 (Potenzregeln) Besttigen Sie
entsprechenden Funktionsterme f (x) miteinan- die folgenden Rechenregeln:
der verkpft.
(a) am an = am+n
Funktionsterme sind Ausdrcke, das heit, sie
am
mn
knnen wie gewhnliche Terme erzeugt wer- (b) an = a
den. Angenommen wir wollen mit dem Funk- Verwenden Sie die Funktion simplify.
tionsterm f (x) = 2x2 + 3x + 4 arbeiten, zum Lsung:
Beispiel dierenzieren oder integrieren, so de- 1 >> syms a n m
niert man diesen wie folgt.
2
>> simplify(a^m*a^n)
1
2

>> syms x
>> f = 2*x^2+3*x+4;

4
5
6

Danach kann man zum Beispiel f (x) = 4x + 3


bilden.
1
2

>> diff(f)
ans =
4*x+3

ans =
a^(m+n)
>> simplify(a^m/a^n)
ans =
a^(m-n)

.......................................

Aufgabe 148 (Rechnen) Berechnen Sie den


Ausdruck

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

>> (sym(sqrt(16)) + sym(cos(pi/3))


)/sym(8^(1/3)+4)

1
2
3

liefert

4
1
2

ans =
3/4

sieht man, dass


(x2 + x + 1) (x3 x2 + 1) = x5 + x + 1

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

Aufgabe 149 (Vereinfachen) Vereinfachen Sie


den Ausdruck

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

sieht man, dass

>> syms x y
>> simplify((x^2-2*x*y+y^2)/(x^2-y
^2))

(1 + x)4 = x4 + 4x3 + 6x2 + 4x + 1


ist. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

erhlt man
1

>> syms x
>> collect( (x^2+x+1)*(x^3-x^2+1))
ans =
x^5+x+1

Aufgabe 152 (Faktorisieren) Faktorisieren Sie


das Polynom

ans =
(-y+x)/(x+y)

x6 + x4 x2 1.

Somit ist die Vereinfachung dann also

Lsung: Mit

x2 + 2xy + y2
xy
=
.
2 y2
x+y
x

1
2
3

Anmerkung: Man kann statt simplify auch


den Befehl simple verwenden. . . . . . . . . . .

>> syms x
>> factor(x^6+x^4-x^2-1)
ans =
(x-1)*(1+x)*(1+x^2)^2

Aufgabe 150 (Multiplikation) Multiplizieren sieht man, dass


Sie
(x6 + x4 x2 1) = (x 1) (x + 1) (x2 + 1)2
(x2 + x + 1) (x3 x2 + 1).
Lsung: Mit

ist. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

174

Copyright c G. Gramlich

67.2. Wie man Maple-Funktionen


verwendet

67.3. Mathematische Funktionen

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.

Mit Funktionsterme sind Ausdrcke, das heit, sie


knnen wie gewhnliche Terme erzeugt werden. Angenommen wir wollen mit dem Funk1
>> mhelp index[function]
tionsterm f (x) = 2x2 + 3x + 4 arbeiten, zum
Beispiel dierenzieren oder integrieren, so deerhlt man eine Liste aller Maple-Funktionen.
niert man diesen wie folgt.
Als Beispiel betrachten wir den Befehl
Maple-Online-Informationen erhalten.
dem Aufruf

1
1

>> mhelp gcd

>> 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

Will man einen abstrakten Funktionsterm f (x)


erzeugen, das heit einen Term, der irgendein
spezieller Funktionsterm sein kann, so ist das
durch die die Anweisung

>> 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

bestimmen den grten gemeinsamen Teiler


von 225 und 725.

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)

Der Funktionsterm f (x) nach x abgeleitet, . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


ergibt f (x) bzw. in Matlab-Terminologie
diff(f(x),x); nach t abgeleitet ist er aber 0, Hug hat man einen symbolischen Funktionsterm deniert und mchte dann symbolidenn f (x) hngt nicht von t ab.
sche oder numerische Funktionswerte berechDamit knnen wir nun den Dierenzenquotinen. Als Beispiel betrachten wir den symbo
ent der Funktion f im Punkt x bilden

lischen Funktionsterm f (x) =


x. Es soll
1
>> syms xbar h
f (2) zunchst symbolisch ausgewertet werden;
2
>> ( subs(f,xbar+h)-subs(f,xbar) )
hierbei hilft die subs-Funktion.
3
4

/h
ans =
(f(xbar+h)-f(xbar))/h

1
2
3
4

und dann auch die Ableitung (Dierenzialquotient) f ( x) im Punkt x.

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
)

Aufgabe 153 (Funktionsterme) Besttigen Sie


die Quotientenregel
=

f (x)g(x) f (x)g (x)


2g(x)

>> subs(f,[1, 2, 3, 4])


ans =
1.0000 1.4142 1.7321 2.0000

und symbolisch:
1
2

Lsung: Hier die Besttigung:


1

>> subs(f,2)
ans =
1.4142

Wir knnen f (x) aber auch fr mehrere xWerte auswerten. Numerisch:


1

f (x)
g(x)

1/2
2

Auch die numerische Funktionsberechnung


kann mit der subs-Funktion erfolgen.

Als weiteres Beispiel besttigen wir die Produktregel.


1

>> syms x
>> f = sqrt(x);
>> pretty(subs(f,sym(2)))

>> subs(f,sym([1, 2, 3, 4]))


ans =
[ 1, 2^(1/2), 3^(1/2), 4^(1/2)]

f = sym(f(x)); g = sym(g(x));

176

Copyright c G. Gramlich

Mit zwei gegebenen Funktionen f und g und


den Operationen Addition, Subtraktion, Multiplikation und Division kann man die Summe f + g, die Dierenz f g, das Produkt
f g und den Quotienten f /g bilden. Zustzlich
kann man die Komposition von f und g, in Zeichen f g, denieren.

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))

Der numerische Wert ist


1
2
3

>> 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

Mit dem Befehl type ist die berprfung


mglich, ob eine vorliegende Funktion f geraWir knnen auch (symbolische) Funktionswer- de oder ungerade ist. Eine reellwertige Funktion f mit symmetrischem Denitionsbereich
te berechnen.
D f R wird als gerade bezeichnet, wenn
1
>> sin(sym(1.5))
f (x) = f (x) fr alle x D f gilt. Demnach
2
ans =
ist die Kosinusfunktion cos eine gerade Funk3
sin(3/2)
tion. Wir berprfen diese Behauptung.
4

Den dazugehrigen numerischen Werte erhalten wir durch die Anweisung

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

Der Stetigkeitsbegri ist ein zentraler Begri


der Analysis bzw. der Dierenzial- und In5
tegralrechung. Die Maple-Funktion iscount
6
berprft, ob eine vorliegende Funktion f auf
7
einem anzugebendem Intervall stetig ist. Die
Mit der Funktion finverse kann man von der Funktion f (x) = 1/x ist auf [1, 3] stetig, nicht
Funktion f die Umkehrfunktion f 1 nden, aber auf [1, 3]. Hier die Besttigung:
genauer: man kann den Funktionsterm von f 1 1 >> syms x
berechnen. Das folgende Beispiel zeigt dies fr 2 >> maple(iscont,1/x,x=1..3)
die Exponentialfunktion f (x) = e x , x R.
3
ans =
4

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

Stckweise denierte Funktionen lassen sich


Die Umkehrfunktion ist somit
= ln(x), mit der Funktion piecewise denieren. Hier
x > 0, wobei der Denitionsbereich von Mat- ein Beispiel.
lab nicht angegeben wird, sondern in Eigen- 1 >> f = maple(piecewise,x<=0,x
verantwortung hingeschrieben werden muss.
,0<x,1/x)
f 1 (x)

Ist bei der Umkehrfunktion besonders auf den


Denitionsbereich zu achten, so gibt Matlab
eine Warnung heraus, wie folgendes Beispiel
zeigt:
1
2
3
4
5

>> 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

67.4. Algebraische Gleichungen

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

Aufgabe 154 (Algebraische Gl.) Lsen Sie die 5


algebraischen Gleichungen cos x = e x und e x + 6
2ex 9 = 0.
.......................................
Lsung: Es ist
1
2
3
4
5
6
7
8
9
10
11

Aufgabe 156 (Algebraische Gl.) Lsen Sie das


Gleichungssystem

>> 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

Die Funktion fzero erlaubt es uns alternativ


die Nullstellen numerisch zu berechnen. Mit
dem Starwert x0 = 1 (zweites Argument in
fzero) erhalten wir die Lsung

3
4
5
6
7

>> fzero(exp(x)+2*exp(-x)-9,1)

179

>> [x,y] = solve(3*x^2+2*y=0,2*


x-2*y^2=0)
x =
[0]
[1/9*18^(2/3)]
[(1/6*18^(1/3)-1/6*i*3^(1/2)
*18^(1/3))^2]
[(1/6*18^(1/3)+1/6*i*3^(1/2)
*18^(1/3))^2]

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)

Mit der Funktion limit lassen sich auch


Grenzwerte von Funktionen berechnen. Die
Tabelle 35 Mglichkeiten mit limit.
Mathematik
lim f (x)

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

Tabelle 35: Grenzwerte berechnen

.......................................
Besitzt
der
Dierenzenquotient
( f (x) f ( x))/(x x) der Funktion f fr

x x einen Grenzwert, so heit f an der

Stelle x dierenzierbar. Der Grenzwert wird

mit f ( x) bezeichnet und man schreibt

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

Somit ist f (2) = 3/4 oder

und
lim

3/x 3/2
3
lim
=
x2
x2
4

x0
x<0

Wir besttigen dies:

Anstatt die Ableitung von f an der Stelle x

mit Hilfe der x-Methode zu berechnen, ist


es manchmal zweckmiger die sogenannte
h-Methode einzusetzen. In diesem Fall wird
f ( x) wie folgt berechnet:

f ( x) = lim

h0

abs(x) abs(0)
= 1
x0

2
3
4

f ( x + h) f ( x)

.
h

5
6

>> limit( (abs(x)-abs(0))/(x-0),x


,0,right)
ans =
1
>> limit( (abs(x)-abs(0))/(x-0),x
,0,left)
ans =
-1

Fr obiges Besipiel mit f (x) = 3/x, x > 0 und


Die Ableitung einer Funktion basiert bekannx = 2 erhlt man:

termaen auf dem Proze der Grenzwertbil1


>> syms h
dung. Zum Beispiel ist die Ableitungsfunkti2
>> limit( (3/(2+h)-3/2)/h, h, 0)
on der Kosinusfunktion cos die Funktion sin.
3
ans =
Mathematisch bedeutet dies:
4

-3/4

d
cos(x + h) cos(x)
cos(x) = lim
h0
dx
h
= sin(x)

Bekanntlich hat der Dierenzenquotient


f (x) f ( 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)

Die folgenden Matlab-Anweisungen berechnen den Grenzwert

Zwar ist die Betragsfunktion abs im Punkt 0


nicht dierenzierbar, hat aber dort einen rechten und linken Grenzwert, das heit es gilt

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

Aufgabe 157 (Grenzwerte) Berechnen Sie den


Grenzwert
sin x
lim
x0 x

1
2
3
4

>> syms x
>> limit(x*exp(-x),inf)
ans =
0

Lsung: Berechnen Sie den Grenzwert mit


1
2
3
4

Die Exponentialfunktion f (x) = ex , x R


fllt fr x schneller als die lineare Funktion g(x) = x, x R fr x steigt. . . . .

>> syms x
>> limit( sin(x)/x )
ans =
1

Aufgabe 160 (Grenzwerte) Bestimmen Sie


den Grenzwert

Somit ist der Grenzwert

(x + h)3 x3
.
h0
h
lim

sin(x)
lim
= 1.
x0
x

Was bedeutet dieser Grenzwert?


. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lsung: Es ist:
Aufgabe 158 (Grenzwerte) Berechnen Sie den 1 >> syms x h
Grenzwert
2
>> limit(((x+h)^3-x^3)/h,h,0)
cos(h) 1
3
ans =
lim
h0
h
4
3*x^2
Lsung: Berechnen Sie den Grenzwert mit
1
2
3
4

Der Grenzwert ist der Ableitungsterm der


Funktion f (x) = x3 , x R. . . . . . . . . . . . . . .

>> 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:

Somit ist der Grenzwert

(a) lim (x2 2x + 5)/(cos x) = 5


x0

cos(h) 1
lim
= 0.
h0
x

(b) lim (2x2 + 4)/(x2 1) = 2


x

.......................................

(c) lim (x 1)/(x2 1) = 1/2

Aufgabe 159 (Grenzwerte) Bestimmen Sie


den Grenzwert

(d) lim 3 x /4 x = 0
x

(e) lim ( x + 1 1)/x = 1/2

x1

x0

lim xe

Lsung: Wir zeigen nur den ersten Teil der


Aufgabe in Matlab:

und interpretieren Sie ihn.


Lsung: Der Grenzwert ist Null, denn es ist:

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

(a) lim 1/x

(b) lim 1/x

x0

x0
x>0

(c) lim 1/x

Mit dem Kommando symsum kann man dies


berprfen:

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

Aufgabe 163 (Endliche Summen) Berechnen


Sie
10
1
.
k
k=1
Lsung: Mit

.......................................

1
2

67.6. Endliche und unendliche Summen

>> syms k
>> symsum(1/k,1,10)

erhlt man

Endliche oder unendliche Reihen lassen sich 1 ans =


mit der Matlab-Funktion symsum berech- 2 7381/2520
nen, die symbolisches Summieren erlaubt. Die
Es ist also
Summe der endlichen Reihe
10

10

2 = 2 + 4 + 8 + + 1024
k

k=1

k=1

1
7381
=
.
k
2520

ist 2046, was man durch folgende Zeilen best- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


tigen kann:
Aufgabe 164 (Endliche Summen) Besttigen
Sie die folgenden Ergebnisse
1
>> symsum(2^k,1,10)
2
3

ans =
2046

183

Zum Beispiel mit Hilfe der Theorie der FourierReihen.

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

Lsung: Deniert man zunchst


1

(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

.......................................

.......................................

Aufgabe 167 (Unendliche Summen) Berechnen Sie die Leibnizsche Reihe

(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

Also ist die Leibnizsche Reihe

Also ist die Summe der Reihe

k=1

1
1
= .
21
2
4k

(1)k
k=1

= 1.
2k + 1
4

.......................................

184

Copyright c G. Gramlich

Aufgabe 168 (Endliche Summen) Berechnen Also ist


Sie die endliche Reihe
n

(2k 1)
k=1

4
1
(2k 1)2 = n3 n.
3
3
k=1

.......................................

das heit die Summe der ersten n 1 ungeraden natrlichen Zahlen.


67.7. Dierenziation
Lsung: Mit
Die Funktion diff berechnet die symbolische
1
>> syms k n
Ableitung eines Funktionsterms. Um einen
2
>> simplify(symsum(2*k-1,1,n))
symbolischen Ausdruck zu erzeugen, muss
man zuerst die verwendeten symbolischen Vaerhlt man
riablen denieren, und dann den gewnschten
1
ans =
Ausdruck bilden, und zwar genauso, wie man
2
n^2
es mathematisch tun wrde. Die folgenden Anweisungen
Also ist
n

(2k 1) = n .
2

2
3

k=1

>> syms x
>> f = x^2*exp(x);
>> diff(f)

.......................................

erzeugen eine symbolische Variable x, bilden


Aufgabe 169 (Endliche Summen) Berechnen den symbolischen Ausdruck x2 exp(x) und beSie die endliche Reihe
rechnen die Ableitung von f nach x. Das Ergebnis ist:
n
(2k 1)2

k=1

ans =
2*x*exp(x)+x^2*exp(x)

das heit die Summe der Quadrate der ersten


Aufgabe 170 (Ableitungen) Berechnen Sie
n 1 ungeraden natrlichen Zahlen.
Lsung: Mit
d 2 x
(x e )
dx
1
>> syms k n
2

>> 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

67.8. Partielle Dierenziation

sieht man, dass


d 2 x
(x e ) = 2xe x + x2 e x
dx

Es knnen auch partielle Ableitungen berechnet werden:

ist. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1
2

Aufgabe 171 (Ableitungen) Berechnen Sie


d
arctan(x)
dx

berechnet die Ableitung von sin(wxy) nach x.


Das Ergebnis ist cos(wxy)wy. Das Ergebnis
von

Lsung: Mit den Anweisungen


1
2
3
4

>> syms w x y
>> diff(sin(w*x*y))

>> syms x
>> diff(atan(x))
ans =
1/(1+x^2)

>> diff(sin(w*y))

ist cos(wy)w. Selbstverstndlich kann man


auch steuern, nach welcher Variablen dierenziert werden soll.

erkennt man, dass

d
1
arctan(x) =
dx
1 + x2

>> diff(sin(w*y),w)

liefert das Ergebnis

ist. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1
2

ans =
cos(w*y)*y

Aufgabe 172 (Ableitungen) Berechnen Sie


d xx
(x )
dx
Lsung: Mit den Anweisungen
1
2
3
4
5

>> syms x
>> diff(x^(x^x))
ans =
x^(x^x)*(x^x*(log(x)+1)*log(x)
+x^x/x)

Es ist auch mglich, Ableitungen hherer Ordnung zu berechnen.

67.9. Der Gradient


Mit der Funktion jacobian ist es mglich, den
Gradient einer reellwertigen Funktion zu berechnen. Fr f : R3 R mit f (x, y, z) =
e x+2y + 2x sin(z) + z2 xy ist

erkennt man, dass

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

ist. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Wir besttigen dies in Matlab.

186

Copyright c G. Gramlich

1
2

3
4
5
6

und

>> syms x y z real


>> jacobian(exp(x+2*y)+2*x*sin(z)+
z^2*x*y)
ans =
[ exp(x+2*y)+2*sin(z)+z^2*y]
[
2*exp(x+2*y)+z^2*x]
[
2*x*cos(z)+2*z*x*y]

H f (2, 3) =
In Matlab:
1
2
3
4
5

67.10. Die Hesse-Matrix

6
7

Der Gradient der Funktion f (x, y) =


3x2 y + 2xy3 + 4y2 , (x, y) R2 ist
f (x) =

2x4

8x3 + 6xy + 2y3


3x2 + 6xy2 + 8y

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:

Wir besttigen dies in Matlab; hilfreich ist


wieder die jacobian-Funktion.
1
2

3
4
5
6
7
8
9
10

>> syms x y real


>> f = 2*x^4+3*x^2*y+2*x*y^3+4*y
^2;
>> gradf = jacobian(f)
gradf =
[ 8*x^3+6*x*y+2*y^3]
[ 3*x^2+6*x*y^2+8*y]
>> hessf = jacobian(gradf)
hessf =
[ 24*x^2+6*y, 6*x+6*y^2]
[ 6*x+6*y^2, 12*x*y+8]

Im Punkt ( x, y) = (2, 3) gilt



f (2, 3) =

46
72

>> subs(gradf,{x,y},{-2,3})
ans =
-46
-72
>> subs(hessf,{x,y},{-2,3})
ans =
114
42
42 -64

67.11. Die Jacobi-Matrix

und die Hesse-Matrix ergibt sich zu


H f (x) =

114
42
.
42 64

R3

R3
(x, y, z) (xy, x, z)

berechnen, so geht das wie folgt:


1
2

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]

Im ersten Argument der Function jacobian


steht der Funktionsterm und im Zweiten stehen
die unabhngigen Variablen.
Aufgabe 173 (Jacobi-Matrizen) Berechnen Sie
die Jacobi-Matrix der Funktion f : R2 R3 ,
(x, y) (x+y, x2 sin y, e xy ) in einem beliebigen

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)

Sie knnen die Symbolic Math Toolbox heranziehen, um bestimmte Integrale

Die Jacobi-Matrix im Punkt (1, 0) ist:


b
1
2
3
4
5

f (x) dx

>> subs(J,[x,y],[1,0])
ans =
1
1
0
1
0
1

symbolisch zu lsen. Auch parameterabhngige bestimmte Integrale


b

t =

.......................................

f (x, t) dx
a

knnen gelst werden. Es ist

67.12. Integration

Die Funktion int erlaubt symbolische 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

Aufgabe 174 (Integration) Berechnen Sie das


unbestimmte Integral

Bei parameterabhngigen unbestimmten Integralen der Form


Ft (x) =

f (x, t) dx

x sin(x) dx.
Lsung: Mit

188

Copyright c G. Gramlich

1
2
3
4

folgt also, dass

>> 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

sieht man, dass


x sin(x) dx = sin(x) x cos(x) + c

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

folgt also, dass

sin(2t)est dt =
0

folgt also, dass

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:

Aufgabe 176 (Integration) Berechnen Sie das


uneigentliche Integral

>> syms t; syms s positive;


>> int(sin(2*t)*exp(-s*t),t,0,inf)
;
>> F = simple(ans)
F =
2/(s^2+4)

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

Wir zeigen nun Beispiele fr den Umgang mit


symbolischen Polynomen, siehe Abschnitt
53 fr Rechnungen mit numerischen Polynomen .

(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

Die Funktion horner erlaubt die Darstellung


eines Polynoms in Horner-Form.

>> 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

Will man dieses zum Beispiel an der Stelle x =


3 auswerten, so geht das wie folgt:
1
2
3

>> 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

Weitere Matlab bzw. Maple Funktionen zum


Rechnen mit Polynomen nden Sie in der Tabelle 36. Hilfe zu den Maple-Funktionen erhalten Sie mit mhelp <Funktionsname>.

Damit gilt zusammenfassend:


f (x)
ex
2x
10 x
ax

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

Die Funktion taylor erlaubt das symbolische


Berechnen des Taylor-Polynoms einer Funktion. Zum Beispiel liefert
1

.......................................

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

67.15. Die Funktionen funtool und


taylortool

Die Funktionen funtool und taylortool


stellen pdagogische Hilfsmittel zur Verfgung. Die Funktion funtool ist eine Art grascher Taschenrechner, der wichtige Operationen und einfache Visualisierungen bei Funktionen einer Vernderlichen ermglicht, siehe
Tabelle 36: Zum symbolischen Rechnen mit Abbildung 72.
Polynomen

das Taylor-Polynom bis zur fnften Ordnung:


1
2

ans =
x-1/6*x^3+1/120*x^5

Aufgabe 179 (Taylor-Polynome) Berechnen


Sie das Taylor-Polynom der Kosinus-Funktion
f (x) = cos(x)
vom Grad vier im Entwicklungspunkt 0.
Lsung: Es ist
1
2
3
4

>> syms x
>> taylor(cos(x),5,x,0)
ans =
1-1/2*x^2+1/24*x^4

Abbildung 72: Das GUI von funtool


Mit Hilfe des Kommandos taylortool knnen Sie die grasche Oberche des Programms taylortool starten und damit Taylor-Approximationen studieren, siehe Abbildung 73.

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

Abbildung 73: Das GUI von taylortool


Entwicklungspunkt (0, 0) ist gegeben durch
T 2 (x, y) = 1 + x + y + 1/2(x2 + y2 ) + xy. Hier
die Besttigung in Matlab:
1
2

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

Der relative Fehler ist demnach zirka 1.5%.

67.17. Lineare Algebra


Wir besttigen das Ergebnis:
Siehe Abschnitt 49, 50 und 51.

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

Die gewhnliche Dierenzialgleichung y =


ay hat die allgemeine Lsung y(t) = ceat . In
Matlab besttigt man das wie folgt:
1
2
3

193

>> dsolve(Dy = a*y)


ans =
exp(a*t)*C1

Copyright c G. Gramlich

Aufgabe 183 (Dierenzialgleichung) Berechnen Sie die allgemeine Lsung der gewhnlichen Dierenzialgleichung

2
3

y (t) = y(t) 5et sin(5t)

>> 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)

siehe Abschnitt 62.


Lsung: Die allgemeine Lsung ist

Eine Dierenzialgleichung dieses Types nennt


man die Gleichung des (ungedmpften) harmonischen Oszillators mit uerer harmoni1
>> y = dsolve(Dy=-y-5*exp(-t)*sin
scher Anregung, hier cos(11t). Die Lsung
(5*t))
2
y =
y(t) = 1/23 cos(11t) 1/23 cos(12t) ist ei3
exp(-t)*cos(5*t)+exp(-t)*C1
ne berlagerung von zwei Schwingungen mit
unterschiedlichen Frequenzen. Man spricht
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . von einer Schwebung (amplitudenmodulierte
Aufgabe 184 (Anfangswertaufgabe) Berech- Schwingung), eine Bewegungsform, die fr die
Akustik und Funktechnik von groer Bedeunen Sie die Lsung der Anfangswertaufgabe
tung ist. Die Abbildung 74 zeigt die Lsung.

y (t) = y(t) 5et sin(5t)

1/23 cos(12 t)+1/23 cos(11 t)


t0
AWA :
y(0) = 1

0.05

aus Abschnitt 62.


Lsung: Die Lsung ist
1

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

.......................................

Abbildung 74: Lsung der AWA


Aufgabe 185 (Anfangswertaufgabe) Berechnen Sie die Lsung der Anfangswertaufgabe

Wir berechnen die Lsung der Randwertaufgay (t) + 144y(t) = cos(11t)

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

und schlielich die allgemeine Lsung

>> 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

1, so erhlt man die Lsungsfunktion u(x, t) =


RWA :
y(0) = 3, y(/2) = 7 0 x /2. e(t+x)2 + e(tx)2 . Die Abbildung 75 zeigt den

aus Abschnitt 62.2.


Lsung: Es ist
1
2
3
4

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).

Graph der Lsungsfunktion, der mit


Dies ist eine lineare partielle hyperbolische
1
>> ezsurf(exp(-(t+x)^2)+
Dierenzialgleichung zweiter Ordnung. Um 2 exp(-(t-x)^2))
diese symbolisch zu lsen, denieren wir zunchst die symbolischen Variablen x, t, c und erzeugt wurde. Man erkennt, dass die allgemeidie Funktion u(x, t):
ne Lsung der homogenen Wellengleichung
eine berlagerung zweier gegenluger Wel1
>> syms x t c
2
>> u = sym(u(x,t));
len darstellt.
Danach berechnen wir die Ableitungen zweiter Aufgabe 187 (Dierenzialgleichung) Berechnen Sie mit pdsolve eine Lsung der partielOrdnung
len Dierenzialgleichung
1
2

>> uxx = diff(u,x,2);


>> utt = diff(u,t,2);

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)

.......................................

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67.20. Die kontinuierliche

Fourier-Transformation

Aufgabe 188 (Dierenzialgleichung) Zeigen


Sie mit der Matlab Symbolic Toolbox, dass die Die kontinuierliche Fourier-Transformation
jeweils angegebene Lsung y die vorgegebene (CFT) untersucht, welche Frequenzen mit welDierenzialgleichung lst.
chen Amplituden in einem Zeitsignal f (t) enthalten sind, wenn das Zeitsignal nicht peri(a) y + ty = t
2
odisch ist. Man nennt dieses Vorgehen wie bei
y(t) = 1 + et /2 .
den Fourier-Reihen die Frequenzanalyse des
(b) y + y2 = 0
Zeitsignals f (t). Man kann sagt auch, die kontiy(t) = 1/(t 3).
nuierliche Fourier-Transformation (CFT) zer(c) yy + ty = 0
legt ein Signal in sinusfrmige Wellen untery(t) = 10 t2 /2.
schiedlicher Frequenzen.
Lsung: Es ist zum Beispiel:
Die kontinuierliche Fourier-Transformation
1
>> dsolve(Dy+t*y=t)
(CFT) drckt ein Signal f (t) als eine stetige
2
ans =
Linearkombination von Sinus- und Cosinus3
1+exp(-1/2*t^2)*C1
funktionen aus
.......................................

f() =
f (t)eit dt.
R
Aufgabe 189 (Dierenzialgleichung) Benutzen Sie dsolve, um die Lsung der folgenden

Anfangswertaufgaben zu nden. Zeichnen Sie Die Abbildung f f heit kontinuierliche


jede Lsung ber dem angegebenen Intervall. Fourier-Transformation (CFT). Stellt die unabhngige Variable t die Zeit dar, so hat die
(a) y + ty = t
Variable die Bedeutung der Frequenz. Somit
y(0) = 1, [4, 4].
ist die Frequenz eine kontinuierliche Gr(b) y + y2 = 0
e, das heit alle mglichen Frequenzen sind
y(0) = 2, [0, 5].
darstellbar. Die kontinuierliche Fourier-Trans(c) yy + ty = 0
formation (CFT) bildet die Funktion f vom

196

Copyright c G. Gramlich

Originalbereich (Zeitbereich) in den Bildbereich (Frequenzbereich) ab. Die inverse Fourier-Transformation (ICFT) transformiert umgekehrt.
Fr den Rechteckimpuls

1, falls |t| < T

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.

Fr die von den Parametern a > 0 und b > 0


abhngige Funktion

soll die Fourier-Transformierte f() berechaebt , falls t > 0

f (t) =
net werden. Es ergibt sich
0,

sonst

f() =
=

f (t)eit dt =

T
eit

eit dt
T

soll die Fourier-Transformierte f() berechnet werden. Es ergibt sich

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

>> Rechteck = heaviside(t+T)heaviside(t-T);


>> fourier(Rechteck)
ans =
2/w*sin(T*w)

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

Die Fourier-Transformierte von


f (x) = ex

197

Copyright c G. Gramlich

ist
f() =

Wir besttigen dies symbolisch

2 /4
e
.

Wir besttigen dies symbolisch mit der


fourier Funktion

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)

Beachten Sie, dass die unabhngige Variable


der Fourier-Transformierten w ist. Die Abbildung 76 zeigt die Funktion f und ihre Fouri-

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

Lsung: Die Fourier-Transformierte von


f (x) = e|x|
ist
f() =

2
,
1 + 2

e|x| eix dx +

e|x| eix dx

ex eix dx +
0

ex eix dx
0

e
0

x(1i)

Die diskrete Fourier-Transformierte haben wir


in Abschnitt 60 besprochen.

er-Transformierte f. . . . . . . . . . . . . . . . . . . . .

e|x| eix dx

0
4

Abbildung 76: Zur kontinuierlichen FourierTransformation

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

len Sie diese Zahl zu n abndern, so geht


das mit digits(n). Die variable Rechengenauigkeitsarithmetik basiert auf dem vpa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Kommando. Der einfachste Gebrauch besteht
zum Beispiel darin, die Kreiszahl auf 32 Stellen zu berechnen:
3
4

ans =
1/(a+s)

67.22. Spezielle mathematische


Funktionen

>> digits

ber 50 spezielle mathematische Funktionen


stehen mit der Symbolic Math Toolbox zur Verfgung. Diese Funktionen werden mit mfun
angesprochen und werten die entsprechende
Funktion an der gewnschten Stelle numerisch aus. Dies stellt somit auch eine Erweiterung zum Standard-Matlab dar, denn diese klassischen Funktionen stehen dort nicht
zur Verfgung. Siehe doc mfunlist (help
mfunlist).

67.23. Variable Rechengenauigkeit


Zustzlich zu Matlabs doppelt genauer Gleitpunktarithmetik und der symbolischen Rechenmglichkeit wird durch die Symbolic
Toolbox eine variable Rechengenauigkeitsarithmetik untersttzt, die durch den MapleKern durchgefhrt wird. Diese Art von Arithmetik zu verwenden, ist dann sinnvoll, wenn
eine genaue Lsung verlangt wird, aber eine
exakte unmglich oder aber zu zeitaufwendig
zu berechnen ist.

Digits = 32

4
5
6
7

>> vpa(pi)
ans =
3.1415926535897932384626433832795

Wie der Aufruf vpa(pi,40) zeigt, knnen Sie


mit dem zweiten Argument von vpa die zur
Zeit aktuelle Anzahl von gltigen Dezimalen
berschreiben.
Das nchste Beispiel berechnet die Eulersche
Zahl e auf 50 Nachkommastellen genau, gibt
sie aus und berprft, ob der Logarithmus davon wieder 1 ergibt:
1
2
3
4
5
6
7
8
9

>> digits(50);
>> x = vpa(sym(exp(1)))
x =
2.71828182845904523536028747135266
24977572470937000
>> vpa(log(x))
ans =
1.00000000000000000000000000000000
00000000000000000

Vorsicht Falle:

Mit der Funktion digits ist es mglich, die


Anzahl der genauen dezimalen Stellen einzustellen, mit der die Rechnungen durchgefhrt werden sollen. Standardmig sind 32
Stellen eingestellt, was Sie durch den Aufruf von digits berprfen knnen. Wol-

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

(a) Verizieren Sie die beiden Aussagen.

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.

(b) Berechnen Sie die Eulersche Zahl auf


zehn Dezimalen.

(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

(a) Hier die Verikation. Zum Einen ist


1

liefern

2
1
2
3

ans =
3.14159265358979323846264338327
95028841971693993751

und zum Anderen gilt

.......................................

Aufgabe 193 (Geschwindigkeit) Sowohl

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)

(b) Die Eulersche Zahl auf zehn Nachkommastellen ist


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

(c) Mit den Zeilen


1
2
3
4

lab-Funktionen und Kommmandos, die


die entsprechenden Maple-Befehle aufrufen. Eine Liste dieser Funktionen erhalten Sie mit help symbolic. Darber hinaus besteht die Mglichkeit, andere MapleKommandos anzusprechen, die zur Standardbibliothek von Maple gehren. Hierzu
verwendet man die maple-Funktion.

>>
>>
>>
>>

n = 2:2:20;
an = (1+1./n).^n;
for i=1:10
sn(i,1) = symsum(1/sym(k!
),0,n(i));
>> end

erhlt man den gewnschten Vergleich.


1
2
3
4
5
6
7
8
9
10
11
12
13

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]

Mit dem Aufruf


1

>> mhelp index[packages]

erhalten Sie eine Liste ber die Maple-Pakete.

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.
.......................................

67.25. Weitere Bemerkungen und


Hinweise
Es gibt zwei Levels der Symbolic Math Toolbox.

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

Multiple matches found:


SolveTools,Basis
Modular,Basis
LinearAlgebra,Basis

Copyright c G. Gramlich

Dann hilft mhelp(LinearAlgebra,Basis)


oder mhelp LinearAlgebra[Basis] weiter.

2
3

Eine Online-Einfhrung in die Symbolic Math


Toolbox erhalten Sie mit dem Befehl demos.
Geben Sie hierzu demos nach dem MatlabPrompt ein. Es wird dann das Matlab-DemoFenster genet.

4
5
6
7
8
9
10
11

68. Nichtlineare Gleichungen (2)


Mit der Funktion fsolve, die zur Optimization Toolbox gehrt, kann man nichtlineare Gleichungssysteme lsen.

>> [x,fval] = fsolve(@MyFunction,


x0)
Optimization terminated: ...
x =
0.8896
0.7040
1.1965
fval =
1.0e-012 *
0.1243
0.0022
0.0022

69. Optimierung (Teil 2)

Wir wollen eine Nullstelle des nichtlinearen


Gleichungssystems
16x4 + 16y4 + z4 16 = 0
x2 + y2 + z2 3 = 0
x3 y = 0
mit drei Gleichungen und drei Variablen nden. Hierzu starten wir den iterativen Algorithmus mit x0 = (1, 1, 1) und denieren die vektorwertige Funktion F : R3 R3 , F(x, y, z) =
(16x4 + 16y4 + z4 16, x2 + y2 + z2 3, x3 y) in
dem Function-File MyFunction.m wie folgt:

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];

und dem Funktionsaufruf

gelst werden. Die Vektoren l und u drfen


auch Koordinaten bzw. haben. Falls der
Aufruf
1

[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

wir auf die Online-Hilfe, siehe doc linprog


(help linprog).

9
10
11

3.0000
fx =
-7.0000

Aufgabe 194 (Lineare Optimierung) Die lineare Optimierungsaufgabe


.......................................
Minimiere
x R2

x1 x2

69.2. Quadratische Optimierung

x1 + 3x2 13
3x1 + x2 15
x1 + x2 3
x1 0, x2 0

Die Quadratische Optimierung gehrt bereits


in die Klasse der Nichtlinearen Optimierungsaufgaben, stellt aber bereits einen wichtigen
hat die Minimalstelle x = (4, 3) mit dem Spezialfall dieser Problemklasse dar, sowohl
Minimum 7, wie die Abbildung 77 grasch aus theoretischen als auch aus algorithmisch
numerischen Grnden. Quadratische ProgramLineare Optimierungsaufgabe
me treten im Bereich der Regelungstechnik
8
hug bei der Online-Optimierung von Stell7
gren linearer Systeme mit quadratischen G6
tefunktionalen und linearen Nebenbedingun7
gen auf. Lineare Regressionsprobleme sind
4
wiederum wichtige Spezialflle Quadratischer
7
Zulssige Menge
2
Optimierungsaufgaben.
u.d.N.

Eine Quadratische Optimierungsaufgabe liegt


vor, wenn die Zielfunktion quadratisch und die
Nebenbedingungen wie bei der Linearen Optimierung linear sind. Die allgemeine Problemstellung ist:

0
0

Abbildung 77: Lineare Optimierung


zeigt. Besttigen Sie die Lsung in Matlab mit
der Funktion linprog.
Lsung: Die Lsung erhlt man in Matlab
wie folgt:
1
2
3
4
5
6
7
8

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

Die Matrix H in der Zielfunktion ist aus Rnn


und symmetrisch. Ansonsten gilt analoges wie
bei Linearen Optimierungsaufgaben. Falls der
Aufruf

204

Copyright c G. Gramlich

[x,qWert] = quadprog(H,c,A,b,B,d,l
,u)

1
2

H
A
b
l

=
=
=
=

[-4 -8; -8 -8]; c = [-4;-5];


[1 1; 1.25 0.75; 0 1];
[200;200;150];
[0;0];

erfolgreich war, ndet man in der Variablen 3


4
x den berechneten Lsungsvektor und in der
Variablen qWert den zugehrigen Wert der
und dem Aufruf
Zielfunktion 1/2xT Hx + cT x =: q(x). Wie
bei allen anderen Matlab-Funktionen entspre- 1 [x,qWert]=quadprog(H,c,A,b,[],[],l
)
chenden Typs knnen Argumente weggelassen werden, wenn nicht alle Formen der Neerhlt man die Ausgabe
benbedingungen auftreten. Damit aber die Reihenfolge erhalten bleibt, mssen gegebenen- 1 Warning: Large-scale method does
falls eckige Klammern [] hierfr geschrieben 2 not currently solve this problem
werden. Ferner knnen Optionen gesetzt wer- 3 formulation,
den und weitere Ausgabeargumente angege- 4 switching to medium-scale method.
5
> In quadprog at 236
ben werden. Fr weitere Hinweise verweisen 6 Optimization terminated.
wir auf die Online-Hilfe, siehe doc quadprod 7 x =
(help quadprog).
8
50.0000
Als Beispiel betrachten wir die Aufgabe

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.

Aufgabe 195 (Quadratische Optimierung) Lsen Sie das Problem

mit der quadratischen Zielfunktion q(x1 , x2 ) =


(4+2x1 )x1 (5+4x2 )x2 8x1 x2 , x = (x1 , x2 )
R2 .
Es ist dann
H=

A=

4 8
4
, c=
,
8 8
5

1
1
200

1.25 0.75 , b = 200

150
0
1

150.0000
qWert =
-155950

Maximiere
x R2
u.d.N.

x1 x2
x1 + x2 = 20
x1 0, x2 0

Dieses quadratische Optimierungsproblem


entsteht durch die Aufgabe, das Rechteck
mit dem Umfang 40 zu bestimmen, das den
grten Flcheninhalt hat.
Lsung: Die Lsung erhlt man in Matlab
wie folgt:
1
2

und l = (0, 0). Nach den Zuweisungen

205

>> H = -[0 1; 1 0];


>> Aeq = [1 1];
>> beq = [20];

Copyright c G. Gramlich

5
6
7
8

>> [x,fx] = quadprog(H,[],[],[],


Aeq,beq)
x =
10.0000
10.0000
fx =
-100.0000

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

Die Lsung ist x = (4/5, 6/5).


Lsung:
1
2
3
4
5
6

>>
>>
>>
>>
>>
>>

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

rung) wissen wir, dass es keine Lsung gibt.


Hier die Besttigung in Matlab.

7
8
9

1
2
3

4
5
6

8
9
10
11
12
13

>> H = [2 0; 0 0]; b = [1; 1];


>> [x,q] = quadprog(H,b)
Warning: Large-scale method does
not currently solve this
problem formulation,
switching to medium-scale method.
> In quadprog at 242
Exiting: the solution is unbounded
and at infinity;
the constraints are not
restrictive enough.
x =
1.0e+016 *
-1.0000
-1.0000
q =
1.0000e+032

10
11

x =
-0.5000
-0.5000
q =
-0.5000

.......................................

69.3. Lineare Ausgleichsaufgaben mit


linearen Nebenbedingungen
Mit der Funktion lsqlin kann man lineare
Ausgleichsaufgaben mit linearen Gleichungsund Ungleichungsnebenbedingungen lsen.
Die Zeilen
1
2
3

A = eye(3); b = zeros(3,1);
C = [1 2 4]; d = [7];
[x,q] = lsqlin(A,b,[],[],C,d)

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . berechnen die Lsung


Aufgabe 199 (Quadratische Optimierung) L- 1 x =
sen Sie in Matlab die Quadratische Optimie- 2
0.3333
rungsaufgabe (Skript: Optimierung)
3
0.6667
1.3333

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

>> H = [2 0; 0 2]; b = [1; 1];


>> [x,q] = quadprog(H,b)
Warning: Large-scale method does
not currently solve this
problem formulation,
switching to medium-scale method.
> In quadprog at 242
Optimization terminated.

x = [0.3333 0.6667 1.3333] ist der


Punkt mit dem kleinsten Abstand zum Koordinatenursprung, der auf der Ebene liegt, die
durch die Nebenbedingung speziziert ist.
Die Funktion lsqnonneg lst nichtnegative lineare Ausgleichsaufgaben. Dies bedeutet, dass

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)

und die Nebenbedingung durch

Falls der Aufruf


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

und die Nebenbedingungsfunktionen im File


Nebenb.m
1
2
3

und stellen fest, dass diese sogar aktiv sind,


was uns obige Matlab-Ausgabe auch schon
mitgeteilt hat.

function [g,h] = Nebenb(x)


%-Ungleichungen.
g = [x(1)*x(2)-x(1)-x(2)+1.5; -x
(1)*x(2)-10];
%-Gleichungen.
h = [];

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

Die Ausgabe des Aufrufs ergibt


1

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

Wir stellen auch die Ableitungen der Ungleichungssnebenbedingungen zur Verfgung.


1
2
3

Wir berprfen, ob die beiden Nebenbedingungen auch erfllt sind


1
2
3
4

function [f,df] = Zielf(x)


%-Zielfunktion.
f = exp(x(1))*(4*x(1)^2+2*x(2)
^2+4*x(1)*x(2)+2*x(2)+1);
%-Gradient der Zielfunktion.
df = [f+exp(x(1))*(8*x(1)+4*x(2));
...
exp(x(1))*(4*x(1)+4*x(2)+2)
];

>> g = Nebenb(x)
g =
1.0e-015 *
-0.8882

4
5

6
7
8

209

function [g,h,dg,dh] = Nebenb(x)


%-Ungleichungen.
g = [x(1)*x(2)-x(1)-x(2)+1.5; -x
(1)*x(2)-10];
%-Ableitungen der Ungleichungen.
dg = [x(2)-1, -x(2); x(1)-1, -x(1)
];
%-Gleichungen.
h = [];
dh = [];

Copyright c G. Gramlich

ber das Options-Argument wird der Funktion


fmincon mitgeteilt, dass die Ableitungen analytisch zur Verfgung stehen.
1

6
7
8
9
10
11
12

>> options = optimset(options,


GradObj,on,GradConstr,on
);
>> [x,fWert] = fmincon(@Zielf,x0
,[],[],[],[],[],[],@Nebenb,
options)
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

5
6

8
9

10

11
12
13

>> f = @(x) (x(1)-2).^2+(x(2)-1)


.^2;
>> [x,fx] = fmincon(f
,[2,2],[],[],[],[],[],[],
@Nebenb)
Warning: Large-scale (trust region
) method does not currently
solve this type of problem,
switching to medium-scale (line
search).
> In fmincon at 271
Optimization terminated: firstorder optimality measure less
than options.TolFun and maximum
constraint violation is less
than options.TolCon.
Active inequalities (to within
options.TolCon = 1e-006):
lower
upper
ineqlin
ineqnonlin
1
2
x =
1.0000 1.0000
fx =
1.0000

Die Ausgabe ist die Gleiche wie oben oh- 14


ne Ableitungsinformationen, aber die Anzahl 15
16
der Funktionsauswertungen hat sich von 36
auf 18 reduziert, was man erkennt, wenn man Die Nebenbedingungen sind wie folgt dedas Options-Argument Display auf iter ein- niert:
stellt.
1

Aufgabe 200 (Nichtlineare Optimierung) Lsen Sie die Aufgabe

2
3
4

Minimiere
x R2
u.d.N.

(x1

2)2

+ (x2

1)2

2
x1 x2 0
x1 + x2 2.

function [g,h] = Nebenb(x)


%-Ungleichungen.
g = [x(1)*x(1)-x(2); x(1)+x(2)-2];
%-Gleichungen.
h = [];

Aufgabe 201 (Nichtlineare Optimierung) Lsen Sie das Optimierungsmodell

Lsung: Die Minimalstelle ist x = (1, 1) und


das Minimum ist f (x ) = 1. Dies zeigen die
folgenden Zeilen.

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

berechnen die Lsung

13

x =

2.1068 -0.2081
fWert =
-0.2081

3
4

14
15
16
17

des mathematischen Modells.

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 = [];

erhalten wir die Lsung


Minimiere
(x0 , . . . , y4 )

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

Beachten Sie, dass der Startpunkt x0 =


(12, 11) weit weg von der Lsung x =
(0, 1) liegt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Aufgabe 204 (fmincon) Das folgende nichtlineare Optimierungsmodell


Aufgabe 203 (fmincon) Finden Sie die Lsung des nichtlinearen Optimierungsmodells
Minimiere
x1
(x1 , x2 ) R2
2
Minimiere
(x1 + 1)2 + x2 1
x1 + x2
2
u.d.N.
2
2
(x1 , x2 ) R
x1 + x2 2
2
(x1 1)2 + x2 2
u.d.N.
2
hat zwei lokale Minimalstellen, nmlich x =
(x1 + 1)2 + x2 2
1
(1, 1) und x = (1, 1). Berechnen Sie mit
2
Lsung: Mit
der Function fmincon beide Minima.
Lsung: Mit
1
function NLinOpt
2
3
4

6
7
8
9
10
11
12

13
14

clear all; close all, clc;


x0 = [12,-11];
options = optimset(LargeScale,
off,Display,iter);
[x,fWert] = fmincon(@Zielf,x0
,[],[],[],[],[],[],@Nebenb,
options)
%-Zielfunktion.
function f = Zielf(x)
f = x(1)+x(2);
%-Nebenbedingungen
function [g,h] = Nebenb(x)
%-Ungleichungen.
g = [(x(1)-1)^2+x(2)^2-2; -(x(1)
+1)^2-x(2)^2+2];
%-Gleichungen.
h = [];

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 = [];

erhalten wir die Lsung


1
2
3

erhalten wir die Lsung

...
x =

0.0000 -1.0000

212

...
x =

Copyright c G. Gramlich

Ist Rang(A) < n, so liefert x=pinv(A)*b


die Lsung kleinster Lnge in Alterna5
tive zu A b, wo man eine Basislsung
bekommt. x=inv(A*A)*A*b funktioniert
Die Lsung x = (1, 1) erhlt man, wenn nicht. Warum?
1
man den Startpunkt x0 in der Nhe von x =
1
Zusammenfassend ist also:
(1, 1) whlt. . . . . . . . . . . . . . . . . . . . . . . . . . .
Eindeutige
Lsung:
x = A\b =
pinv(A)*b = inv(A*A)*A*b.
3
4

-1.0000 -1.0000
fWert =
-1

69.5. berblick ber alle Funktionen zur


Optimierung

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.

70. Lineare Ausgleichsaufgaben

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

Ist Rang(A) = n, so knnen Sie alternativ


A
x
b
die eindeutige Lsung auch mit x=pinv(A)*b
Lsung: Die nachfolgende Zeilen geben die
oder x=inv(A*A)*A*b lsen.

213

Copyright c G. Gramlich

Lsungen.
1
2
3
4
5
6
7
8
9
10
11

Die Abbildung 78 zeigt die grasche Darstellung.

>> 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

Aufgabe 206 Die Datenpunkte


ti
bi

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

Abbildung 78: Graph von (t) = 1.0428 +


1.0
3.1516t + 4.9265 cos(t)
4.813

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

t = [0 0.2 0.4 0.6 0.8 1];


b = [3.825 4.528 4.746 4.873 4.865
4.813];
A = [ones(length(t),1),t,cos(t)];
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)

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

und eine Basislsung ist


1
2
3
4

>> 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

Eine Parametriesierung der allgemeinen Lsung von AT A = AT b ist x = (x1 , x2 ) =


(2t + 3, t), t R. Fr t = 1.2 erhlt man die
Lsung kleinster Lnge und fr t = 1.5 eine
Basislsung. Auch (3, 0) ist eine Basislsung.

1
2
3
4

>> null(A)
ans =
-8.9443e-001
4.4721e-001

Somit sind alle Lsungen von Ax


Aufgabe 208 Berechnen Sie mit den Matlab0.89443
0.2
Funktionen pinv, inv und dem \-Operator die
+
0.44721
0.4

Ausgleichslsung x fr das folgende berbestimmte Gleichungssystem:


gegeben.
x1 + x2 = 3

b durch

Aufgabe 210 Berechnen Sie die Ausgleichslsung des linearen Systems:

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

>> A = [1 1;2 -3;0 0];


>> b = [3;1;2];
>> A\b
ans =
2.0000
1.0000

Copyright c G. Gramlich

Beachten Sie, dass Sie das gleiche Ergebnis Aufgabe 212 Berechnen Sie per Hand ber
mit
die Normalgleichungen die Ausgleichslsung

x fr das folgende berbestimmte Gleichungs1


>> A(1:2,:)\b(1:2)
system:
2
ans =
3
4

2
1

x1 + x2 = 3
2x1 3x2 = 1

erhalten, da die letzte Gleichung (Zeile) fr


die Lsung keine Rolle spielt. Man lst somit
ein regulres quadratisches Gleichungssystem.
Fr den Gesamtfehler muss b3 = 2 jedoch bercksichtigt werden (Additive Konstante in der
Zielfunktion).

0x1 + 0x2 = 2

(a) Berechnen Sie die Projektion y = A x.

(b) Berechnen Sie den Fehlervektor r = A x


b.

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

Lsung: Die nachfolgende Zeilen geben die


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

>> y = A*xbar
y = [ 3] [ 1] [ 0]

(c) Der Fehlervektor ergibt sich zu:


1
2

>> r = A*xbar-b
r = [ 0] [ 0] [ -2]

r liegt im Nullraum von AT , denn:


1
2

>> A*r
ans = [ 0] [ 0]

Aufgabe 213 Ein Ingenieur hat experimentell


die folgenden Daten ermittelt

216

Copyright c G. Gramlich

Zusammenhang U = aI + U0 zwischen der


13 elektrischen Spannung U in V und der Strom24
21.5 strke I in mA beim Stromdurchgang durch ei35
ne Zelle auf Grundlage der folgenden MessBerechnen Sie eine lineare und quadratische
werte:
Ausgleichsfunktion und vergleichen Sie die
Werte beider Modellfunktionen an der Stelle
t = 5.
Lsung:
I 0.10 0.12 0.13 0.16 0.18 0.19
1
t = [0,2,5,7,9,13,24];
U 0.40 0.45 0.50 0.55 0.60 0.65
Spannung ti
Stromstrke bi

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

Die lineare Ausgleichsfunktion ist daher

Lsung: Man erhlt a 2.6 und U0 0.14.


Aufgabe 215 (Geometrische Modellierung)
Ein Kreis mit Mittelpunkt (3, 1) und Radius 2
lsst sich parametrisiert durch die beiden folgenden Gleichungen darstellen:

1 (t) = x1 + x2 t 0.6831 + 1.4353t


1
2
3
4
5

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

Abbildung 79: Lsung zur Aufgabe 215

wobei c = (c1 , c2 ) der Mittelpunkt und r der


Radius des Kreises sind. Wir berechnen nun
den Mittelpunkt und den Radius.
1

71. Nichtlineare
Ausgleichsaufgaben

Zu der Optimization Toolbox gehren


auch die Funktionen lsqnonlin und
5
6
lsqcurvefit, siehe doc lsqnonlin (help
lsqnonlin) und doc lsqcurvefit (help
lsqcurvefit). Mit diesen Funktionen kann
7
man nichtlineare Ausgleichsaufgaben lsen.
8
Nichtlineare Ausgleichsaufgaben treten bei
9
Parameteridentikationsproblemen auf und
10
spielen in den Anwendungen eine groe Rolle.
11
Wenn Sie sich fr diesen Problemkreis nher
12
interessieren, sehen Sie auch unter den Worten
Der Mittelpunkt ist c (3.4520, 1.4948) und Inverse Probleme nach ([26]). Wir zeigen das
der Radius ist r 1.9886. Die Abbildung 79 Lsen einer nichtlinearen Ausgleichsaufgabe
zeigt die Geometrie, die wie folgt erzeugt wor- in folgender Aufgabe.
den ist:
Aufgabe 216 (lsqcurvefit) Gegeben sind
4

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

die vier Datenpunkte

t
y

218

0.0
2.0

1.0
0.7

2.0
0.3

3.0
0.1

Copyright c G. Gramlich

und die nichtlineare Modellfunktion

die dazugehrige Geometrie und wurde wie


folgt erzeugt:

(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,

Bestimmen Sie x = (x1 , x2 ), sodass die Funkti- 3


on f die Datenpunkte im Sinne kleinster Quadrate bestmglichst ausgleicht.
.......................................
Lsung: Das Problem kann in Matlab mit der
Fr lineare Ausgleichsaufgaben siehe AbFunktion lsqcurvefit gelst werden.
schnitt 70.
1
2
3
4
5

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

Simulink ist ein signalussorientiertes (blockorientiertes), interaktives System zur Simulati7


on linearer und nichtlinearer dynamischer Sys8
teme. Es handelt sich um ein mausgesteuertes
9
Grakprogramm, das ein Modell eines natr10
lichen, technischen oder wirtschaftlichen Sys11
tems, das als Blockdiagramm (Blockschalt12
13
bild, Signalussdiagramm) auf dem Bildschirm darzustellen ist, unter dynamischen
Die Lsungsstelle ist somit x
Einwirkungen nachbildet. Es kann fr lineare,
(1.995, 1.0095). Die Abbildung 80 zeigt nichtlineare, zeitkontinuierliche oder zeitdiskrete Prozesse eingesetzt werden. Grundlage
2
sind Matlab-Funktionen zur Lsung gewhn1.8
licher Dierenzialgleichungen (DGL) bzw.
1.6
Anfangswertaufgaben (AWA). In diesem Sinn
1.4
kann Simulink als ein numerischer Dierenzi1.2
algleichungslser aufgefasst werden. Im zeit1
0.8
diskreten Fall sind die Modellgleichungen na0.6
trlich Dierenzengleichungen. Innerhalb der
0.4
Matlab-Umgebung ist Simulink eine Matlab0.2
Toolbox, die sich von den anderen Toolboxen
0
0
0.5
1
1.5
2
2.5
3
eben durch diese spezielle Oberche, mit der
dann auch eine besondere ProgrammiertechAbbildung 80: Zu Aufgabe 216
nik verbunden ist, unterscheidet. Variablen
6

219

Copyright c G. Gramlich

knnen von Simulink nach Matlab problemlos


importiert und exportiert werden. Damit stehen zum Beispiel alle Visualisierungsmglichkeiten von Matlab zur Verfgung, oder Gren des Systems knnen mathematisch optimiert werden, zum Beispiel mit der Optimization Toolbox.

72.1. Erste Schritte


Der Start des Programms Simulink erfolgt zum
Beispiel durch das Kommando simulink im
Matlab-command window. Danach net sich
der so genannte block Library Browser. Dieser stellt die verfgbaren Blcke (Funktionsblcke) der Simulink-Bibliothek in Form einer
Liste und in Form von Icons dar. Die Bibliothek ist dabei in Funktionsgruppen organisiert:
Sources
Sinks
Continous
Discrete
usw.
Bei der Auswahl eines Listeneintrages (Icon)
net sich dann im Simulink Library Browser-Fenster ein Teilfenster mit den zur Funktionsbibliothek gehrenden Funktionssysmbolen. Ein Klick auf Sources etwa net alle
Funktionsblcke zur Erzeugung von Signalen
(Funktionen). Zu sehen sind etwa die Blcke
Constant zur Erzeugung eines konstanten Signals oder Sine Wave zur Erzeugung einer Sinusfunktion. Die Funktionsblcke haben folgende Eigenschaften:
Name

Ein- und Ausgabe


Parameter (Doppelklick)
Online-Hilfe (Help-Button)
Kontextmen (Maus rechts)
Simulink ist erweiterbar, das heit, es knnen
eigene Blcke mit der gewnschten Funktion
deniert werden.

72.2. Konstruktion eines


Blockdiagramms
Will man nun mit Hilfe der Bibliotheken
ein eigenes System konstruieren, so muss
man zunchst im Simulink-Libraray Browser
durch Auswahl von File New Model ein leeres Fenster nen. Blcke knnen nun via
Drag&Drop aus der Bibliothek eingefgt werden. Zwei Blcke knnen dadurch verbunden
werden, dass man mit der linken Maustaste auf
einen Blockausgang klickt, die Maustaste festhlt und die sich aufbauende Verbindungslinie auf den gewnschten Blockeingang zieht.
Am Besten zieht man das Verbindungssignal
(Verbindungslinie) immer gegen der Signalussrichtung vom Eingang des Zielblocks zum
Ausgang des Quellblocks. Blcke und Verbindungen lschen, knnen Sie mit Hilfe der rechten Maustaste. Blcke knnen durch Ziehen
an den Ecken auch vergrert oder verkleinert
werden.
Bereits vorhandene Blockdiagramme knnen
mit File Open genet und dann bearbeitet
werden.
Die Kanten sind den Signalen (oder Gren)
des Systems zugeordnet, in den Knoten werden diese Signale generiert oder umgewandelt,

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

72.3. Weitere Arbeitsschritte

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)

stndig ist, wenn an der Kreuzungsstelle ein


AWA :
t [0, 15]
y(0) = 0

kleiner rechteckiger Punkt erscheint.

221

Copyright c G. Gramlich

72.4.2. Weitere Arbeitsschritte


Wir beginnen mit der Parametrierung des Sine
Wave-Blocks. Ein Doppelklick auf den Block
net ein Fenster, in dem die Amplitude auf
den Wert 2 eingestellt wird. Die anderen Parameter (Frequenz, usw.) bleiben unverndert.

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

y (t) = y(t) 5et sin(5t)

Nun steht einer Simulation nichts mehr im We


AWA :
y(0) = 1

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).

Abbildung 82: Ergebnis


rige Integralfunktion F auf.

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-

Zur Integration wird der Block Integrator


(Continous) verwendet. Er sorgt fr die numerische Integration der Dierenzialgleichung.
Danach wird die rechte Seite der Dierenzialgleichung mit Hilfe von Integrieren, Additionsstellen, usw. aufgebaut. Im vorliegenden
Fall wird mit dem Block fcn (User-Dened
Functions) der Ausdruck 5et sin(5t) gebildet
und durch die Summationsstelle Sum (Commonly Used Blocks) mit dem Ausgang des
Integrierers zusammengefasst. Da die rechte Seite nun komplett ist und diese gleich
der ersten Ableitung ist, wird der Ausgang
mit dem Integrierereingang verbunden (Rckkopplung). Zur graschen Darstellung des Signals (Lsung y der Dierenzialgleichung)
whrend der Simulation wird der Block Scope (Sinks) verwendet. Den Block Clock ndet man in Source. Das Simulink-Modell zur
Lsung der Dierenzialgleichung ist in Abbildung 83 dargestellt.

223

Copyright c G. Gramlich

10

1
s

Constant

Scope

y(t)

Integrator

Scope

1
s
Integrator

Abbildung 84: y (t) = k


f(u)
Clock

Implementierung der Dierenzialgleichung


y (t) = ky(t) und simulieren Sie damit. Whlen
Sie speziell k = 0.1, y(0) = 1 und 0 t 30.
Ab wann ist der Zustandswert y(t) kleiner als
Abbildung 83: Simulink-Modell
0.1? Wie lautet die analytische Lsung? Sie
kann gegebenenfalls zu Kontrollzwecken verNun setzen wir beim Integrierer die Anfangs- wendet werden.
bedingungen. Dies geschieht durch Doppelkli- Lsung: Die Abbildung 85 zeigt eine Sicken auf das Symbol und dem Eintrag des Any(t)
y(t)
1
fangwertes, hier 1. Der letzte Schritt besteht
s
Integrator
in der Wahl der Simulationsparameter. Unter
mehreren Integrationsverfahren (das sind gerade die DGL-Lser ode45, usw. von Matlab)
Scope
muss ein geeignetes aufgewhlt werden. Voreingestellt ist ode45. Auerdem ist die SimuK
lationszeit einzustellen. Ich habe das Intervall
Gain
[t0 = 0, t f = 3] gewhlt. Das grasche Ergebnis der Simulation, das heit die Lsung der
Abbildung 85: y (t) = ky(t)
Dierenzialgleichung, ist in Abbildung 63 zu
sehen.
mulink-Implementierung der DierenzialgleiAufgabe 218 (y (t) = k) Konstruieren chung y (t) = ky(t). An der grasche Ausgabe
Sie eine (signalussorientierte) Simulink- kann man erkennt, dass der Zustandswert y(t)
Implementierung der Dierenzialgleichung fr t 23 (ungefhr grer) kleiner 0.1 ist. Die
y (t) = k und simulieren Sie damit. Whlen Sie analytische Lsung ist y(t) = e0.1t , t [0, 30].
speziell k = 10 und y(0) = 0 und 0 t 11.
.......................................
Lsung: Die Abbildung 84 zeigt eine
Aufgabe 220 (yt = kyt1 ) Konstruieren
Simulink-Implementierung der DierenzialSie eine (signalussorientierte) Simulinkgleichung y (t) = k. . . . . . . . . . . . . . . . . . . . . .
Implementierung der Dierenzengleichung
Aufgabe 219 (y (t) = ky(t)) Konstruie- yt = kyt1 , t = 1, 2, . . ., und simulieren Sie
ren Sie eine (signalussorientierte) Simulink- damit. Whlen Sie speziell k = 7/10, y0 = 1
Fcn

224

Copyright c G. Gramlich

und 0 t 20.
Lsung: Die Abbildung
y_t

86

zeigt

Simulation mit der Parameterwahl k = 7/10,


eine y0 = 1 und 0 t 20. . . . . . . . . . . . . . . . . . .

y_t1

z
Unit Delay

72.6. Vereinfachungen
Scope

K
Gain

Abbildung 86: yt = kyt1


Simulink-Implementierung der Dierenzengleichung yt = kyt1 . Man muss also nur den
Integrator-Block durch den Unit Delay-Block
(Discrete) auswechseln. Der Anfangswert
y0 = 1 wird in diesem Block eingestellt.
Die Abbildung 87 zeigt das Ergebnis der

Abbildung 87: Simulation

Schon fr vergleichsweise kleine dynamische


Systeme werden relativ schnell viele Blcke
bentigt. Fr die gezeigten einfachen Beispiele ist dieser Eekt natrlich in erster Linie darauf zurckzufhren, dass schon fr die Operationen der untersten Ebene, wie etwa die Addition oder Skalierung, entsprechende Blcke
eingesetzt wurden. Dies trgt zwar zur Nachvollziehbarkeit der Modellgleichungen innerhalb des Blockdiagramms bei, macht aber dasselbe auch schnell unbersichtlich.
Durch geschickte Verwendung des Fcn-Blocks
aus der Bibliothek userDened Functions knnen Simulink-Systeme vereinfacht werden.
Mit Hilfe dieses Blocks ist es mglich, ganze Formeln zu einer Einheit zusammenzufassen, so dass auf die Elementarblcke der untersten Ebene (Sum oder Gain) verzichtet werden kann.
Eine weitere Mglichkeit zur Vereinfachung
von Simulink-Systemen ist eine Zusammenfassung von Teilsystemen zu eigenen
Simulink-Blcken; eine Konstruktion von Subsystemen. Die damit verbundene Hierarchisierung des Problems entspricht der Modularisierung durch Funktionen bei MatlabProgrammen. Eine solche Modularisierung ist
fr die meisten Probleme der Praxis unumgnglich.

225

Copyright c G. Gramlich

72.7. Kommunikation mit Matlab

73. Dnn besetzte Matrizen

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.

Mit Hilfe der Matlab-Funktion sim kann aus


Matlab ein Simulink-Modell aufgerufen werden. Genaue Auskunft ber die verschiedenen
Formen der Verwendung von sim erhalten sie
mit doc sim (help sim).
Eine weiter Kommunikationsart besteht ber
das Konzept globaler Variablen.

72.8. Umgang mit Kennlinien


In den Anwendungen kann ein funktionaler Zusammenhang zwischen vorkommenden
Gren meist nicht explizit angegeben werden,
das heit eine Formel oder Funktionsvorschrift
steht nicht zur Verfgung. Vielmehr stehen gemessene oder beobachte Werte tabellarisch zur
Verfgung. Eine solche Tabelle nennt man eine
Kennlinie.

Matlab verfgt ber zwei Speichermodi: full


und sparse, wobei full standardmig eingestellt ist. Die Funktionen full und sparse
erlauben es, zwischen beiden Modi hin und her
zu schalten.

In der Bibliothel Lookup Tables stehen Blcke


zur Verfgung mit denen man Kenntlinien be- Im Sparsemodus werden die von Null verschiedenen Matrixelemente als eindimensionahandeln kann (Interpolation, Extrapolation).
les (lineares) Feld mit ihren Zeilen- und Spaltenindizes abgespeichert. Die Anweisung
1

72.9. Weitere Bemerkungen und


Hinweise

>> F = -triu(tril(ones(6),1),-1)
+3*eye(6)

erzeugt die (6, 6)-Matrix


Weitere Informationen und Details ber Simulink nden Sie in [31].

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

Mit S = sparse(F) wird F im Sparsemodus


abgespeichert:
1
2
3
4
5
6
7
8
9
10
11
12
13
14

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

73.2. Mit Sparsematrizen rechnen

Unabhngig vom Speichermodus knnen Sie


die arithmetischen Operationen und viele
17
Funktionen verwenden. Welchen Speichermodus haben dann die Ergebnismatrizen? OperaDie von Null verschiedenen Elemente werden tionen mit vollen Matrizen ergeben volle Mazusammen mit ihren Indizes spaltenweise an- trixresultate. Ist S eine Sparsematrix und F eine
geordnet. Mit
vollbesetzte Matrix, so ist:
15
16

>> 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.

73.1. Sparsematrizen erzeugen

3
4
5

Sparse: S+S, S*S, S.*S, S.*F,


S^n, S.^n, S\S
Sparse: inv(S),chol(S), lu(S),
diag(S), max(S), sum(S)
Full: S+F, S*F, S\F, F\S

Ist a ein Skalar, so sind die Ergebnisse von a*S


und a\S vom Sparsemodus.

Um Eigenwerte oder singulre Werte einer


Sparsematrizen knnen auch direkt erzeugt Sparsematrix S zu berechnen, muss man S in
werden. Mit Hilfe der Funktion spdiags lsst den vollen Speichermodus konvertieren und

227

Copyright c G. Gramlich

die Funktionen eig bzw. svd verwenden:


eig(full(S)) bzw. svd(full(S)). Will
man nur einige Eigenwerte oder singulre
Werte berechnen, so kann man die Funktionen eigs und svds benutzen. Diese akzeptieren Sparsematrizen als Eingabeargument:
eigs(S) bzw. svds(S) .

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

Abbildung 88: Sparsematrix

Weitere Informationen erhalten Sie mit doc


sparfun (help sparfun).

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;

Lsung: Die Matrix S hat die folgende Form:


Dann erzeugt man die Matrix A mittels
1

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

Mit spy(A) kann ein Plot der Matrix A erzeugt 6


werden, siehe Abbildung 88. In der Grak er- 7
scheint die Anzeige nz = 298 (nz: non zeros). 8
Dies gibt die Anzahl der von Null verschiedenen Elemente an. Diese Information kann man . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
auch mittels nz = length(nonzeros(A))
Aufgabe 223 (Sparsematrizen, ll-in) In vieerhalten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
len Fllen, zum Beispiel bei der DiskretiAufgabe 222 (Sparsematrizen) Wie sieht die sierung von partiellen Dierenzialgleichungen

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

Plot der Matrix A


0

10

15

20
0

10
nz = 85

Plot der Matrix U

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)

Die grasche Darstellung der Matrizen A, L


und U (Siehe Abbildung 89 und 90) erzeugt
man mit

20

Abbildung 89: Plot der Matrix A

Plot der Matrix L

>> [L,U] = lu(A);

15

10

10

15

15

20
0

10
nz = 160

20

20
0

10
nz = 147

20

Abbildung 90: Plot der Matrizen L und U

229

Copyright c G. Gramlich

10

>> title(Plot der Matrix U)

3
4

.......................................

5
6
7

74. Mehrdimensionale Arrays

8
9

1
3
5
A(:,:,2)
7
9
11

2
4
6
=
8
10
12

Arrays der Datentypen (Abschnitt 75) double,


char, cell und struct knnen mehr als zwei
Dimensionen haben. Solche mehrdimensionale Arrays werden in natrlicher Verallgemeinerung zu Techniken, wie man sie fr Matrizen
kennt, deniert und manipuliert.

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

(c) Der Befehl inv(A(:,:,1)) zeigt, dass


die Matrix A0 singulr ist.

elle Parameter t zu studieren:

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.
.......................................

(a) Brechnen Sie die Inverse von A2 und von


A5 .

75. Datentypen (Klassen)

(b) Versuchen Sie die Inverse von A0 zu berechnen.


Bei der Realisierung numerischer und haupt(c) Lassen Sie den Parameter t von 2 an lang- schlich nichtnumerischer Algorithmen sind
sam immer kleiner werden. Berechne die Datentypen von besonderer Bedeutung.
Inversen von At und gib den ersten Wert Spricht man von einfachen Datentypen, so
meint man ganze Zahlen, Gleitpunktzahlen,
an, wo At singulr wird.
Die n n-Matrix At ist beim numerischen L- Zeichenketten usw. Unter einem zusammensen von Dierenzialgleichungen von Bedeu- gesetzten Datentyp oder einer Datenstruktur
versteht man ein Array (Feld) oder einen
tung, insbesondere fr groe n.
Lsung: Zunchst denieren wir die Matrix Verbund. Datenstrukturen knnen statisch und
dynamisch sein. Ein statischer Datentyp ist
A0 fr A0 .
zum Beispiel ein Array und eine verkettete
1
A0 = diag(-ones(4,1),1)+diag(-ones
Liste ist ein dynamischer Datentyp. Durch
(4,1),-1);
die Denition von Datentypen werden die
Nun denieren wir fr verschiedene Parame- mglichen Operationen mit denen Daten und
die Gre des Speicherplatzes festgelegt. In
terwerte den Vektor T. Zum Beispiel:
Matlab wird stets der Begri Datentyp oder
1
T = [0 1 2 3.7 5];
Klasse verwendet und man meint damit zum
Beispiel einen der folgenden Datentypen:
Dann erzeugen wir At durch:
double (numerische Arrays)
1
2

for i=1:length(T)
A(:,:,i) = A0+T(i)*diag(ones(5,1))
;
end

sym (Symbolisches Objekt)


function_handle (Function Handle)
char (Zeichenketten)

(a) Die Inverse der Matrix A5 erhlt man cell (Zellenarrays)


struct (Strukturarrays)
durch inv(A(:,:,5)).
(b) Die Inverse der Matrix A2 ist durch Bisher haben wir hauptschlich mit dem Datentyp double und sym (aus der Symbolic
inv(A(:,:,3)) zu berechnen.

231

Copyright c G. Gramlich

Toolbox) gearbeitet; gelegentlich auch mit der


Klasse function_handle.

13
14

>> M = sym(123);
>> N = ss(1,1,1,1);

Um festzustellen von welchem Datentyp ein


Objekt ist, kann man die Funktion class ver- Die vorletzte Anweisung M = sym(123) ist
mit der Symbolic Math Toolbox und die letzwenden:
te Anweisung N = ss(1,1,1,1) mit Control
1
>> class(pi)
Toolbox mglich. Erstere erzeugt eine sym2
ans =
bolische Variable und Letztere ein Zustands3
double
raummodell. Weitere Matlab-Datentypen wer4
>> f = @(x) x^2;
den von Toolboxen erzeugt. Fr weitere Infor5
>> class(f)
mationen siehe auch doc datatypes (help
6
ans =
datatypes). Die drei Datentypen char, cell
7
function_handle
und struct wollen wir etwas genauer anAuch mit der Funktion isa kann man den Da- schauen.
tentyp einer Variablen herausnden.
1
2
3
4
5
6
7

>> f = @(x) x^2;


>> isa(f,double)
ans =
0
>> isa(f,function_handle)
ans =
1

75.1. Zeichenketten (char)


Zeichenketten (Strings) werden durch Hochkommata begrenzt
1
2
3

>> s = Ich bin eine Zeichenkette


s =
Ich bin eine Zeichenkette

Mit den folgenden Anweisungen werden die


Die Variable s ist ein Array der Gre (1, 25)
Variablen A bis N deniert, die alle einen andevom Typ char. Mit dieser Variablen knnen
ren Datentyp besitzen. Den Datentyp knnen
Sie nun mit allen erlaubten Arrayoperationen
Sie aus dem Matlab-Workspace ablesen.
manipulieren. Sie knnen zum Beispiel Zei1
>> A = Z;
chenketten zusammenfgen oder trennen. Mit
2
>> B = magic(3);
den Funktionen str2num oder num2str kn3
>> C = @(x) x^2;
nen Sie Zeichen in Zahlen konvertieren oder
4
>> D = cell(3,2);
umgekehrt.
5
6
7
8
9
10
11
12

>>
>>
>>
>>
>>
>>
>>
>>

E.field = 1;
F = int8(123);
G = uint8(123);
H = int16(123);
I = uint16(123);
J = int32(123);
K = uint32(123);
L = single(123);

Fr weitere Informationen siehe doc strfun


(help strfun).
Aufgabe 225 (Zeichenketten) Die druckbaren
Zeichen des Ascii-Zeichensatzes werden durch
die ganzen Zahlen 32:127 dargestellt. Zahlen kleiner als 32 entsprechen nicht druckba-

232

Copyright c G. Gramlich

ren Steuerzeichen. Geben Sie diese druckbaren


Zeichen auf dem Bildschirm aus. Pro Zeile sollen 16 Zeichen ausgegeben werden. Welcher
Zahl entspricht das @-Zeichen, das in jeder EMail-Adresse vorkommt?
Lsung: Zunchst deniert man eine (6, 16)Matrix Z, die die Werte 32 bis 127 enthlt.

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.

Strukturenarrays werden innerhalb von Matlab an verschiedenen Stellen verwendet, zum


Beispiel von den Funktionen spline, solve
1
N = 32:127;
2
Z = reshape(N,16,6);
und von Optimierungs- und Dierenzialgleichungslsern. Auerdem spielen sie beim obDann kann man diese mit Hilfe des Befehls jektorientierten Programmieren in Matlab eine
char in den ASCII-Zeichensatz umwandeln. groe Rolle (Darauf sind wir bisher nicht einNach der Eingabe
gegangen). Zellenarrays nden zum Beispiel
in den Funktionen varargin und varargout
1
char(Z)
Verwendung, sowie in Grakkommandos, um
Text zu spezizieren.
sieht die Ausgabe wie folgt aus:
Eine Struktur ist ein Datentyp, welcher ver1
ans =
schiedene Werte von mglicherweise verschie2
!"#$%&()*+,-./
3
0123456789:;<=>?
denen Datentypen beinhaltet. Eine Matlab4
@ABCDEFGHIJKLMNO
Struktur ist mit dem Datentyp Record in der
5
PQRSTUVWXYZ[\]^_
Sprache Pascal vergleichbar. Im einfachsten
6
abcdefghijklmno
Fall lsst sich eine Struktur durch einfache
7
pqrstuvwxyz{|}~
Anweisungen erzeugen. Die folgenden AnweiUm herauszunden welcher Zahl ein Zeichen sungen erzeugen die Variable M vom Datentyp
entspricht kann man Befehl double verwen- struct. M ist ein (1, 1)-Array.
den. double(@) liefert dann die Zahl 64.

1
2
3
4

75.2. Zellen- und Strukturenarrays

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

Das erste Feld M.Name ist vom Typ char, das


zweite vom Typ double und das dritte vom
Typ sym. Den Inhalt des zweiten Feldes erhlt
man zum Beispiel durch
1
2
3
4

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

Mit der Funktion cellplot kann man sich die


grasche Struktur eines Zellenarrays in einem
Grakfenster anschauen. Der Aufruf

Ein Zellenarray ist ein Matlab-Array, das als 1 cellplot(A)


Elemente Matlab-Arrays haben kann. Ein Element heit Zelle oder Zellenelement. Im Ge- erzeugt die Abbildung 91.
gensatz zu Strukturenarrays werden Zellenarrays nicht durch Namen, sondern durch Zahlen identiziert. Ein Weg, um ein Zellenarray
zu denieren besteht darin, geschweifte Klammern zu verwenden. Die folgende Anweisung
erzeugt das (2, 2)-Zellenarray Z und gibt Informationen ber die einzelnen Zellen am Bildschirm aus.
1

2
3
4

>> Z = {sym(2), pi; pascal(3),


ABC}
Z =
[1x1 sym ]
[3.1416]
[3x3 double] ABC

3.1416

ABC

Abbildung 91: Die cellplot-Funktion

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:

Aufgabe 226 (Zellenarrays) Speichern Sie die


Blockmatrix

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

A{1,1} = [1 2 3;6 7 8];


A{1,2} = [4 5;9 10];

Copyright c G. Gramlich

3
4

76. Audiosignale (Tne, Musik)

A{2,1} = [11 12 13;16 17 18];


A{2,2} = [14 15;19 20];

Fr die folgende Beispiele mit Audiosignalen ist eine funktionsfhige


PC Sound Card erforderlich.

.......................................
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}

Der folgende Script ld die Datei handel in


den Workspace. Darin bendet sich das Audio5
signal y fr das Hallelujah aus H ndels Mesa
6
7
sias. Mit der Funktion soundsc kann das Signal abgespielt werden. Die Abspieldauer beAlternativ kann eine Lsung wie folgt ausse- trgt 8.9 s. Die Abtastfrequenz Fs ist 8192 Hz.
hen:
4

1
2
3

=
=
=
=

orth(A);
null(A);
orth(A);
null(A);

>> load handel


>> soundsc(y,Fs)

Weiter Tonbeispiele (Zugpfeife, Gong,


Gelchter, usw.) nden Sie unter doc
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . audiovideo (help audiovideo).
4

235

Copyright c G. Gramlich

Am PC mit Betriebssystem Windows liegen


Audiosignale oft in Dateien im wav-Format
vor. Matlab kann derartige Dateien lesen und
schreiben, sowie digitale Signale direkt an
die PC Sound Card ausgeben. Siehe doc
audiovideo (help audiovideo).

com Der Deutsche Web Mirror (Spiegel) ist


http://www.mathworks.de Von hier aus
ndet man verschiedene Informationen ber
Matlab und Simulink sowie deren Toolboxen.
Auerdem gibt es Hinweise ber Blocksets, eine Liste von Bchern ber Matlab sowie mFiles von anderen Benutzern. Auch Informationen zur Studentenversion sind dort zu haben. Es empehlt sich, hin und wieder die Homepage aufzusuchen, da dort die aktuellen Informationen ber Matlab zu nden sind.

Aufgabe 228 (Audiosignale) Suchen Sie auf


Ihrem PC eine wav-Datei und laden Sie sie mit
der Funktion wavread. Bestimmen Sie die Abtastfrequenz und die Wortlnge und geben Sie
das Signal grasch aus.
Lsung: Hier mein Beispiel, siehe Abbildung Um sich m-Files von der User Community
92. Dazu habe ich folgende Skript verwendet. zu besorgen, steht die Adresse http://www.
mathworks.de/matlabcentral zur Verfgung.

Programmiertipps stehen unter http:


//www.mathworks.de/access/helpdesk/
help/techdoc/matlab_prog. In dieser
Beschreibung ndet Sie auf der letzten Seite
weitere Adressen, um weitere Infos ber Realease Notes, Function Reference, NewsgroupAdressen, Suchadressen nach Online-Quellen,
Digest-Infos, News & Notes, DokumentatioAbbildung 92: wav-Datei
nen (Handbcher), Beispielsammlung, usw.
brigens, diese Programmiertips (mit den
1
>> [y,fs] = wavread(Beispielwav)
Adressen auf der letzten Seite) werden auch
;
als PDF-File mit Matlab mitgeliefert. ber
2
>> soundview(y,fs)
das Men help in Matlab help unter Printable
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dokumentation (PDF) kommen Sie an das
PDF-Dokument.
Ein FAQ-Text (FAQ = Frequently Asked Questions) zu Matlab nden Sie unter http://
www.mit.edu/~pwb/cssm.

77. WWW-Seiten
Die Firma MathWorks kann ber das World
Wide Web (WWW) erreicht werden. Die URLAdresse5 lautet: http://www.mathworks.
5

URL: Uniform Resource Locator.

236

Copyright c G. Gramlich

78. Das Matlab-Logo

80. Cleves Corner

Das Matlab-Logo (Abbildung 93) ist eine


Darstellung des ersten Schwingungsmodus eines dnnen, fest in einen L-frmigen Rahmen
eingespannten Tuches6 , dessen Schwingungsverhalten durch eine Wellengleichung
beschrieben wird. Zur Geschichte des Matlab-Logos siehe http://www.mathworks.
com/company/newsletters/news_notes/
clevescorner/win03_cleve.html.
Das

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

84. hnliche Systeme


Diejenigen, die sich Matlab nicht leisten knnen, sei auf die Public Domain
Software
Scilab
(http://www-rocq.
inria.fr/scilab/),
Octave
(http:
//www.gnu.org/software/octave/,
http://www.che.wisc.edu/octave),
RLaB (http://rlab.sourceforge.net)
und
Euler
(http://mathsrv.
ku-eichstaett.de/MGF/homes/
grothmann/euler/german/index.html)
verwiesen. Diese Systeme sind bezglich
Syntax und Kapazitt dem Matlab-System
hnlich. Andere kommerzielle Systeme sind
zum Beispiel Gauss, HiQ, IDL, Mathcad und
PV-WAVE.
Andere interaktive Systeme, die ihre Strken
hauptschlich im Bereich symbolischer Rechnungen haben, sind: Axiom, Derive, Macsyma,
Magma, Maple, Mathematica, Maxima, MuPAD und Reduce. Man nennt diese Systeme
Computeralgebrasysteme (CA-Systeme). Weitere spezielle Computeralgebrasysteme sind
Gap, Pari/gp, Kash, Sage und Singular.

238

Copyright c G. Gramlich

A. Glossar

Ein- und Ausgabeargumente akzeptiert.


Variablen sind dort lokal deniert.

Array (Feld). Unter einem Array (Feld) ver-

steht man eine Reihe (Ansammlung) von


Daten eines bestimmten Typs. Vektoren
und Matrizen sind die bekanntesten Beispiele.
Array Editor. Ein Tool, das es erlaubt, den In-

Handle Graphics. Ein

objekt-orientiertes
Graksystem, dem die Grak von Matlab unterliegt. Objekte sind hierachisch
organisiert und werden durch Handles
manipuliert.

Help Browser. Ein Browser, mit dem man

die Dokumentation von Matlab und anderen MathWorks Produkten anschauen


und suchen kann.

halt von Arrays anzuzeigen und zu verndern.


Class (Klasse oder Datentyp). Ein Daten-

typ in Matlab.

IEEE arithmetic (IEEE-Arithmetik). Ein

Command History (Kommando-Historie).

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

FORTRAN-Code, das plattformabgngige Endungen hat. Es verhlt sich wie ein


m-File oder eine eingebaute Funktion.
Script M-File. Ein Typ von m-File, das kein

Ein- und Ausgabeargument hat und auf


Daten im Workspace (Arbeitsspeicher)
operiert.
Toolbox. Eine Sammlung von m-Files, die

den Funktionsumfang von Matlab erweitert, gewhnlich im Hinblick auf ein spezielles Anwendungsfeld.
Workspace. Arbeitsspeicher, der ber die

Matlab-Befehlszeilen erreichbar ist.


Beim Beenden werden die Variablen
gelscht.
Workspace Browser. Ein Browser, der al-

le Variablen im Workspace auistet und


Operationen auf diesen erlaubt.

240

Copyright c G. Gramlich

B. Die Top Matlab-Funktionen


In diesem Anhang liste ich Matlab-Funktionen
auf, von denen ich glaube, dass sie vom typischen Matlab-User am Hugsten eingesetzt
werden. Informationen ber diese Funktionen
erhalten Sie mit den Online-Hilfen von Matlab, insbesondere mit doc und help. Siehe
auch die Abschnitte 17 und 18.
Vektoren/Matrizen
zeros
Nullmatrix
ones
Einsmatrix
eye
Einheitsmatrix
rand
Zufallsmatrix
randn
Zufallsmatrix
linspace Gleicher Abstand

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]

[8] Higham, D., Higham, N.: Matlab Guide.


Society for Industrial and Applied Mathematics, Philadelphia, PA, USA, 2000.
[9] Kanzow, C.: Numerik linearer Gleichungssysteme. Springer Verlag, 2005.

[10] Kelley, C.: Iterative Methods for Linear


ans Nonlinear Equations. Society for InAnderson, E., Bai, Z., Bischof, C., Demdustrial and Applied Mathematics, Philmel, J., Dongarra, J., Croz, J. D., Greenadelphia, PA, USA, 1995.
baum, A., Hammarling, S., McKenney,
A., Ostrouchov, S., Sorensen, D.: LA- [11] Knorrenschild, M.: Numerische MathePACK Users Guide. Society for Indusmatik. Mathematik-Studienhilfen. Fachtrial and Applied Mathematics, Philadelbuchverlag Leipzig im Carl Hanser Verphia, PA, USA, 3. Auflage, 1999.
lag, 2003.
Dongarra, J., Bunch, J., Moler, C., Ste- [12] Lehoucq, R., Sorensen, D., Yang, C.: ARwart, G.: LINPACK Users Guide. SoPACK Users Guide: Solution of Largeciety for Industrial and Applied MatheScale Eigenvalue Problems with Implicitmatics, Philadelphia, PA, USA, 1979.
ly Restarted Arnoldi Methods. Society
for Industrial and Applied Mathematics,
Golub, G., van Loan, C.: Matrix CompuPhiladelphia, PA, USA, 1998.
tations. The Johns Hopkins University
Press, 3. Auflage, 1996.
[13] Matlab: Data Analysis. The MathWorks,
Natick, MA, USA, 2009. http://www.
Gramlich, G.: Anwendungen der Lineamathworks.de.
ren Algebra. Mathematik-Studienhilfen.
Fachbuchverlag Leipzig im Carl Hanser [14] Matlab: Getting Started Guide. The
Verlag, 2004.
MathWorks, Natick, MA, USA, 2009.
http://www.mathworks.de.
Gramlich, G.: Lineare Algebra. Eine
Einfhrung. Mathematik-Studienhilfen. [15] Matlab: Graphics. The MathWorks, NaFachbuchverlag Leipzig im Carl Hanser
tick, MA, USA, 2009. http://www.
Verlag, 2. Auflage, 2009.
mathworks.de.
Gramlich, G., Werner, W.: Nu- [16] Matlab: Mathematics. The MathWorks,
merische
Mathematik
mit
MatNatick, MA, USA, 2009. http://www.
lab.
dpunkt.verlag, 2000.
http:
mathworks.de.
//www.hs-ulm.de/gramlich.
[17] Matlab: Object-Oriented Programming.
Greenbaum, A.: Iterative Methods for
The MathWorks, Natick, MA, USA,
Solving Linear Systems. Society for In2009. http://www.mathworks.de.
dustrial and Applied Mathematics, Phil[18] Matlab: Optimization Toolbox.
The
adelphia, PA, USA, 1997.

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

C/C++, 17, 38, 78, 83


cart2pol, 71
cart2sph, 71
cat, 230
cd, 28
ceil, 163
ceil(x), 39
cell, 230232, 242
cellplot, 234
cgs, 123

245

char, 115, 230232, 234, 242


chol, 118, 119
Cholesky, 118
cholinc, 123
Cholseky, 118
circshift, 53
class, 232
clc, 27, 242
clear, 242
clear global, 88
Cleve Moler, 2, 237
clf, 242
close, 242
coeff, 191
colorbar, 65
colormap, 65
colspace, 97, 106
combinat, 161
compan, 45
compose, 177
computer, 28, 32, 34
cond, 116, 241
condest, 116
contour, 242
conv, 132, 135
convert, 191
corrcoef, 158
cos, 39, 128
cosd, 38
cot, 39
cov, 131, 158
cross, 50, 96, 107
csc, 39
cumprod, 53
cumsum, 53
cumtrapz, 149, 150
cylinder, 76, 77

dblquad, 147, 148, 150


deconv, 133, 135
degree, 190, 191
delete, 28
demo, 242
demos, 202
Derive, 238
det, 101, 106, 107
diag, 45, 52, 106, 107, 230, 241
diag(rot90(B)), 53
diary, 242
diary off, 25
diff, 53, 185
digits, 199
dir, 28, 242
disp, 56, 242
disttool, 158
doc, 22, 26, 27, 241, 242
doc audiovideo, 235, 236
doc datatypes, 36, 232
doc demo, 26
doc demos, 26
doc elfun, 26, 33, 38
doc elmat, 32, 43
doc funfun, 59, 152
doc gallery, 123
doc general, 84
doc graph2d, 63
doc graph3d, 63
doc graphics, 76
doc iofun, 58
doc lang, 32, 81, 84
doc logo, 237
doc ops, 42, 43, 79
doc optim, 142, 202, 213
doc polyfun, 135
doc sim, 226
doc sparfun, 124, 228

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

full, 125, 226


function, 40, 83, 84
function_handle, 231, 232
funm, 52
funtool, 191
fwrite, 58
fzero, 59, 138, 139, 179

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

orth, 97, 107, 121

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

rand, 10, 44, 162, 163, 165, 227, 230, 241


rand(n), 163
randn, 44, 162, 163, 165, 230, 241
randtool, 166
range, 158
rank, 98, 106, 107, 121, 130
rcond, 113, 116
real, 33
realmax, 34
realmin, 34
Record, 233
Reduce, 238
Reichelt, 153
repmat, 241
reshape, 52, 241
reshape(A,4,3), 53
RLaB, 238
roots, 135, 139, 141, 242
Rosenbrock, 153
rosser, 45
rot90, 52
rot90(A,3), 53
rot90(B), 52
round, 40
round(x), 39
rref, 92, 106, 107, 109113
rsolve, 193
Runge-Kutta, 151, 153

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

xlabel, 62, 242


xlim, 242
ylabel, 62, 242
ylim, 242
zeros, 44, 80, 107, 227, 230, 241
zlabel, 62

252

Copyright c G. Gramlich

Das könnte Ihnen auch gefallen