Sie sind auf Seite 1von 206

Aus Sicht eines Mathematikers

Günter M. Gramlich
Professor für Mathematik an der
Fachhochschule Ulm
Fachbereich Grundlagen
http://www.rz.fh-ulm.de/~gramlich
Ulm, 5. Januar 2006
M
Vorwort genschaften von Matlab behandelt. Da-
bei zeige ich, wie und wozu man Funk-
atlab1 ist ein sehr leistungsfähi- tionen aus Matlab nutzen kann, erkläre
ges Softwaresystem für alle Ar- aber nicht die Mathematische Theorie und
ten von Berechnungen. Der Nu- die Algorithmen, die sich dahinter verber-
meriker Cleve Moler hat die gen. Auch gehe ich davon aus, dass Sie, lie-
erste Version von Matlab in FORTRAN ber Leser, grundlegende Kenntnisse im Pro-
Ende der siebziger Jahre geschrieben. Es grammieren und mit dem Umgang wenigs-
wurde in Lehre und Forschung beliebt und tens eines Betriebssystems haben.
mündete in ein kommerzielles Softwaresys- Der Umfang von Matlab ist in den letz-
tem. Matlab wird nun in Hochschulen und ten Jahren stark angestiegen. An den Do-
Industrie eingesetzt. kumentationen können Sie dies gut erken-
Matlab dient im Gegensatz zu Com- nen, siehe [14, 15, 16, 17]. Hier ein kleiner
puteralgebrasystemen (CAS) nicht primär Abriss über die verschiedenen Versionen:

Matlab
der symbolischen, sondern der numerischen
1978: Klassisches
(zahlenmäÿigen) Lösung von Problemen.
FORTRAN-Version
Heutzutage werden viele physikalische, bio-
logische, technische, informationstechnische 1984: Matlab 1
und ökonomische Produkte am Computer C-Version

Matlab 2
entwickelt. Hierbei ist eine Simulation ein
1985:
wesentlicher Bestandteil. Mit Hilfe einer Si-
30% mehr Funktionen und Kommandos,
mulation kann ein Funktionsnachweis oft
Dokumentation
schneller erbracht werden. Auÿerdem ist sie
meist schneller als ein Experiment, kann
1987: Matlab 3
daher ein Projekt zeitlich verkürzen und
Schnellere Interpreter, Farbgrak, hoch-
so die Kosten reduzieren. Durch Compu-
auösende Grak als Hardkopie
teranimationen entsteht eine Anschaulich-
keit und auÿerdem ist eine Simulation völ- 1992: Matlab 4
lig ungefährlich. Mit dem Softwaresystem Sparsematrizen, Animation, Visualisie-

Matlab lassen sich realitätsnahe Anwen- rung, User-Interface-Kontrolle, Debug-

dungen rasch und unaufwendig bereits mit ger, Handle-Grak

wenigen Codezeilen programmieren bzw. si-


mulieren.
1997: Matlab 5
Mat-
Proler, objekt-orientierte Programmie-
Diese Einführung soll ein Einstieg in
lab
rung, mehrdimensionale Arrays, Zellen-
sein. Ich habe nur die wichtigesten Ei- arrays, Strukturen, mehr lineare Algebra
1
Matlab
R ist eingetragenes Warenzeichen von für Sparse-Probleme, neue DGL-Löser,
The MathWork Inc. Browser-Hilfe

2 Copyright
c G. Gramlich
2000: Matlab 6 (R12) MakeIndex erzeugt. Alle Bilder habe ich
Matlab -Desktop mit Browser-Hilfe, mit Matlab erstellt.
Matrizenrechnungen basierend auf LA- Die Mathematik habe mit den dort üb-
PACK mit BLAS, Handle-Funktionen, lichen Symbolen und der dort üblichen
eigs Schnittstelle zu ARPACK, Schreibweise ausgedrückt. Vektoren sind
Randwertproblemlöser, partieller kleine (a, b, c usw.) und Matrizen sind
Dierenzialgleichungssystem-Löser, groÿe lateinische Buchstaben (A, B, C
JAVA Unterstützung usw.). Funktionen, Kommandos, Codes,

2002: Matlab 6.5 (R13)


usw. aus Matlab habe ich in die Schriftart

Performance-Beschleunigung, schnellere
Typwriter gesetzt. Das Ende von Aufgaben
haben wir wie folgt gekenntzeichnet: © . . ©
Geschwindigkeit der Kernfunktionen der
Linearen Algebra für den Pentium 4, Für jede Anregung, nützlichen Hinweis oder

mehr Fehler- und Warnhinweise Verbesserungsvorschlag bin ich dankbar.

2004: Matlab 7 (R14)


Sie erreichen mich am Besten über E-Mail:
gramlich@fh-ulm.de.
double-
Mathematik
Datentypen
auch auf nicht
(single precision,
Nun viel Freude und Erfolg mit Matlab !

integer); Anonymous Functions; Nested


Functions; m-Files können in HTML,
AT X, usw. publiziert werden; erweiterte
L Ulm, 5. Januar 2006 Günter Gramlich
E
und verbesserete Plot-Möglichkeiten

Nicht näher gehe ich auf die Themen: Ob-


jektorientiertes Programmieren mit Mat-
lab , Java-Schnittstellen, GUI (Graphical
User Interface) Werkzeuge und die Publi-
AT X,usw.
kationstools wie HTML, XML, L E
ein. Dafür nden Sie aber einen Zugang
zum symbolischen Rechnen mit Matlab ,
zu Optimierungs- und Statistikfunktio-
nen, sowie ein Simulink -Modell (Symbolic-
Toolbox, Optimization Toolbox , Statistics
Toolbox, Simulink ). Im Anhang nden Sie
ein kleines Glossar, sowie ein Auistung
wichtiger Matlab -Funktionen.

Den vorliegenden Text habe ich vollstän-


AT X erstellt. Die Literaturhinwei-
dig in L E
se wurden mit BibTEX und der Index mit

3 Copyright
c G. Gramlich
Inhaltsverzeichnis 20. Matrizen 24

1. Einleitung 8 21. Matrizenoperationen 28

2. Was macht den Erfolg von 22. Rundungsfunktionen 31


Matlab aus? 11
23. Weitere Funktionen 32
3. Starten und beenden 12
24. Zweidimensionale Arrays 33
4. Matlab unterbrechen 12 24.1. Zeile löschen . . . . . . . . . . 33
24.2. Gröÿtes Element bestimmen . 33
5. Lange Eingabezeilen 12
24.3. Aus Matrizen Vektoren machen 34
24.4. Zeilen-/Spaltentausch . . . . . 34
6. Das help-Kommando 12
24.5. Ordnungen ändern . . . . . . 35
24.6. Blockmatrizen . . . . . . . . . 35
7. Das doc-Kommando 13

25. Vektorieller Programmierung 35


8. Demos 13

26. Der Path Browser 36


9. Das lookfor-Kommando 13

27. Der Workspace Browser 36


10. Einfaches Rechnen 14

28. Den Workspace verwalten 36


11. Welche arithmetische Operati-
on hat Vorang? 15
29. Den Datenträger verwalten 37

12. Zahlen und Formate 16


30. Wie man mit Matlab System-

13. Variablen und Konstanten 17 informationen erhält 37

14. Komplexe Zahlen 18 31. Neuigkeiten und Versionen 37

15. Ieee -Arithmetik und double 19 32. Dateien lesen und schreiben 37

16. Nicht double-Datentypen 20 33. Function Functions 38

17. Eine Sitzung aufzeichnen 22 34. Mathematische Funktionen 38

18. Vektoren 22 35. Grak 40


35.1. 2D-Grak . . . . . . . . . . . 41
19. Vektoroperationen 24 35.2. 3D-Grak . . . . . . . . . . . 43

4 Copyright
c G. Gramlich
35.3. Funktionsdarstellungen . . . . 45 40. Globale und lokale Variablen 66
35.4. Parametrisierte Kurven . . . . 47
35.5. Parametrisierte Flächen . . . . 49 41. Wie man eziente Programme

35.6. Implizite Kurven . . . . . . . 50 schreibt 66

35.7. Implizite Flächen . . . . . . . 50


42. Lineare Algebra (1) 70
35.8. Koordinatenachsen skalieren . 51
42.1. Lineare Gleichungssysteme
35.9. Zwei y -Achsen . . . . . . . . . 52
und Matrizen . . . . . . . . . 70
35.10. Koordinatentransformationen 53
42.2. Vektoren in der Ebene und
35.11. Spezielle Grakfunktionen . . 53
im Raum . . . . . . . . . . . . 74
35.12. Vektorfelder visualisieren . . . 53
42.3. Analytische Geometrie von
35.13. Graken importieren, expor-
Geraden und Ebenen . . . . . 76
tieren und drucken . . . . . . 54
42.4. Reelle Vektorräume und Un-
35.14. Animationen . . . . . . . . . . 56
terräume . . . . . . . . . . . . 76
35.15. Handle Graphics . . . . . . . . 56
42.5. Determinanten . . . . . . . . . 80
35.16. Graphical User Interface (GUI) 56
42.6. Eigenwerte und Eigenvektoren 81
42.7. Lineare Abbildungen und
36. Vergleichsoperatoren, Ver-
Matrizen . . . . . . . . . . . . 84
Matlab
gleichsfunktionen 56
42.8. -Funktionen für die

37. Logische Operatoren und logi- Lineare Algebra im Überblick 85

sche Funktionen 57 42.9. Lineare Gleichungssysteme (2) 86

37.1. Logische Operatoren . . . . . 57 42.9.1. Quadratische Systeme . . . . . 87

37.2. Logische Funktionen . . . . . 57 42.9.2. Überbestimmte Systeme . . . 87


42.9.3. Unterbestimmte Systeme . . . 88
38. Steuerstrukturen 58 42.10. Lineare Gleichungssysteme (3) 89
38.1. for-Schleife . . . . . . . . . . 58
38.2. while-Schleife . . . . . . . . . 59 43. Lineare Algebra (2) 93

38.3. if-Anweisung . . . . . . . . . 59 43.1. Normen . . . . . . . . . . . . 93

38.4. switch-Anweisung . . . . . . . 59 43.2. Konditionszahlen . . . . . . . 95


43.3. Lineare Gleichungssysteme (4) 96
39. m-Files 60 43.4. Inverse . . . . . . . . . . . . . 96
39.1. Script-Files . . . . . . . . . . . 60 43.5. Determinante . . . . . . . . . 97
39.2. Function-Files . . . . . . . . . 61 43.6. Pseudoinverse . . . . . . . . . 97
39.3. Namen von m-Files . . . . . . 63 43.7. LU-Faktorisierung . . . . . . . 97
39.4. Editieren von m-Files . . . . . 63 43.8. Cholseky -Faktorisierung . . 98
39.5. Zur Struktur eines m-Files . . 63 43.9. QR-Faktorisierung . . . . . . . 99
39.6. Blockkommentare . . . . . . . 63 43.10. Singulärwertzerlegung . . . . . 100
39.7. Übungsaufgaben . . . . . . . . 64 43.11. Eigensysteme . . . . . . . . . 102

5 Copyright
c G. Gramlich
43.12. Iterative Methoden . . . . . . 102 52. Optimierung (Teil 1) 121
43.12.1. Iterative Methoden für linea-
re Gleichungssysteme . . . . . 102 53. FFT 122

43.12.2. Iterative Methoden für Ei-


54. Integration 123
gensysteme . . . . . . . . . . . 104
54.1. Mehrfachintegrale . . . . . . . 126
43.12.3. Iterative Methoden für Sin-
54.2. Tabellarische Daten . . . . . . 127
gulärwertsysteme . . . . . . . 105
54.3. Zusammenfassung . . . . . . . 128
43.13. Funktionen einer Matrix . . . 105

55. Dierenzialgleichungen 129


44. Mehr zu Funktionen 105
55.1. Anfangswertaufgaben . . . . . 129
44.1. Function-Handles . . . . . . . 105
55.2. Randwertaufgaben . . . . . . 132
44.2. Anonymous Functions . . . . 106
55.3. Partielle Dierenzialglei-
44.3. Subfunctions . . . . . . . . . . 107
chungen . . . . . . . . . . . . 135
44.4. Nested Functions . . . . . . . 108
44.5. Beispielhafte Funktionen . . . 108
56. Statistik 137

45. Lineare Ausgleichsaufgaben 109


57. Kombinatorik 137

46. Polynome 109


58. Zufallszahlen 140
46.1. Darstellung von Polynomen . 109
58.1. Gleichverteilte Zufallszahlen . 140
46.2. Nullstellen von Polynomen . . 109
58.2. Normalverteilte Zufallszahlen . 141
46.3. Multiplikation von Polynomen 110
58.3. Im Vergleich: Gleich- und
46.4. Addition und Subtraktion
normalverteilte Zufallszahlen . 142
von Polynomen . . . . . . . . 111
58.4. Andere Verteilungen . . . . . 144
46.5. Division von Polynomen . . . 112
46.6. Ableiten von Polynomen . . . 112 59. Stochastische Simulationen 144
46.7. Auswerten von Polynomen . . 112 59.1. Näherung für π . . . . . . . . 145
46.8. Zusammenfassung . . . . . . . 113 59.2. Zum Ziegenproblem . . . . . . 146
59.3. Das Geburtstagsparadox . . . 147
47. Polynominterpolation 113
59.4. Bestimmte Integrale . . . . . . 149

48. Polynomapproximation 114


60. Symbolisches Rechnen 149
60.1. Erste Schritte . . . . . . . . . 150
49. Kubische Splineinterpolation 115
60.2. Wie man Maple -Funktionen

50. Stückweise lineare Interpolati- verwendet . . . . . . . . . . . 153

on 116 60.3. Mathematische Funktionen . . 154


60.4. Algebraische Gleichungen . . . 157
51. Nichtlineare Gleichungen 116 60.5. Grenzwerte . . . . . . . . . . . 158

6 Copyright
c G. Gramlich
60.6. Endliche und unendliche 64. Dünn besetzte Matrizen 184
Summen . . . . . . . . . . . . 161 64.1. Sparsematrizen erzeugen . . . 185
60.7. Dierenziation . . . . . . . . . 163 64.2. Mit Sparsematrizen rechnen . 186
60.8. Partielle Dierenziation . . . . 164
60.9. Der Gradient . . . . . . . . . . 164 65. Mehrdimensionale Arrays 186

60.10. Die Hesse -Matrix . . . . . . . 164


60.11. Die Jacobi -Matrix . . . . . . 165
66.
66.1.
Datentypen (Klassen)
Zeichenketten (char)
187
. . . . . 189
60.12. Integration . . . . . . . . . . . 165
66.2. Zellen- und Strukturenarrays . 189
60.13. Polynome . . . . . . . . . . . 168
60.14. Taylor -Polynome . . . . . . 168 67. WWW-Seiten 190
60.15. Die Funktionen funtool und
taylortool . . . . . . . . . . 169 68. Das Matlab -Logo 191
60.16. Mehrdimensionale Taylor -
Polynome . . . . . . . . . . . 169 69. Studentenversion 191

60.17. Lineare Algebra . . . . . . . . 170


70. Cleve's Corner 191
60.18. Dierenzengleichungen . . . . 170
60.19. Dierenzialgleichungen . . . . 171
Fouri-
71. Handbücher 192
60.20. Die kontinuierliche
er-Transformation . . . . . . 174 72. Progammierungstips 192
60.21. Laplace -Transformation . . . 176
60.22. Spezielle mathematische 73. Literatur 192

Funktionen . . . . . . . . . . . 176
74. Ähnliche Systeme 192
60.23. Variable Rechengenauigkeit . . 177
60.24. Überblick über alle symboli-
A. Glossar 193
schen Funktionen . . . . . . . 178
60.25. Weitere Bemerkungen und B. Die Top Matlab -Funktionen 195
Hinweise . . . . . . . . . . . . 178
Literatur 197
61. Optimierung (Teil 2) 179
61.1. Lineare Optimierung . . . . . 179 Stichwortverzeichnis 199

61.2. Quadratische Optimierung . . 181


61.3. Überblick über alle Funktio-
nen zur Optimierung . . . . . 182

62. Nichtlineare Ausgleichsaufga-


ben 182

63. Simulink 183

7 Copyright
c G. Gramlich
It is probably fair to say that wirtschaftlicher Probleme.
one of the three or four most im-
portant developments in numeri- • Analyse, Auswertung und grasche Dar-
stellung von Datenmengen; Visualisie-
cal computation in the past decade
has been the emergence of Mat- rungen.

lab as the preferred language of • Wissenschaftliche und technische Dar-


tens of thousands of leading scien- stellungen.
tists and engineers.
Lloyd N. Trefethen , 1997. • Applikationsentwicklung mit Aufbau ei-
ner graschen Benutzerschnittstelle.

M
1. Einleitung In den siebziger Jahren wurde in den USA
eine intensive Aktivität zur Entwicklung
atlab 2 ist ein sehr leistungs- hochqualitativer Software gestartet, das
fähiges Softwaresystem für al- NATS-Projekt. 1976 lag als Ergebnis dieser
le Arten von Berechnungen. Bemühungen das Softwarepaket Eispack
Der Name Matlab kommt von zur Lösung algebraischer Eigenwertpro-
Mat Lab rix- oratory und verweist auf die bleme vor [25]. Im Jahr 1975 begannen
zwei Überlegungen, die bei der Entwicklung die Arbeiten an einem ezienten und
eine Rolle gespielt haben. Grundelemente portablen Softwarepaket zur Lösung linea-
sind Matrizen und ihre Manipulation, die rer Gleichungssysteme. Das Ergebnis war
in numerischen Verfahren optimal einge- das Softwarepaket Linpack [2]. Linpack
setzt werden können, gleichzeitig verfolgt und Eispack gewährleisteten lange Zeit
man über Laboratory den Gedanken der die zuverlässige und portable Lösung von
Entwicklung und Erweiterung. Matlab ist Problemen der Linearen Algebra. Um diese
ein interaktives Matrix-orientiertes Softwa- beiden Pakete leichter handhabbar zu ma-
resystem, in dem sich Probleme und Lösun- chen, wurde Matlab geschrieben. Damit
gen in vertrauter mathematischer Schreib- bestand auch die Möglichkeit, ausgereifte
weise darstellen lassen. Software ezient in der Lehre  zunächst

Typische Anwendungen sind: in der (Numerischen) Linearen Algebra,


später und jetzt in vielen anderen Berei-
• Numerische Berechnungen aller Art. chen  einzusetzen. Zur Geschichte von

• Entwicklung von Algorithmen.


Matlab http://www.mathworks.
siehe
com/company/newsletters/news_notes/
• Modellierung, Simulation und Entwick- clevescorner/dec04.html.
lung von Prototypen technischer und Der Einsatz von Matlab lohnt sich. Ne-
2
Matlab
R ist eingetragenes Warenzeichen von ben den sonst üblichen Lehrbuchbeispielen
The MathWork Inc. können kompliziertere und praxisbezogene

8 Copyright
c G. Gramlich
Aufgaben schon im Ausbildungsprozess be- eigene Programme beliebig zu erweitern.
arbeitet werden. Matlab erhöht die Leis- Dies kann dadurch geschehen, dass er Mat-
tungsfähigkeit, Probleme aus Wirtschaft, lab -Programme schreibt  sogenannte m-
Technik und Natur zu lösen, und erhöht Files  oder C/C++ Fortran
, bzw. Java-
die Motivation sich mit Mathematik zu be- Codes einbindet.
schäftigen. Die grundlegenden Datenelemente von
Der Umfang von Matlab ist in den letz- Matlab sind Matrizen bzw. mehrdimen-
ten Jahren stark angestiegen. Informatio- sionale Felder (Arrays), die nicht dimensio-
nen über die neuste Version und ande- niert werden müssen. Dadurch lassen sich
re Hinweise nden Sie unter http://www. viele technische Aufgabenstellungen, vor al-
mathworks.de. lem wenn sie mit Matrizen oder Vekto-

Die drei Hauptkomponenten von Matlab ren dargestellt werden können, mit einem

sind: Bruchteil des Zeitaufwandes lösen, der für


die Programmierung in einer skalaren, nicht

• Berechnung interaktiven Sprache wie Fortran oder


C/C++ erforderlich wäre.
• Visualisierung Im Verlauf mehrerer Jahre und durch

• Programmierung
Beiträge vieler Benutzer hat sich Matlab
zu seinem heutigen Umfang entwickelt. In

Berechnung. Matlab verfügt über eine


Hochschulen ist Matlab das bevorzugte
Lehrmittel für Grund- und Aufbaukurse
numerische  qualitativ hochwertige  Pro-
in Mathematik, Ingenieurswissenschaften,
grammsammlung. Dem Benutzer bleibt es
Naturwissenschaften und Wirtschafts-
dadurch erspart, Standardalgorithmen neu
wissenschaften. In der Industrie ndet
programmieren zu müssen. Er kann auf
grundlegende, gut ausgetestete Programme
Matlab immer mehr Zuwachs in For-
schung, Entwicklung, Datenauswertung
zurückgreifen und darauf aufbauend eigene
und Visualisierungen aller Art. Folgende
Algorithmen realisieren.
Visualisierung. Matlab verfügt über
Punkte tragen auÿerdem zum Erfolg von
Matlab bei:
moderne Visualisierungsmöglichkeiten. Da-
durch ist der Benutzer in der Lage, Daten
Syntax. Matlab besitzt eine benutzer-
freundliche, intuitive Syntax, die kurz und
auf verschiedene Art und Weise darzustel-
einfach ist. Sie lehnt sich stark an die
len.
Programmierung. Matlab verfügt über
mathematischen
einen umgekehrten
Schreibweisen
Prozess
an.
kann
Auch
man
eine eigene
Dadurch stellt
höhere
Matlab
Programmiersprache.
ein oenes System
beobachten. Matlab nimmt Einuÿ auf
mathematische Beschreibungen, siehe zum
dar. Der Benutzer hat somit die Möglich-
Matlab
keit, die Funktionalität von durch
Beispiel [3].

9 Copyright
c G. Gramlich
Toolboxen. In Form von sogenannten in Matlab zu realisieren, da dies meist
Toolboxen lässt sich der Funktionsum- sehr schnell möglich ist, bevor man den
fang von Matlab auf vielen Gebieten Algorithmus überträgt bzw. automatisch
erweitern. Unter anderem stehen folgen- übertragen lässt (Zum Beispiel mit Hilfe
de Toolboxen zur Extended
Verfügung: desMatlab C/C++ Compilers).
Symbolic Math Toolbox, Financial Toolbox, Handle Graphics (Graken bearbei-
Image Processing Toolbox, Neural Network ten). Matlab
Das -Graksystem umfasst
Toolbox, Optimization Toolbox, Partial Hochsprachenbefehle für die Darstellung
Dierential Equation Toolbox, Signal Pro- von zwei- und dreidimensionalen Daten-
cessing Toolbox, Spline Toolbox, Statistics strukturen, für die Bildverarbeitung, für
Toolbox und Wavelet Toolbox. Darüber Trickbewegungen und Präsentationsgra-
hinaus stellt Matlab eine Schnittstelle ken. Hierzu gehören auch einfache Befehle,
zur numerischen Programmbibliothek Nag mit denen sich Graken kundenspezisch
(http://www.nag.com) bereit. gestalten oder auch vollständig grasche
Matrizen. Grundlage von Matlab sind Benutzerschnittstellen für eigene Applika-
reelle und komplexe (einschlieÿlich dünn tionen aufbauen lassen.
besetzter) Matrizen. Die Einführung einer Bibliothek von mathematischen
Matrix als grundlegendes Datenelement Funktionen. Matlab verfügt über eine
hat sich nicht nur in der (numerischen) umfangreiche Sammlung von mathemati-
Mathematik, sondern auch in vielen ande- schen Algorithmen und Funktionen. Diese
ren rechnerorientierten Bereichen als sehr Funktionalität reicht von elementaren
vorteilhaft herausgestellt. Funktionen über Eigenwertberechnun-
Symbolisches Rechnen. Durch die gen bis hin zur schnellen Fourier -
(Extended) Symbolic Math Toolbox ist es Transformation.
innerhalb der Matlab -Umgebung mög- Application Program Interface (API).
lich, symbolisch zu rechnen. Dadurch kann Diese Anwenderschnittstelle ermöglicht die
der Benutzer symbolische und numerische Erstellung von Programmen in C/C++
Berechnungen miteinander verknüpfen. In undFortran , um sie dann in Matlab
Abschnitt 60 wird diese Toolbox genauer einzubinden.
beschrieben. Simulink. Simulink  ein Partnerpro-
Prototyprealisierung. In der Praxis gramm zuMatlab  ist ein blockorien-
kommt es vor, dass man  aus den ver- tiertes, interaktives System zur Simulation
schiedensten Gründen heraus  darauf linearer und nichtlinearer dynamischer
angewiesen ist, Algorithmen in anderen Systeme. Es handelt sich um ein mausge-
Programmiersprachen, wie zum Beispiel steuertes Grakprogramm, das ein Modell
C/C++ Fortran Pascal
, , oder Java , eines technischen oder physikalischen
zu implementieren. Aber auch dann ist es Systems, das als Blockdiagramm auf dem
vorteilhaft, einen Prototyp des Verfahrens Bildschirm darzustellen ist, unter dynami-

10 Copyright
c G. Gramlich
schen Einwirkungen nachbildet. Es kann gende Vorteile:

Matlab
für lineare, nichtlineare, zeitkontinuierliche
oder zeitdiskrete Prozesse eingesetzt wer-
• verfügt über eine benutzer-

den. Grundlage sind Matlab -Funktionen


freundliche und intuitive Syntax; die
Syntax ist kurz und einfach.
zur Lösung gewöhnlicher Dierenzialglei-
chungen (DGL-Löser, ODE-Löser).

Simu-
Die numerischen Programme zeichnen
Blocksets sind Ergänzungen zu
link
sich durch eine hohe Qualität aus.
, die weitere Bausteinbibliotheken für
Spezialanwendungen bereitstellen. • In einer eingebauten höheren Program-

Stateflow ist eine Erweiterung von Si- miersprache lassen sich Algorithmen

mulink zur Simulation ereignisorientierter schnell und leicht realisieren.

Modelle (Endliche Zustandsautomaten,


• Datenstrukturen erfordern minimale
Finite Sate Machines).
Aufmerksamkeit; zum Beispiel müssen
Real-time Workshop ist ein Programm,
Arrays nicht deklariert werrden, bevor
mit dem sich aus den Blockdiagrammen ein
man sie benutzt.
C-Code bilden läÿt, der von einer Vielzahl
von Echtzeitsystemen abgearbeitet werden • Ein interaktives Arbeiten erlaubt schnel-
kann. les experimentieren und leichte Fehlersu-
che.
Wir verwenden den Begri Funk-
tion im Folgenden doppeldeu- • Matlab verfügt über mächtige, benut-
zerfreundliche und qualitativ hochwärti-
tig. Zum Einen sind mathema-
ge Grak- und Visualisierungsmöglich-
tische Funktionen gemeint und
keiten.
zum Anderen handelt es sich
um Matlab -Funktionen, also um • Matlab m-Files sind für eine groÿe
Unterprogramme. Aus dem Zu- Klasse von Plattformen kompatibel.
sammenhang sollte aber immer
klar sein, um welchen Typ Funk- • Es bestehen Erweiterungsmöglichkeiten

tion es sich handelt. durch Toolboxen (Signalverarbeitung,


symbolische Rechnungen usw.).

2. Was macht den Erfolg von • Über das Internet sind viele m-Files von
anderen Benutzern zu bekommen.
Matlab aus?
Wir geben hier nur eine Einführung in
Matlab hat gegenüber der traditionel- die Mächtigkeit von Matlab . Für aus-
len numerischen Programmierung (wie zum führlichere Darstellungen bezüglich Mat-
Beispiel mit FORTRAN, C/C++ oder dem lab und Mathematik (numerisch und sym-
Aufruf von numerischen Bibliotheken) fol- bolisch) verweise ich Sie auf unser Buch [7]

11 Copyright
c G. Gramlich
bzw. auf [9] und [23] und auf die Matlab 6. Das help-Kommando
-
Dokumentationen [14, 15, 16, 17].
Das help-Kommando ist eine einfache Mög-
lichkeit, Hilfe über eine Matlab -Funktion
3. Starten und beenden im Kommandofenster zu erhalten. Hierzu
gibt man help und den Funktionsnamen,
Bei vielen kommandoorientierten Rechner- das Kommando oder das Symbol ein.
systemen wird Matlab durch das Kom-
Das folgende Beispiel zeigt, wie man sich In-
mando matlab gestartet. Oder  bei gra-
schen Oberächen  klickt man nach dem
formationen über die eingebaute Matlab -
sqrt
Start auf ein entsprechendes Matlab -Icon.
Funktion verschat.

Bei manchen Installationen ist es auch mög-


Matlab
lich, dass Sie aus einem Menü her-
>> help sqrt
aus aufrufen können. In jedem Fall soll-
Matlab
ten Sie den -Prompt  sehen (bzw.
SQRT Square root.
SQRT(X) is the square ...
EDU ). Mit dem Kommando quit verlassen
SieMatlab . Weitere Hinweise nden Sie
Matlab
in den -Handbüchern. Gegebenen- Auallend ist, dass in der Erklärung der
falls müssen Sie Ihren Systemmanager nach Name der sqrt-Funktion groÿ geschrieben
lokalen Installationseigenschaften befragen. ist. Dies dient lediglich dazu, diesen Na-
men vom übrigen Text abzusetzen. Der
richtige Name ist sqrt, klein geschrieben.
4. Matlab unterbrechen Matlab unterscheidet zwischen Groÿ- und
Kleinbuchstaben, deshalb liefert die Einga-
Mit ctrl-c können Sie Matlab jederzeit be help SQRT eine Fehlermeldung.
unterbrechen.

SQRT.m not found.


5. Lange Eingabezeilen
Matlab-eigene Funktionsnamen
Ist Ihre Eingabezeile lang, so können Sie bestehen stets aus Kleinbuchsta-
diese mit drei Punkten beenden ... und ben. Nur im Hilfetext werden sie
in der nächste Zeile fortfahren. groÿ geschrieben.

>> s = 1+1/2+1/3+1/4+1/5+...
Das help-Kommando ist nur geeignet,
1/6+1/7+1/8+1/9+1/10
wenn man den Namen der Funktion kennt,
s =
zu der man Hilfe sucht. Was aber, wenn
2.9290
man ihn nicht kennt?

12 Copyright
c G. Gramlich
Matlab
Alle -Funktionen sind in logische wird das Hilfe-Fenster geönet und Sie kön-
Gruppen (Themen) eingeteilt, und die nen sich Demos über Matlab und seine
Matlab -Verzeichnisstruktur basiert auf Toolboxen anschauen. Dort nden Sie in
dieser Einteilung. Gibt man help alleine Form von Video-Tutorials die neuen Fea-
ein, so wird diese Gruppierung angezeigt. tures der neusten Matlab -Version. Wei-
tere Info erhalten Sie mit doc demo (help
>> help demo) oder doc demos (help demos).
HELP topics

matlab\general - General ...


9. Das lookfor-Kommando
matlab\ops - Operators ...
Basierend auf einem Schlüsselwort kön-
matlab\lang - Programming ...
matlab\elmat - Elementary ... nen Sie mit dem lookfor-Kommando nach
Funktionen suchen. Dabei wird die ers-
usw.
te Zeile des help-Textes jeder Matlab -
Funktion zurückgegeben, die das entspre-

Mit help elfun (doc elfun) zum Beispiel chende Schlüsselwort enthält. Zum Beispiel

erhalten Sie eine Liste aller elementarer ma- gibt es in Matlab keine Funktion mit dem

thematische Funktionen in Matlab . Namen inverse. Somit ist die Antwort auf

>> help inverse


7. Das doc-Kommando
folgende:
Eine konfortablere Hilfe erhalten Sie mit
dem doc-Kommando. Beispielsweise er- inverse.m not found.
halten Sie mit doc sin eine - Html
Dokumentation über die sin-Funktion. Mit
Aber der Aufruf
doc elfun bekommen Sie eine Liste aller
elementaren mathematischen Funktionen,
>> lookfor inverse
die in Matlab realisiert sind.

liefert  in Abhängigkeit der installierten

8. Demos Toolboxen  folgendes:

Durch den Aufruf


INVHILB Inverse Hilbert matrix.
IPERMUTE Inverse permute array ...
ACOS Inverse cosine.
>> demo
ACOSH Inverse hyperbolic cosine.

13 Copyright
c G. Gramlich
ACOT Inverse cotangent.
ACOTH Inverse hyperbolic cotangent. >> lookfor command
ACSC Inverse cosecant.
ACSCH Inverse hyperbolic cosecant. nden Sie das Kommando clc. Damit wird
ASEC Inverse secant. das Kommandofenster gelöscht, nicht je-
ASECH Inverse hyperbolic secant. doch der Workspace. © . . . . . . . . . . . . . . . . . . ©
ASIN Inverse sine.
ASINH Inverse hyperbolic sine.
ATAN Inverse tangent.
ATAN2 Four quadrant inverse tangent.
10. Einfaches Rechnen
ATANH Inverse hyperbolic tangent.
Addition +, Subtraktion -, Multiplikation
ERFCINV Inverse complementary ...
*, Division / und Potenzieren  sind grund-
ERFINV Inverse error function.
legende Rechenoperationen. Hier ein paar
INV Matrix inverse.
Beispiele:
PINV Pseudoinverse.
IFFT Inverse discrete Fourier >> 3+4
transform. ans =
usw... 7
>> 9/3
Will man, dass alle help-Zeilen durchsucht ans =
werden, so muss man im Aufruf die Option 3
-all verwenden: >> 2^8
ans =
>> lookfor inverse -all 256

Falls Sie Hilfe zu einem Begri suchen


Matlab nennt das Ergebnis ans (kurz für
answer).
und den entsprechenden englischen Aus-
druck nicht kennen, verwenden Sie ein Wör- Geben Sie dem Ergebnis keinen
terbuch. Auf meiner Homepage nden Sie Variablennamen (siehe Abschnitt
einen Link zu einem Mathematischen Wör- 13), so wählt Matlab standard-
terbuch, das Ihnen weiterhelfen kann, siehe mäÿig (default) den Variablenna-
http://www.rz.fh-ulm.de/~gramlich. men ans.

Aufgabe 1 (lookfor-Kommando) Schlieÿen Sie die Eingabezeile mit einem


Mit welchem Befehl wird das Kommando- Strichpunkt (Semikolon) ab, so rechnet
fenster (command window) gelöscht? Matlab zwar, unterdrückt aber die Aus-
Lösung: Mit dem Aufruf gabe:

14 Copyright
c G. Gramlich
-14
>> 1+2; >> 1+2/3*4
ans =
Im Workspace können Sie erkennen, dass
3.6667
Matlab die Variableans angelegt hat, den >> 1+2/(3*4)
Wert der Variablen ans jedoch nicht aus- ans =
gibt.
1.1667

Ein Semikolon am Ende der Ein-


gabe unterdrückt die Bildschirm- Aufgabe 2 (Rechnen)
ausgabe! Ermitteln Sie das Ergebnis von

>> 3+4/5*6
11. Welche arithmetische
Operation hat Vorang? zunächst mit Bleistift und Papier und über-
Matlab
Mat-
prüfen Sie es dann mit .
Die arithmetischen Operationen von
Lösung: Mit den Vorrang-Regeln gilt: 3 +
lab genügen den gleichen Vorrangsregeln
4/5·6 = 3+(4/5)·6 = 3+(0.8·6) = 3+4.8 =
wie in vielen Computersprachen und Ta-
7.8. Hier die Bestätigung in Matlab
:
schenrechnern. Grob gesprochen gelten die
üblichen Rechenregeln Punktrechnung vor
>> 3+4/5*6
Strichrechnung. Die Regeln sind in Tabel-
ans =
le 1 aufgezeigt (Eine komplette Tabelle für
7.8000
alle Matlab -Operationen zeigt die Tabelle
2). Für Operatoren, die auf einer Ebene ste-
hen, ist der Vorrang von links nach rechts © ....................................... ©
geregelt. Klammern können immer verwen-
det werden, um den Vorrang entsprechend Aufgabe 3 (Rechnen)
abzuändern. Ermitteln Sie das Ergebnis von

>> 2^10/10
>> 48/3-3^2
ans =
102.4000
>> 2+3*4 zunächst mit Bleistift und Papier und über-
ans = prüfen Sie es dann mit Matlab .
14 Lösung: Mit den Vorrang-Regeln gilt:
>> -2-3*4 (48/3) − (32 ) = 16 − 9 = 7. Hier die Be-
ans = stätigung in Matlab :

15 Copyright
c G. Gramlich
>> 48/3-3^2
ans =
7

© ....................................... © Priorität Operator


1 (höchste) Transponieren (.')
Priorität Operator Potenzieren (.)
1 (höchste) Potenzieren () kongugiert complex (')
2 Unäres Plus (+) Matrix-Potenzieren()
unäres Minus (-) 2 Unäres Plus (+)
3 Multiplikation (*) unäres Minus (-)
Division (/) logische Negation ()
4 (niedrigste) Addition (+) 3 Multiplikation (.*)
Subtraktion (-) rechte Division (./)
linke Division (.\)
Tabelle 1: Vorrang-Tabelle
Matrix-Multiplikation (*)
rechte Matrix-Division (/)
linke Matrix-Division (\)

12. Zahlen und Formate 4 Addition (+)


Subtraktion (-)

Matlab verarbeitet Zahlen in der üblichen 5 Doppelpunktoperator (:)

Dezimalschreibweise, wobei wahlweise ein 6 Kleiner (<)

Dezimalpunkt und ein positives oder nega- kleiner oder gleich (<=)

tives Vorzeichen verwendet werden können. gröÿer (>)

In der wissenschaftlichen Notation bezeich- gröÿer oder gleich (>=)

net der Buchstabe e eine Skalierung um gleich (==)

Zehnerpotenzen. Zulässige Zahlen sind zum nicht gleich (=)

Beispiel: 7 Logisches und &( )


8 (niedrigste) Logisches oder | ( )

4 101 0.0001
Tabelle 2: Vorrang-Tabelle
9.84757 1.5e-12 8.997
3i -3.4j 4e3i

Alle Zahlen werden intern im double-


Format (Langformat) gemäÿ der Spezi-
kation durch die Gleitpunktnorm der Ie-

16 Copyright
c G. Gramlich
ee abgespeichert. Matlab s Zahlenausga- Aufgabe 4 (Variablennamen)
be folgt mehreren Regeln. Ist das Ergeb- Wieviel verschiedene Matlab Variablena-

nis ganzzahlig, so wird eine ganze Zahl men stehen in folgender Zeile?

ausgegeben. Wenn das Ergebnis eine reelle


Zahl ist, dann gibt Matlab das Resultat anna ANNA anNa aNna_anna
standardmäÿig auf 4 Dezimalen gerundet
aus. Ist das Matrixelement gröÿer als 103
oder kleiner als 10
−3 , so wird es in expo- Lösung: Vier verschiedene Variablenna-
men. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©
nentieller Form auf dem Bildschirm darge-
stellt. Sollen Zahlen in einem anderen For-
mat ausgegeben werden, so hilft das Mat-
lab -Kommando format, siehe doc format Achten Sie in Matlab
unbedingt
(help format). Die Tabelle 3 gibt mögliche auf Groÿ-und Kleinschreibung!
numerische Zahlenformate an.

Kommando Beispiel: pi Darüber hinaus gibt es vordenierte (vorbe-


legte) Variablen, siehe Tabelle 4. Achtung!
format short 3.1416
format long 3.14159265358979
format bank 3.14 Spezielle Variable Bedeutung
ans Resultat (Default)
Tabelle 3: Zahlenausgabe in Matlab computer Identiziert
eps Maschinengenauigkeit
i Imaginäre Einheit
Inf, inf Innity
13. Variablen und Konstanten j Imaginäre Einheit
NaN Not-a-Number
Ein Variablenamen muss mit einem Buch-
pi Kreiszahl π ≈ 3.14
staben beginnen und darf aus maximal 31
Buchstaben, Zahlen und Unterstrichen be- Tabelle 4: Spezielle Variablen
stehen. Ist ein Name länger, so sind nur die
ersten 31 Stellen signikant. Umlaute sind Sie können diese spezielle Variablen über-

nicht erlaubt! Erlaubt sind zum Beispiel schreiben; vermeiden Sie dies aber, wenn
immer möglich.
MeineVariable Anna x1 X3
z23c1 My_Var Vermeiden Sie das Überschreiben
spezieller Variablen!
Nicht erlaubt sind

Weitere Infos unter doc elmat (help


Meine-Variable 2Var $2 &x
elmat) bzw. doc lang (help lang).

17 Copyright
c G. Gramlich
14. Komplexe Zahlen
>> conj(1+3i)
Komplexe Zahlen können wie folgt eingege- ans =
ben werden: 1.0000 - 3.0000i

>> z1 = 3+4*j, z2 = 1-3i Den Absolutbetrag und Phasenwinkel einer


z1 = komplexen Zahl z kann mit abs bzw angle
3.0000 + 4.0000i berechnet werden.
z2 =
1.0000 - 3.0000i Aufgabe 5 (Komplexe Zahlen)
Gegeben ist die komplexe Zahl z = 4i/(1 +
i). Wie lautet die zu z konjugiert komple-
Wie Sie sehen kann die imaginäre Zahl i =
√ xe Zahl? Wie groÿ sind Absolutbetrag und
−1 als i oder j eingegeben werden, wobei
Phasenwinkel von z ?
das Multiplikationszeichen * wahlweise ver-
Lösung:
wendet werden kann. Die Operatoren +, -, *
und / sind bei Verwendung komplexer Zah-
len die komplexe Addition, komplexe Sub-
>> z = 4i/(1+i);
traktion, komplexe Multiplikation und die
>> conj(z)
komplexe Division. Hier zwei Beispiele:
ans =
2.0000 - 2.0000i
>> phi = angle(z)*180/pi
>> z1+z2
phi =
ans =
45
4.0000 + 1.0000i
>> a = abs(z)
>> z1*z2
a =
ans =
2.8284
15.0000 - 5.0000i

© ....................................... ©
Die Wurzel der komplexen Zahl 1 + 2i be-
rechnet man mit der Funktion sqrt
Aufgabe 6 (Komplexe Zahlen)
>> sqrt(1+2i) Finden Sie heraus, wie man den Real- und

ans = Imaginärteil einer komplexen Zahl berech-

1.2720 + 0.7862i net. Berechnen Sie dann den Real- und Ima-
ginärteil vonz = (3 + 2i)/(1 − i).
Lösung: Mit lookfor complex ndet man
Die konjugiert komplexe Zahl zu 1 + 3i ist die Funktionen real und imag. Damit gilt

18 Copyright
c G. Gramlich
den Abstand von 1.0 zur nächst gröÿeren
>> z = (3+2i)/(1-i); Gleitpunktzahl zurück.
>> real(z), imag(z)
ans = >> eps
0.5000 ans =
ans = 2.2204e-016
2.5000
Dieser Abstand ist 2−52 , also zweimal der
© ....................................... © relativen Rechengenauigkeit. Da Matlab
den Ieee -Standard realisiert, erzeugt je-
de Rechnung eine Gleitpunktzahl, womög-

15. Ieee-Arithmetik und double lich aber in einem besonderen Format. Ist
das Ergebnis einer Berechnung gröÿer als

Standardmäÿig ist in Matlab ist der realmax, dann tritt ein Overow ein und

IEEE-Standard 754 mit doppelt genau- das Resultat ist Inf, was für unendlich (in-
er Gleitpunktarithmetik realisiert. So wird nity) steht. Ist das Resultat kleiner als

jede Zahl defaultmäÿig in den Datentyp -realmin, so kommt -inf heraus.

double konvertiert. Jede Zahl vom Da-


tentyp double belegt einen Speicherplatz >> realmax
von 64 Bits. Von Null verschiedene positi- ans =
ve Zahlen liegen daher ungefähr zwischen 1.7977e+308
10−308 und 10+308 und die relative Rechen- >> -1.1*realmax
genauigkeit (unit roundo ) ist 2−53 ≈ 1.11· ans =
10−16 . Das wesentliche Merkmal der relati- -Inf
ven Rechengenauigkeit ist, dass sie eine re- >> 1.2*realmax
lative Fehlerschranke für das Konvertieren ans =
einer reellen Zahl in eine Gleitpunktdarstel- Inf
lung und auch eine Schranke für den rela-
tiven Fehler darstellt, der entsteht, wenn
Ist eine Rechnung mathematisch nicht de-
man zwei Gleitpunktzahlen addiert, sub-
niert, so ist das Resultat NaN, was für Not a
trahiert, multipliziert oder dividiert, oder
Number steht. Die Ausdrücke 0/0, inf/inf
die Quadratwurzel aus einer Gleitpunktzahl
0*inf
zieht. Grob gesagt: Matlab speichert und
und sind von dieser Art.

führt elementare Rechenoperationen mit ei- >> 0/0


ner Genauigkeit von ungefähr 16 Dezimal- Warning: Divide by zero.
stellen durch. ans =
Die Funktion eps (machine precision) gibt NaN

19 Copyright
c G. Gramlich
>> inf/inf Die Funktion computer gibt den Computer-
ans = Typ zurück, auf dem Matlab läuft. Der
NaN Rechner auf dem diese Zeilen und die mat-
>> 0*inf lab -Codes geschrieben werden, produziert
ans = folgende Ausgabe
NaN
>> computer
Hat man einmal ein NaN erzeugt, so panzt ans =
sich dies im Laufe der Rechnung fort. PCWIN

>> 3+NaN
ans =
NaN
16. Nicht double-Datentypen
>> NaN-NaN
ans =
Auÿer double werden in Matlab auch
noch andere Datentypen zur Verfügung ge-
NaN
stellt, um Zahlen zu speichern und mit die-
>> 0*NaN
sen zu rechnen. Diese sind
ans =
NaN • single

Die Funktion realmin gibt die kleinste po- • int8 und uint8
sitive normalisierte Gleitpunktzahl zurück.
• int16 und uint16
Jede Rechnung, deren Ergebnis kleiner als
realmin ist, erzeugt einen Underow und • int32 und uint32
wird auf Null gesetzt, wenn sie kleiner als
eps*realmin ist oder erzeugt eine nichtnor- Diese Datentypen sind insbesondere dann

male Zahl (subnormal number) mit führen- vorteilhaft, wenn Speicherplatz gespart

dem Bit 0 in der Mantisse. werden soll, also zum Beispiel wenn Bilder
gespeichert und verarbeitet werden sollen
>> realmin (Bildverarbeitung).
ans =
Ganzzahlige Datentypen können ganze
2.2251e-308
Zahlen in einem bestimmten Bereich spei-
>> realmin*eps
chern. Zum Beispiel ist uint8 ein ganzzah-
ans =
liger Datentyp der im Speicher acht Bits be-
4.9407e-324
nötigt, um Zahlen im Bereich von 0 bis 255
>> realmin*eps/2
zu spreichern; 28 = 256. Die Tabelle 5 zeigt
ans =
die ganzzahligen Datentypen mit Speicher-
0
bedarf und Wertebereich. Die folgende An-

20 Copyright
c G. Gramlich
Klasse Speicherbedarf Wertebereich Die Rechnungen zeigen mehrere Eigen-
uint8 8 Bit 0 bis 28 − 1 schaften. Das Ergebnis ist stets vom Daten-
int8 8 Bit −27 bis 27 − 1 typ uint8 auch dann, wenn eine double-
uint16 16 Bit 0 bis 216 − 1 Zahl hinzuaddiert wird. Diese wird zuvor
int16 16 Bit −215 bis 215 − 1 gerundet. Wird die gröÿte Zahl 255 über-
int32 32 Bit −231 bis 231 − 1 schritten, so wird das Ergebnis gleich dieser
uint32 32 Bit 0 bis 232 − 1 gröÿten Zahl Zahl gesetzt. Analog verhält
es sich, wenn das Ergebnis kleiner als Null
Tabelle 5: Ganzzahlige Datentypen
ist.

weisung erzeugt die Variable x vom Daten- Aufgabe 7 (int8-Rechnungen)


typ uint8 und ordnet ihr die Zahl 7 zu. Finden Sie heraus, wie eine double-Zahl auf
den Datentyp int8 gerundet wird.
>> x = uint8(7) Lösung: Die Rechnungen
x =
7 >> int8(3.6)
ans =
Hier ein paar Rechnungen: 4
>> int8(3.5)
>> x+4 ans =
ans = 4
11 >> int8(3.4)
>> x+pi ans =
ans = 3
10 >> int8(-3.5)
>> x+253 ans =
ans = -4
255
>> x+254
ans =
zeigen die Antwort. Matlab rundet auf die
nächste ganze Zahl. Liegt die Zahl in der
255
Mitte, so wird aufgerundet, falls die Zahl
>> x-8
positiv und abgerundet, falls die Zahl ne-
ans =
gativ ist. ©..............................©
0
>> x-9
Mit den Funktionen intmax und intmin
ans =
können Sie die gröÿte bzw. kleinste Zahl des
0
jeweiligen Datentyps ermitteln.

21 Copyright
c G. Gramlich
17. Eine Sitzung aufzeichnen
>> intmax('int32')
ans = Das Kommando
2147483647
>> diary MeineSitzung

Um eine Zahl mit dem Datentyp single


sorgt dafür, dass der nachfolgende
zu speichern, braucht man nur halb so viel
Bildschirmtext komplett in der Datei
Speicher wie mit dem Datentyp double.
Dies zeigen die folgenden Zeilen.
MeineSitzung aufgezeichnet wird. Die
Aufzeichung können Sie anhalten, wenn
Sie diary off eingeben. MeineSitzung ist
>> a = single(5); nur eine Beispieldatei; sie können selbst-
>> b = 5; verständlich jeden zulässigen Dateinamen
>> whos angeben.
Name Size Bytes Class

a 1x1 4 single array 18. Vektoren


b 1x1 8 double array
Vektoren (Zeilen- oder Spaltenvektoren)
sind spezielle Matrizen. Zeilenvektoren sind
single-Zahlen können mit double-Zahlen
(1, n)-Matrizen und Spaltenvektoren sind
verknüpft werden. Das Ergebnis ist single.
(m, 1)-Matrizen. Aussagen über Matrizen
sind demnach auch für Vektoren inter-
>> single(4.1)+double(3) essant. Wir verweisen auf Abschnitt 20;
ans = dort werden Matrizen und somit auch Vek-
7.1000 toren ausführlich behandelt. Da Matrizen
>> whos (und somit Vektoren) grundlegende Bau-
Name Size Bytes Class steine von Matlab sind, empehlt sich, be-
reits hier etwas darüber zu sagen.
ans 1x1 4 single array
Nehmen wir an, wir möchten Werte von

dem Quadratwurzelterm x berechnen, sa-
Ganzahlige und single- gen wir, für die Zahlen x = 0, 2, 4, 6, 8, 10.
Datentypen können nicht ver- Hier kommt uns Matlab sehr entgegen.

knüpft werden. Wir fassen die x-Werte zu einem Zeilenvek-


tor (eindimesionales Array, Liste) zusam-
men:
Siehe doc datatypes, [16], [19] und Ab-
schnitt 66 für weitere Informationen. >> x = [0 2 4 6 8]

22 Copyright
c G. Gramlich
x = Aufgabe 8 (Vektoren erzeugen)
0 2 4 6 8 Erzeugen Sie einen Zeilenvektor mit der ers-
ten Koordinate 29 und der letzten 1, wobei
sich die Koodinaten absteigend um 2 unter-
Vektoren werden in eckigen Klammern scheiden sollen.
(brackets) eingegeben. Die einzelenen Ele- Lösung: Dies kann man wie folgt erreichen:
mente (Koordinaten) des Vektors sind da-
bei durch Leerzeichen oder Kommas zu
>> x = 29:-2:0
trennen. Die Funktionswerte für die einzel-
x =
nen Werte von x müssen nun nicht einzeln
Columns 1 through 11
berechnet werden, sondern können alle auf
29 27 25 usw.
einmal mit
Columns 12 through 15
7 5 3 1
>> y = sqrt(x)
y =
0 1.4142 2.0000 2.4495 © ....................................... ©
2.8284
Ist die Schrittweite gleich 1, so kann man

Matlab
die Angabe der Schrittweite weglassen.
erhalten werden. Die -Funktion Für weiter Informationen zu diesem Dop-
sqrt angewendet auf einen Vektor x gibt pelpunktoperator, siehe doc colon (help
nämlich die Anweisung: Nimm von jedem colon). Siehe auch doc ops (help ops).
Element von x die Wurzel und schreib das
Ergebnis als entsprechendes Element ei- Aufgabe 9 (Vektoren erzeugen)
nes neuen Vektors (hier y genannt). Man Geben Sie die Vektoren a und b mit den
spricht von vektorielle Auswertung oder all- Elementen −10, −8, . . . , 10 und 10, 9, 8, . . .
gemein: In Matlab kann man vektoriell mit kurzen Anweisungen ein.
programmieren! Diese einfache Art, einen Lösung: Das geht wie folgt:
Befehl (hier das Wurzelziehen) elementwei-
se anzuwenden, ist eine groÿe Stärke von >> a = -10:2:10; b = 10:-1:0;
Matlab . Sie ermöglicht eine rasche Verar-
beitung von groÿen Datenmengen. Der Vek-
tor x kann kürzer eingegeben werden: x = © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©
0:2:8. Die Schreibweise bedeutet: Beginne
mit 0 und zähle 2 dazu, dann zähle wieder Aufgabe 10 (Vektoren erzeugen)
2 dazu, usw. bis die Grenze 8 erreicht ist. Erzeugen Sie einen Vektor y, der die Funk-
Diese Anweisung ist bei der Eingabe von tionswerte des natürlichen Logarithmus an
Vektoren mit vielen Elementen sehr nütz- den Stellen 1, 3, 5, 7 enthält. Was ist y(1)?
lich. Lösung: Das geht wie folgt:

23 Copyright
c G. Gramlich
Allgemein ist x = logspace(a,b,n) äqui-
>> x = 1:2:7; valent zu xk = 10
k−1
a+(b−a)· n−1
, wobei k =
>> y = log(x) 1, . . . , n und a, b reelle Zahlen sind.
y =
0 1.0986 1.6094 1.9459
>> x = logspace(-2,2,4)
x =
y(1) ist die erste Koordinate des Vektors y, 0.0100 0.2154 4.6416 100.0000
alsoy(1)=0. © . . . . . . . . . . . . . . . . . . . . . . . . . . © >> x = logspace(1,3,3)
x =
Mit der Funktion linspace können Vekto-
10 100 1000
ren erzeugt werden, indem man den Wert
der ersten, letzten, sowie die Anzahl der
Komponenten (drittes Argument im Auf- Zusammenfassend gilt: Vektoren können
ruf ) vorgibt. Mit dem Doppelpunktopera- auf drei Arten erzeugt werden:
tor : ist es dagegen möglich, die Schrittwei-
te direkt anzugeben, nicht aber die Anzahl • Wir geben die Koordinaten explizit ein.
der Koordinaten. Sind a und b reelle Zahlen,
dann erzeugt x = linspace(a,b,n) einen • Wir verwenden eingebaute - Matlab
Zeilenvektor x der Länge n mit den Ko- Operatoren oder Funktionen, wie zum
Beispiel: : oder linspace.
k−1
ordinaten xk = a + (b − a) ·
n−1 , wobei
k = 1, . . . , n ist.
• Wir lesen einen entsprechenden Datenle
>> x = linspace(1,2,3) ein, siehe Abschnitt 32.
x =
1.0000 1.5000 2.0000
>> x = linspace(10,40,4) 19. Vektoroperationen
x =
10 20 30 40 Vektoren sind spezielle Matrizen. Für Vek-
>> x = linspace(1,1.2,3) toroperationen verweise ich Sie daher auf
x = Abschnitt 21.
1.0000 1.1000 1.2000
>> x = linspace(0,1,3)
x = 20. Matrizen
0 0.5000 1.0000
Ein rechteckiges Zahlenschema mit m Zei-
Mit der Funktion logspace ist es mög- len und n Spalten heiÿt (m, n)-Matrix. Es
lich, einen Vektor zu erzeugen, dessen Kom- ist üblich, eine Matrix in eckige oder runde
ponenten logarithmischen Abstand haben. Klammern zu setzen; wir wählen eckige. Ist

24 Copyright
c G. Gramlich
m = 2 und n = 3, so liegt eine (2, 3)-Matrix
vor, zum Beispiel >> x = 2:6
 √  x =
1 2 −2
A= . 2 3 4 5 6
7 −3 π
Die Matrix A können wir nun Zeile für Zeile
wie folgt in Matlab eingeben
Die Schrittweite muss nicht notwendiger-
weise Eins sein. Im folgenden Beispiel ist

>> A = [1 sqrt(2) -2; 7 -3 pi] die Schrittweite 0.2:


A =
1.0000 1.4142 -2.0000 >> x = 1.3:0.2:1.8
7.0000 -3.0000 3.1416 x =
1.3000 1.5000 1.7000
Die Zeilen werden durch ein Semikolon und
die Spalten durch ein Leerzeichen getrennt. Mit der Funktion size können Sie stets die
Spalten können auch durch ein Komma ge- Gröÿe einer Matrix bestimmen.
trennt werden. Besteht eine Matrix nur aus
einer Zeile, so liegt eine Zeilenmatrix bzw. >> size(A)
ein Zeilenvektor vor. Analog spricht man ans =
von einer Spaltenmatrix bzw. von einem 2 3
Spaltenvektor, wenn die Matrix nur eine
Spalte hat. Eine Zeilenmatrix hat die Gröÿe Macht man bei einer Matrix A aus den
(1, n) und eine Spaltenmatrix (m, 1). Zeilen Spalten und aus den Spalten Zeile,

Will man nun einzelne Elemente der Ma- so entsteht die transponierte Matrix AT .
trix A ändern, so kann dies auf zwei Arten In Matlab erreicht man dies mit dem '-

geschehen. Die Anweisung A(1,3) = 5 än- Operator.

dert zum Beispiel das Elemente a13 = −2


der Matrix A zu a13 = 5 ab. Eine zweite >> A = [1 2 3; 4 5 6], A'
Möglichkeit dies zu tun besteht darin, den A =
Workspace-Browser zu verwenden und das 1 2 3
Symbol für die Matrix A anzuklicken. Der 4 5 6
Array-Editor wird geönet und Sie können ans =
die Elemente interaktiv ändern. 1 4
Besteht eine Matrix nur aus einer Zeile, so
2 5
liegt eine Zeilenmatrix bzw. ein Zeilenvek-
3 6
tor vor. Einen Zeilenvektor mit Zahlen glei-
chen Abstands kann man zum Beispiel wie Nützliche und häug verwendete Matrizen
folgt erzeugen stellt Matlab als eingebaute Funktionen

25 Copyright
c G. Gramlich
zur Verfügung; man muss nur die Gröÿe an- 1 0 0
geben. Die Funktion ones erzeugt eine Ma- 0 2 0
trix mit lauter Einsen. 0 0 3

>> ones(2,3)
ans = Ist A eine (m, n)-Matrix und x ein n-
1 1 1 Spaltenvektor, so ist das Matrix-Vektor-

1 1 1 Produkt Ax deniert.

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


Die Nullmatrix wird mit der Funktion
>> A*x
zeros erzeugt.
ans =
1
>> Z1 = zeros(3,2)
11
Z1 =
0 0
0 0 Die Operatoren + und - können eingesetzt

0 0 werden, um Matrizen miteinander zu addie-

>> Z2 = zeros(size(A)) ren bzw. zu subtrahieren.

Z2 =
0 0 0 Skalare sind (1, 1)-Matrizen.
0 0 0
Mit doc elmat (help elmat) erhalten Sie
viele Infos rund um Matrizen; unter doc
Eine (n, n)-Matrix heiÿt quadratische Ma-
ops (help ops) sind die Operatoren zu n-
trix; dann genügt ein Argument, um zum
den.
Beispiel die (3, 3)-Einheitsmatrix mit der
Funktion eye zu erzeugen. Aufgabe 11 (Diagonalmatrizen)
Erzeugen Sie eine Diagonalmatrix mit 1, 2,
>> eye(3) 3, 4 und 5 auf der Diagonalen!
ans = Lösung:
1 0 0
0 1 0 >> diag([1 2 3 4 5])
0 0 1 ans =
1 0 0 0 0
Diagonalmatrizen werden mit der Funktion
0 2 0 0 0
diag erzeugt.
0 0 3 0 0
0 0 0 4 0
>> D = diag([1 2 3]) 0 0 0 0 5
D =

26 Copyright
c G. Gramlich
Aufgabe 12 (Dreiecksmatrizen) Aufgabe 15 (Matrizen)
Erzeugen Sie eine 6 × 6 obere (untere) Drei- Gegeben sei die folgende Matrix A:
ecksmatrix mit Zufallszahlen zwischen 0
 
und 1! 5.5 0.4 3.1
Lösung: 
 9.4 5.5 3.3 

A= −0.3 4.6 −4.3 
.
>> triu(rand(6))

 0.4 −4.6 9.0 
5.0 5.5 7.7
© ....................................... © Was ist A(:,2), A(3,:), A(4:5,2:3)?
Überprüfen Sie Ihr Resultat in Matlab .
Aufgabe 13 (Symmetrische Matrizen) Lösung: A(:,2) ist die zweite Spalte
Erzeugen Sie eine 10×10 symmetrische Ma- und A(3,:) ist die dritte Zeile von A.
trixS mit Zufallswerten zwischen 0 und 8! A(4:5,2:3) ist die Untermatrix
Lösung:  
−4.6 9.0
.
>> A = 4*rand(8); 5.5 7.7
>> A+A';
© ....................................... ©

© ....................................... ©
Aufgabe 16 (Matrizen, Vektoren)
Geben Sie jeweils den Vektor c an, nach-
Aufgabe 14 (Matrizen)
dem Sie die folgenden Operationen ausge-
Wir betrachten die folgende Matrix A:
führt haben. Überprüfen Sie Ihre Ergebnis-

5.5 0.4 3.1
 se in Matlab .

 9.4 5.5 3.3 



A= −0.3

4.6 −4.3  a = [2 -1 5 0];
 . b = [3 2 -1 4];
 0.4 −4.6 9.0 
5.0 5.5 7.7

Geben Sie die Ordnung (Gröÿe) dieser Ma-


(a) c = b+a-3;
trix an! Wie kann man in Matlab die Grö-
(b) c = a./b;
ÿe von A bestimmen? Geben Sie alle Indi-
zes an, deren Matrixelemente 5.5 sind. (c) c = 2*a+a.b;
Lösung: Die Ordnung der Matrix A ist
(5, 3). Mit der Funktion size kann man die (d) c = 2.b+a;
Ordnung in Matlab bestimmen. Die Indi-
(e) c = 2*b/3.*a;
zes sind: 1, 1, 2, 2 und 5, 2. © . . . . . . . . . . . . ©

27 Copyright
c G. Gramlich
Aufgabe 17 (Matrizen) 21. Matrizenoperationen
Erzeugen Sie mit der Matlab -Funktion
rand eine 5 × 5-Zufallsmatrix A. Welches Beachten Sie im folgenden stets, dass Vek-
sind die Werte der folgenden Ausdrücke? toren und Skalare spezielle Matrizen sind!
Überlegen Sie sich die Resultate, bevor Sie
Die Tabelle 6 zeigt Matrizenoperationen in
die Rechnung am Computer durchführen.
Matlab .

A(2,:) A(:,1) Symbol Operation


A(:,5) A(1,1:2:5) + Addition
A([1,5]) A(4:-1:1,5:-1:1) - Subtraktion
* Multiplikation
 Potenzieren
Aufgabe 18 (Matrizen)
Gegeben seien die folgenden Matrizen:
Tabelle 6: Matrizenoperationen in Mat-

0 −1 0 3
 lab
A= 4 3 5 0 
Wenn Sie zwei Matrizen multiplizieren, so
1 2 3 0
geht geht das natürlich nur dann, wenn die

und Mulitplikation deniert ist, das heiÿt die


 
1 3 5 0 Matrizen die entsprechenden Gröÿen ha-
 3 6 9 12  ben.
B=
 4 3
.
2 1 
1 2 3 4 >> A = [1 2 4; 2 6 0];
B = [4 1 4 3; 0 -1 3 1; ...
Bestimmen Sie die Rückgabewerte und
2 7 5 2];
überprüfen Sie diese dann in Matlab .
A*B
ans =
(a) rot90(B) 12 27 30 13
8 -4 26 12
(b) rot90(A,3)

(c) fliplr(A) Analog für die anderen Operationen.


Manchmal ist es notwendig, Matrizen ele-
(d) reshape(A,4,3)
mentweise zu multiplizieren ( Hadamard -

(e) triu(B) Produkt), dann hilt der .*-Operator.

(f ) diag(rot90(B)) >> C = [1 2; 3 4];


>> D = [5 6; 7 8];

28 Copyright
c G. Gramlich
>> C.*D -5 25 1 -5 0 0
ans = 10 -10 -2 2 0 0
5 12
21 32
© ....................................... ©

Andere Operatoren, die elementweise arbei-


Aufgabe 20 (Matrizenoperationen)
ten, sind ./ (rechte Division), .\ (rechte
Division) und . (Potenzieren).
Es seien A, B , C und D nachfolgend de-
nierte Matrizen.
Weitere Infos mit doc ops (help ops).
   
1 3 −1 2
Aufgabe 19 (Direktes Produkt)
Berechnen Sie in Matlab das direkte Pro-
A= 2 4 
3 1
B =  4 −2 
7 −1
dukt von
   
1 2 3 1 5
C=
A= 3 1 −2  −5 3
5 −1 0
und
 
und
4 3 −2
 
1 3 D= 1 0 5 .
B =  −1 5 . 2 −1 6
2 −2
Berechnen Sie zunächst per Hand folgen-
de Matrizenalgebra. Geben Sie die Matri-
Lösung: Das direkte Produkt ist auch un-
ter dem Namen Kronecker -Produkt be-
zen dann in Matlab ein und vergleichen
Sie die jeweiligen Resultate.
kannt und kann mit der Funktion kron be-
rechnet werden.
(a) A+B
>> A = [1 2 3; 3 1 -2; 5 -1 0];
>> B = [1 3; -1 5; 2 -2]; (b) B+C
>> kron(A,B)
(c) DA
ans =
1 3 2 6 3 9 (d) 2A − 3B
-1 5 -2 10 -3 15
2 -2 4 -4 6 -6 (e) AT
3 9 1 3 -2 -6
-3 15 -1 5 2 -10 (f ) C2
6 -6 2 -2 -4 4
5 15 -1 -3 0 0 Lösung:

29 Copyright
c G. Gramlich
len. Trotzdem sind einige davon falsch. Be-
(a) >> A+B nutzen Sie Matlab , um die falschen her-
ans = auszunden, und geben Sie für jede falsche
0 5 Regel ein Gegenbeispiel.
6 2
10 0 (a) A+B =B+A

(b) AB = BA
(b) B+C ist nicht deniert.
(c) Falls AB = O ist, dann ist A = O
(c) >> D*A oder B = O.
ans =
4 22 (d) Falls A2 = O ist, dann ist A = O.
16 8 (e) (A + B)2 = A2 + 2AB + B 2
18 8
(f ) (A − B)(A + B) = A2 − B 2
(d) >> 2*A-3*B (g) A(B + C) = AB + AC
ans =
5 0 (h) (A + B)C = CA + CB
-8 14
(i) (AB)2 = A2 B 2
-15 5

Aufgabe 22 (Matrizenoperationen)
>> A'
(e)
ans = Warum gibt es in Matlab keinen .+-
Operator?
1 2 3
3 4 1 Lösung: Die Matrizenaddition ist bereits
elementweise deniert. © ................ ©

(f ) >> C^2 Aufgabe 23 (Matrizenoperationen)


ans = Es seien zwei Vektoren a und b wie folgt
-24 20 deniert:
-20 -16
a = [2,4,6] b = [1,2,3]'
© ....................................... ©
Führen Sie die folgenden Matlab -
Aufgabe 21 (Matrizenoperationen) Operationen durch. Welche sind deniert
Die nachfolgenden Regeln der Matrizenal- und welche nicht? Erklären Sie! Was sind
gebra sehen so aus wie die der reellen Zah- die Resultate?

30 Copyright
c G. Gramlich
Aufgabe 25 (Rundungsfunktionen)
a + b a' + b Berechnen Sie die folgenden Ausdrücke per

a + b' a' + b' Hand und überprüfen Sie Ihre Ergebnisse

a - b a' - b mit Matlab .

a - b' a' - b'


(a) round(-2.6)
a * b a' * b
a * b' a' * b' (b) fix(-2.6)
a \ b a' \ b
a \ b' a' \ b' (c) floor(-2.6)
a .* b a' .* b (d) ceil(-2.6)
a .* b' a' .* b'
a .\ b a' .\ b (e) floor(ceil(10.8))
a .\ b' a' .\ b'
Zeichnen Sie die Funktionen im Intervall
[−3, 3]!
Lösung:
Aufgabe 24 (Matrizenoperationen)
Was ist 00 in Matlab ?
>> round(-2.6), fix(-2.6),
Lösung: Es ist 00 = 1 in Matlab . ©. . . .© ans =
-3
ans =
22. Rundungsfunktionen -2
>> floor(-2.6), ceil(-2.6),
In Matlab gibt es die folgenden Funktio-
ans =
-3
nen:
ans =
-2
ceil(x) Rundet x zur nächsten ganzen
>> floor(ceil(-2.6))
Zahl auf (Runden nach Unendlich).
ans =
fix(x) Wählt von x den ganzzahligen An- -2
teil (Runden nach Null).
Wir zeichnen die Funktion round.
floor(x) Rundet x zur nächsten ganzen
Zahl ab (Runden nach minus Unend- >> x = linspace(-3,3,1000);
lich). >> y = round(x);
>> plot(x,y)
round(x) Rundet x zur nächsten ganzen
Zahl. © ....................................... ©

31 Copyright
c G. Gramlich
23. Weitere Funktionen 3.0000 3.3333 3.0000
>> median(x)
In den nachfolgenden Übungsaufgaben stel- ans =
len wir weitere Funktionen vor. 1.5000
>> cumprod(A)
Aufgabe 26 (Funktionen)
ans =
Gegeben seien die Vektoren
1 3 7
2 24 28
x = [0 3 -2 7]; 12 -24 -56
y = [3 -1 5 7]; >> sort(2*x+y)
ans =
und die Matrix
1 3 5 21
>> sort(A)
A = [1 3 7; 2 8 4; 6 -1 -2]; ans =
1 -1 -2
2 3 4
Bestimmen Sie folgende Ausdrücke, zu-
6 8 7
nächst mit Bleistift und Papier, danach mit
Matlab .
© ....................................... ©
max(x); min(A);
min(x,y); mean(A); Aufgabe 27 ( Matlab-Funktionen)
median(x); cumprod(A); Bestimmen Sie die Werte der folgenden
sort(2*x+y); sort(A); Ausdrücke. Überprüfen Sie Ihre Ergebnis-
se dann in Matlab .

Lösung:
 
Es ist 1 0 4
B= 0 0 3 
>> max(x) 8 7 0
ans =
7 (a) any(B)
>> min(A)
(b) find(B)
ans =
1 -1 -2 (c) all(any(B))
>> min(x,y)
ans = (d) any(all(B))
0 -1 -2 7 (e) finite(B(:,3))
>> mean(A)
ans = (f ) any(B(1:2,1:3))

32 Copyright
c G. Gramlich
Lösung: mensionalen Arrays. Die folgenden Funk-
tionen sind dabei von besonderem Interesse:
>> any(B) circshift, fliplr flipud, reshape, cat,
ans = horzcat, vertcat, blkdiag und repmat.
1 1 1
>> find(B)
ans = 24.1. Zeile löschen
1
3 Löschen Sie von der Matrix

6  
7 1 2 3
8 A= 4 5 6 
>> all(any(B)) 7 8 9
ans =
die zweite Zeile.
1
>> any(all(B))
ans = >> A = [1 2 3; 4 5 6; 7 8 9];
0 >> A(2,:) = []
>> finite(B(:,3)) A =
ans = 1 2 3
1 7 8 9
1
1
>> any(B(1:2,1:3)) 24.2. Gröÿtes Element bestimmen
ans =
1 0 1 Bestimmen Sie von der Matrix

 
1 2 3
© ....................................... ©
A= 4 5 6 
7 8 9

24. Zweidimensionale Arrays das gröÿte Element.

Wir zeigen ein paar nützliche Oprationen


>> A = [1 2 3; 4 5 6; 7 8 9];
mit zweidimensionalen Arrays (Matrizen).
>> max(max(A))
Dabei stehen nicht mathematische Opera-
ans =
tionen im Vordergrund, sondern das daten-
9
technische, eziente Arbeiten mit zweidi-

33 Copyright
c G. Gramlich
24.3. Aus Matrizen Vektoren machen 5
6
Machen Sie aus der Matrix 7

1 2 3
 8
A= 4 5 6  9
7 8 9

einen spaltenweise einen Spaltenvektor. 24.4. Zeilen-/Spaltentausch


Vertauschen Sie von der Matrix
>> A = [1 2 3; 4 5 6; 7 8 9];
>> s = A(:) 
1 2 3

s = A= 4 5 6 
1 7 8 9
4
7 die letzte mit der ersten Zeile.
2
5 >> A = [1 2 3; 4 5 6; 7 8 9];
8 >> circshift(A,1)
3 ans =
6 7 8 9
9 1 2 3
4 5 6
Machen Sie aus der Matrix
  Spiegeln Sie von der Matrix
1 2 3
A= 4 5 6  
1 2 3

7 8 9 A= 4 5 6 
7 8 9
einen zeilenweise einen Spaltenvektor.

die Spalten.
>> A = [1 2 3; 4 5 6; 7 8 9];
>> AT = A';
>> A = [1 2 3; 4 5 6; 7 8 9];
>> s = AT(:)
>> fliplr(A)
s =
ans =
1
3 2 1
2
6 5 4
3
9 8 7
4

34 Copyright
c G. Gramlich
24.5. Ordnungen ändern Koordinaten) berechnen, so braucht man
in Matlab keine Schleife, sondern kann
Bilden Sie von der Matrix gleichzeitig alle hundert y -Werte ausrech-

1 2 3
 nen, indem man den .-Operator verwen-
det, der die Potenzierung zweier Matrizen
A= 4 5 6 

(Vektoren) elementweise durchführt. Hier
7 8 9
ein Beispiel mit der gleichen Funktionsglei-

eine neue (2, 4)-Matrix. Das geht nur wenn chung y = x2 wie oben:

die Eingangsmatrix genau so viele Elemen-


te hat wie die Ausgangsmatrix. Ist dies der >> x = linspace(0,3,100);
Fall, so hilft die Funktion reshape. >> y = x.^2;

24.6. Blockmatrizen In der ersten Anweisung werden hundert x-


Werte (ein Vektor mit hundert Koordina-
Die Funktionen cat, horzcat, vertcat, ten) erzeugt (hundert äquidistante Punk-
blkdiag und repmat erlauben es, Matrizen te im Intervall [0, 3]) und in der zweiten
zu Blockmatrizen zusammen zu fügen. Anweisung wird der Vektor y mit hundert
Koordinaten generiert, der die entsprechen-
den Funktionswerte enthält. Diese Vorge-
25. Vektorieller Programmierung hensweise hat den Vorteil, dass man auf
Schleifen verzichten kann und auÿerdem
Eine der groÿen Vorzüge von Matlab be- einen übersichtlicheren Programmcode er-
steht darin, dass man Ausdrücke vektoriell hält. Eingebaute Matlab -Funktionen er-
programmieren und so auf Schleifen weit- lauben als Eingabeparameter fast immer
gehend verzichten kann. Was ist damit ge- Vektoren. Daher gilt:
meint? Wir zeigen die Idee am Besten an ei-
nem einfachen Beispiel. Will man zum Bei- Programmieren Sie vektoriell,
spiel den Funktionsterm y = x2 im Punkt wenn immer dies möglich ist!
x = 1.4 auswerten, so geht das wie folgt
Der Befehl vectorize kann in der ein
>> x = 1.4; oder anderen Situation hilfreich sein, siehe
>> y = x^2; doc vectorize (help vectorize). In Ab-
schnitt 41 gehen wir auf diese Thematik
nochmals ausführlicher ein.
und in der Variablen y ist der Wert 1.96 ge-
speichert. Will man nun aber zum Beispiel Aufgabe 28
2
in hundert verschiedenen x-Werten die ent- Berechnen Sie e−x in 200 äquidistanten
sprechenden y -Werte (ein Vektor mit 100 Punkten zwischen -3 und 3 und speichern

35 Copyright
c G. Gramlich
Sie die Werte in der Variablen y. Browser über die Schaltäche des Komman-
Lösung: Hier ein möglicher Lösungsweg: dofensters, über Show Workspace im Menü
File oder über das Kommando workspace
>> x = linspace(-3,3,200); önen.
>> y = exp(-x.^2);

© ....................................... © 28. Den Workspace verwalten


Mit dem Befehl who kann man heraus-
nden, welche Variablen momentan im
26. Der Path Browser Workspace gespeichert sind. Um Daten zu
sichern kann man die Funktion save ver-
Matlab ermittelt die Art, in der die aufge- wenden. Mit load kann man gespeicherte
rufenen Funktionen auszuführen sind, über Daten in den Workspace laden. Die Tabelle
einen Suchpfad, das ist eine geordnete Lis- 7 zeigt weitere Funktionen zum Verwalten
te von Verzeichnissen. Mit dem Kommando des Workspaces.
path erhält man die aktuelle Liste von Ver-
zeichnissen, in denen Matlab sucht. Die- Funktion Beschreibung
ser Befehl kann auch dazu verwendet wer- clear Löscht Variablen
den, um Verzeichnisse aus dem Suchpfad clear all Löscht alles
zu löschen oder anzuhängen. Mit dem Path load Daten laden
Browser kann der Pfad bequem geändert save Daten speichern
oder ausgegeben werden. Falls Sie ein Win- who Zeigt Variablen
dows Betriebssystem verwenden, so können whos Zeigt mehr als who
Sie den Path Browser über die Schaltä-
che des Kommandofensters, über Set Path Tabelle 7: Workspace verwalten

im Menü File oder über das Kommando


pathtool önen.
Aufgabe 29 (Workspace verwalten)
Angenommen Sie möchten die Variablen a
27. Der Workspace Browser und b aus dem Workspace löschen. Wie
geht das?
Sie können den Workspace Browser ver- Lösung: Dies können Sie mit clear a und
wenden, um sich den aktuellen Inhalt des clear b tun. Falls Sie sich Tipparbeit spa-
Workspace anzuschauen. Dieser stellt eine ren wollen, geben Sie clear a b ein. Hilfe
grasche Darstellung des whos Kommandos erhalen Sie mit doc clear (help clear). ©
dar. Falls Sie ein Windows Betriebssystem ©
verwenden, so können Sie den Workspace

36 Copyright
c G. Gramlich
29. Den Datenträger verwalten 31. Neuigkeiten und Versionen
Die Funktionen aus der Tabelle 8 zeigen Weitere Informationen und Demonstratio-

Möglichkeiten, wie man den Datenträger nen zu Matlab nden Sie in Tabelle 10.

verwalten kann.

Funktion Beschreibung
Kommando Beschreibung
bench Benchmarks
cd Verzeichnis wechseln
ver Versionen
cd oder pwd Zeigt Verzeichnispfad
version Versionsnummer
delete Löscht Filename
whatsnew Release Notes
dir oder ls Zeigt Files
exist Überprüft Existenz Tabelle 10: Weitere Infos
matlabroot Zeigt Matlab -Wurzel
type Type
what M, mat und mex-Files
which Lokalisiert Funktionen 32. Dateien lesen und schreiben
Tabelle 8: Den Datenträger verwalten
In Matlab kann man Daten- bzw. Textda-
teien lesen und schreiben. Hierbei können
Sie zwischen binärem Matlab - und les-
barem Ascii-Format wählen. Binärdateien
haben gegenüber Ascii-Dateien die Vortei-
30. Wie man mit Matlab le, dass sie weniger Speicherplatz benötigen
Systeminformationen erhält und schneller gelesen und beschrieben wer-
den können. Ihr Nachteil ist, daÿ sie nicht

Die Tabelle 9 zeigt Matlab -Funktionen,


leicht mit einem Editor gelesen werden kön-
nen.

Funktion Beschreibung Für das Lesen und Schreiben in Ascii -

computer Typ des Rechners high-level Befehle load


Format gibt es die

hostid Identikationsnummer und save und die low-level Funktionen

license Lizenznummer fscanf und fprintf. Für das Lesen und


Schreiben im Binärformat stehen wieder die
Tabelle 9: Systeminformationen high-level Befehle load und save und die
low-level Funktionen fread und fwrite zur
die man verwenden kann, um Informatio- Verfügung.

nen über den eigenen Computer zu erhal- Binärdateien werden im sogenannten mat-
ten. Format abgespeichert. Die low-level Funk-

37 Copyright
c G. Gramlich
tionen können exibler eingesetzt werden.
Sie sind an die Programmiersprache C >> fplot(f,[-2,2])
angelehnt. Die Tabelle 11 fasst Funktio-
nen zum Lesen und Schreiben von Datei-
zeichnet dann die Funktion im Intervalle
en zusammen, siehe auch doc iofun (help
von −2 bis 2. Man sieht, dass das erste Ar-
iofun).
gument von fplot selbst eine Funktion ist,
Funktion Ascii binär nämlich in diesem Fall die selbstdenierte

load × × Funktion f (x) = x2 , x ∈ R. Für eingebaute


save × × Funktionen entfällt natürlich deren Deni-

fscanf × tion. Hier ein Beispiel mit der eingebauten

fprintf × Sinusfunktion sin. Die nachfolgende Zeile

fread × plottet die Sinusfunktion im Intervall von

fwrite × −3 bis 3:

Tabelle 11: Dateien lesen und schreiben >> fplot(@sin,[-3,3])

Andere Function Functions sind zum Bei-


33. Function Functions spiel fzero, quad, ode45, usw. Wir wer-
den diese und andere Funktionen in den
InMatlab hat sich der Begri functi- späteren Abschnitten ausführlicher bespre-
on function eingebürgert. Damit ist eine chen. Alle Function Functions sind im Ver-
Matlab -Function gemeint, die ihrerseits zeichnisfunfun untergebracht, siehe doc
als Eingabeargument eine Function benö- funfun (help funfun).
Matlab
tigt. ( -Functions werden wir noch
ausfrührlich behandeln). Ein Beispiel einer
Function Function ist fplot, mit der man 34. Mathematische Funktionen
Graphen von mathematischen Funktionen
zeichnen kann. Diese Function benötigt als Matlab verfügt über viele mathematische
erstes Eingabeargument eine Function. Wir Funktionen, zum Beispiel über die trigono-
zeigen die Arbeitsweise an einem Beispiel. metrischen Funktionen sin, cos oder tan.
Geplottet werden soll die Funktion f (x) = Ihre Arumente werden im Bogenmaÿ (Ra-
x2 , x ∈ R im Intervalle [−2, 2]. Diese kann diant, rad) erwartet. Liegen die Werte in
in Matlab durch

Grad ( ) (Gradmaÿ) vor, so sind die Funk-
tionen sind, cosd und tand zu verwenden.
>> f = @(x) x.^2; Für die anderen trigonometrischen Funk-
tionen gilt entsprechendes, siehe doc elfun
deniert werden. Der Aufruf (help elfun).

38 Copyright
c G. Gramlich
Die nachfolgenden Zeilen bestätigen die Er- 2
gebnisse cos(π/2) = 0 und cos(90◦ ) = 0. ans =
54.5982
>> cos(pi/2) ans =
ans = 2.8332
6.1232e-017
>> cosd(90)
Ein komplette Übersicht über die grund-
ans =
legenden und speziellen mathematischen
0
Funktionen von Matlab ndet man mit
Hilfe der Kommandos doc elfun (help
Aufgabe 30 (Trigonometrische F.) elfun) und doc specfun (help specfun).
Bestätigen Sie die Tabelle

x 0 1/2π π 3/2π 2π Aufgabe 31 (Logarithmen)


cos x 1 0 −1 0 1 Finden Sie heraus, welche Logarithmus-
funktionen Ihnen in Matlab zur Verfü-
und die Tabelle gung stehen?
Lösung: Die Tabelle 12 zeigt die Logarith-
φ (in Grad) 0 90 180 270 360
musfunktionen. © ....................... ©
cos φ 1 0 −1 0 1

Lösung: Hier die Bestätigung:


Mathematisches Symbol Matlab
ln = loge log
lb = log2 log2
>> cos(x)
lg = log10 log10
ans =
0.0000 -1.0000 -0.0000 1.0000 Tabelle 12: Logarithmusfunktionen
>> phi = 180*[1/2 1 3/2 2];
>> cosd(phi)
ans = Liegt Ihnen der Funktionsterm einer ma-
0 -1 0 1 thematischen Funktion vor, so können Sie
diesen Matlab auf zwei Arten bekannt

© ....................................... © machen:

Andere Funktionen sind zum Beispiel sqrt, • Sie denieren den Funktionsterm in einer
exp oder log. function als m-File, siehe Abschnitt 39.
Zum Beispiel erklärt man die quadrati-
>> sqrt(4), exp(4), log(x^2+1) sche Funktion f (x) = x2 , x ∈ R durch
ans = folgenden function-File f.m:

39 Copyright
c G. Gramlich
Weitere Informationen nden
function y = f(x) Sie doc function
mit und doc
y = x.^2; function_handle (help function bzw.
help function_handle). Für symbolische
• Sie denieren den Funktionsterm in Funktionen, siehe Abschnitt 60.

der Kommandozeile durch einen String


und Vorstellung eines @-Zeichens. Zum
Beispiel deniert man die quadratische
35. Grak
Funktion f (x) = x2 , x∈R durch
Twenty years ago, we did not
>> f = @(x) x.^2; interact with computers graphical-
ly; now, everything is graphical. In
the next twenty years an equally
Achten Sie darauf, Funktionsterme gleich
great change will occur as we begin
in vektorieller Form zu denieren, da die-
to communicate with machines by
se meist vektoriell ausgewertet werden bzw.
speech.
weil Funktionen wie zum Beispiel
ne Funktion zur numerischen Integration,
quad (ei-
Lloyd N. Trefethen
siehe Abschnitt 54) dies auch so verlangen.
Funktionen mit mehreren Variablen können
Matlab verfügt über moderne und mäch-
tige Visualisierungsmöglichkeiten. Dies ist
ebenso erklärt werden.
einer der Gründe für den Erfolg von Mat-
Aufgabe 32 (Funktionen) lab . Das Visualisieren von Daten ist ty-
Denieren Sie in Matlab die Funktion pisch im praktischen Einsatz von Mat-
f (x, y) =
2 2
−xye−2(x +y ) , (x, y) ∈ R2 und lab , während das Zeichnen von explizit
werten Sie diese an den Stellen (0, 0) und bekannten Funktionen sehr von Nutzen in
(1, 1) aus. der Lehre ist. Eine Vielzahl von Gestal-
Lösung: Dies kann man zum Beispiel wie tungsmöglichkeiten statistische Daten dar-
folgt erreichen: zustellen stehen bereit. Auf der Homepa-
ge von The Mathworks steht ein Online-
>> f = @(x,y) -x.*y.*... Grakhandbuch zur Verfügung, siehe [15].
exp(-2*(x.^2+y.^2)); Wenn wir nun grasche Fähigkeiten von
>> f(0,0), f(1,1) Matlab zeigen, so handelt es sich um
ans = die Beschreibung grascher Funktionen, die
0 man zur Visualisierung von Daten im Com-
ans = mand Window eingibt. Fast alle hier aufge-
-0.0183 zeigten Merkmale können Sie nach Önen
einer Figur durch Mausklick über den Plot
© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . © Browser, Figure Palette, Property Editor,

40 Copyright
c G. Gramlich
usw. beeinussen (siehe Menü-Item Show Der Befehl
Plot Tools in der geöneten Figur).
>> plot(x,y)

35.1. 2D-Grak erzeugt ein Grakfenster und zeichnet die

Wir beginnen die graschen Möglichkeiten Elemente von x gegen die Elemente von y
von Matlab mit 2D-Graken (zweidimen- und verbindet diese Punkte geradlinig. Die

sionalen Graken). Eine häug verwendete Abbildung 1 zeigt das Ergebnis.

Funktion ist die plot-Funktion (doc plot). 65

Dieser werden im einfachsten Fall Koordi-


60
naten von Punkten aus der Ebene überge-
ben, die dann von plot durch gerade Li- 55
nien verbunden werden. Ein einfaches Bei-
50
spiel soll dies erläutern.

Hierzu nehmen wir an, dass die Messung 45

des zeitlichen Verlaufs der Abkühlung ei-


40
ner Flüssigkeit die Werte aus der Tabelle 13
ergab. Wir wollen dieses Messergebnis nun 35
0 0.5 1 1.5 2 2.5 3 3.5 4

Zeitpunkt in min Temperatur in 0C


Abbildung 1: Abkühlung einer Flüssigkeit
0.0 62
0.5 55
Wir zeichnen nun den Graph der explizit
1.0 48
gegebenen Funktion f (x) = sin(x) auf dem
1.5 46
Intervall [0, 2π]. Dazu müssen drei Dinge
2.0 42
getan werden:
2.5 39
3.0 37 1. Einen Vektor x erzeugen, der das Inter-
3.5 36 vall [0, 2π] diskretisiert:
4.0 35
0 = x1 < x2 < · · · < xn = 2π
Tabelle 13: Abkühlung einer Flüssigkeit
2. Die Funktion muss an jedem Diskreti-
grasch darstellen. Hierzu speichern wir die sierungspunkt ausgewertet werden:
Zeitpunkte im Vektor x und die Tempera-
turwerte in y, also
yk = f (xk ) k=1:n

3. Ein Streckenzug muss gezeichnet wer-


>> x = [0 0.5 1 1.5 2 2.5 3 3.5 4];
den, der die Punkte (x1 , y1 ), (x2 , y2 ), . . .
>> y = [62 55 48 46 42 39 37 36 35];
,(xn , yn ) verbindet.

41 Copyright
c G. Gramlich
Das folgende Script zeigt die Realisierung: sin(kx) über dem Intervall [0, 2π] für k =
1 : 5.
>> n = 20; Lösung: Dies kann man zum Beispiel mit
>> x = linspace(0,2*pi,n); den beiden folgenden Methoden erreichen.
>> y = sin(x);
>> plot(x,y)
%-Methode 1:
x = linspace(0,2*pi);
Hierzu haben wir das Intervall [0, 2π] in plot(x,sin(x),x,sin(2*x),x,...
20 äquidistante Punkte eingeteilt und die sin(3*x),x,sin(4*x),x,sin(5*x))
Werte dem Vektor x zugeordnet. Die Si- %-Methode 2:
nusfunktion ist eine eingebaute Matlab - x = linspace(0,2*pi);
Funktion, die Vektoren als Argumente ver- Y = [sin(x);sin(2*x);sin(3*x);...
arbeiten kann. Dadurch wird der Vektor y sin(4*x);sin(5*x)];
erzeugt. Mit grid zeichnen wir noch ein plot(x,Y)
Gitter und geben mit title der Abbildung %-Methode 3:
noch eine Überschrift. x = linspace(0,2*pi);
>> grid plot(x,sin(x))
>> title('Die Sinusfunktion im hold on
Intervall [0,2\pi]') for k=2:5
plot(x,sin(k*x),'-')
end
Die Abbildung 2 zeigt das Ergebnis.
hold off
Die Sinusfunktion im Intervall [0,2π]
1

© ....................................... ©
0.5

0 Aufgabe 34 (2D-Grak)
Zeichnen Sie den Graph der Funktion
−0.5
(
−1
1 |x| ≤ 0.5
0 2 4 6 8 rect(x) =
0 sonst

Abbildung 2: Ein einfacher Plot


über dem Intervall [−3, 3].
Lösung: Wir denieren zunächst die Funk-
Aufgabe 33 (2D-Grak) tion rect in einem Function-File und zeich-
Erzeugen Sie mit einem einzigen plot- nen dann mit plot den Graph der Funkti-
Befehl die Graphen der Funktionsterme on.

42 Copyright
c G. Gramlich
z = t;
function y = rect(x) plot3(x,y,z), grid on
n = length(x); xlabel('x(t)'), ylabel('y(t)'),...
y = zeros(n,1); zlabel('z(t)')
y = (x<0.5)-(x<-0.5); title('\it{plot3-Beispiel}',...
'FontSize',14)
Die folgenden Befehle zeichnen den Graph.
plot3−Beispiel

x = linspace(-3,3,1000);
5
y = rect(x);
plot(x,y)

z(t)
axis([-3 3 -0.5 1.5]) 0

−5
50
© ....................................... © 50
0
0

Mit der Funktion subplot besteht die y(t) −50 −50 x(t)

Möglichkeit, mehrere Bilder untereinander


und/oder nebeneinander in einer Figur zu- Abbildung 3: 3D-Plot mit plot3
setzen, siehe doc subplot (help subplot).
In diesem Beispiel haben wir die Funk-
xlabel, ylabel, title und
35.2. 3D-Grak tionen ent-
sprechend zlabel zur Beschriftung der

Die zur plot-Funktion analoge Funktion Abbildung verwendet. Die Notation \it
für die 3D-Welt ist die plot3-Funktion. im title-Kommando stammt aus TEX,

Die Verwendung von plot3 ist ähnlich um Italic-Text zu erzeugen. Farben, Mar-

wie die von plot, wobei statt Paare ken und Linienstile können in der glei-

nun Tripel von Daten einzugeben sind. chen Weise wie bei der plot-Funktion be-

Das folgende Beispiel zeigt den einfachs- einusst werden. So erzeugt zum Beispiel

ten Gebrauch: plot3(x,y,z) zeichnet ei- plot3(x,y,z,'r') eine rot gestrichelte

ne Kurve im Raum, indem die Punkte Linie. Beachten Sie, dass für 3D-Plots box
x(i),y(i),z(i) in der vorgegebenen Rei- off gesetzt ist. Mit box on können Sie Ih-

henfolge verbunden werden. Das Ergebnis rem Plot eine Box hinzufügen.

ist in Abbildung 3 zu sehen. Will man den Graph eines Funktionsterms


f (x, y) mit den beiden unabhängigen Varia-
t = -5:0.005:5; blen x, y zeichnen, so muss man die Funkti-
x = (1+t.^2).*sin(20*t); onswerte auf einem zweidimensionalen Git-
y = (1-t.^2).*cos(20*t); ter in der x, y -Ebene auswerten. Das Gitter

43 Copyright
c G. Gramlich
kann mit der Funktion meshgrid erzeugt
werden; anschlieÿend kann man den Graph >> [X,Y] = meshgrid(-2:0.1:2,...
mit mesh, surf usw. zeichnen. -2:0.1:2);
Als Beispiel soll der Graph der Funktion
>> Z = 2*ones(size(X));
2
f (x, y) = −xye−2(x +y ) über dem Bereich
2 >> Z = -0.5*Y.*(X>=0 & Y>=0)+2;
[−2, 2] × [−2, 2] gezeichnet werden. >> mesh(X,Y,Z)
>> axis([-2,2,-2,2,1,3])
>> [X,Y] = meshgrid(-2:0.1:2, ... >> xlabel('x_1'), ylabel('x_2')
-2:0.1:2);
>> f = -X.*Y.*exp(-2*(X.^2+Y.^2)); © ....................................... ©
>> mesh(X,Y,f)
>> xlabel('x'), ylabel('y'), ... Mehr Informationen über Visualisie-
zlabel('f(x,y)') rungsmöglichkeiten ndet doc
man mit
graph2d (help graph2d), doc graph3d
(help graph3d) und doc specgraph (help
Die Abbildung 4 zeigt das Ergebnis.
specgraph).

Aufgabe 36 (3D-Grak)
0.1
Zeichnen Sie den Graph des Funktionterms
0.05

1
f(x,y)

0
f (x, y) = cos(x) + y exp(−x2 − y 2 )
−0.05 5
−0.1
2 mit den Funktionen mesh und ezmesh über
2
0
0
1 dem Quadrat −3 ≤ x ≤ 3, −3 ≤ y ≤ 3.
y −2 −2
−1
x
Lösung:

2 +y 2 ) [X,Y] = meshgrid(-3:0.1:3);
Abbildung 4: f (x, y) = −xye−2(x
Z = 1/5*cos(X)+Y.*exp(-X.^2-Y.^2);
mesh(X,Y,Z)
Aufgabe 35 (3D-Grak)
Zeichnen Sie den Graph der Funktion
oder als Einzeiler mit ezmesh.
− 21 x2

+2 für x1 , x2 ≥ 0
f (x1 , x2 ) =
2 sonst.
ezmesh('1/5*cos(x)+y*exp(-x^2-y^2)',
[-3,3])
im Bereich (x1 , x2 ) ∈ [−2, 2]2 .
Lösung: Den Graph kann man wie folgt
© ....................................... ©
plotten.

44 Copyright
c G. Gramlich
35.3. Funktionsdarstellungen 100

80
Kennt man den Funktionsterm einer reell-
wertigen Funktion einer reellen Variablen, 60

so kann man mit den Funktionen fplot 40


und ezplot (easy plotting) den Graph ein-
facher darstellen als mit plot. Die Funk-
20

tion fplot verlangt den Funktionsterm in 0

einem m-File (Abschnitt 39) oder als Func-


−20
tion Handle (doc function_handle).
−2 −1 0 1 2
Die
Funktion ezplot erwartet den Funktions-
term in Hochkomma oder als symbolisches Abbildung 5: Graph der humps-Funktion
Objekt, siehe Abschnitt 60.

Der Aufruf
über dem Intervall (0, 5) mit den Funktio-
>> fplot(@(x)exp(-x^2),[-3,3]) nen plot, fplot und ezplot.
Lösung: Dies erreicht man wie folgt:
plottet die Funktion
2
x = linspace(0,5);
f (x) = e−x , x∈R f = sin(x.^2)-2*cos(x);
plot(x,f)
im Intervall [−3, 3]. Mit
%-oder:
>> fplot(@humps,[-2,2]) fplot('sin(x^2)-2*cos(x)',[0,5])
%-bzw.
f = @(x) sin(x.^2)-2*cos(x);
plottet man im Intervall [−2, 2] die einge-
fplot(f,[0,5])
baute humps-Funktion
%-oder:
f (x) =
1 ezplot('sin(x^2)-2*cos(x)',[0,5])
(x − 0.3)2 + 0.01 %-bzw.
1 f = @(x) sin(x.^2)-2*cos(x);
+ − 6, x ∈ R.
(x − 0.9)2 + 0.04 ezplot(f,[0,5])
Die Abbildung 5 zeigt den Graph von humps
im Intervall [−2, 2]. Der Graph ist in Abbildung 6 dargestellt. ©
©
Aufgabe 37 (Funktionsdarstellungen)
Zeichnen Sie den Graph des Funktions-
Die Abbildung 7 zeigt vier verschiedene
terms
Darstellungen einer Funktion mit zwei Va-
f (x) = sin(x2 ) − 2 cos(x) riablen. Es handelt sich hier um die soge-

45 Copyright
c G. Gramlich
nannte peaks-Funktion, die in Matlab be-
reits vordeniert ist. Es ist die Funktion

2 −(y+1)2
f (x, y) =3(1 − x)2 e−x
sin(x.2)−2 cos(x) 2 −y 2
3 − 10(x/5 − x3 − y 5 )e−x
2 −y 2
2 − 1/3e−(x+1) , (x, y) ∈ R2
1
Die peaks-Funktion geht durch Translatio-
0
nen und Skalierungen aus der Gauÿ schen
−1 Normalverteilungsfunktion hervor. Das

−2 Bild links oben in Abbildung 7 zeigt

0 1 2 3 4 5 den Graph, rechts oben Kurven gleicher


x
Höhe (Höhenschittbilder), links unten
ein paar Höhenlinien und rechts dane-
Abbildung 6: Graph
ben farbig ausgefüllte Höhenlinien der
peaks-Funktion. Die Figur wurde mit den
folgenden Anweisungen erzeugt:

[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),
10 10

0 0

−10
5
5
−10
2
2
Die Abbildung 8 zeigt den Graph der Funk-
0 0
0 0 2 +y 2
f (x, y) = xex (x, y) ∈ R2 , wobei
−5 −5 −2 −2
tion ,
colormap zum Einsatz
3
2 2 hier die Funktion
1
0 0 kommt und dafür sorgt, dass der Graph
−1
−2
−3
−2 0 2
−2

−2 0 2
(das Netz) blau ist. Die Funktion colormap
erlaubt es, Daten mit Farbtabellen (color
map) zu visualisieren. Mit der Funktion

Abbildung 7: Darstellungen der peaks- colorbar können Sie sich die aktuelle Farb-
tabelle in der entsprechenden Figur anzei-
Funktion
gen lassen. Die Figur wurde mit Hilfe der
Anweisungen erzeugt:

fh = @(x,y) x.*exp(-x.^2-y.^2);

46 Copyright
c G. Gramlich
x. exp(−x.2−y.2)

Z = peaks;
0.4
[C,h] = contour(interp2(Z,4));
0.2
text_h = clabel(C,h);
0
set(text_h,'BackgroundColor',...
−0.2
[1 1 .6],'Edgecolor',[.7 .7 .7])
−0.4
2
0 2
0

35.4. Parametrisierte Kurven


−2 −2
y x

Abbildung 8: Graph Mit Hilfe der Funktionen ezplot und


ezplot3 lassen sich Kurven in Parame-
terdarstellung in zwei und drei Dimen-
ezmesh(fh,40) sionen darstellen. Als Beispiel einer ebe-
colormap([0 0 1]) nen Kurve betrachten wir eine dreiblätt-
rige Blütenblattkurve (Trochoide) Sie hat
die Parameterform x = cos(3t) cos(t), y =
Die Abbildung 9 zeigt Höhenlinien der
cos(3t) sin(t), t ∈ [0, 2π]. Mit Hilfe der An-
weisung
700 2
6
r1 = @(t) cos(3*t).*cos(t);
4

600
4

8
0
4

2 6
500 r2 = @(t) cos(3*t).*sin(t);
2
2
−2

ezplot(r1,r2,[0,2*pi]), grid;
0
400
−2
0
2
2

300
2
0 −4−2 0
200 0 −6
−2

erzeugt man die Abbildung 10.


−2

100 −4 0

200 400 600


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

Abbildung 9: Geglättete Höhenlinien der 0.4

peaks-Funktion 0.2
0
y

−0.2
peaks-Funktion, wobei die Höhenlinien nun −0.4
mit der Funktion interp2 geglättet sind. −0.6
−0.8
Auÿerdem bekommen die Höhenzahl einen
−0.5 0 0.5 1
leicht gelblichen Hintergrund mit einem x

leicht grauen Rahmen. Die Figure wurde


mit Hilfe der Anweisungen erzeugt: Abbildung 10: Blütenblattkurve

47 Copyright
c G. Gramlich
Die Anweisungen
t = -5:0.005:5;
r1 = @(t) exp(-0.2*t).*cos(t); x = (1+t.^2).*sin(20*t);
r2 = @(t) exp(-0.2*t).*sin(t); y = (1+t.^2).*cos(20*t);
r3 = @(t) t; z = t;
ezplot3(r1,r2,r3,[0,20],'animate') plot3(x,y,z),
grid on, xlabel('x(t)'),
ylabel('y(t)'), zlabel('z(t)')
erzeugen die räumliche Kurve in Abbil-
dung 11. Durch das zusätzlich Argument
© ....................................... ©
x = exp(−0.2 t) cos(t), y = exp(−0.2 t) sin(t), z = t

20 Aufgabe 39 (Ebene Kurve)


15 Plotten Sie die Zykloide

10
z

5
x(t) = t − sin t
0 y(t) = 1 − cos t
1
1
0
0 fürt ∈ [0, 4π].
−1 −1
y x
Lösung: Die Kurve kann zum Beispiel wie
folgt geplottet werden.
Abbildung 11: Räumliche Kurve

ezplot('t-sin(t)','1-cos(t)',...
animate im Funktionsaufruf erhält man ei-
[0,4*pi])
ne Animation der räumlichen Kurven in
grid on, xlabel('x(t)'),
dem Sinn, dass ein roter Punkte vom
ylabel('y(t)')
Anfagang- zum Endpunt läuft.

Aufgabe 38 (Räumliche Kurve) © ....................................... ©


Plotten Sie die räumliche Kurve

Aufgabe 40 (Ebene Kurve)


x(t) = (1 + t2 ) sin(20t) Zeichnen Sie die Kurve
y(t) = (1 + t2 ) cos(20t)
z(t) = t x = sin(−t) + t
y = 1 − cos(−t)
fürt ∈ [−5, 5].
Lösung: Die Kurve kann zum Beispiel wie in der x, y -Ebene für 0 ≤ t ≤ 4π .
folgt geplottet werden. Lösung: Es handelt sich um eine Zykloide.

48 Copyright
c G. Gramlich
35.5. Parametrisierte Flächen
ezplot('sin(-t)+t','1-cos(-t)',...
[0,4*pi]) Mit den Matlab
-Funktion ezmesh und
ezsurf können parametrisierte Flächen im
R3 dargestellt werden.
© ....................................... ©
Ein Torus entsteht, wenn ein Kreis um eine
Achse rotiert, die in der Ebene des Kreises,
Aufgabe 41 (Ebene Kurve)
aber auÿerhalb des Kreises verläuft. Eine
Zeichnen Sie die Kurve
Parameterdarstellung eines Torus ist:
x = sin(−t)
x = (a + b cos θ) cos φ
y = 1 − cos(−t)
y = (a + b cos θ) sin φ
in derx, y -Ebene für 0 ≤ t ≤ π . z = b sin θ
Lösung: Es handelt sich um einen Kreisbo-
gen.
Der folgende Script zeichnet einen Torus für

ezplot('sin(-t)','1-cos(-t)',... a = 10 und b = 4, siehe Abbildung 12.

[0,pi]) ezmesh('(10+4*cos(theta))*cos(phi)',...
'(10+4*cos(theta))*sin(phi)',...
© ....................................... © '4*sin(theta)'), axis equal,
colormap([0,0,1]),
Aufgabe 42 (Räumliche Kurve)
Zeichnen Sie die Schraubenlinie (Helix)
x = (10+4 cos(θ)) cos(φ), y = (10+4 cos(θ)) sin(φ), z = 4 sin(θ

x = cos(t)
y = sin(t)
2
0
z = t
z

−2

10
im x, y, z -Raum für 0 ≤ t ≤ 20π . Animie- 5 10
0
ren Sie! −5 0

Lösung: Eine Schraubenlinie mit Animati- y


−10 −10
x

on erhält man wie folgt:

>> ezplot3('cos(t)','sin(t)','t',... Abbildung 12: Ein Torus

[0,20*pi],'animate')
Aufgabe 43 (Parametrisierte Flächen)
Welche Fläche entsteht durch den folgenden
© ....................................... ©
Aufruf:

49 Copyright
c G. Gramlich
für 0 ≤ φ ≤ π , 0 ≤ t ≤ 1 gegeben.
ezsurf('2*cos(u)*cos(v)',... Der Parameterc bezeichnet die Ganghöhe,
'2*sin(u)*cos(v)','2*sin(v)',... das heiÿt den Höhengewinn bei einer vollen
[-pi/2,pi/2]), axis equal Umdrehung. © .......................... ©

Lösung: Es entsteht eine Halbkugel. ©..©


35.6. Implizite Kurven
Aufgabe 44 (Parametrisierte Flächen)
Welche Fläche entsteht durch den folgenden Mit der Funktion ezplot lassen sich auch
Aufruf: implizit denierte Kurven darstellen. Der
nachfolgende Script gibt einige Beispiele:
ezsurf('u*cos(v)','u*sin(v)',...
'2*v',[0,8*pi]), axis equal
subplot(2,3,1);
ezplot('x^2/15^2+y^2/9^2-1',[-15,15])
Lösung: Es entsteht eine Wendeläche,
hold on; plot([-12,12],[0,0],'ro');
siehe Abbildung 13. Eine Wendeläche ent-
hold off; grid; pause;
x = u cos(v), y = u sin(v), z = 2 v subplot(2,3,2);
50
ezplot('-x^2/4+y^2/25-1',[-15,15])
40 grid; pause;
40
subplot(2,3,3);
30
ezplot('x^4+y^4-14^4',[-15,15])
z

20
20 grid; pause;
0 subplot(2,3,4);
10
ezplot('y^2-x^3/9+6*x+10',[-15,15])
20
20
0
grid; pause;
0
0
y −20 −20
x
subplot(2,3,5);
ezplot('(x^2+y^2)^2-14^2*(x^2-y^2)',...
Abbildung 13: Wendeläche
[-15,15]), grid; pause;
steht, wenn eine Strecke um eine zu ihr or-
subplot(2,3,6);
thogonale Achse geschraubt wird. Wir neh-
ezplot('abs(x)+abs(y)-14',...
men an, dass diese Achse gleich der z -Achse [-15,15]); grid;
des Koordinatensystems ist. Hat die Strecke
die Länge l und ist φ der Winkel, den sie mit
der positiven x-Achse einschliesst, so ist ei- 35.7. Implizite Flächen
ne Parameterdarstellung der Wendeläche
Implizit denierte Flächen können ebenfalls
durch
dargestellt werden. Hier ein Beispiel, siehe
c
x = lt cos φ, y = lt sin φ, z = , Abbildung 14.

50 Copyright
c G. Gramlich
dass die x- und y -Achse die gleiche Skalie-
rung haben, so geht das mit dem Befeht
axis equal. Die Abbildung 15 zeigt dies

normal
2

−2
−4 −3 −2 −1 0
equal 1 2 3 4
2

−2
−8 −6 −4 −2 0
square 2 4 6 8
Abbildung 14: Implizite Fläche 2

−2
−4 −2 0 2 4
[x,y,z] = meshgrid(-2:0.1:2);
v = sin(10*x)/8+sqrt(z.^2+y.^2)-0.5; Abbildung 15: Skalierungen
p = patch(isosurface(x,y,z,v,0));
view(34,40), grid on, anhand des Bereichs [−4, 4] × [−2, 2].
set(p,'FaceColor','red'), Um logarithmische Skalierungen zu erhal-
set(p,'EdgeColor','None'), ten, stehen spezielle Funktionen zur Verfü-
camlight, lighting gouraud, gung, siehe Tabelle 14.

Name Beschreibung
35.8. Koordinatenachsen skalieren loglog Logarithmisches KO-System
semilogx x-Achse logarithmisch
Beachten Sie, dass Matlab die x- und semilogy y -Achse logarithmisch
y -Achse (und natürlich auch die z -Achse
Tabelle 14: Logarithmische Skalierungen
im 3D Fall) automatisch skaliert. Wollen
Sie diesen Automatismus nicht, so kön-
nen Sie mit axis (doc axis) per Hand Aufgabe 45 (Skalierungen)
die Achsen begrenzen. Zum Beispiel er- Zeichnen Sie den Graph der Funktion y=
zeugt axis([-4,4,-2,2]) ein Koordina- 3e−1/2x ,x ∈ R in einem rechtwinkligen Ko-
tensystem, dessenx-Achse von -4 bis 4 und ordinatensystem von x = 0 bis x = 10, wo-
deren y -Achse von -2 bis 2 begrenzt ist. bei die y -Achse logarithmisch skaliert sein
Wenn Sie möchten, dass die x- und y -Achse soll.
gleich lang, also quadratisch sind, dann Lösung: Mit
müssen Sie axis square eingeben (Qua-
dratische Bildäche). Wollen Sie dagegen, >> x = linspace(0,10);

51 Copyright
c G. Gramlich
>> y = 3*exp(-0.5*x); 10
2

>> semilogy(x,y); grid;

erhalten wir die Abbildung 16. Der Graph 10


1

1
10

0
10 0 1 2 3
0
10 10 10 10 10


−1
Abbildung 17: y= x, x ≥ 1
10

10
−2
35.9. Zwei y -Achsen
0 2 4 6 8 10
Mit der Funktion plotyy können wir Da-
Abbildung 16: y= 3e−1/2x , x∈R tensätze mit zwei y -Achsen zeichnen; die
eine Achse links, die Andere rechts. Als

der Exponentialfunktion ist wie erwartet ei-


Beispiel betrachten wir die Funktion y =
−1/2x , x ∈ R.
ne Gerade. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . © 3e Zeichnet man die Graph
dieser Funktion in ein gewöhnliches kartesi-
sches Koordinatensystem mit gleicher Ska-
Aufgabe 46 (Skalierungen) lierung, so erhält man den typischen Ver-
Zeichnen Sie den Graph der Funktion y= lauf einer abfallenden Exponentialfunktion.

x, x ∈ R in einem rechtwinkligen Koordi- Skaliert man die y -Achse jedoch logarith-
natensystem von x = 1 bis x = 1000, wobei misch, so ist der Graph eine Gerade. Wir
die x- und y -Achse logarithmisch skaliert plotten diese beiden Kurven mit der Funk-
sein soll. tion plotyy nun in eine Figur. Nach den
Lösung: Mit Eingaben

>> x = 1:1000; >> x = linspace(0,10);


>> y = sqrt(x); >> y = 3*exp(-0.5*x);
>> loglog(x,y); grid; >> plotyy(x,y,x,y,'plot','semilogy')

erhalten wir die Abbildung 17. Der Graph erhalten wir die Abbildung 18. Die linke y-
der Quadratwurzelfunktion ist wie erwartet Achse ist gewöhnlich linear skaliert, wäh-

eine Gerade. © .......................... © rend die rechte y -Achse logarithmisch ska-


liert ist.

52 Copyright
c G. Gramlich
3
1
10 Name Beschreibung
bar Balkendiagramm (vertikal)
2.5
barh Balkendiagramm (horizontal)
bar3
0
2 10 3D-Balkendiagramm (vertikal)

1.5 bar3h 3D-Balkendiagramm (horizontal)

−1
hist Histogramm
1 10
pie Kreisdiagramm
0.5
stem Punkte mit Linien
−2
0 10
0 2 4 6 8 10
Tabelle 15: Weitere Grakfunktionen

Abbildung 18: Zwei Skalierungen 35.12. Vektorfelder visualisieren


Mit der Funktion quiver (doc quiver,
help quiver) können Sie Vektorfelder dar-
35.10. Koordinatentransformationen stellen. Das Vektorfeld f (x, y) = (−y, x),
(x, y) ∈ R2 ist in Abbildung 19 dargestellt.
Mit der Funktion cart2pol können kar-
tesische Koordinaten in Polar- bzw. Zy-
linderkoodinaten transformiert werden. Die 2

Funktion pol2cart transformiert umge-


1
kehrt Polar- bzw. Zylinderkoordinaten in
kartesische Koordinaten. Mit cart2sph 0
y

bzw. sph2cart können Transformationen


−1
von kartesischen zu Polarkoordinaten und
umgekehrt durchgeführt werden. −2

−3 −2 −1 0 1 2 3
Zum Zeichnen von Polarkoordinaten ist die x
Funktion polar geeignet.
Abbildung 19: Vektorfeld

Das Vektorfeld wurde mit

35.11. Spezielle Grakfunktionen >> [X,Y] = meshgrid(-2:0.5:2);


>> quiver(X,Y,-Y,X), grid, axis equal
Weitere Grakfunktionen ndet man in der
Tabelle 15. Insbesondere zur Darstellung erzeugt. Jeder Vektor ist tangential zu ei-
statistischer Daten sind diese von groÿer nem Kreis um den Ursprung. Die Länge
Bedeutung. des Vektors ist durch den Radius des Krei-

53 Copyright
c G. Gramlich
ses gegeben. Das Vektorfeld kann als Ge- image gibt die eingelesene Grak in einer
schwindigkeitsfeld eines Rades interpretiert Figure aus. So erzeugen die folgenden Be-
werden, das sich gegen den Uhrzeigersinn fehlszeilen die Figure in Abbildung 21, die
dreht. das in jpg-Format vorliegende Bild gg.jpg
enthält:
Aufgabe 47 (Vektorfeld)
Stellen Sie das Vektorfeld >> A = imread('gg.jpg','jpeg');
>> image(A)
f : R2 → R2
(x, y) 7→ √ 1 (y, −x)
x2 +y 2 Mögliche Formate sind bmp, cur, usw., sie-
he doc imread (help imread). Mit dem
dar.
Befehl print (doc print) können Sie die
Lösung: Die Anweisungen
Figure anschlieÿend drucken oder in eine
Datei exportieren.
>> [X,Y] = meshgrid(-2:0.5:2);
>> quiver(X,Y,-X,2*Y), grid
>> axis equal

erzeugen die Abbildung 20. © ........... ©

−1

−2

−3 −2 −1 0 1 2 3

Abbildung 20: Vektorfeld

Abbildung 21: Das bin ich

35.13. Graken importieren, Hat man eine Grak erzeugt, so will man

exportieren und drucken diese häug in einem bestimmten Grakfor-


mat abspeichern und gegebenenfalls in ein
Zum Einlesen von Pixel-Graken bietet Satz- oder Textverarbeitungssystem einbin-
Matlab die Funktion imread. Der Befehl den. Soll das Grakformat Encapsulated

54 Copyright
c G. Gramlich
PostScript sein (Dateiendung: eps), so 8. Wählen Sie den Dateityp EPS Level 2
geht das zum Beispiel wie folgt: Color, geben Sie den Dateinamen MyFi-
le.eps ein und speichern Sie Ihre Figur
%-Erzeuge eine Grafik. unter diesem Namen.
surf(peaks(30));
%-Setze den Hintergrund blau. In Matlab werden vordenierte Pixelbil-
set(gcf,'Color','blue'); der zur Verfügung gestellt. Mit dem Befehl
set(gcf,'InvertHardCopy','off');
%-Exportiere in File MyFile.eps >> load gatlin
print -depsc2 MyFile.eps
werden die Daten der Datei gatlin.mat ge-
Alternativ können Sie die Grak auch über laden. Die Befehle
das Graphical User Interface exportieren.
Dies geht wie folgt: >> image(X)
>> colormap(map)
1. Erzeugen Sie eine Figure, zum Beispiel
>> axis image
mit surf(peaks(30));.
2. Wählen Sie aus dem Edit Menü die Fi- erzeugen die Abbildung 22 eine Fotogra-
gure Properties. Dies spricht die Proper-
ty Editor Dialogbox an.
50

3. Wählen Sie den Style Panel, skrollen Sie 100

auf die Farbe Blue, klicken Sie unten auf


150

200
Apply und dann auf OK. 250

300
4. Wählen Sie aus dem File Menü das Pa- 350

ge Setup. Dies spricht die Page Setup 400

450
Dialogbox an. 100 200 300 400 500 600

5. Wählen Sie den Axes und Figure tap


und klicken Sie auf Keep screen back- Abbildung 22: Pioniere der Mathematik
ground color, damit Matlab nicht auf
den weiÿen Hintergrund umschaltet, e aus dem Jahr 1964 von sechs Pionieren

wenn Sie die Grak expotieren. der Numerischen Mathematik. Von links
nach rechts handelt es sich um die Wissen-
6. Klicken Sie auf OK. Wilkinson Givens Forsythe
schaftler , , ,

7. Wählen Sie aus dem File Menü den Householder Henrici Bauer
, und .

Unterpunkt Export aus, um die Export Das Farbbild eines Clowns ist in Abbil-
Dialogbox zu erzeugen. dung 23 zu sehen. Es kann analog der Da-

55 Copyright
c G. Gramlich
35.15. Handle Graphics
50 Das Graksystem von Matlab stellt so-
genannte Low-Level-Funktionen zur Verfü-
100 gung, mit denen alle Aspekte des Grak-
systems kontrolliert werden können. Da-
150 mit besteht die Möglichkeit, detaillierte
Graken zu generieren. Die Kommandos
200
50 100 150 200 250 300 set und get erlauben es, jedes Gra-
kobjekt anzusprechen. Mit doc graphics
(help graphics) erhalten Sie eine kom-
Abbildung 23: Clown
plette Übersicht über alle zur Verfügung
stehenden Kommandos und Funktionen.

tei gatlin.mat aus der Datei clown.mat er-


zeugt werden. In [5] habe ich dieses Bild (als
35.16. Graphical User Interface (GUI)
Grautonbild) für eine Anwendung der Sin-
gulärwertzerlegung in der Bildverabeitung Das Matlab -Graksystem verfügt auÿer
verwendet. der Handle-Graphics über eine weitere ob-
Wir fassen die besprochenen Funktionen in jektorientierte Grakkapazität: Graphical
Tabelle 16 zusammen. User Interface (GUI). Damit hat man
die Möglichkeit, Sliders, Buttons, Menüs
und andere Grakobjekte zu erzeugen,
Name Bedeutung
um so interaktive Benutzerschnittstellen
imread Pixel-Grak einlesen
zu generieren. Hierzu steht eine GUI-
image Pixel-Grak in Figure plotten
Entwicklungsumgebung zur Verfügung, sie-
print speichern oder drucken
saveas speichern
he guide. Für weitere Einzelheiten siehe
doc uicontrol (help uicontrol).
Tabelle 16: Graken importieren usw.

36. Vergleichsoperatoren,
Vergleichsfunktionen
35.14. Animationen Vergleichsoperatoren und Vergleichsfunk-
tionen dienen dazu, zwei Matrizen element-
Um Animationen herzustellen und durch- weise hinsichtlich einer bestimmten Eigen-
zuführen, siehe zum Beispiel doc movie schaft zu vergleichen. In Abhängigkeit da-
(help movie). von, ob diese Eigenschaft besteht oder

56 Copyright
c G. Gramlich
nicht, geben sie dann einen entsprechen- Logische Operatoren Beschreibung
den Wahrheitswert zurück, der in Bedin- & logisches und
gungen für Schleifen oder Verzweigungen | logisches oder
weiterverwendet werden kann. In Matlab  logisches nicht
gibt es  wie auch in C/C++ , aber anders
als etwa in Pascal  keinen expliziten Da-
Tabelle 17: Logische Operatoren

tentyp, der die Wahrheitswerte wahr und


falsch speichern kann. Statt dessen wird gischen und, so ist die entsprechende Er-
ein numerischer Wert ungleich 0 als wahr gebniskomponente 1, wenn die beiden Kom-
und der Wert 0 als falsch betrachtet. Ver- ponenten von Null verschieden sind.
gleichsoperatoren haben, hinter den arith-
metischen, vor den logischen Operatoren, >> x = [1 0 2 3 0 4];
die zweithöchste Priorität bei der Abarbei- >> y = [5 6 7 0 0 8];
tung von Ausdrücken. >> x & y
ans =
1 0 1 0 0 1
37. Logische Operatoren und
logische Funktionen 37.2. Logische Funktionen
Logische Operatoren existieren im Prinzip
Verknüpft man zwei Matrizen mit einem ex-
in allen allgemein verwendbaren Program-
klusiven oder , so ist die entsprechende Er-
miersprachen. Sie dienen dazu, Wahrheits-
gebniskomponente 1 ( wahr ), wenn eine der
werte miteinander zu verknüpfen. In den
beiden Komponenten von Null verschieden
meisten Sprachen haben sie Namen wie
and or not
ist. Andererseits ist die Ergebniskomponen-
, und und sind damit Schlüs-
falsch
Matlab
te 0 ( ), wenn beide Komponenten 0
selwörter für den Compiler. In 
C/C++
oder beide ungleich 0 sind.
wie auch in  ist dies nicht der
Fall; die logischen Operatoren sind hier aus >> x = [1 0 2 3 0 4];
Sonderzeichen aufgebaut. >> y = [5 6 7 0 0 8];
>> xor(x,y)
37.1. Logische Operatoren ans =
0 1 0 1 0 0
Werden Matrizen mit logischen Operato-
ren verknüpft, so geschieht dies komponen- Darüber hinaus gibt es zusätzliche Funktio-
tenweise. Die Tabelle 17 zeigt die logischen nen, die die Existenz spezieller Werte oder
Operatoren. Bedingungen testen und ein logisches Re-
Verknüpft man zwei Matrizen mit einem lo- sultat zurückgeben. Weitere Informationen

57 Copyright
c G. Gramlich
über logische Operatoren und Funktionen 38.1. for-Schleife
ndet man mit doc ops (help ops).
Das folgende Beispiel erzeugt in einer
Aufgabe 48 (Logische Operatoren) for-Schleife die ersten 20 Fibonacci -
Gegeben seien die Variablen a=5.5, b=1.5 Folgenglieder.
und k=-3. Bestimmen Sie die Ergebnisse
der folgenden Ausdrücke. Überprüfen Sie >> f(1) = 0; f(2) = 1;
Ihre Resultate dann in Matlab . >> for i=3:20
f(i) = f(i-1)+f(i-2);
(a) a < 10.0 end
(b) a+b >= 6.5
(c) k = 0 Der Zeilenvektor f beinhaltet die Zahlen-
werte. Bekannterweise nähern sich die Quo-
(d) b-k > a tienten zweier
√ benachbarter Fibonacci
-
Zahlen der Zahl ( 5 − 1)/2. Sie können das
(e) (a == 3*b)
mit f(1:19)./f(2:20) nachvollziehen.
(f ) -k <= k+6 Will man innerhalb einer Schleife eine Ma-
trix (Vektor) erzeugen, so wie in dem Bei-
(g) a<10 & a>5
spiel
(h) abs(k)>3 | k<b-a
>> for k = 1:11
x(k) = (k-1)*(1/10);
38. Steuerstrukturen end

Programmiersprachen und programmierba- so gibt es zwei Gründe dafür, die Matrizen


re Taschenrechner erlauben es, den Ab- zuvor mit zeros zu initialisieren.
lauf eines Programms zu steuern. Man
spricht von Steuerstruktur. Matlab bietet 1. Durch zeros kann man festlegen, ob

vier Möglichkeiten, den sequentiellen Ab- man einen Zeilen- oder Spaltenvektor

lauf durch Verzweigungen und Schleifen zu erzeugen möchte bzw. welche Gröÿe die

ändern. Dies sind: Matrix haben soll. Dadurch wird man


gezwungen, explizit über die Orientie-
• for-Schleifen rung und Gröÿe des Vektors bzw. der
Matrix nachzudenken, und vermeidet so
• while-Schleifen
Fehler beim Operieren mit diesen.
• Verzweigungen mit if
2. Der Speichermanager hat durch die-
• Verzweigungen mit switch se Initialisierung weniger Arbeit. Be-

58 Copyright
c G. Gramlich
trachten wir hierzu obige erste for- n = n+1;
Schleife und wie die Variable x zu einem end
11-dimensionalen Zeilenvektor wird. Im >> Summe
ersten Schleifendurchlauf ist x ein Vek- Summe =
tor der Länge 1 (ein Skalar). Im zweiten 5050
Durchlauf weist x(2) den Speicherma-
nager an, x zu einem zweidimensionalen Der nachfolgende Matlab -Code berechnet
Vektor zu machen. Im dritten Durchlauf die ersten sieben Vektoren Au mit Start-
wird der Speichermanager durch x(3) vektor u = (1, 0) Markov
und der -Matrix
angewiesen, x in einen Vektor der Län-  
ge 3 umzuformen. Dies setzt sich fort, 0.8 0.3
A= .
bis das Ende der for-Schleife erreicht 0.2 0.7
ist und x 11 Koordinaten hat. Es ist ei-
Matlab
Anschlieÿend werden die Vektoren gezeich-
ne Konvention in , dass durch net.
diese Konstruktionsweise ein Zeilenvek-
tor entsteht. u = [1;0]; A = [0.8 0.3; 0.2 0.7];
x = u; k = 0:1:7;
Es ist daher ezienter, obige erste for- while length(x) <= 7
Schleife wie folgt zu programmieren: u = A*u;
x = [x u];
>> x = zeros(1,11); end
>> for k = 1:11 plot(k,x)
x(k) = (k-1)*(1/10);
end
38.3. if-Anweisung

Will man eine Matrix in einer Im folgenden Beispiel wird die Anweisung

Schleife erzeugen, dann sollte man disp('a ist gerade') nur dann ausge-

ihn zuvor initialisieren. führt, wenn a durch 2 teilbar ist.

>> if ( rem(a,2) == 0 )
38.2. while-Schleife disp('a ist gerade')
end
In einer while-Schleife berechnen wir die
Summe der ersten 100 Zahlen.

38.4. switch-Anweisung
>> n = 1; Summe = 0;
>> while n <= 100 Hat im folgenden Beispiel die Variable x
Summe = Summe+n; den Wert -1, so wird x ist -1 auf dem

59 Copyright
c G. Gramlich
Bildschirm ausgegeben. Entsprechendes ge- den File-Namen ohne das Kürzel angibt.
schieht bei den anderen Fällen. Ist zum Beispiel der File-Name versuch.m,
so gibt man einfach versuch ein. Variablen
switch x in einem Script-File sind global, siehe Ab-
case -1 schnitt 40. Auch kann ein Script-File einen
disp('x ist -1'); anderen m-File aufrufen. Script-Files haben
case 0 keine Ein- und Ausgabeargumente.
disp('x ist 0');
Wir geben ein einfaches Beispiel eines
case 1
Script-Files (ErstesScript).
disp('x ist 1');
otherwise
disp('x ist ein anderer Wert'); %-Script: ERSTES-SCRIPT
end Daten = [2,10,1,12,-2,3,2]';
sort(Daten)
mean(Daten)
Weitere Informationen über Steuerstruktu-
median(Daten)
ren ndet man mit doc lang (help lang). std(Daten)

39. m-Files Dieser Script-File sortiert den Spaltenvek-


tor Daten mit der Funktion sort und
Bisher wurden Anweisungen zeilenweise berechnet den arithmetischen Mittelwert
eingegeben und von Matlab verarbeitet. (mean), den Median (median) und die Stan-
Diese interaktive Arbeitsweise ist unzweck- dardabweichung (std) der Werte im Da-
mäÿig für Algorithmen, die mehrere Pro- tenvektorDaten. Gibt man den Namen
grammzeilen benötigen und wieder verwen- ErstesScript nach dem Matlab Prompt
det werden sollen. Hierfür eignen sich so- ein, so erhält man folgende Ausgabe:
genannte m-Files, die mit einem Editor er-
zeugt werden und unter einem Filenamen ans =
mit dem Kürzel .m abgespeichert werden. -2
Es gibt zwei Arten von m-Files: die Script- 1
Files und die Function-Files. 2
2
39.1. Script-Files 3
10
Ein Script-File (Kommando-File) ist ei- 12
ne Folge von gewöhnlichen Matlab - ans =
Anweisungen. Die Anweisungen in einem 4
Script-File werden ausgeführt, wenn man ans =

60 Copyright
c G. Gramlich
2 h = findobj(gca,'Type','patch');
ans = set(h,'FaceColor','r',...
5.0662 'EdgeColor','w')

Das folgende Beispiel zeigt ein Eigenwert- Dieser Script-File erzeugt 1000 Zufallszah-
Roulette, welches darauf beruht, abzuzäh- len und zeichnet ein Histogramm der Ver-
len wieviele Eigenwerte einer reellen Zu- teilung der Anzahl der reellen Eigenwerte.
fallsmatrix reell sind. Ist die Matrix A re- Die Abbildung 24 zeigt ein mögliches Re-
ell und von der Ordnung 8, dann gibt es sultat. Wollen Sie sehen, wie Ihr Script-File
0,2,4,6 oder 8 reelle Eigenwerte (die Anzahl
600
muss gerade sein, weil komplexe Eigenwerte
in komplex-konjugierten Paaren auftreten).
500
Die beiden Zeilen
400

A = randn(8); 300
sum((abs(imag(eig(A))) < 0.0001));
200

erzeugen eine zufällig normalverteilte 8 × 8- 100

Matrix und zählen, wieviel Eigenwerte re-


0
0 2 4 6 8
ell sind. Dies ist so realisiert, dass geprüft
wird, ob der Imaginärteil dem Betrag nach
Abbildung 24: Histogramm zum Script
kleiner als 10−4 ist. Jeder Aufruf erzeugt
nun eine andere Zufallsmatrix und man er-
den von Ihnen geschriebenen Code abarbei-
hält somit unterschiedliche Ergebnisse. Um
tet, so geben Sie echo on ein. Mit echo off
ein Gefühl dafür zu bekommen, welche der
können Sie den Vorgang wieder rückgängig
fünf Möglichkeiten am wahrscheinlichsten
machen.
ist, kann man folgenden Script ausführen.

%-Script-File: EIGENWERTROULETTE 39.2. Function-Files


n = 1000;
Anzahl = zeros(n,1); Wenn Sie intensiver mit Matlab arbei-
for k=1:n ten, dann werden Sie bald feststellen, dass
A = randn(8); es nicht für alle ihre Wünsche einge-
Anzahl(k) = ... baute Funktionen oder Kommandos gibt.
sum(abs(imag(eig(A))) < 0.0001); In diesem Fall können Sie sich aber Ih-
end re eigene Funktion schreiben und damit
hist(Anzahl,[0 2 4 6 8]); die Funktionalität von Matlab erweitern.

61 Copyright
c G. Gramlich
Mit Hilfe von Function-Files ( Matlab - Die folgende Funktion ist ein Beispiel für
Funktionen, Funktionen) können Sie den einen Function-File.
Matlab -Funktionsvorrat erweitern. Varia-
function [V,D,r] = MatrixEig(A)
blen in Function-Files sind lokale Varia-
blen. Function-Files haben demnach ih-
[m,n] = size(A);
ren eigenen nach auÿen nicht sichtba-
if m==n
ren Workspace. Die Übergabe einzelner
[V,D] = eig(A);
Variablen erfolgt über eine Parameterlis-
r = rank(A);
te im Funktionsaufruf. Ein Function-File
else
subroutine
entspricht der func- bzw.
disp('Fehler: Die Matrix muss
tion Fort-
in der Programmiersprache
quadratisch sein!')
ran function C/C++
, proce-
in und
end
dure function Pascal
bzw. in . Haben
Sie eine Funktion in Form eines Function- Schreiben Sie sich die obigen Anweisungen

Files geschrieben, so können Sie diesen ge- in eine Datei mit dem Namen MatrixEig.m
nauso aufrufen, wie die eingebauten Mat- und denieren Sie eine Matrix A im Mat-
lab -Funktionen. Für das Schreiben eines lab -Workspace. Führen Sie

Function-Files sind verschiedene Dinge zu


>> [V,D,r] = MatrixEig(A)
beachten.

Damit ein File ein Function-File ist, muss er


aus, dann stehen in der Matrix V die Ei-
mit dem Schlüsselwort function beginnen,
genvektoren, in der Hauptdiagonalen von D
dann folgen die Ausgabeargumente (in ecki-
die Eigenwerte und in r der Rang der Ma-
gen Klammern), der Funktionsname und
trix A. V,D,r sind die Ausgabe- und A das
schlieÿlich die Eingabeargumente (in run-
Eingabeargument der Funktion MatrixEig.
den Klammern). Die Form aller Function-
Der von uns geschriebene Function-File
Files ist
MatrixEig ruft mehrer eingebaute Mat-
function [Out_1,...,Out_n] = lab -Funktionen auf: size, eig, usw.
Name(In_1,...,In_m) Functions können sowohl von anderen
< Irgendwelche Anweisungen > Functions als auch von Scripts aufgeru-
fen werden. Es ist eine Stärke von Mat-
wobei Name der vom Anwender anzugeben- lab -Funktionen, mit einer unterschiedli-
de Funktionsname ist. Der Funktionsname chen Anzahl von Übergabeparameter zu-
(hier Name) muss auch der Filename sein, rechtzukommen. Hierzu exisitieren inner-
unter der der Function-File abgespeichert halb einer Funktion die Variablen nargin
wird. Es ist möglich, dass ein Function-File und nargout (number argument in/out),
keine Ausgabe- und/oder Eingabeargumen- die die Anzahl der übergebenen Parame-
te hat. ter enthalten. Zusätzlich stehen noch die

62 Copyright
c G. Gramlich
Befehle inputname zum Ermitteln der Va-
riablennamen der Übergabeargumente und function [Out,...] = Name(In,...)
nargchk zum Überprüfen der korrekten An- % H1-Zeile
zahl der übergebenen Argumente zur Verfü- % Help Text
doc nargin, doc nargout, doc
gung. Siehe % Help Text usw.
inputname und doc nargchk für entspre- < Irgendwelche Anweisungen >
chende Beispiele. Für weitere Informatio-
nen über Funktionen siehe doc function
Die erste Zeile legt den Funktionsnamen
(help function) und Abschnitt 44.
und die Ein- und Ausgabeparameter fest.
Dies haben wir bereits besprochen. Die
39.3. Namen von m-Files zweite Zeile ist die sogenannte H1-Zeile. In
ihr wird in einer Zeile das Programm be-
Für m-Files gelten bezüglich der Namens-
schrieben. Dies ist die erste Zeile, die auf
wahl die gleichen Regeln wie für Variablen,
dem Bilschirm ausgegeben wird, wenn Sie
siehe Abschnitt 13. Insbesondere wird zwi-
help Name eingeben. Auÿerdem sucht die
schen Klein- und Groÿbuchstaben unter-
lookfor-Funktion nur in dieser H1-Zeile
schieden. Weitere Infos nden Sie unter doc und gibt nur diese aus. Geben Sie sich da-
general und doc lang. her besondere Mühe, diese H1-Zeile kurz
und prägnant zu schreiben. In weiteren an-

39.4. Editieren von m-Files schlieÿenden Zeilen können Sie den m-File
weiter dokumentieren. Script-Files werden
Sie haben zwei Möglichkeiten, um einen genauso gehandelt, dann aber entfällt na-
m-File zu erzeugen und zu editieren. Sie türlich die erste Zeile mit dem Schlüssel-
können einerseits mit einem Editor Ihrer wort function. Weitere Informationen n-
Wahl arbeiten oder andererseits den eige- den Sie in [17].
bauten Matlab -Editor/Debugger verwen-
den. Diesen können Sie mit dem Befehl
edit aktivieren oder durch Anklicken der 39.6. Blockkommentare
Menüoptionen File-New oder File-Open.
Seit Matlab 7 können Sie auch Blöcke von
Codes auskommentieren, indem Sie den Co-
39.5. Zur Struktur eines m-Files de in zwei spezielle Kommentarzeielen set-
zen:
m-Files sollten, um sie auch nach länge-
rer Zeit wieder verwenden zu können, gut
%{
dokumentiert sein (Software Engineering).
<Block>
Professionalle m-Files haben daher folgen-
%}
de Form:

63 Copyright
c G. Gramlich
<Block> steht für eine beliebige Anzahl von deniert und mit den Anweisungen
Codezeilen. Matlab betrachtet dann alle
Zeilen zwischen %{ und %} als Kommentar. fplot(@h,[-3,3,-0.5,1.5]), grid
Blockkommentare können auch geschach-
telt werden.
erhält man die Abbildung 25.

39.7. Übungsaufgaben 1.5

Aufgabe 49 (Function-File) 1
Schreiben Sie einen Function-File, der von
einem Vektor x den arithmetischen und 0.5
geometrischen Mittelwert berechnet und
die Werte zurückgibt. 0

Lösung: Die folgende Funktion tut das Ge-


wünschte. −0.5
−3 −2 −1 0 1 2 3

function [aM,gM] = Mittelwerte(x)


aM = mean(x); Abbildung 25: Sprungfunktion

gM = prod(x)./length(x);
Die Funktion heaviside aus Matlab ist

© ....................................... © an der Stelle t = 0 undeniert, das heiÿt


Matlab ordnet dem Nullpunkt NaN zu. ©
Aufgabe 50 (Function-File) ©
Schreiben Sie einen Function-File, der
die Sprungfunktion (Einheitssprungfukti- Aufgabe 51 (Function-File)
on, Heaviside -Funktion) Zeichnen Sie die Graphen der verschobenen
( Sprungfunktionen h(t+T ), t ∈ R und h(t−
0 t<0
h(t) = T ), t ∈ R für T = 2 im Intervall [−4, 4].
1 t≥0 Lösung: Die Funktionen können mit dem
berechnet. Zeichnen Sie diese Funktion im Function-File

Intervall [−2, 2]. Vergleichen Sie die Funkti-


on h mit der in Matlab denierten Funk-
function y = hT(t,T)
tionheaviside. Wo gibt es Unterschiede? y = ( t>=-T );
Lösung: Die Funktion h ist durch den
Function-File berechnet werden. Die Anweisungen

function y = h(t)
subplot(2,1,1)
y = ( t>=0 );
fplot(@hT,[-4,4,-0.5,1.5],[],...

64 Copyright
c G. Gramlich
[],[],2), Zeichnen Sie die Graphen der Funktionen
grid, title('h(t+2)') im Intervall [−2, 2].
subplot(2,1,2) Lösung: Mit Hilfe der Sprungfunktion h
fplot(@hT,[-4,4,-0.5,1.5],[],... lassen sich diese Funktionen geschlossen
[],[],-2), darstellen. Es ist rect(t)
= h(t+0.5)−h(t−
grid, title('h(t-2)') 0.5), t ∈ R, ramp(t) = th(t), t ∈ R und
g(t) = sin( πt
2 )(h(t)−h(t−1)), t ∈ R. Daher
© ........... © lassen sich diese drei Funktionen in Mat-
erzeugen die Abbildung 26.
lab wie folgt berechnen.
h(t+2)
1.5
1
function y = rect(t)
0.5 y = h(t+0.5)-h(t-0.5);
0
−0.5
−4 −2 0 2 4 function y = ramp(t)
h(t−2)
1.5 y = t.*h(t);
1
0.5
0 function y = g(t)
−0.5
−4 −2 0 2 4 y = sin(pi*t/2)*(h(t)-h(t-1))+...
(t>=1);

Abbildung 26: Verschobene Sprungfunktio-


Die Anweisungen
nen

subplot(3,1,1), title('rect')
fplot(@rect,[-2,2,-0.5,2]), grid
Aufgabe 52 (Function-File) subplot(3,1,2), title('ramp')
Schreiben Sie jeweils einen Function-File,
fplot(@ramp,[-2,2,-0.5,2]), grid
um die folgenden stückweise denierten
subplot(3,1,3), title('g')
Funktionen zu berechnen:
fplot(@g,[-2,2,-0.5,2]), grid
(
1 |t| ≤ 0.5
(a) rect(t) = erzeugen die Abbildung 27. © ........... ©
0 sonst
Aufgabe 53 (Function-File)
(
0 t<0
(b) ramp(t) = Schreiben Sie einen Function-File, um fol-
t sonst
gende Funktion zu berechnen:
 
0
 t<0 x
 x<0
πt
g(t) = sin( 2 ) 0 ≤ t ≤ 1 f (x) = x2
(c) 0≤x<2
 
1 1<t 4 x≥2
 

65 Copyright
c G. Gramlich
2 kann man den Graph mit fplot(@f,[0,1])
1 zeichnen. ©. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .©
0
−2 −1 0 1 2
2
1 Aufgabe 55 (Function-File)
0 Zeichnen Sie die konstante Funktion f (x) =
−2
2
−1 0 1 2
5, x ∈ R im Intervall [0, 2].
1 Lösung: Eine Möglichkeit ist:
0
−2 −1 0 1 2
>> f = @(x) 5;
>> fplot(f,[0,2])
Abbildung 27: Graph der Funktionen

© ....................................... ©
Testen Sie Ihre Funktion für die Werte x=
−2, 1.5, 2 und 6. Zeichnen Sie die Funktion
f mit fplot über dem Intervall [−3, 3]!
Lösung: Der folgende Function-File de- 40. Globale und lokale Variablen
niert die Funktion f .

Die Variablen innerhalb jeder Funktion sind


function y = f(x) lokal, die in Script-Files sind global. Globa-
y1 = x.*(x<0); le Variablen können aber auch mit global
y2 = x.^2.*( (x<2)-(x<=0) ); deniert werden. Um auf diese Variablen
y3 = 4*(x>=2); zugreifen zu können, muss diese Deniti-
y = y1+y2+y3; on sowohl im Haupt-Workspace als auch in
der Function erfolgen. Angezeigt werden die

Der Aufruf fplot(@f,[-3,3]) zeichnet globalen Variablen mit whos global, ge-

den Graph im Intervall [−3, 3]. © . . . . . . . . ©


löscht werden sie mit clear global.

Aufgabe 54 (Function-File)
41. Wie man eziente
Schreiben Sie einen Function-File, um die

Funktion
1
f (t) = t 3 , t ∈ R zu berechnen.
Programme schreibt
Benutzen Sie diesen, um die Funktion
Intervall [0, 1] zu zeichnen.
f im
Schleifen werden in Matlab inezient aus-
geführt. Deshalb sollten Sie diese vermei-
Lösung: Mit dem Function-File
den, wo immer es geht. Nahezu alle Mat-
function y = f(t)
lab -Funktion akzeptieren vektorielle Ar-
gumente, so dass man auf Schleifen häug
y = t.^(1/3);
tatsächlich auch verzichten kann.

66 Copyright
c G. Gramlich
Angenommen Sie wollen die ersten 100 na- Vektoren oder Matrizen als Argumente ver-
türlichen Zahlen aufsummieren (nicht aber arbeiten. Dies lässt eine vektorielle Verar-
die Formel n(n + 1)/2 verwenden). In ei- beitung zu.
ner skalaren Programmiersprache wie zum
C/C++
Die rationale Funktion
Beispiel in würde man wie folgt
 x 8
vorgehen: 1+ 24
f (x) = x x2
1− 12 + 384
int s = 0;
int n; stellt im Intervall [0, 1] eine Approximation
for (n=1;n<101;++n) an die Exponentialfunktion e dar.
{ Der nachfolgende Script zeigt, wie man die
s = s+n; Auswertung dieser Funktion in einer skala-
} ren Programmiersprache wie zum Beispiel
print(``%d\n'',s); FORTRAN oder C/C++ vornehmen müss-
te.

Die analoge Version dieses kleinen Pro-


gramms in Matlab wäre: n = 200;
x = linspace(0,1,n);
s = 0; y = zeros(1,n);
for n=1:100 for k=1:n
s = s+n; y(k) = ((1+x(k)/24)/(1-x(k)/12...
end +(x(k)/384)*x(k)))^8;
s end

Dieser skalare Matlab -Code kann ezien-


In Matlab aber sind Vektoroperationen

ter und übersichtlicher geschrieben werden:


erlaubt, das heiÿt die for-Schleife kann
durch eine einzige vektorwertige Anwei-
sung ersetzt werden. Der folgende Script-
N = 1:100;
File zeigt eine vektorielle Implementierung
s = sum(N)
der Funktion f. Der Übersichtlichkeit we-
gen splitten wir den Term f (x) in mehrere
Der erste Befehl erzeugt den Zeilenvek- Terme auf.
tor N = [1,2,...,100]. Die zweite Anwei-
sung summiert die Koordinaten des Vek- n = 200;
tors N auf. sum ist eine eingebaute Matlab - x = linspace(0,1,n);
Funktion und verträgt Vektoren als Argu- Zaehler = 1 + x/24;
mente. Viele Matlab -Funktionen können Nenner = 1 - x/12 + (x/384).*x;

67 Copyright
c G. Gramlich
Quotient = Zaehler./Nenner; Zaehler./Nenner bedeutet punktweise Di-
y = Quotient.^8; vision, das heiÿt, jede Komponente des Vek-
tors Zaehler wird durch die entsprechen-
de Koordinate des Vektors Nenner dividiert
Um der Variablen y die entsprechenden und anschlieÿend der Variablen Quotient
Funktionswerte von f zuzuweisen, werden zugeordnet. Schlieÿlich wird durch die An-
verschiedene bekannte und weniger bekann- weisung y = Quotient.8 punktweise po-
te Vektoroperationen durchgeführt: Vektor- tenziert, das heiÿt jede Koordinate des Vek-
addition, Vektorsubtraktion, skalare Multi- tor Quotient wird mit 8 potenziert, bevor
plikation, punktweise Vektormultiplikation, das Resultat der Variablen y zugeordnet
punktweise Vektordivision und punktweise wird.
Vektorexponentiation.
Die Matlab -Funktion vectorize vektori-
Betrachten wir den Script-File genauer.
Matlab
siert einen String automatisch. Hierzu be-
erlaubt es, einen Vektor mit ei- trachten wir folgendes Beispiel. Sind die
nem Skalar zu multiplizieren. Dies zeigt Vektoren Zaehler und Nenner wie folgt de-
der Term x/24. Dort wird jede Koordina- niert:
te des Vektors x durch die Zahl 24 divi-
diert bzw. mit 1/24 multipliziert. Das Er- Zaehler = [1 2 3];
gebnis ist ein Vektor mit der gleichen Län- Nenner = [4 5 6];
ge und Orientierung (Zeile oder Spalte) wie
der Vektor x. Im obigen Script ist x ein Zei- dann ist Zaehler/Nenner keine vektorielle
lenvektor und somit ist x/24 ebenfalls ein Divsion, da vor dem Divisionszeichen / der
Zeilenvektor. Durch die Anweisung 1+x/24 Punkt . fehlt. Die Anweisung
wird zu jeder Koordinate des neuen Vek-
torsx/24 1 hinzuaddiert und der Variablen >> vectorize('Zaehler/Nenner')
Zaehler zugeordnet. Dies ist natürlich kei- ans =
ne Vektorraumoperation, aber eine nützli- Zaehler./Nenner
che Matlab -Eigenschaft. Wir betrachten
nun die Variable Nenner. Hierbei bedeutet erzeugt die gewünschte Syntax. Analog
die Operation (x/384).*x eine punktweise setzt der Befehl vectorize vor den Zeichen
Vektormultiplikation. das heiÿt jede Koor-
* und  einen Punkt und ermöglichst somit
dinate von x/384 wird mit jeder Koordi-
eine vektorisierte Operation.
naten des Vektors x multipliziert. Beachten
Sie, dass die Vektoren die gleiche Länge ha- Aufgabe 56 (Eziente Programme)
ben. Zum Ergebnis wird 1 hinzuaddiert und '((1+x/24)/
Vektorisieren Sie den String
von jeder Koordinate x/12 (1-x/12+x2/384))8' und zeigen Sie gra-
subtrahiert, be-
vor das Ergebnis der Variablen Nenner zu- sch, dass f eine Approximation im Inter-
geordnet wird. Die Anweisung Quotient = vall [0, 1] an die Exponentialfunktion e ist.

68 Copyright
c G. Gramlich
Lösung: Die folgenden Zeilen lösen die vorbesetzt. Hätten wir dies nicht getan, so
Aufgabe. müsste Matlab in jedem Schleifendurch-
lauf die Gröÿe der Matrix E durch Hin-
y = vectorize('((1+x/24)/(1- zunahme einer weiteren Spalte verändern,
x/12+x^2/384))^8'); was sich durch eine längere Ausführungszeit
x = linspace(0,1,20); bemerkbar machen würde. Darüber hinaus
vs = vectorize('((1+x/24)/(1- hat das Vorbesetzen der Ausgabematrizen
x/12+x^2/384))^8'); den Vorteil, dass man sich bereits vorher
y = eval(vs,x); über die Gröÿe und Orientierung Gedanken
plot(x,exp(x),x,y,'ro') machen muss, was zu disziplinärem Pro-
legend('e','f') grammierstil erzieht.

Wir fassen noch einmal zusammen: Das Er-


© ....................................... © setzen einer Schleife durch eine Vektorope-
ration nennt man Vektorisierung und hat
Nicht alle Berechnungen sind jedoch vek-
drei Vorteile:
torisierbar. In diesen Fällen muss man auf
Schleifen zurückgreifen. Um diese Berech- • Geschwindigkeit. Viele eingebaute Mat-
nungen jedoch schneller auszuführen, sollte lab -Funktionen werden schneller ausge-
man die Ausgabematrizen mit Nullen vor- führt, wenn man anstelle eines mehrfa-
besetzen (Preallokieren). Wir erläutern an chen Aufrufs als Argument einen Vektor
einem Beispiel, was damit gemeint ist. An- übergibt.
genommen es sei die Matrix
• Übersichtlichkeit. Es ist übersichtlicher,
Matlab
 
0.8 0.3 ein vektorisiertes -Script zu le-
A=
0.2 0.7 sen, als das skalare Gegenstück.

gegeben und wir wollen die Eigenwerte der


• Ausbildung. Im wissenschaftlichen Rech-
Matrizen Ak für k = 1, 2, . . . , 10 berechnen. nen ist man bei verschiedenen Rechnern
Die Eigenwerte sollen spaltenweise in der
interessiert, vektorisierte Algorithmen zu
Ausgabematrix E gespeichert werden. Das
entwickeln und zu implementieren. Mat-
folgende Script realisiert dies:
lab unterstützt dies.

E = zeros(2,10); Somit gilt:


for k=1:10
E(:,k) = eig(A^k); Vermeiden Sie Schleifen in Mat-
end lab , wann immer dies möglich
ist.
Mit der Anweisung E = zeros(2,10); ha- Vektorisieren Sie ihre Rechnun-
ben wir die Ausgabematrix E mit Nullen gen, wann immer dies möglich ist.

69 Copyright
c G. Gramlich
Aufgabe 57 (Programmierung)
Matlab
20
Schreiben Sie die folgenden -Zeilen
vektoriell. 10

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

Lösung: Die vektorielle und ezientere


−20
−10 −5 0 5 10

Programmierung ist:

Abbildung 28: Graph von f


x = 1:10;
y = sqrt(x);
42. Lineare Algebra (1)
© ....................................... © Diesen Abschnitt habe ich im Zusammen-
hang mit meinem Buch [4] geschrieben.
Aufgabe 58 (Programmierung) Viele Beispiele sind daraus. Im Folgen-
Plotten Sie die Funktion
den werden wir je nach Bedarf zwischen
numerischen und symbolischen Funktionen
f (x) =2 sin(x) + 3 sin(2x) + 7 sin(3x)
hin und her wechseln, das heiÿt zwischen
+ 5 sin(4x), x∈R Grundfunktionen aus Matlab und zwi-
schen Funktionen aus der Symbolic Toolbox,
im Intervall [−10, 10].
siehe auch Abschnitt 60.
Lösung: Wir nutzen die vektorielle Pro-
grammierfähigkeit von Matlab , sowie et-
was Matrizenrechnung und können f so wie 42.1. Lineare Gleichungssysteme und
folgt ezient darstellen. Matrizen
n = 200; Zu Matrizen siehe auch Abschnitt 20. Das

x = linspace(-10,10,n)'; lineare Gleichungssystem

A = [sin(x) sin(2*x) sin(3*x) ...


sin(4*x)]; x + y + 2z = 9
y = A*[2; 3; 7; 5]; 2x + 4y − 3z = 1
plot(x,y) 3x + 6y − 5z = 0

aus Beispiel 1.6 in [4] können wir in


Der Graph der Funktion
28 zu sehen.
f ist in Abbildung
© .......................... ©
Matlab mit dem \-Operator (Backslash-
Operator) wie folgt lösen.

70 Copyright
c G. Gramlich
Die Funktion inv kann sowohl für
>> A = [1 1 2; 2 4 -3; 3 6 -5]; numerische als auch für symboli-
>> b = [9; 1; 0]; sche Rechnungen verwendet wer-
>> x = A\b den. Dies gilt auch für viele ande-
ans = re Funktionen.
1.0000
2.0000 Die Null- und Einheitsmatrizen jeder Grö-
3.0000 ÿe können durch die Funktionen zeros und
eye erzeugt werden. Die Funktion lu be-
Alternativ können wir die Funktion rref rechnet die LU-Faktorisierung einer Matrix.
verwenden. Diese transformiert eine gege-
bene Matrix in reduzierte Zeilenstufenform.
Aufgabe 59 (Lineare Systeme)
>> rref([A b]) Berechnen Sie die allgemeine Lösung des li-
ans = nearen Gleichungssystems
1 0 0 1
0 1 0 2
     
2 4 −2 x1 2
0 0 1 3  4 9 −3   x2  =  8  .
−2 −3 7 x3 10
Die Lösung kann nun direkt abgelesen wer-
den. Die Funktion inv berechnet die Inverse A x b
einer Matrix. Daher nden wir die Lösung
auch wie folgt (Satz 1.8)
Lösung: Die allgemeine Lösung ist die ein-
deutige Lösung x = (−1, 2, 2). Dies zeigen

>> x = inv(A)*b die nachfolgenden Matlab -Zeilen.

x =
1.0000 >> A = [2 4 -2; 4 9 -3; -2 -3 7];
2.0000 >> b = [2; 8; 10];
3.0000 >> x = A\b
x =
Wir bestätigen Satz 1.9 in Matlab . -1.0000
2.0000
>> syms a b c d 2.0000
>> A = [a,b; c,d];
>> inv(A)
Die Lösung ist eindeutig, sonst wäre die
ans =
[ d/(a*d-b*c), -b/(a*d-b*c)]
Matrix A singulär und Matlab hätte mit
einer Fehlermeldung geantwortet. Hier noch
[ -c/(a*d-b*c), a/(a*d-b*c)]
alternativ die symbolische Lösung.

71 Copyright
c G. Gramlich
Aufgabe 61 (Lineare Systeme)
>> x = sym(A)\b Berechnen Sie die allgemeine Lösung des li-

x = nearen Gleichungssystems

[ -1]
[ 2] −x2 + 3x3 = 1
[ 2] 3x1 + 6x2 − 3x3 = −2
6x1 + 6x2 + 3x3 = 5.

© ....................................... ©
Lösung: Die allgemeine Lösung ist die ein-
deutige Lösung x = (3, −2, −1/3), denn es
Aufgabe 60 (Lineare Systeme) gilt
Berechnen Sie die allgemeine Lösung des li-
nearen Gleichungssystems >> A = [0 -1 3; 3 6 -3; 6 6 3];
>> b = [1; -2; 5];
4x1 − 8x2 = 12 >> sym(A)\b
3x1 − 6x2 = 9 ans =
[ 3]
−2x1 + 4x2 = − 6.
[ -2]
[ -1/3]
Lösung: Die allgemeine Lösung können wir
aus © ....................................... ©

>> A = [4 -8; 3 -6; -2 4]; Aufgabe 62 (Lineare Systeme)


>> b = [12; 9; -6]; Berechnen Sie die allgemeine Lösung des li-

>> rref([A b]) nearen Gleichungssystems

ans =
x1 + x2 + 2x3 = 8
1 -2 3
0 0 0 −x1 − 2x2 + 3x3 = 1
0 0 0 3x1 − 7x2 + 4x3 = 10.

ablesen. Demnach ist: x = (3, 0) + t(2, 1), Lösung: Die allgemeine Lösung ist die ein-

t ∈ R die allgemeine Lösung. Dieses Bei- deutige Lösung x = (3, 1, 2), denn es gilt

spiel zeigt, dass auch überbestimmte Syste-


me unendlich viele Lösungen haben können. >> A = [1 1 2; -1 -2 3; 3 -7 4];
© ....................................... © >> b = [8; 1; 10];
>> sym(A)\b

72 Copyright
c G. Gramlich
ans = © ....................................... ©
[ 3]
[ 1] Aufgabe 64 (Beispiel 1.24 in [4])
[ 2] Berechnen Sie die Inverse der Matrix

 
© ....................................... © 1 −2
A=
3 2
Aufgabe 63 (Lineare Systeme)
Berechnen Sie die allgemeine Lösung von Lösung: Es ist

Ax = b mit

4 1 0 0 0
 
4.1
 >> A = [1 -2; 3 2];
 1 4 1 0 0   2.4  >> inv(sym(A))
    ans =
A=  0 1 4 1 0 4.2
, b =  ,
 0 0 1 4 1



 2.4

 [ 1/4, 1/4]
0 0 0 1 4 4.1 [ -3/8, 1/8]

wobei es ganz Ihnen überlassen ist, wie Sie


die allgemeine Lösung herausbekommen. © ....................................... ©
Lösung: Die eindeutige Lösung ergibt sich
aus den folgenden Anweisungen. Aufgabe 65 (Inverse)
Finden Sie mit Matlab die Inverse der Ma-
>> A = 4*diag([ones(5,1)])+... trix
diag([ones(4,1)],1)+...
 
a b c
diag([ones(4,1)],-1) S= d e f 
A = g h i
4 1 0 0 0
Unter welchen Bedingungen existiert diese?
1 4 1 0 0
Bestätigen Sie mit diesem Ergebnis die In-
0 1 4 1 0
verse in Beispiel 1.26 aus [4].
0 0 1 4 1
Lösung: Die Inverse erhalten wir durch
0 0 0 1 4
>> b = [4.1,2.4,4.2,2.4,4.1]';
>> syms a b c d e f g h i
>> A\b
>> S = [a b c; d e f; g h i];
ans =
>> pretty(inv(S))
1.0000
[ e i - f h
0.1000
[ --------- usw.
1.0000
[ %1
0.1000
[
1.0000
[ d i - f g

73 Copyright
c G. Gramlich
[- --------- usw.
[ %1 n = 44; %-zum Beispiel 44.Ordnung
[ A = rand(n);
[ -d h + e g B = A + A';
[- ---------- usw.
[ %1 steht in der Matrix B eine symmetrische
Matrix aus R
44×44 . © ................... ©
%1 := a e i - a f h - d b i +
d c h + g b f - g c e
42.2. Vektoren in der Ebene und im
Die Inverse exisiert genau dann, wenn der
Raum
Nenner aei − af h − dbi + dch + gbf − gce Zu Vektoren siehe auch Abschnitt 18. Vek-
ungleich Null ist. Ein Vergleich mit
toroperationen lassen sich in Matlab ein-
fach ausführen. Die Summe der beiden Vek-
>> det(S) toren u = (2, 3, −1) und v = (3, −4, 2) ist
ans = (Beispiel 2.3 in [4])
a*e*i-a*f*h-d*b*i+d*c*h+g*b*f-g*c*e
>> u = [2;3;-1]; v = [3;-4;2];
zeigt, dass dies gerade die Determinante
>> u+v
von S ist. Setzt man für a = 1, b = 1, . . .,
ans =
i = −5 nach Beispiel 1.26 in [4], so erhält 5
man die Inverse zu
-1
  1
2 −17 11
 −1 11 −7  . Die Länge des Vektors v = (4, −3) ist
0 3 −2
>> norm([4;-3])
Übrigends die Determinante der Matrix ist ans =
−1. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . © 5

Aufgabe 66 (Symmetrische Matrizen) Das Skalarprodukt der beiden Vektoren


Angenommen Sie wollen einen Algorithmus u = (0, 0, 1) und v = (0, −2, 2) haben wir
testen, der als Eingabe eine symmetrische in Beispiel 2.8 ausgerechnet; hier die Bestä-
Matrix benötigt. Finden Sie eine Möglich- tigung mit der dot-Funktion
keit eine beliebige symmetrische Matrix in
Matlab zu erzeugen. >> u = [0;0;1]; v = [0;-2;2];
Lösung: Nach den folgenden Zeilen >> dot(u,v)

74 Copyright
c G. Gramlich
ans = ans =
2 2
-7
Den Winkel aus Beispiel 2.9 berechnen wir
-6
wie folgt

Das dyadische Produkt abT von Vektor


>> KosWinkel = dot(u,v)/... a = (1, 2) und b = (4, 1, 4, 3) berechnet sich
(norm(u)*norm(v)) wie folgt
KosWinkel =
0.5000 >> a = [1;2]; b = [4;1;4;3];
>> phi = acos(KosWinkel) >> a*b'
phi = ans =
1.0472 4 1 4 3
8 2 8 6
Beachten Sie, Matlab rechnet im Bogen-
maÿ. Die Zeile
Aufgabe 67 (Skalarprodukt)
>> 180*phi/pi Berechnen Sie jeweils das Skalarprodukt
ans = der angegebenen Vektoren:
60.0000
(a) a = (1, 0); b = (0, 1)
liefert den Winkel im Gradmaÿ. Wir be-
(b) a = (1, 0, 0); b = (0, 1, 0)
rechnen den Projektionsvektor aus Beispiel
2.12 (c) a = (1, 1, 1); b = (−2, −2, −2)
>> p = (u'*a)/(norm(a)^2)*a (d) a = (2, 2, 2); b = (3, 3, 3)
p =
2.7692 Lösung:
-0.6923
2.0769 (a) >> dot([1,0],[0,1])
ans =
Mit der cross-Funktion können wir das 0
Kreuzprodukt berechnen. Wir bestätigen
damit Beispiel 2.13
(b) >> dot([1,0,0],[0,1,0])
ans =
>> u = [1;2;-2]; v = [3;0;1];
0
>> cross(u,v)

75 Copyright
c G. Gramlich
nicht orthogonal ist. Wir betrachten Zah-
(c) >> dot([1,1,1],[-2,-2,-2]) lenbeispiele mit der Matrix A aus Beispiel
ans = 4.23.
-6
>> A = sym([1,2; 3 6]);
>> null(A)
(d) >> dot([2,2,2],[3,3,3]) ans =
ans = [ -2]
18 [ 1]

© ....................................... © Auch Matlab hat t = 1 gewählt, um einen


Basisvektor für den Nullraum von A zu be-
stimmen. Eine (numerische) Basis der Län-
42.3. Analytische Geometrie von ge 1 erhält man mit
Geraden und Ebenen
>> A = [1,2; 3 6];
Wir berechnen den Normalenvektor aus >> null(A)
Beispiel 3.12 in [4] ans =
-0.8944
>> cross([1 0 2],[0 -5 8]) 0.4472
ans =
10 -8 -5 Die beiden Anweisungen

Mehr Geometrie und Matlab nden Sie >> A = sym([1,2; 3 6]);


bei [20]. >> colspace(A)
ans =
[ 1]
42.4. Reelle Vektorräume und [ 3]
Unterräume
Zur Berechnung einer orthonormalen Basis liefern eine Basis des Spaltenraumes von

des Nullraumes und des Spaltenraumes ste- A. Eine Basis der Länge 1 erhält man mit

hen uns die Funktionen null und orth zur orth.


Verfügung. Die Funktion null liefert auch
>> A = [1,2; 3 6];
von symbolischen Matrizen eine Basis; diese
>> orth(A)
ist im Allgemeinen aber nicht orthogonal.
ans =
Um symbolisch eine Spaltenraumbasis zu
-0.3162
erhalten, können wir colspace verwenden.
-0.9487
Auch hier gilt, dass diese im Allgemeinen

76 Copyright
c G. Gramlich
Wir bestätigen Satz 4.12. tiert. Wir bestätigen nun die dort gefunde-
nen Resultate, indem wir zu jedem Funda-
>> null(A) mentalraum eine Basis berechnen.
ans =
[ -2] >> A = sym([1,2; 3 6]);
[ 1] >> null(A)
>> Z = rref(A) ans =
Z = [ -2]
[ 1, 2] [ 1]
[ 0, 0] >> colspace(A)
>> null(Z) ans =
ans = [ 1]
[ -2] [ 3]
[ 1] >> null(A')
ans =
und
[ -3]
[ 1]
>> colspace(A') >> colspace(A')
ans = ans =
[ 1] [ 1]
[ 2] [ 2]
>> colspace(rref(A)')
ans = Basen der Länge 1 erhalten wir wie folgt
[ 1]
[ 2] >> A = [1,2; 3 6];
>> null(A)
Den Rang einer Matrix können wir mit der ans =
Funktion rank bestimmen. Wir berechnen -0.8944
den Rang der Matrix A aus Beispiel 4.26. 0.4472
>> orth(A)
>> A = [1 2 4 0 1; 0 1 2 0 0;... ans =
0 0 0 1 0; 0 0 0 0 0]; -0.3162
>> rank(A) -0.9487
ans = >> null(A')
3 ans =
-0.9487
In Beispiel 4.28 haben wir alle vier Funda- 0.3162
mentalräume an Hand der Matrix A disku- >> orth(A')

77 Copyright
c G. Gramlich
ans =
-0.4472 >> a = [1,-2,3];
-0.8944 >> b = [5,6,-1];
>> c = [3,2,1];
Der Spaltenraum von A und der Nullraum
>> A = sym([a',b',c']);
von A T
sind orthogonale Komplemente im
>> det(A), rank(A)
Rm . Hier eine Bestätigung
ans =
0
>> A = [1,2; 3 6]; ans =
>> orth(A)'*null(A') 2
ans = >> eig(A)
-1.6653e-016 ans =
0
4
bzw. analog im Rn , nun symbolisch.
4
>> colspace(A')'*null(A) >> svd(A)
ans = ans =
0 0
(45+3*97^(1/2))^(1/2)
(45-3*97^(1/2))^(1/2)
Mit dem Backslash-Operator \ können wir
>> rref(A)
lineare Ausgleichsaufgaben lösen. Wir be-
ans =
stätigen damit die Lösung aus Beispiel 4.34.
[ 1, 0, 1/2]
[ 0, 1, 1/2]
>> A = [1,0; 1 1; 1 2];
[ 0, 0, 0]
>> b = [6;0;0];
>> null(A)
>> A\b
ans =
ans =
1
5.0000
1
-3.0000
-2
>> colspace(A)
Aufgabe 68 (Lineare Unabhängigkeit) ans =
Sind die Vektoren a = (1, −2, 3), [ 1, 0]
b = (5, 6, −1) und c = (3, 2, 1) linear [ 0, 1]
unabhängig (Beispiel 4.16 in [4])? [ 1, -1]
Lösung: Die nachfolgenden Matlab -
Zeilen zeigen auf verschiedene Weisen, dass
© ....................................... ©
die drei Vektoren linear abhängig sind.

78 Copyright
c G. Gramlich
Aufgabe 69 (Basen) Lösung: Zum Beispiel mit der Funktion
Bestimmen Sie von der Matrix rank. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©
 
1 0 Aufgabe 71 (LGS und Rang)
A= 1 1  Wenn ein lineares Gleichungssystem eine
1 2 Lösung hat, wie können Sie dann (in Mat-
jeweils eine Basis der vier Fundamentalräu-
lab ) entscheiden, ob es genau eine oder
mehrere gibt?
me.
Lösung: Hier eine symbolische Lösung. Zu-
Lösung: Zum Beispiel mit der Funktion
erst Basen des Nullraumes und des Spal-
rank. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©
tenraumes, dann Basen des transponierten
Aufgabe 72 (Ausgleich)
Nullraumes und des Zeilenraumes.
Berechnen Sie die Näherungslösung (im

>> null(A), colspace(A) Sinne der linearen Ausgleichsrechnung) von

ans = Ax = b und den orthogonalen Projektions-


[ empty sym ] vektor p von b auf den Spaltenraum von A

ans = des Systems

[ 1, 0] 
1 1

 

7

[ 0, 1]  −1 1  x1
=  0 .
[ -1, 2] −1 2
x2
−7
>> null(A'), colspace(A')
ans = A x b
[ 1]
[ -2] Lösung: Die nachfolgende Zeilen geben die
[ 1] Lösungen.
ans =
[ 1, 0] >> A = [1 1; -1 1; -1 2];
[ 0, 1] >> b = [7; 0 ; -7];
>> x = A\b
Für eine numerische Lösung benützt man x =
die Funktionen null und orth; diese liefern 5.0000
sogar orthonormale Basen. ©............© 0.5000
>> p = A*x
p =
Aufgabe 70 (LGS und Rang)
5.5000
Wie können Sie (in Matlab ) entscheiden,
-4.5000
ob ein lineares Gleichungssystem eine Lö-
-4.0000
sung hat?

79 Copyright
c G. Gramlich
5
© ....................................... ©
4.8

Aufgabe 73 (Ausgleich) 4.6

Die Datenpunkte
4.4

ti bi 4.2

0 3.825
4
0.2 4.528
0.4 4.746 3.8
0 0.2 0.4 0.6 0.8 1
0.6 4.873
0.8 4.865 Abbildung 29: Zu Aufgabe 73
1.0 4.813

Die Abbildung 29 zeigt die grasche Dar-


sollen im Sinne der linearen Ausgleichsrech-
nung an eine Funktion der Form
stellung. © .............................. ©

f (t, x) = x1 + x2 t + x3 cos(t)
42.5. Determinanten
angepasst werden. Zeichnen Sie die Daten-
Zur Berechnung der Determinante einer
punkte und die Ausgleichsfunktion, nach-
Matrix steht die Funktion det zur Verfü-
dem Sie die Lösung berechnet haben.
gung, sowohl numerisch als auch symbo-
Lösung:
lisch. Wir berechnen die Determinante von

t = [0 0.2 0.4 0.6 0.8 1]';


 
a b
A= .
b = [3.825 4.528 4.746 4.873... c d
4.865 4.813]';
A = [ones(length(t),1),t,cos(t)]; >> syms a b c d
x = A\b >> A = [a b; c d];
x = >> det(A)
-1.0428 ans =
3.1516 a*d-b*c
4.9265
plot(t,b,'o','MarkerSize',10)
Die folgende Zeile bestätigt das Ergebnis
tt = linspace(min(t),max(t));
aus Beispiel 5.10.
f = x(1)+x(2)*tt+x(3)*cos(tt);
hold on
>> A = [1 1 1; 2 4 -3; 3 6 -5];
plot(tt,f)
>> det(A)

80 Copyright
c G. Gramlich
ans = Das charakteristische Polynom einer Ma-
-1 trix erhalten wir mit der Funktion poly;
siehe Beispiel 6.2.

Aufgabe 74 (Determinanten) >> A = sym([1 1; -2 4]);


Berechnen Sie die Determinante von
>> poly(A)
  ans =
1 1 2 x^2-5*x+6
A =  2 4 −3 
3 6 −5
Eine symmetrische Matrix ist immer diago-
nalisierbar. Wir überprüfen Beispiel 6.12.
Lösung: Hier die symbolische Lösung.

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


>> det(A) >> [X,D] = eig(sym(A))
ans = X =
-1 [ 0, 1, 1]
[ -1, -1, 1]
[ 1, 0, 1]
© ....................................... © D =
[ 2, 0, 0]
[ 0, 2, 0]
42.6. Eigenwerte und Eigenvektoren [ 0, 0, 8]
Die Funktion eig hift uns beim Lösen einer
Eigenaufgabe. Es können damit sowohl Ei- Wir machen die Probe.
genwerte als auch Eigenvektoren berechnet
werden, sowohl numerisch als auch symbo- >> X*D*inv(X)
lisch. Wir bestätigen Beispiel 6.2. ans =
[ 4, 2, 2]
>> A = sym([1,1; -2,4]); [ 2, 4, 2]
>> [X,D] = eig(sym(A)) [ 2, 2, 4]
X =
[ 1, 1]
Für eine symbolische Matrix versucht die
[ 1, 2]
Funktion eig ein exaktes Eigenwertsystem
D =
[ 2, 0]
zu berechnen. Aus der Galois -Theorie wis-
sen wir, dass dies jedoch nicht immer für
[ 0, 3]
Matrizen der Ordnung 5 oder gröÿer mög-

81 Copyright
c G. Gramlich
lich ist. Es sei [ 0, 1, -2]

−6 12 4
 [ 1, -3, 1]
A= 8 −21 −8 
D =
−29 72 27
[ -2, 0, 0]
[ 0, 3, 0]
gegeben. Wir wollen Matlab verwenden, [ 0, 0, -1]
um folgende Frage zu beantworten: Ist A
reell diagonalisierbar, das heiÿt, können wir
Schlieÿlich kann man mit inv(X)*A*X über-
eine Matrix X X −1 AX dia-
nden, so dass
prüfen, ob X −1 AX die gewünschte Diago-
gonalisierbar ist? Die Eigenwerte von A n-
den wir mit eig(sym(A)). Matlab
antwor-
nalmatrix ist. Wir erhalten das gewünschte
Ergebnis:
tet mit:

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

Da die Eigenwerte von A alle reell und von- Aufgabe 75 (Eigensysteme)


einander verschieden sind, kann A diagona- Gegeben ist die 4 × 4 Matrix
lisiert werden, das heiÿt, es gibt eine Matrix
X mit 12

48 68 88

−1

0 0
  −19 −54 −57 −68 
A= .
X −1 AX =  0 −2 0  .  22 52 66 96 
0 0 3 −11 −26 −41 −64

Wie ndet man X ? Die Spalten von X kön- Zeigen Sie mit Matlab , dass die Eigenwer-
nen als Eigenvektoren zu den Eigenwerten te von A reell und voneinander verschie-
-1,-2 und 3 gewählt werden. Gibt man den sind. Finden Sie eine Matrix X , so dass
X −1 AX diagonal ist.
>> [X,D] = eig(sym(A)) Lösung:

ein, so gibt Matlab in der Diagonalmatrix >> A = [ 12 48 68 88;


D die Eigenwerte zurück und die Spalten -19 -54 -57 -68;
von X sind dazugehörige Eigenvektoren: 22 52 66 96;
-11 -26 -41 -64];
X = >> [X,D] = eig(sym(A))
[ 1, 0, -4] X =

82 Copyright
c G. Gramlich
[ 1, -12/11, 0, -2] Maus kann man diesen auf dem Einheits-
[ -2, 1, 1, 2] kreis bewegen. Zur gleichen Zeit wird Ax
[ 1, -14/11, -2, -2] angezeigt und bewegt. Manchmal ist Ax
[ 0, 7/11, 1, 1] vor x, manchmal aber auch hinter x. Ax
D = kann zu x auch parallel sein. In diesem Au-
[ -16, 0, 0, 0] genblick gilt Ax = λx und x ist ein Eigen-
[ 0, -4, 0, 0] vektor. Der Eigenwert λ bestimmt sich aus
[ 0, 0, -8, 0] der Länge und Richtung von Ax. Die zur
[ 0, 0, 0, -12] Verfügung stehenden Matrizen illustrieren
>> inv(X)*A*X folgende Möglichkeiten:
ans =
[ -16, 0, 0, 0] 1. Es gibt keine (reellen) Eigenvektoren. x
[ 0, -4, 0, 0] und Ax sind nie parallel. Die Eigenwer-
[ 0, 0, -8, 0] te und Eigenvektoren sind komplex. Es
[ 0, 0, 0, -12] gibt keinen Eigenraum von R2 .

2. Es gibt nur eine Gerade, auf der die Ei-


© ....................................... ©
genvektoren liegen. Dies ist der einzige
Eigenraum von R2 .
Die Anweisung J = jordan(A) berechnet
die Jordan -Matrix von A und [V,J]
3. Es gibt Eigenvektoren mit zwei unab-
= jordan(A) zusätzlich die Ähnlichkeit- hängigen Richtungen. Es gibt genau
stransformation V . Die Spalten von V sind 2
zwei Eigenräume von R . Dies ist ty-
die verallgemeinerten Eigenvektoren von A.
pisch, der Standardfall.

>> A = sym([3/2 1;-1/4 1/2]); 4. Jeder Vektor ist Eigenvektor oder an-
>> [V,J] = jordan(A) ders gesagt: Jeder eindimensionale Un-
V = terraum von R2 ist Eigenraum.
[ 1/2, 1]
[ -1/4, 0] Auch die Singulärwertzerlegung kann im
J = Fall m=n=2 mit der Funktion eigshow
[ 1, 1] visualisiert werden. Für weitere Informatio-
[ 0, 1] nen siehe [6].

Viele in der Praxis auftretenden Eigen-


In Matlab gibt es die Funktion eigshow, wertprobleme haben die Form eines verall-
die das Eigenwertproblem für eine (2, 2)- gemeinerten (allgemeinen) Eigenwertpro-
Matrix visualisiert. Beim Aufruf sieht man blems : Gegeben sind zwei quadratische Ma-
den Einheitsvektor x = (1, 0) und mit der trix A und B . Gesucht sind Zahlen λ und

83 Copyright
c G. Gramlich
Vektoren x, sodass gilt diagonalisiert A. Man erhält sie mit der
Funktion eig.
Ax = λBx.

Für B 6= E ist diese Aufgabenstel- >> A = [3 1; 1 3];


lung eine Verallgemeinerung der herkömm- >> [Q,D] = eig(A)
lichen Eigenwertaufgabe; für B=E redu- Q =
ziert sich das verallgemeinerte Eigenwert- -0.7071 0.7071
problem auf die Standardeigenwertaufgabe. 0.7071 0.7071
Verallgemeinerte Eigenwertprobleme tre- D =
ten zum Beispiel inmechanischen Schwin- 2 0
gungssystemen auf; dort ist A die Steig- 0 4
keitsmatrix und B die Massenmatrix.
Ist A oder B eine reguläre Matrix, dann
Probe:
kann man das verallgemeinerte Problem auf
ein gewöhnliches reduzieren, entweder so
>> inv(Q)*A*Q
(B −1
A)x = λx. ans =
2.0000 0
oder so 0 4.0000
1
(A−1 B)x = x.
λ
In Matlab kann auch dieses verallgemei- Die symbolische eig-Funktion liefert (nur)
nerte Problem mit der Funktion eig ange- eine orthogonale Basis aus Eigenvektoren.
gangen werden. Die Funktion eigs berech- © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©
net ein paar Eigenwerte und Eigenvektoren,
wenn gewünscht.

Aufgabe 76 (Eigensysteme) 42.7. Lineare Abbildungen und


Bestimmen Sie eine orthogonale Eigenvek- Matrizen
torenmatrix Q, die die Matrix
  Wir visualisieren lineare Abbildungen im
3 1 R2 . Diese können durch (2, 2)-Matrizen be-
A=
1 3 schrieben werden. Wir zeichnen ein Haus
und betrachten das neue Haus nach linea-
diagonalisiert.
Lösung: ren Abbildungen. Die folgende Matlab -
Funktion zeichnet ein Haus in der Ebene,
Die Matrix
indem sie Datenpunkte, die in der Matrix
√ √ 
H

−1/√2 1/√2 angegeben werden müssen, miteinander
Q=
1/ 2 1/ 2 verbindet.

84 Copyright
c G. Gramlich
x-Achse. Im ersten Fall ist
function plotHaus(H)
cos 60◦ − sin 60◦
 
%-Zeichnet ein Haus. A=
x = H(1,:)'; y = H(2,:)'; sin 60◦ cos 60◦
plot(x,y,'o',x,y,'r-')
und im Zweiten
axis([-10 10 -10 10]); axis square;
 
1 0
A= .
Die beiden Anweisungen 0 −1

Nach zweimaligem Aufruf von


>> H = [-6,-6,-7,0,7,6,6,-3,-3,...
0,0,-6; -7,2,1,8,1,2,... plotHaus(A*H) (zuvor entsprechend A
denieren!) erhalten wir die Bilder 31 und
-7,-7,-2,-2,-7,-7]
>> plotHaus(H) 10

8
erzeugen das Bild 30. 6

4
10
2
8
0
6
−2
4
−4
2
−6
0
−8
−2
−10
−4 −10 −5 0 5 10
−6

−8 Abbildung 31: Nach Drehung

−10
−10 −5 0 5 10 32.

Abbildung 30: Durch die Datenpunkte in H 42.8. Matlab-Funktionen für die


erzeugte Haus
Lineare Algebra im Überblick
Um nun lineare Abbildungen zu sehen , Zusammenfassend habe ich in den Tabel-
müssen wir eine lineare Abbildung als Ma- len 18, 19 und 20 die wichtigsten Funk-
trix A denieren und diese mit H multiplizie- tionen aus Matlab zur Linearen Alge-
ren. Als Beispiel betrachten wir eine Dre- bra zusammengestellt. Beachten Sie, dass
hung um 60◦ und eine Spiegelung an der zum Beispiel die Funktionen eig, inv usw.

85 Copyright
c G. Gramlich
10

8
Symbolische Funktionen
6 colspace Basis für Spaltenraum
4 det Determinante
2 diag Diagonalmatrix
0 eig Eigenwerte und -vektoren

−2 expm Exponentialfunktion
inv Inverse
Jordan
−4

−6
jordan -Form
null Basis für Nullraum
−8
poly Charakteristisches Polynom
−10
−10 −5 0 5 10 rank Rang
rref Reduzierte Zeilenstufenform
Abbildung 32: Nach Spiegelung svd Singulärwertzerlegung
tril Untere Dreiecksmatrix
triu Obere Dreiecksmatrix
vom Overloading Gebrauch machen. Over-
loading ist ein Mechanismus, der es er- Tabelle 18: Lineare Algebra

laubt verschiedene Typen von Funktionsar-


gumenten zu verwenden. So kann A beim
Aufruf von eig(A) eine symbolische oder
eine numerische Matrix sein. Numerische Funktionen
det Determinante
diag Diagonalmatrix
eig Eigenwerte und -vektoren
42.9. Lineare Gleichungssysteme (2) expm Exponentialfunktion
inv Inverse

In vielen Anwendungen muss man lineare null Orth. Basis für Nullraum

Gleichungen lösen. Daher ist es in Matlab orth Orth. Basis für Spaltenraum

besonders einfach, solche zu lösen. Hierzu poly Charakteristisches Polynom

dient der\-Operator (Backslash-Operator), rank Rang

siehe doc slash (help slash). Auch die rref Reduzierte Zeilenstufenform

Funktion linsolve löst lineare Gleichungs- svd Singulärwertzerlegung

systeme. Unter Verwendung dieser Funkti- tril Untere Dreiecksmatrix

on ist es möglich, lineare Systeme ezienter triu Obere Dreiecksmatrix

zu lösen, wenn die Struktur der Koezien-


Tabelle 19: Lineare Algebra
tenmatrix (Systemmatrix) bekannt ist, sie-
he doc linsolve (help linsolve).

86 Copyright
c G. Gramlich
Weitere Funktionen Aufgabe 77 (Lineare Systeme)
cross Kreuzprodukt Berechnen Sie die allgemeine Lösung des li-

dot Skalarpordukt nearen Gleichungssystems

eye Einheitsmatrix

2 4 −2
 
x1
 
2

lu LU-Faktorisierung  4 9 −3   x2  =  8  .
qr QR-Faktorisierung −2 −3 7 x3 10
zeros Nullmatrix

A x b
Tabelle 20: Linearen Algebra
Lösung: Die allgemeine Lösung ist die ein-
deutige Lösung x = (−1, 2, 2). Dies zeigen
42.9.1. Quadratische Systeme
die nachfolgenden Matlab -Zeilen.

Ist A eine reguläre (quadratische) Matrix, >> A = [2 4 -2; 4 9 -3; -2 -3 7];


so gibt es genau eine Lösung des linearen >> b = [2; 8; 10];
Systems Ax = b und zwar für jede rechte >> x = A\b
Seite b. Zum Beispiel ist die Matrix x =
  -1.0000
1 −2 2.0000
A=
3 2 2.0000

regulär und daher gibt es für b = (1, 11)


Die Lösung ist eindeutig, sonst wäre die
genau eine Lösung; diese ist
Matlab
x = (3, 1). In
löst man dies in einem Einzeiler,
Matrix A singulär und Matlab hätte mit
einer Fehlermeldung geantwortet. Hier noch
nachdem man A und b eingegeben hat.
alternativ die symbolische Lösung.

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


>> b = [1; 11]; x =
>> x = A\b [ -1]
x = [ 2]
3 [ 2]
1
© ....................................... ©
Ist die Koezientenmatrix A singulär, so
erhält man eine Fehlermeldung, auch dann 42.9.2. Überbestimmte Systeme
wenn b im Spaltenraum von A liegt und
es nicht nur eine, sondern unendlich viele Gibt es mehr Gleichungen als Unbekann-
Lösungen gibt. te, so nennt man Ax = b überbestimmt.

87 Copyright
c G. Gramlich
Das System Ax = b hat in der Regel kei- © ....................................... ©
ne Lösung, aber das Ersatzproblem Ax ∼
=b
(die lineare Ausgleichsaufgabe) ist stets lös- Aufgabe 79 (Lineare Systeme)
bar. Entweder hat das Ersatzproblem ge- Berechnen Sie in Matlab x = A\b und x
nau eine oder aber unendlich viele Lösun- = pinv(A)*b mit
gen, je nachdem ob die Spalten von A li-

1 2

3


near unabhängig sind oder nicht. Im Fall,
A= 2 4  und b =  2 .
dass es unendlich viele Lösungen gibt er-
−1 −2 1
hält man durch A\b eine Basislösung. Mit
pinv(A)*b erhält man den Lösungsvektor Interpretieren Sie die Ergebnisse.

kleinster Länge. Lösung: Es ist

Aufgabe 78 (Ausgleich)
>> x = A\b
Berechnen Sie die Lösung des linearen Aus-
x =
Ax ∼ 0
gleichsproblems =b mit
0.5000
  
1 0 6
A= 1 1  und b =  0 . und
1 2 0
>> x = pinv(A)*b
Lösung: Die eindeutige Lösung ist x = x =
(5, −3). Diese kann auf die folgenden drei
0.2000
Arten berechnet werden.
0.4000

>> A = [1 0; 1 1; 1 2]; Beides sind spezielle Lösungen der allge-


>> b = [6; 0; 0]; meine Lösung x = (x1 , x2 ) = (1 − 2t, 2),
>> x = A\b t ∈ R der linearen Ausgleichsaufgabe. x =
x = A\b berechnet eine Basislösung (t = 0.5)
5.0000 und x = pinv(A)*b die Lösung kleinster
-3.0000 Länge (t = 0.4). Da inv(A'*A) nicht exis-
>> x = pinv(A)*b tiert, kann über diesen Weg keine Lösung
x = berechnet werden. ©. . . . . . . . . . . . . . . . . . . . .©
5
-3
>> x = inv(A'*A)*A'*b 42.9.3. Unterbestimmte Systeme

x =
Ein lineares System Ax = b heiÿt unterbe-
5
stimmt, wenn weniger Gleichungen als Un-
-3
bekannte vorliegen; in der Regel hat Ax =

88 Copyright
c G. Gramlich
b dann unendlich viele Lösungen. In diesem 42.10. Lineare Gleichungssysteme (3)
Fall wird durch A\b die Lösung kleinster
Lineare Gleichungssysteme lassen sich sym-
Matlab
Länge berechnet, das heiÿt von allen Lö-
sungen x wird diejenige ermittelt, wo die bolisch in mit den Funktio-

x am kleinsten ist. Hat das Sys- nen solve und \ lösen. Darüberhin-
Maple
Länge von
tem Ax = b keine Lösung, so wird eine Ba- aus gibt es noch die -Funktionen

sislösung des Ersatzproblems Ax = b be- gausselim und gaussjord , die mit der

rechnet. maple-Funktion angesprochen werden kön-


nen. Für das maple-Kommando verweise
Aufgabe 80 (Lineare Systeme)
Berechnen Sie in Matlab
x = A\b x =
ich sie auf Abschnitt 60.2.

Der Prozess einer Matrix auf reduzier-


pinv(A)*b und x = A'*inv(A*A')*b
te Zeilenstufenform zu transformieren wird
Gauÿ-Jordan
   
A= 1 1 und b = 6 . als -Verfahren bezeichnet.
Daher haben auch die beiden Funktionen
Interpretieren Sie die Ergebnisse.
Lösung: Es ist
gaussjord und rref die gleiche Wirkung.
Das folgende Beispiel zeigt dies:
>> A = [1 1]; b = [6];
>> x = A\b, x = pinv(A)*b, >> maple('gaussjord',...
x = sym([1 1 2 9; 2 4 -3 1; 3 6 -5 0]))
6 ans =
0 [ 1, 0, 0, 1]
x = [ 0, 1, 0, 2]
3.0000 [ 0, 0, 1, 3]
3.0000
Die gausselim-Funktion transformiert die
und erweiterte Matrix auf Zeilenstufenform, wo-
bei die führenden Elemente nicht notwendig
>> x = A'*inv(A*A')*b
x = gleich 1 sind.

3
3 >> maple('gausselim',...
sym([1 1 2 9; 2 4 -3 1; 3 6 -5 0]))
ans =
Dies sind spezielle Lösungen der allgemeine
[ 1, 1, 2, 9]
Lösung x = (x1 , x2 ) = (6 − t, t), t ∈ R des
[ 0, 2, -7, -17]
linearen Gleichungssystems x1 +x2 = 6. x =
[ 0, 0, -1/2, -3/2]
A\b berechnet eine Basislösung (t = 0) und
x = pinv(A)*b bzw. x = A'*inv(A*A')*b
die Lösung kleinster Länge (t = 3). © . . . . © Die backsub-Funktion erlaubt es dann die

89 Copyright
c G. Gramlich
Lösung durch Rückwärtseinsetzen zu ge- [ 2, 4, -10, 6, 12, 28]
winnen: [ 2, 4, -5, 6, -5, -1]
>> rref(Ab)
>> maple('backsub',ans) ans =
ans = [ 1, 2, 0, 3, 0, 7]
[ 1, 2, 3] [ 0, 0, 1, 0, 0, 1]
[ 0, 0, 0, 0, 1, 2]
Wir betrachten das folgende unterbestimm-
te lineare Gleichungssystem Die Lösungen erhalten wir auch wie folgt

−2x3 + 7x5 = 12
>> maple('gausselim',Ab)
2x1 + 4x2 − 10x3 + 6x4 + 12x5 = 28 ans =
2x1 + 4x2 − 5x3 + 6x4 − 5x5 = −1 [ 2, 4, -10, 6, 12, 28]
[ 0, 0, -2, 0, 7, 12]
mit der erweierten Matrix [ 0, 0, 0, 0, 1/2, 1]

0 0 −2 0 7 12
 >> maple('backsub',ans)

A b

=  2 4 −10 6 12 28  . ans =
2 4 −5 6 −5 −1 [ 7-2*_t2-3*_t1,_t2,1,_t1,2]

Dieses lineare Gleichungssystem hat unend-


Dagegen liefern die Anweisungen
lich viele Lösungen. Mit den Parametern
t ∈ R und s ∈ R können die Lösungen
>> A = Ab(:,1:5)
wie folgt parametrisiert angegeben werden:
A =
x1 = 7 − 2x2 − 3x4 [ 0, 0, -2, 0, 7]
[ 2, 4, -10, 6, 12]
x2 = t
[ 2, 4, -5, 6, -5]
x3 = 1 >> b = Ab(:,6)
x4 = s b =
x5 = 2 [ 12]
[ 28]
Mit rref können wir die Lösungen bestäti- [ -1]
gen: >> A\b
ans =
>> Ab = sym([0 0 -2 0 7 12;... [ 7]
2 4 -10 6 12 28; 2 4 -5 6 -5 -1]) [ 0]
Ab = [ 1]
[ 0, 0, -2, 0, 7, 12] [ 0]

90 Copyright
c G. Gramlich
[ 2] ans =
[ 3+2*_t1, _t1]
nur die Lösung x = (7, 0, 1, 0, 2). Die Para-
meter t und s sind hier gleich Null gewählt. Demnach ist: x = (3, 0) + t(2, 1), t ∈ R die

Lösen wir das Beispiel numerisch, so er- allgemeine Lösung. Mit

halten wir die spezielle Lösung x =


(0, 0, 1, 7/3, 2), wie die folgende Zeile zeigt: >> A\b
ans =
>> double(A)\double(b) 3
ans = 0
0
0 erhalten wir die spezielle Lösung (3, 0). Hier
1.0000 ist t = 0. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©
2.3333
2.0000 Wir betrachten nun ein lineares Gleichungs-
system, das keine Lösung hat. Das nach-
folgende System ist überbestimmt. Überbe-
Aufgabe 81 (Lineare Systeme)
stimmte System haben mehr Gleichungen
Berechnen Sie die allgemeine Lösung des li-
als Variablen und daher in der Regel (ge-
nearen Gleichungssystems
nerisch) keine Lösung. Tatsächlich ist das

4x1 − 8x2 = 12 System

3x1 − 6x2 = 9
2x1 − 3x2 = −2
−2x1 + 4x2 = − 6.
2x1 + x2 = 1
mit Hilfe der Funktionen gausselim und 3x1 + 2x2 = 1
backsub, siehe Aufgabe 60.
Lösung: Die allgemeine Lösung erhalten inkonsistent. Dies können wir mit der rref-
wir durch Funktion sofort überprüfen:

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


>> b = sym([12; 9; -6]); Ab =
>> maple('gausselim',[A b]) [ 2, -3, -2]
ans = [ 2, 1, 1]
[ 4, -8, 12] [ 3, 2, 1]
[ 0, 0, 0] >> rref(Ab)
[ 0, 0, 0] ans =
>> maple('backsub',ans) [ 1, 0, 0]

91 Copyright
c G. Gramlich
[ 0, 1, 0] Wie zu erwarten: das System ist inkonsis-
[ 0, 0, 1] tent. Auch die Funktion solve sagt, dass
die Lösungsmenge leer ist:

Die letzte Zeile der erweiterten Matrix be-


sagt >> solve('2*x1-3*x2=-2',...
0x1 + 0x2 = 1. '2*x1+x2=1','3*x1+2*x2=1')
Wir testen die anderen Funktionen, die uns
Warning: 3 equations in 2 variables.
zur Lösung linearer Gleichung symbolisch
> In C:\MATLAB6p1\toolbox\symbolic
oder numerisch in Matlab zur Verfügung
\solve.m at line 110
stehen. Das Gauÿ -Verfahren liefert
Warning: Explicit solution could
not be found.
>> maple('gausselim',Ab) > In C:\MATLAB6p1\toolbox\symbolic
ans = \solve.m at line 136
[ 2, -3, -2] ans =
[ 0, 4, 3] [ empty sym ]
[ 0, 0, -7/8]
Numerisch dagegen erhalten wir die Lösung
Auch hier erkennt man an der letzten Zei-
0.6429:
le der Matrix die Unlösbarkeit des linearen
Systems, denn die Gleichung 0x1 + 0x2 =
>> double(A)\double(b)
−7/8 hat keine Lösung. Das Rückwärts-
ans =
einsetzen bestätigt die Beobachtung
0.6429
>> maple('backsub',ans)
??? Error using ==> sym/maple Dies ist die eindeutige Lösung des dazu-
Error, (in backsub) inconsistent gehörigen linearen Ausgleichsproblems. Für
system weitere Einzelheiten hierzu verweisen wir
auf [7].
Was liefert A\b? Die Tabelle 21 zeigt zusammenfassend die
Funktionen, die man einsetzen kann, um li-
>> A\b
neare Gleichungen symbolisch zu lösen. Be-
Warning: System is inconsistent.
achten Sie, dass es das Gleiche bedeutet, ei-
Solution does not exist.
ne Matrix in reduzierte Zeilenstufenform zu
> In C:\MATLAB6p1\toolbox\symbolic\
@sym\mldivide.m at line 29
bringen wie das Gauss-Jordan -Verfahren
durchzuführen. Die Funktion rref bzw. das
ans =
Kommando \ stehen auch für numerische
Inf
Berechnungen zur Verfügung.

92 Copyright
c G. Gramlich
Matlab-Syntax Bedeutung Norm eines n-Vektors x ist deniert durch
\ Löst Ax = b n 1/p
rref
X
Red. Zeilenstufenform kxkp = |xi |p , 1 ≤ p < ∞.
solve Löst Gleichungen
Gauÿ
i=1
gausselim -Verfahren
gaussjord Gauÿ-Jordan -Verf.
Für p=∞ ist

kxk∞ = max |xi |.


1≤i≤n
Tabelle 21: Lineare Gleichungssysteme
symbolisch lösen Die Funktion norm kann verwendet werden,
um jede p-Norm auszurechnen. Der Aufruf
ist norm(x,p), wobei p = 2 standardmäÿig
43. Lineare Algebra (2) eingestellt ist. Im Fall p=-inf wird mini |xi |
berechnet.
Matlab wurde ursprünglich entwickelt,
um numerische Berechnungen in der Linea- >> x = 1:4;
ren Algebra durchzuführen. Daher ist es >> [norm(x,1) norm(x,2) norm(x,inf)...
nicht überraschend, dass viele Funktionen norm(x,-inf)]
zum Lösen linearer Gleichungssysteme und ans =
Eigenwertaufgaben zur Verfügung stehen. 10.0000 5.4772 4.0000
Sehr viele dieser Funktionen basieren auf 1.0000
der Fortran -Bibliothek Lapack [1].

Lange Zeit waren reelle und komplexe Ma- Die Tabelle 22 zeigt die Vektornormen
trizen der einzige Datentyp in Matlab und
die meisten Funktionen können auch mit re- Matlab Bedeutung
ellen und komplexen Matrizen aufgerufen norm(x)=norm(x,2) x2
und bearbeitet werden. Das Teilgebiet, das norm(x,1) x1
sich mit numerischen Methoden in der Li- norm(x,inf) x∞
Numerische
nearen Algebra befasst, heiÿt norm(x,-inf) x−∞
Lineare Algebra. Jedes Buch über Nume- norm(x,p) xp für p ≥ 1
rische Mathematik behandelt auch dieses
Tabelle 22: Vektornormen
Thema, siehe zum Beispiel [7], [12] und der
darin zitierten Literatur. übersichtlich.

Aufgabe 82 (Vektornormen)
43.1. Normen Berechnen Sie für den Vektor x = (1, −2, 3)
die Normen kxkp für p = 1, 1.5, 2, . . . 9.5
Eine Norm ist ein skalares Maÿ für die Grö- und für p = ∞.
ÿe eines Vektors oder einer Matrix. Die p- Lösung: Der Aufruf Vektornormen

93 Copyright
c G. Gramlich
Aufgabe 83 (Vektornormen)
p norm(x,p) Berechnen Sie die 1, 2 und ∞-Norm der
------------------- Vektoren v1 = (2, 1), v 2 = (1, 0) und
1.0 6.0000 v 3 = (1, −1).
1.5 4.3346 Lösung: Wir erhalten:

2.0 3.7417
2.5 3.4586 >> v1= [2,1];
3.0 3.3019 [norm(v1,1) norm(v1,2) norm(v1,inf)]
3.5 3.2072 ans =
4.0 3.1463 3.0000 2.2361 2.0000
4.5 3.1056 >> v2= [1,0];
5.0 3.0774 [norm(v2,1) norm(v2,2) norm(v2,inf)]
5.5 3.0574 ans =
6.0 3.0430 1 1 1
6.5 3.0325 >> v3= [1,-1];
7.0 3.0247 [norm(v3,1) norm(v3,2) norm(v3,inf)]
7.5 3.0188 ans =
8.0 3.0144 2.0000 1.4142 1.0000
8.5 3.0111
9.0 3.0086 © ....................................... ©
9.5 3.0067
Inf 3.0000 Die p-Norm einer Matrix ist deniert durch
kAxkp
berechnet die Normen. Die Funktion
kAkp = max .
x6=o kxkp
Vektornormen ist wie folgt realisiert.
Die 1- und ∞-Norm einer (m, n)-Matrix A
function Vektornormen sind (Maximale Spaltensumme)
%-Vektor x m
x = [1 -2 3];
X
kAk1 = max |aij |
% 1≤j≤n
i=1
disp(' p norm(x,p)');
und (Maximale Zeilensumme)
disp('-------------------');
for p = [1:0.5:9.5 inf] n
X
disp(sprintf('%2.1f %15.4f ',... kAk∞ = max |aij |.
1≤i≤m
p,norm(x,p))) j=1

end Die 2-Norm von A kann berechnet werden


als der gröÿte singuläre Wert von A, al-
© ....................................... © so max(svd(A)). Matrizennormen werden

94 Copyright
c G. Gramlich
ebenfalls mit der Funktion norm berech- Aufgabe 84 (Matrizennormen)
net. Für Matrizen funktioniert der Aufruf Berechnen Sie die 1-, 2-, ∞- und Frobeni-
norm(A,p) mit p=1,2,inf und p='fro', us -Norm für die Matrizen

wobei
   
0 1 1 2
A= , B=
m X
n
−1 0 2 2
X 1/2
kAkF = |aij |2 und  
i=1 j=1 1 4
C= .
1 2
die Frobenuis -Norm ist. Beachten Sie: Die
Lösung: Es ist
Funktion norm ist ein Beispiel einer Funk-
tion mit einem Argument, das einen un-
>> A = [0 1; -1 0];
terschiedlichen Datentyp haben kann; hier
>> [norm(A,1) norm(A,2) ...
double und char (String). Hier noch ein
norm(A,inf) norm(A,'fro')]
Beispiel:
ans =
1.0000 1.0000 1.0000
>> A = [1 2; 3 4]; 1.4142
>> [norm(A,1) norm(A,2) ... >> B = [1 2; 2 2];
norm(A,inf) norm(A,'fro')] >> [norm(B,1) norm(B,2) ...
ans = norm(B,inf) norm(B,'fro')]
6.0000 5.4650 7.0000 ans =
5.4772 4.0000 3.5616 4.0000
3.6056
>> C = [1 4; 1 2];
Ist das Berechnen der Matrixnorm für p=2 >> [norm(C,1) norm(C,2) ...
zu aufwendig, so kann mit der Funktion norm(C,inf) norm(C,'fro')]
normest ein Näherungswert berechnet wer- ans =
den. Die Tabelle 23 zeigt die Matrizennor- 6.0000 4.6708 5.0000
4.6904
Matlab Bedeutung
norm(A)=norm(A,2) A2
norm(A,1) A1 © ....................................... ©
norm(A,inf) A∞
norm(x,'fro') AF
43.2. Konditionszahlen
Tabelle 23: Matrizennormen
Für eine reguläre Matrix A ist

men übersichtlich. kAk


κ(A) = ≥1
kA−1 k

95 Copyright
c G. Gramlich
die Konditionszahl bezüglich der Inversion. 43.4. Inverse
Die Zahl misst die Sensitivität der Lösung
eines linearen Gleichungssystems Ax = Die Inverse einer (n, n)-Matrix ist die Ma-
b bezüglich Störungen in A und b. Man trixX , die den Gleichungen AX = XA =
sagt, dass A gut oder schlecht konditioniert E n genügt. Hierbei ist E n die (n, n)-
ist, wenn κ(A) klein bzw. groÿ ist, wobei Einheitsmatrix, die in Matlabmit eye(n)

klein und groÿ vom Kontext abhängig erzeugt werden kann. Eine Matrix, die kei-

sind. Die Kondition kann mit der Funktion ne Inverse hat, heiÿt singulär. Eine singu-

cond berechnet werden, wobei die Normen läre Matrix kann auf mehrere Arten cha-

p=1,2,inf,'fro' unterstützt werden. Für rakterisiert werden: Die Determinante ist

p=2 sind auch rechteckige Matrizen erlaubt, Null oder es gibt einen Vektor v 6= o mit

wobei dann die Konditionszahl durch Av = o.


Die Inverse einer quadratischen Matrix

kAk2 kann mit der Funktion inv (auch symbo-


κ2 (A) = lisch) berechnet werden. Zum Beispiel
kA+ k2

>> A = pascal(3), X = inv(A)


deniert ist, wobei A+ die Pseudoinverse A =
von A ist. 1 1 1
Die Konditionszahl auszurechnen ist aus- 1 2 3
wendig. Daher gibt es in Matlab zwei 1 3 6
Funktionen, die die Konditionszahl nähe- X =
rungsweise berechnen: rcond und condest, 3 -3 1
siehe doc rcond und doc condest. -3 5 -2
1 -2 1
>> norm(A*X-eye(3))
ans =
43.3. Lineare Gleichungssysteme (4) 0

Über lineare Gleichungssysteme haben wir


in den vorhergehenden Abschnitten schon Die Inverse wird mit Hilfe der LU-

viel gesagt. Hier soll noch ergänzt werden, Faktorisierung mit partieller Pivotisierung

dass der \-Operator (Backslash-Operator) berechnet. Gleichzeit wird mit rcond der

auch verwendet werden kann, um Matrizen- Kehrwert der Konditionszahl berechnet.

gleichungen AX = B zu lösen. Hier ist die Wird festgestellt, dass A (exakt) singulär

Rechte Seite B eine Matrix mit p Spalten. oder die rcond kleiner als eps ist, so wird

In diesem Fall löstMatlab AX(:, j) = eine Warnung ausgegeben.

B(:, j) für j = 1 : p. Beachten Sie: Die Inverse einer Matrix muss

96 Copyright
c G. Gramlich
explizit in der Praxis nur sehr selten be- 0.1000 0.2000
rechnet werden. Zum Beispiel ist das Be- >> C = [2 0; 0 3; 0 0];
rechnen eines quadratischen lineare Glei- >> pinv(C)
chungssystems Ax = b mit A\b zwei bis ans =
dreimal schneller als durch inv(A)*b. Ge- 0.5000 0 0
wüöhnlich ist es möglich, das Berechnen der 0 0.3333 0
Inversen einer Matrix in Termen eines li-
nearen Gleichungssystems auszudrücken, so
dass die explizite Inversion vermieden wer- 43.7. LU-Faktorisierung
den kann.
Eine LU-Faktorisierung einer quadrati-
schen Matrix A ist eine Faktorisierung
43.5. Determinante der Form A = LU , wobei L eine unte-
re Dreicksmatrix mit Einsdiagonale und U
Die Determinante einer quadratischen Ma-
eine obere Dreicksmatrix sind. Nicht jede
trix wird mit der Funktion det (auch sym-
Matrix kann in dieser Form faktorisiert wer-
bolisch) berechnet. Ihre Berechnung ge-
den, lässt man aber Zeilenvertauschungen
schieht über die LU-Faktoren. Für Beispiele
zu, so ist dies immer möglich und solch eine
siehe Abschnitt 42.5.
Faktorisierung existiert immer. Die Funk-
tion lu berechnet eine LU-Faktorisierung

43.6. Pseudoinverse P A = LU ,
mit teilweiser Pivotisierung
wobei P eine Permutationsmatrix ist. Der
Die Pseudoinverse ist die Verallgemeine- Aufruf [L,U,P] = lu(A) gibt die Dreiecks-
rung der Inversen für Matrizen A, die sin- matrizen und die Permutationsmatrix zu-
gulär und nicht quadratisch sind ([5]). Die rück. Mit zwei Ausgabeargumenten, [L,U]
mathematische Notation ist A+ . Sie wird = lu(A) wird U und L = P TL zurück-
in Matlab mit pinv berechnet. Die Pseu- gegeben, das heiÿt L ist eine Dreiecksma-
doinverse wird mit Hilfe der Singulärwert- trix bis auf Zeilenvertauschungen. Wir ge-
zerlegung berechnet. Beispiele ([5]): ben ein Beispiel.

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


>> pinv(A) [L,U,P] = lu(A)
ans = L =
0.5000 0 1.0000 0 0
0 0 -0.5000 1.0000 0
>> B = [2; 4]; 0.5000 1.0000 1.0000
>> pinv(B) U =
ans = -2.0000 -5.0000 3.0000

97 Copyright
c G. Gramlich
0 -0.5000 0.5000 2.0000
0 0 -2.0000 3.0000
P = >> [L,U] = lu(A);
0 1 0 >> x = U\(L\b)
1 0 0 x =
0 0 1 1.0000
>> [L,U] = lu(A) 2.0000
L = 3.0000
-0.5000 1.0000 0
1.0000 0 0
Der Vorteil dieser Vorgehensweise ist, dass
0.5000 1.0000 1.0000
man sich Rechnungen einspart, wenn ein
U =
Gleichungssystem mit mehreren rechten
-2.0000 -5.0000 3.0000
Seiten oder eine Matrix gleichung vorliegt,
0 -0.5000 0.5000
weil dann die Faktorisierung nut einmal ge-
0 0 -2.0000
macht werden muss.

Die lu Funktion arbeitet auch für rechtecki-


ge Matrizen. Ist A eine (m, n)-Matrix, dann
43.8. Cholseky-Faktorisierung
ist L eine (m, n)- und U eine (n, n)-Matrix, Hermite
Jede positiv denite sche Matrix
falls m ≥ n ist und L eine (n, n)- und U hat eine Cholesky A = R∗ R
-Zerlegung ,
eine (m, n)-Matrix, wenn m < n gilt. wobei R eine obere Dreiecksmatrix mit re-

Das Lösen eines quadratischen linearen Chol-


eller positiver Diagonale ist. Die

Gleichungssystems Ax = b durch x=A ist seky -Faktorisierung wird mit chol berech-
net: R=chol(A). Hier ein Beispiel.
gleichbedeutend damit, von A eine LU-
Faktorisierung zu bilden, und dann mit den
Faktoren zu lösen: >> A = pascal(3)
A =
[L,U] = lu(A); 1 1 1
x = U\(L\b); 1 2 3
1 3 6
>> R = chol(A)
Hier ist ein Beispiel.
R =
1 1 1
>> A = [1 1 2; 2 4 -3; 3 6 -5];
0 1 2
>> b = [9;1;0];
0 0 1
>> x = A\b
x =
1.0000 Und die Probe:

98 Copyright
c G. Gramlich
>> R'*R >> A = [1 0 0; 1 1 0; 1 1 1];
ans = >> [Q,R] = qr(A)
1 1 1 Q =
1 2 3 -0.5774 0.8165 -0.0000
1 3 6 -0.5774 -0.4082 -0.7071
-0.5774 -0.4082 0.7071
R =
Beachten Sie, dass chol nur die obere -1.7321 -1.1547 -0.5774
Dreiecksmatrix einschlieÿlich der Diagona- 0 -0.8165 -0.4082
len von A zur Faktorisierung verwendet. Ist 0 0 0.7071
die Matrix A nicht positiv denit, so erhält
man eine Fehlermeldung. Tatsächlich ist die
Hier noch die Probe:
Funktion chol gegeignet um zu überprüfen,
ob eine Matrix positiv denit ist. Ist nach >> Q*R
dem Aufruf [R,p]=chol(A) p gleich Null, ans =
so ist A positiv denit. Siehe doc chol für 1.0000 0.0000 -0.0000
weitere Detail zum Ausgabeargument p. 1.0000 1.0000 0.0000
1.0000 1.0000 1.0000

43.9. QR-Faktorisierung
Aufgabe 85 (QR-Faktorisierung)
Berechnen Sie von der Matrix
Eine QR-Faktorisierung einer (m, n)-
A ist eine Faktorisierung der Form
Matrix  
1 −1 1
A = QR, wobei Q eine (m, m)-unitäre  1 0 0 
und R eine (m, n)- obere Dreicksmatrix A=
 1

1 1 
ist. Diese Faktorisierung wird zum Lösen
1 2 4
linearer Ausgleichsaufgaben und zur Kon-
struktion einer orthonormalen Basisfür die QR- und die reduzierte QR-
den Spaltenraum von A eingesetzt. Die Faktorisierung.
Anweisung [Q,R] = qr(A) berechnet die Lösung: Es ist
Faktorisierung. Ist m > n, so gibt die
Anweisung [Q,R] = qr(A,0) wirtschaftli- >> [Q,R] = qr(A)
chere Matrizen zurück. Man spricht auch Q =
von reduzierter QR-Zerlegung. Die Matrix -0.5000 0.6708 0.5000
Q hat nur n Spalten und die Matrix R -0.5000 0.2236 -0.5000
hat n Zeilen und n Spalten. Wir geben ein -0.5000 -0.2236 -0.5000
Beispiel: -0.5000 -0.6708 0.5000

99 Copyright
c G. Gramlich
s1 ≥ s2 ≥ · · · ≥ smin{m,n} ≥ 0. Die An-
0.2236 weisung [U,S,V] = svd(A) berechnet eine
-0.6708 Singulärwertzerlegung. Gibt man nur eine
0.6708 Ausgabevariable an, so ist dies der Vektor,
-0.2236 der aus den singulären Wert besteht. Die
R = Anweisung [U,S,V] = svd(A,0) liefert ei-
-2.0000 -1.0000 -3.0000 ne reduzierte Singulärwertzerlegung (eco-
0 -2.2361 -2.2361 nomy size), wenn m > n ist. Dann ist U ei-
0 0 2.0000 ne (m, n)-Matrix mit orthonormalen Spal-
0 0 0 ten und S hat die Gröÿe (n, n). Die Anwei-
sung [U,S,V] = svd(A,'econ') liefert das
gleiche Ergebnis wie [U,S,V] = svd(A,0),
und
wenn m ≥ n ist, ist aber m < n, so hat V
>> [Q,R] = qr(A,0) die Gröÿe (n, m) mit orthonormalen Spal-
Q = ten, und S ist quadratisch mit Ordnung m.
-0.5000 0.6708 0.5000 Hier ist ein Beispiel [7]:
-0.5000 0.2236 -0.5000
-0.5000 -0.2236 -0.5000 >> A = [1 2 1 -2; 4 2 3 1];
-0.5000 -0.6708 0.5000 >> [U,S,V] = svd(A,'econ')
R = U =
-2.0000 -1.0000 -3.0000 -0.3583 -0.9336
0 -2.2361 -2.2361 -0.9336 0.3583
0 0 2.0000 S =
5.7839 0
0 2.5586
In der orthogonalen Matrix Q fehlt nun die
V =
letzte Spalte und in der Dreiecksmatrix R
-0.7076 0.1952
die letzte Nullzeile. ©. . . . . . . . . . . . . . . . . . . .©
-0.4467 -0.4497
-0.5462 0.0552
-0.0375 0.8698
43.10. Singulärwertzerlegung
Die Singulärwertzerlegung (Singular Value Die Funktionen rank, null und orth be-
Decomposition, kurz: SVD) einer (m, n)- rechnen den Rang, eine orthonormale Ba-
Matrix A hat die FormA = U SV ∗ , wobei sis für den Nullraum und eine orthonormale
U eine unitäre (m, m)-Matrix, S eine reel- Basis für den Spaltenraum der Argument-
le (m, n)-Diagonalmatrix und V eine uni- matrix. Alle drei Funktionen basieren auf
täre (n, n)-Matrix ist. Die Diagonalelemen- der Singulärwertzerlegung, wobei Ein To-
te von S sind die singulären Werte si mit leranzwert proportional zu eps verwendet

100 Copyright
c G. Gramlich
wird, um zu entscheiden, wann ein singulä- Aufgabe 86 (SVD [5])
rer Wert als Null betrachtet werden kann. Berechnen Sie eine Singulärwertzerlegung

Wir geben ein Beispiel: der Matrix


 
1 1
>> A = [1 -1 1; 1 0 0; 1 1 1; 1 2 4]; A =  1 1 .
>> [U,S,V] = svd(A) 0 0
U =
Lösung: Es ist
-0.1517 0.8959 -0.3525
-0.0612 0.4013 0.6207 >> [U,S,V] = svd(A)
-0.3215 0.0406 0.6671 U =
-0.9327 -0.1861 -0.2134 -0.7071 -0.7071 0
-0.7071 0.7071 0
0.2236 0 0 1.0000
-0.6708 S =
0.6708 2.0000 0
-0.2236 0 0.0000
S = 0 0
4.8956 0 0 V =
0 1.6942 0 -0.7071 0.7071
0 0 1.0784 -0.7071 -0.7071
0 0 0
V = Man erkennt, dass die Matrix A den Rang
-0.2997 0.6798 0.6693 1 hat; die singulären Werte sind s11 = 2
-0.4157 -0.7245 0.5498 und s22 = 0. © . . . . . . . . . . . . . . . . . . . . . . . . . . ©
-0.8587 0.1135 -0.4997
>> rank(A) Die verallgemeinerte Singulärwertzerlegung
ans = (Generalized Singular Value Decompositi-
3 (m, p)-Matrix A und
on, kurz: GSVD) einer
>> null(A) einer(n, p)-Matrix B hat die Form A =
ans = U CX ∗ , B = V SX ∗ , C ∗ C + S ∗ S = E ,
Empty matrix: 3-by-0 wobei U und V unitär sind, X regulär,
>> orth(A) und C und D sind reelle Diagonalmatri-
ans = zen mit nichtnegativen Diagonalelementen.
-0.1517 0.8959 -0.3525 Die Zahlen cii /sii sind die verallgemeiner-
-0.0612 0.4013 0.6207 ten singulären Werte. Diese Zerlegung wird
-0.3215 0.0406 0.6671 in Matlab [U,V,X,C.S]
wie folgt erreicht:
-0.9327 -0.1861 -0.2134 = gsvd(A,B). Siehe doc gsvd (help gsvd)
für weitere Details.

101 Copyright
c G. Gramlich
43.11. Eigensysteme 43.12.1. Iterative Methoden für lineare
Gleichungssysteme
Die eziente numerische Berechnung von
Eigensystemen (Eigenwerte und Eigenvek- Es stehen mehrere Funktionen zur Verfü-
toren) ist ein komplexer Akt. Die Matlab - gung, um quadratische lineare Gleichungs-
Funktion eig vereinfacht diesen Lösungs- systeme Ax = b iterativ zu lösen, siehe Ta-
prozess, indem sie die Anzahl der Einga- belle 24.
bematrizen, sowie deren Struktur und die
Funktion Methode
Ausgabe berücksichtigt. Sie unterscheidet
bicg BiCG
intern zwischen 16 verschiedenen Algorith-
bicgstab BiCG stabilized
men:
cgs CG squared
gmres GMRES
• Standardproblem (eig(A)) oder verallge-
lsqr CG für Normalleichungen
meinertes Problem (eig(A,B)),
minres Residuienm.
pcg CG mit Vorkonditionierung
• reelle oder komplexe Matrizen A und B,
qmr quasi-minimale Residuienm.

• symmetrische/ Hermitesch e Matrizen A symmlq Symmetrische LQ

und B mit B positiv denit oder nicht,


Tabelle 24: Iterative Methoden

• sind Eigenvektoren gewünscht oder


Bis auf die Funktion minres, symmlq und
nicht.
pcg sind alle Funktionen auf beliebige
Matrizen A anwendbar. Für minres und
Beispiele ndet man in Abschnitt 42.6.
symmlq muss A Hermite sch und für pcg
muss A Hermite sch und positiv denit

43.12. Iterative Methoden sein. Alle Methoden verwenden



Matrix-
Vektor Produkte Ax bzw. A x und be-
In diesem Abschnitt besprechen wir itera- nötigen die Matrixelemente von A nicht
tive Methoden. Solche Verfahren werden explizit. Bis auf gemres (siehe unten) ha-
hauptsächlich bei groÿen und möglicherwei- ben alle Funktionen den gleichen Funk-
se dünn besetzten (sparse) Problem einge- tionsaufruf. Die einfachste Form ist x =
setzt; also immer dann, wenn direkte Ver- solver(B,b), wobei solver eine Funkti-
fahren zu inezient oder gar unmöglich an- on aus Tabelle 24 ist. Alternativ kann man
wendbar sind. Dünn besetzte Matrizen be- auf x = solver(B,b,tol) mit einem Kon-
handeln wir in Abschnitt . Es gibt in Mat- vergenztoleranzwert tol, der standardmä-
lab iterative Methoden für lineare Glei- ÿig auf 10
−6 gesetzt ist. Konvergenz tritt

chungssysteme und iterative Verfahren für ein, wenn norm(b-A*x) <= tol*norm(b)
Eigensysteme. erfüllt ist. Das Argument A kann eine voll

102 Copyright
c G. Gramlich
oder dünn besetzt (sparse) Matrix sein, 1e-006 because the maximum number
oder eine Funktion, die x als Eingabe und of iterations was reached.
A*x als Ausgabe hat. The iterate returned (number 19)
Iterative Methoden benötigen gewöhnlich has relative residual 0.12
eine Vorkonditionierung, wenn sie ezi- >> x = pcg(A,b,1e-6,100);
ent sein sollen. Einen guten Vorkonditionie- pcg converged at iteration 92 to a
rer auszuwählen, ist im Allgemeinen nicht solution with relative residual
leicht und erfordert meist Kenntnisse von 9.8e-007
der Anwendung, die dahinter steckt. Die
Funktionen luinc und cholinc berech-
Im ersten Aufruf haben wir nur die System-
nen unvollständige Faktorisierungen, die ei-
matrix A und die rechte Seite b eingegeben
ne Möglichkeit darstellen, Vorkonditionie-
und gesehen, dass die konjugierte Gradien-
rer zu konstruieren; siehe doc luinc, doc tenmethode nicht konvergiert mit standard-
cholinc und doc bicg. Für Hintergrund-
mäÿig eingestellten 20 Iterationen und dem
informationen zu iterativen Methoden der
standard Abbruchkriterium von 10−6 . Ein
Linearen Algebra siehe [8], [10], [11], [18]
erneuerte Versuch führt nach 92 Iterationen
und [22].
zum Erfolg, wobei wir die Iterationsgren-
Um den Umgang mit iterativen Problem- ze auf 100 gesetzt haben. Der Toleanzwert
lösern zu zeigen, betrachten wir ein Bei- 10−6 wurde erfüllt. Für diese Matrix kann
spiel, wo die Funktion pcg Verwendung n- man zeigen, dass M = diag(diag(A)) ein
det. Die Funktion pcg realisiert eine kon- guter Vorkonditionierer ist. Übergeben wir
jugierte Gradientenmethode mit Vorkondi- der Funktion pcg diese Matrix als fünftes
tionierung. Für A verwenden wir eine posi- Argument, so erreichen wir eine eziente
tiv denite symmetrische Matrix, die Wa- Reduktion in der Anzahl der Iterationen:
then -Matrix aus der Higham schen Ma-
trizensammlung doc gallery. Es handelt >> [x,flag,relres,iter] = pcg(A,...
sich um eine zufällige dünn besetzte nite b,1e-6,100,diag(diag(A)));
Elementematrix, siehe doc gallery. >> flag, relres, iter
flag =
0
>> A = gallery('wathen',12,12);
relres =
>> n = length(A)
8.2661e-007
n =
iter =
481
28
>> b = ones(n,1);
>> x = pcg(A,b);
pcg stopped at iteration 20 without Beachten Sie, dass keine Bildschirmausga-
converging to the desired tolerance be ausgegeben wird, wenn wenn man mehr

103 Copyright
c G. Gramlich
als ein Ausgabeargument im Funktionsauf- für weitere Details. Diese Funktion ist ei-
ruf angibt. Der Wert 0 der Variablen flag ne Schnittstelle zum ARPACK Paket, sie-
gibt an, dass das Verfahren konvergiert ist he [13]. Als Beispiel berechnen wir nun die
mit einem relativen Residuum relres = fünf gröÿten Eigenwerte einer dünn besetz-
norm(b-A*x)/nomrm(b) nach iter Itera- ten symmetrischen Matrix. Zum Vergleich
tionen. verwenden wir die Funktion eig, welche er-
Die anderen Funktionen der Tabelle 24 wer- wartet, dass die Matrix im Speichermodus

den (bis auf gmres) genauso aufgerufen und full vorliegt.

gehandelt.

Mit help sparfun bekommen Sie eine


komplette Liste über alle Funktionen, >> A = delsq(numgrid('N',40));
die bezüglich Sparserechnungen interessant >> n = length(A)
sind, so auch die Funktionen für iterati- n =
ve Methoden von linearen Gleichungssyste- 1444
men. >> nnz(A)/n^2 %Anteil nicht Null.
ans =
0.0034
43.12.2. Iterative Methoden für
>> tic, e_alle = eig(full(A)); toc
Eigensysteme
Elapsed time is 10.600102 seconds.
>> e_alle(n:-1:n-4)
Die Funktion eigs berechnet auswählba-
ans =
re Eigenwerte und Eigenvektoren des Stan-
7.9870
dardeigenwertproblems Ax = λx oder der
7.9676
verallgemeinerten Eigenwertaufgabe Ax =
7.9676
λBx, wobei B eine reelle symmetrische
7.9482
positiv denite MAtrix ist. Im Gegensatz
7.9354
dazu berechnet die Funktion eig immer
>> options.disp = 0; %Keine Ausgabe.
das gesamte Eigensystem, also alle Eigen-
>> tic, e = eigs(A,5,'LA',options);
werte und Eigenvektoren. Wie die itera-
>> toc %LA = Largest Algebraic
tiven Löser von linearen Gleichungssyste-
Elapsed time is 1.676173 seconds.
men, so benötigt eigs nur Matrix-Vektor
>> e
Produkte, das heiÿt A kann explizit oder
e =
als eine Funktion, die Matrix-Vektor aus-
7.9870
führt, angegeben werden. In der einfachsten
7.9676
Form kann eigs wie eig aufgerufen wer-
7.9676
den: [V,D] = eigs(A). Dann werden die
7.9482
sechs gröÿten Eigenwerte und dazugehörige
7.9354
Eigenvektoren berechnet. Siehe doc eigs

104 Copyright
c G. Gramlich
Mit den Funktion tic und toc kann man 44. Mehr zu Funktionen
Zeitmessungen durchführen. Es ist klar,
dass eigs viel schneller ist als eig und auch Funktionen spielen in Matlab eine sehr
weniger Speicherplatz benötigt. groÿe Rolle. Seit Matlab 7 ergaben sich
diesbezüglich einige Neuerungen. Wir wol-
len deshalb in diesem Abschnitt mehr zu
Matlab
43.12.3. Iterative Methoden für
-Funktionen sagen. Eine erste Ein-
Singulärwertsysteme
führung ndet man in Abschnitt 39.
Die Funktion, um ein paar singuläre Werte
und singuläre Vektoren einer Matrix A ∈ 44.1. Function-Handles
Cm×n iterativ zu berechnen, heiÿt: sdvs.
Die Funktion svds verwendet dabei die In viele Anwendungen muss man ei-
Funktion eigs, indem eigs auf die Her- ner Funktion als Argument eine ande-
mite sche Matrix re Funktion übergeben. In Abschnitt 33
haben wir Beispiele betrachtet. Gewöhn-
 
Om A
lich macht man dies mit einem Function-
A∗ O n
Handle. Ein Function-Handle ist ein Mat-
angewendet wird. lab -Datentyp, der alle notwendigen Infor-
mationen enthält, um eine Funktion auszu-

43.13. Funktionen einer Matrix werten. Ein Function-Handle wird erzeugt,


indem man das @-Zeichen vor einen Funk-
Mit der Funktion expm kann man für eine tionsnamen stellt.
quadratische Matrix A die Matrixexponen-
Wir zeigen die Funktionsweise mit der
A
tialfunktion e , die durch
Funktion ezplot, die den Graph einer Ma-

1 2 1 thematischen f standardmäÿig
Funktion
eA = E + A + A + A3 + · · · über dem Intervall [−2π, 2π] zeichnet. Ist
2! 3!
nun zum Beispiel fun eine m-Function, so
deniert ist, berechnen. Wir geben ein Bei-
geschrieben wie es die Funktion ezplot ver-
spiel, siehe Beispiel 3.5 in [5].
langt, dann funktioniert

>> A = [1 1; -2 4];
>> expm(A) ezplot(@fun)
ans =
-5.3074 12.6965 fun kann aber auch eine Matlab -Funktion
-25.3930 32.7820 sein, wie zum Beispiel sin, cos oder exp.
Der Aufruf

Weitere Funktionen für Matrixfunktionen


ezplot(@cos)
nden Sie mit help matfun.

105 Copyright
c G. Gramlich
zeichnet die Kosinusfunktion im Intervall Wir übergeben den Function-Handle als
[−2π, 2π]. Argument und diese wird an den entspre-

Matlab 6 chenden Stellen ausgewertet. Diese direkte


Matlab 7
Function-Handles wurden in
eingeführt und ersetzen die frühere Syntax, Auswertung ist neu in . In frühe-

nach der ein Funktionsname als eine Zei- ren Versionen musste hier mit der Funktion

chenkette (String) übergeben werden sollte, feval gearbeitet werden.

also zum Beispiel ezplot('cos'). Weitere Informationen nden Sie mit doc
Die Idee des nächsten Beispiels ist es, den function_handle.
Dierenzenquotient

f (x + h) − f (x) 44.2. Anonymous Functions


h
Matlab Anonymous Functions wurde in Matlab
7
in einer -Funktion zu realisieren,
um diesen dann für kleines h als Nähe- eingeführt. Anonymous Functions stellen
0
rung für den Dierenzialquotient f (x) zu einen Weg dar, eine one line-Funktion zu

berechnen. Die m-Function erzeugen, ohne einen m-File schreiben zu


müssen. In Abschnitt 33 haben wir dies be-
function y = Differenzenq(f,x,h) reits zum ersten Mal gezeigt.
if nargin < 3
h = sqrt(eps);
>> f = @(x) exp(x)-2
end
>> f(1)
y = (f(x+h) - f(x))/h;
ans =
0.7183
ist eine Implementierung des Dierenzen-
quotienten von f an der Stelle x. Geben
wir nun Hier ist f ein Function-Handle zu der An-
onymous Function. Dem @-Zeichen, welches
>> Differenzenq(@sqrt,0.3) ein Function-Handle konstruiert, folgt in
ans = runden Klammern eine Liste von Einga-
0.9129 beargumenten und dannach folgt eine ein-
fache Matlab -Anweisung. Als Function-

ein, so erhalten wir0.9129 als Näherung für Handle kann die Anonymous Function dann

f 0 (0.3). Standardmäÿig haben wir für h ≈ einer anderen Funktion übergeben werden.

1.5 · 10−8 gewählt. Soll h gröÿer oder klei- Der Ausdruck einer Anonymous Function
ner sein, so kann dies im dritten Argument kann auch Variable haben, die nicht in der
eingestellt werden. Dieses Beispiel zeigt, Argumentenliste vorkommen. So deniert
die Funktionsweise eines Function-Handles. die Anweisung

106 Copyright
c G. Gramlich
fplot(f,[-4,4]), hold on,
>> a = 2; b = 3; sigma = 2;
>> g = @(x,y) a*x^2+b*exp(x); f = @(x) normpdf(x,mu,sigma);
fplot(f,[-4,4]),
den Mathematischen Funktionsterm
g(x, y) = ax2 + bex mit a=2 und b = 3.
Die Anweisungen und Ausgaben
erzeugen die Abbildung 33. © ........... ©

>> g(3,4) 0.4


ans = µ=0
σ=1
78.2566 0.3

>> a = 10;
>> g(3,4) 0.2

ans = µ=0
σ=2
78.2566 0.1

0
−4 −2 0 2 4
zeigen, dass die Variablenwerte so lange gül-
tig bleiben, bis man die Anonymous Func-
tion neu konstruiert. Abbildung 33: Normalverteilungen

Aufgabe 87 (Anonymous Functions)


Die Dichtefunktion f einer normalverteilten
Zufallsvariablen ist die parameterabhängige
Funktion

1 (x−µ)2
f (x, µ, σ) = √ e− 2σ2 , x∈R 44.3. Subfunctions
σ 2π
Eine Function m-File kann weitere Funktio-
wobei µ und σ > 0 reelle Parameter
nen beinhalten, die man subfunctions (Un-
(Erwartungwert und Standardabweichung)
terfunktionen) nennt. Diese können in ei-
sind. Diese Funktion ist in der Statistics-
nem m-File in irgendeiner Reihenfolge nach
Toolbox unter dem Namen normpdf im-
der Hauptfunktion (main function, primary
plementiert. Zeichnen Sie die Graphen der
function) stehen. Subfunctions sind nur der
Funktionen f (·, 0, 1) und f (·, 0, 2) im Inter-
Hauptfunktion und den anderen im m-File
vall[−4, 4].
bendlichen Subfunctions sichtbar.
Lösung: Die Anweisungen
Wie Subfunctions verwendet werden kön-
mu = 0; sigma = 1; nen, zeigen wir in den nachfolgenden Ab-
f = @(x) normpdf(x,mu,sigma); schnitten, siehe zum Beispiel 55.2.

107 Copyright
c G. Gramlich
44.4. Nested Functions Variablen a, b, c und d des Workspace der
Hauptfunktion RationalBsp sind der Funk-
Man kann eine und mehr Funktionen in ei- tion Rational bekannt und die Werte wer-
ner Funktion schachteln. Es muss darauf ge- den der Funktion Differenzenq ordungs-
achtet werden, dass die end-Anweisung am gemäÿ weitergereicht:
Ende der eingebauten und der Hauptfunk-
tion steht. Es gehört zum guten Stil, die >> RationalBsp(2)
eingebaute Funktion einzurücken. ans =
Nested Functions haben zwei Haupteigen- 3.0000
schaften:

Das Ergebnis ist korrekt, denn für den ge-


• Eine Nested Function hat Zugri zum
brochen rationalen Funktionsterm f (x) =
Workspace aller Funktionen in welche sie
(1 + 2x)/(1 − x) gilt f 0 (x) = 3/(1 − x)2 ,
eingebaut ist. 0
also f (2) = 3.

• Ein Function-Handle einer Nested Func- Nested Functions sind neu seit Matlab 7 .
tion speichert alle Informationen, um zu
dieser Zugang zu haben, und darüberhin-
44.5. Beispielhafte Funktionen
aus alle Variablen der Funktionen, die die
Nested Funktion beinhalten. Der wahrscheinlich beste Weg gute Mat-
lab -Funktionen zu schreiben, besteht dar-
Ein Beispiel einer Nested Function zeigt das in, sich Beispiele von vorbildlich geschrie-
folgende Listing: benen Funktionen anzusehen und sich dar-
an zu orientieren. Solche Funktionen wer-
function RationalBsp(x) den natürlich mit Matlab mitgeliefert.
Schauen Sie sich diese an! Mit type
a = 1; b = 2; c = 1; d = -1; <Funktionsname> bekommen Sie ein Lis-
Differenzenq(@Rational,x) ting und mit edit <Funktionsname> kön-
function r = Rational(x) nen Sie die Funktion in den Matlab-Editor
r = (a+b*x)/(c+d*x); laden. Hier sind ein paar Beispiele:
end
end • cov: Verwendung von varargin
• var: Überprüfung der Argumente
Das Beispiel zeigt, wie eine parameterab-
hängige Funktion einer anderen Funkti- • hadamard: Aufbau einer Matrix

on übergeben werden kann. Die Funktion


• why: Subfunctions
Rational ist parameterabhängig und wird
der Funktion Differenzenq übergeben. Die • fminbnd: Schleifenkonstruktionen

108 Copyright
c G. Gramlich
• quad, quadl: Rekursive Funktionen lynomen zu arbeiten. Zum symbolischen
Rechnen mit Polynomen siehe Abschnitt
• gsvd: Subfunctions
60.13.

• ode45: Verwendung von varargin und


varargout 46.1. Darstellung von Polynomen
Polynome werden in Matlab durch einen
45. Lineare Ausgleichsaufgaben Zeilenvektor repräsentiert, wobei die Ko-
ordinaten die Koezienten des Polynoms
Lineare Ausgleichsaufgaben können mit
Matlab
darstellen. Die Reihenfolge ist absteigend
auf mehrere Arten gelöst wer- festgelegt, das heiÿt die erste Koordinate
den. Zum Einem ist da der \-Operator des Vektors ist der Koezient des Monoms
(Backslash-Operator), siehe Abschnitt 42.4 höchster Ordnung und die letzte Kooor-
und Abschnitt 42.9.2. dinate ist der Koezient des konstanten
Lineare Ausgleichsprobleme mit polyno- Terms des Polynoms. Zum Beispiel reprä-
mialer Modellfunktion können alternativ sentiert der Zeilenvektor [1 -8 2 1 12]
mit der Funktion polyfit und interaktiv das Polynom p1 (x) = x4 −8x3 +2x2 +x−12;
aus jeder Figure unterTools Basic Fitting [2 0 1] stellt das Polynom p2 (x) = 2x2 +1
gelöst werden. Siehe auch Abschnitt 48. dar. Beachten Sie, dass Nullkoezienten

Nichtlineare Ausgleichsaufgaben werden in mitgeführt werden müssen.

Abschnitt 62 besprochen.
>> p1 = [1 -8 2 1 -12]
p1 =
46. Polynome 1 -8 2 1 -12
>> p2 = [2 0 1]
Polynome haben in der Mathematik ei- p2 =
ne groÿe Bedeutung. Im wissenschaftlichen 2 0 1
Rechnen benutzt man sie, um komplizier-
tere Funktionen durch einfachere anzunä-
hern. Polynome lassen sich einfach dieren-
46.2. Nullstellen von Polynomen
zieren und integrieren, und man weiÿ, wie
man numerische Näherungen für die Null- Ist ein Polynom als Zeilenvektor dargestellt,
stellen ndet. Numerische Schwierigkeiten so erlaubt die Funktion roots, die Null-
können auftreten, wenn man mit Polyno- stellen des Polynoms zu berechnen, das
men höherer Ordnung arbeitet. heiÿt diejenigen Werte zu bestimmen, für
In Matlab gibt es eine Reihe von Funktio- die das Polynom den Wert Null annimmt.
nen, die es ermöglichen, ezient mit Po- roots(p2) berechnet die Nullstellen des

109 Copyright
c G. Gramlich
Polynoms 2x2 +1, gibt sie als Spaltenvektor
zurück und weist diese der Variablen r zu. >> roots([1 -5 2 8])
ans =
>> r = roots(p2) 4.0000
r = 2.0000
0 + 0.7071i -1.0000
0 - 0.7071i >> roots([1 4 4])
ans =
-2
Kennt man die Nullstellen eines Polynoms,
-2
nicht aber das Polynom selbst, so kann man
>> roots([1 -3 4 0 -4 4])
mit der Funktion poly das Polynom kon-
ans =
struieren. Da ein Polynom aber durch seine
-1.0000
Nullstellen nur bis auf ein Vielfaches ein-
1.0000 + 1.0000i
deutig bestimmt ist, wählt Matlab das Po-
1.0000 - 1.0000i
lynom mit Koezient 1 im höchsten Mo-
1.0000 + 1.0000i
nom.
1.0000 - 1.0000i
poly(r) berechnet aus den Nullstellen in r
das Polynom x
2 + 1/2.
© ....................................... ©
>> poly(r)
ans =
1.0000 0 0.5000
46.3. Multiplikation von Polynomen
Aufgabe 88 (Polynomfunktionen)
Mit der Funktion conv kann man Polyno-
Bestimmen Sie die reellen Nullstellen nach-
me miteinander multiplizieren. Das Poly-
folgender Polynome. Zeichnen Sie diese Po-
nom p1 (x) = x2 + 2x − 3 multipliziert mit
lynome dann in einem geeigneten Intervall, 3 2
dem Polynom p2 (x) = 2x − x + 3x − 4
um diese Nullstellen geometrisch überprü-
ergibt das Polynom p3 (x) = p1 (x) · p2 (x) =
fen zu können (x ∈ R).
2x5 + 3x4 − 5x3 + 5x2 − 17x + 12
(a) g1 (x) = x3 − 5x2 + 2x + 8
>> p1 = [1 2 -3];
(b) g2 (x) = x2 + 4x + 4 >> p2 = [2 -1 3 -4];
>> p3 = conv(p1,p2)
(c) g3 (x) = x5 − 3x4 + 4x3 − 4x + 4
p3 =
2 3 -5 5 -17 12
Lösung:

110 Copyright
c G. Gramlich
46.4. Addition und Subtraktion von %-Addiert zwei Polynome
Polynomen %-----------------------------
if nargin < 2
In Matlab gibt es keine Funktion zur Ad- error('Zu wenig Argumente.')
dition zweier Polynome. Haben die Polyno- end
me den gleichen Grad, werden die entspre- %-Stellt sicher, dass p1 und p2
chenden Zeilenvektoren addiert. Das Poly- %-Zeilenvektoren sind.
nom p1 (x) = x2 + 2x − 3 addiert mit dem p1 = p1(:)';
2
Polynom p4 (x) = −x + 3x − 4 ergibt das p2 = p2(:)';
Polynom p5 (x) = p1 (x) + p4 (x) = 5x − 7 lp1 = length(p1); %Länge von p1.
lp2 = length(p2); %Länge von p2.
>> p1 = [1 2 -3]; p1undp2 = [zeros(1,lp2-lp1) p1]+
>> p4 = [-1 3 -4]; [zeros(1,lp1-lp2) p2];
>> p5 = p1+p4
p5 =
0 5 -7 Um die Funktion addpoly zu verstehen, be-
trachte man die nachfolgenden Zeilen:
Dies setzt jedoch Vektoren gleicher Län-
ge, das heiÿt Polynome gleichen Grades,
>> addpoly(p1,p2)
voraus. Will man Polynome unterschiedli-
ans =
chen Grades addieren, so muss man den
2 0 5 -7
Zeilenvektor zum Polynom kleineren Gra-
des durch Nullen auüllen. Das Polynom
p1 (x) = x2 + 2x − 3 addiert zu dem Po-
Das Ergebnis ist das gleiche wie oben. Die-
Matlab
3 2
lynom p2 (x) = 2x − x + 3x − 4 ergibt
se -Funktion addpoly kann auch
p6 (x) = p(1) + p2 (x) = 2x3 + 5x − 7
dazu verwendet werden, um Polynome zu
subtrahieren. Dies zeigen die nachfolgenden
>> p1 = [1 2 -3];
>> p2 = [2 -1 3 -4]; Matlab -Zeilen:

>> p6 = [0 p1]+p2
p6 = >> p7 = addpoly(p1,-p2)
2 0 5 -7 p7 =
-2 2 -1 1
Die folgende Matlab -Funktion automati-
siert diesen Prozess.
p1 (x) = x2 + 2x − 3 minus p2 (x) = 2x3 −
function p1undp2 = addpoly(p1,p2) x2 + 3x − 4 ergibt das Polynom p7 (x) =
%----------------------------- −2x3 + 2x2 − x + 1.

111 Copyright
c G. Gramlich
46.5. Division von Polynomen
>> p = [4 -2 1 -7];
Mit der Funktion deconv kann man Po- >> px = polyval(p,2.5)
lynome dividieren. Das Polynom p2 (x) = px =
2x3 − x2
+ 3x − 4 dividiert durch das Poly- 45.5000
nom p1 (x) = x2 + 2x − 3 ergibt das Poly-
nom q(x) = 2x − 5 mit dem Restpolynom
Die nachfolgenden Befehle berechnen 100
r(x) = 19x − 19.
Polynomwerte für das Polynom p(x) =
4x3 −2x2 +x−7 zu 100 verschiedenen äqui-
>> p2 = [2 -1 3 -4]; distanten Werten im Intervall von −1 bis 4.
>> p1 = [1 2 -3];
>> [q,r] = deconv(p2,p1) >> p = [4 -2 1 -7];
q = >> x = linspace(-1,4);
2 -5 >> px = polyval(p,x);
r =
0 0 19 -19
Aufgabe 89 (Polynomfunktionen)
Gegeben seien die folgenden Polynomfunk-
tionsterme
46.6. Ableiten von Polynomen
f1 (x) = x3 − 3x2 − x + 3
Die Matlab -Funktion polyder dieren- f2 (x) = x3 − 6x2 + 12x − 8
ziert ein Polynom. Die Ableitung des Po-
f3 (x) = x3 − 8x2 + 20x − 16
lynoms p2 (x) = 2x3 − x2 + 3x − 4 ist das
0 2
Polynom p2 (x) = 6x − 2x + 3. f4 (x) = x3 − 5x2 + 7x − 3
f5 (x) = x − 2
>> p2 = [2 -1 3 -4];
>> dp2 = polyder(p2)
Zeichnen Sie die Polynome im Intervall
dp2 =
6 -2 3 [0, 4]. Benutzen Sie eingebaute Matlab -
Funktionen, um nachfolgende Polynome in
den Punkten 0 und 1 auswerten zu können.

46.7. Auswerten von Polynomen (a) f2 (x) − 2f4 (x)

Polynome können mit der Funktion (b) 3f5 (x) + f2 (x) − 2f3 (x)
polyval ausgewertet werden. Die nachfol-
(c) f1 (x)f3 (x)
genden Kommandos berechnen p(2.5) für
das Polynom p(x) = 4x3 − 2x2 + x − 7. (d) f4 (x)/(x − 1)

112 Copyright
c G. Gramlich
Lösung: Das folgende Script löst die Auf- Funktion Beschreibung
gabe. conv Multipliziert Polynome
deconv Dividiert Polynome

p1 = [1 -3 -1 3]; poly Polynom aus Nullstellen

p2 = [1 -6 12 -8]; polyder Berechnet Ableitung

p3 = [1 -8 20 -16]; polyval Berechnet Polynomwerte

p4 = [1 -5 7 -3]; roots Berechnet Nullstellen

p5 = [0 0 1 -2];
pa = p2-2*p4; Tabelle 25: Polynome in Matlab
pb = 3*p5+p2-2*p3;
pc = conv(p1,p3);
durch alle Punkte geht. Ein solches Poly-
pd = deconv(p4,[1 -1]);
x = linspace(0,4); nom hat höchstens den Grad n−1 und
ist eindeutig bestimmt; wir nennen es das
ypa = polyval(pa,x);
ypb = polyval(pb,x); Interpolationspolynom. Mit der Matlab -

ypc = polyval(pc,x); Funktion polyfit ist es bequem möglich,


dieses Polynom zu berechnen. Als Beispiel
ypd = polyval(pd,x);
plot(x,ypa,x,ypb,x,ypc,x,ypd) betrachten wir die drei Punkte (−2, −27),
(0, −1) und (1, 0). Gesucht ist also ein qua-
dratisches Polynom p2 (t, x) = x1 + x2 t +
© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . © x3 t2 , das die drei gegebene Punkte inter-
poliert. Die nachfolgenden Matlab -Zeilen
berechnen das Poylnom und stellen das
46.8. Zusammenfassung Problem grasch dar.

In Matlab gibt es eine Reihe von nütz-


lichen Funktionen, die dem Anwender das
t = [-2 0 1];
Arbeiten mit Polynomen erleichtern. Dies
y = [-27 -1 0];
kommt vor allem dann zum Tragen, wenn
x = polyfit(t,y,length(t)-1);
Interpolations- und Approximationsaufga-
ti = linspace(min(t),max(t));
ben behandelt werden. Die Tabelle 30 fasst
yi = polyval(x,ti);
die Funktionen nochmals zusammen, siehe
plot(ti,yi,t,y,'ro'), grid on
doc polyfun (help polyfun).

47. Polynominterpolation Lässt man sich den Zeilenvektor x ausge-


ben, so ndet man darin die gewünschten
Gegeben sind n Punkte in der Ebene R2 , Koezienten des quadratischen Polynom;
nde ein Polynom minimalen Grades, das man erhält p2 (t) = −1 + 5t − 4t2 .

113 Copyright
c G. Gramlich
5

−5

−10

−15

−20

−25
ti yi
−30
−2 −1.5 −1 −0.5 0 0.5 1 0.0 2.9
0.5 2.7
Abbildung 34: Polynominterpolation 1.0 4.8
1.5 5.3
48. Polynomapproximation 2.0 7.1
2.5 7.6
3.0 7.7
Die Funktion polyfit kann auch verwen-
3.5 7.6
det werden, um Daten durch Polynome
4.0 9.4
zu approximieren. Gegeben sind m Punkte
4.5 9.0
(ti , yi ), i = 1, 2, . . . , m und gesucht ist ein
n 5.0 9.6
Parametervektor x ∈ R , sodass die poly-
5.5 10.0
nomiale Modellfunktion p(t, x) = x1 +x2 t+
6.0 10.2
x3 t2 + · · · + xn tn−1 die gegebenen Punkte
6.5 9.7
bestmöglichst approximiert, wobei best-
7.0 8.3
möglichst im Sinne kleinster Fehlerquadra-
7.5 8.4
te zu verstehen ist:
8.0 9.0
Pm
Minimiere i=1 (yi − p(ti , x))2 . 8.5 8.3
x ∈ Rn 9.0 6.6
9.5 6.7
Da die gesuchten Parameter xi in der Mo- 10.0 4.1
dellfunktion linear vorkommen, liegt eine li-
neare Ausgleichsaufgabe vor. Als Beispiel
betrachten wir folgende Aufgabe. Ange-
nommen es liegen die folgenden Messdaten
vor

Da diese Daten nahezu auf einer paraboli-


schen Kurve liegen, entscheiden wir uns da-
für, ein quadratisches Polynom durch diese

114 Copyright
c G. Gramlich
Punkte zu legen. Die folgenden Matlab - unter dem Namen Regressionsrechnung
Zeilen zeigen, wie man das Polynom zwei- (Engl.:data tting ) studiert.
ten Grades ndet und wie man die Ergeb-
nisse grasch darstellen kann.
49. Kubische Splineinterpolation
t = [0.0:0.5:10];
y = [2.9 2.7 4.8 5.3 7.1 7.6 7.7... Für viele Anwendungen ist die Polynomin-

7.6 9.4 9.0 9.6 10.0 10.2 9.7... terpolation ungeeignet, insbesondere dann,

8.3 8.4 9.0 8.3 6.6 6.7 4.1]; wenn der Grad des Interpolationspoly-

x = polyfit(t,y,2); noms groÿ gewählt werden muss. Abhilfe

ti = linspace(min(t),max(t)); schat in diesem Fall eine stückweise po-

yi = polyval(x,ti); lynomiale Interpolation, insbesondere eine

plot(ti,yi,t,y,'ro'), grid on kubische Splineinterpolation. In Matlab


kann man ein kubisches Splineinterpolati-
onspolynom mithilfe der Funktion spline
120
berechnen. Ein kubischer Spline ist ein
data 1
100 linear stückweises kubisches Polynom, das zwei-
quadratic
cubic mal stetig dierenzierbar ist. Das nachfol-
80 4th degree
gende Beispiel zeigt eine kubische Splin-
60
einterpolation im Vergleich zu einer unge-
40 eigneten Polynominterpolation anhand von

20 neun Datenpunkte, die zur Quadratwurzel-


funktion gehören. Während das Interpolati-
0
onspolynom achten Grades zu Ozillationen
−20
0 2 4 6 8 10 führt, ist eine kubische Splineinterpolation
gut geignet die gegebenen Punkte zu inter-
Abbildung 35: Polynomapproximation polieren.

Lässt man sich den Zeilenvektor x ausge- %-Daten.


ben, so ndet man darin die gewünsch- t = [0 1 4 9 16 25 36 49 64];
ten Koezienten des quadratischen Poly- y = [0 1 2 3 4 5 6 7 8];
nom; man erhält p2 (t) = 2.1757 + 2.6704t − %-Polynominterpolation.
0.2384t2 . Diese Polynom ist das beste Poly- x = polyfit(t,y,length(t)-1);
nom zweiten Grades in dem Sinne, dass es ti = linspace(min(t),max(t));
die Summe der Fehlerquadrate minimiert. yi = polyval(x,ti);
Die Polynomapproximation bzw. Aus- %-Kubische Splineinterpolation.
gleichsaufgabe ist in der Statistik von ys = spline(t,y,ti);
besonderer Bedeutung und wird dort plot(ti,yi,t,y,'ro',ti,ys),

115 Copyright
c G. Gramlich
grid on, axis([0,64,0,10]), Sie, dass humps eine eingebaute Matlab -
legend('Polynom','Daten','Spline') Funktion ist, deren Funktionsterm gegeben
=1/ (t − 0.3)2 + 0.01 +

ist durch hums(t)
1/ (t − 0.9)2 + 0.04 − 6.
10

9 Polynom

8
Daten
Spline t = linspace(0,3,10);
7 y = humps(t);
6 tt = linspace(min(t),max(t));
5 yi = interp1(t,y,tt);
4 plot(tt,yi,t,y,'ro',tt,humps(tt)),
3 grid on,
2
legend('Interpolationsfunktion',...
1
'Punkte','humps'),
0
0 10 20 30 40 50 60

100

Abbildung 36: Kubische Splineinterpolati- Interpolationsfunktion


80 Punkte
on humps

60

50. Stückweise lineare


40

Interpolation
20

Angenommen es sind m Punkte (ti , yi ) ge- −20


0 0.5 1 1.5 2 2.5 3
geben. Setzt man t = (t1 , t2 , . . . , tm ) und
y = (y1 , y2 , . . . , ym ) und führt plot(t,y)
Abbildung 37: Lineare Interpolation
aus, so werden diese m Punkte geradli-
nig verbunden, das heiÿt man sieht den
Graph einer stückweisen (an) linearen In-
terpolationsfunktion. Mithilfe der Funktion 51. Nichtlineare Gleichungen
interp1 kann man stückweise lineare In-
terpolationsfunktionen berechnen. Wir zei- In Matlab gibt es die eingebaute Funk-
gen dies an einen Beispiel. Angenommen tion fzero zur Lösung einer nichtlinearen
es soll die stückweise lineare Interpolati- Gleichung in einer Variablen. Der Algorith-
onsfunktion zu den Punkten (ti , yi ) mit mus ist eine Kombination aus dem Inter-
t = linspace(0,3,10) und y = humps(t) vallhalbierungsverfahren, der Sekantenme-
berechnet werden, so kann man das mit thode und der inversen quadratischen In-
den folgenden Zeilen erreichen. Beachten terpolation. Dieses hybride Verfahren hat

116 Copyright
c G. Gramlich
eine lange und interessante Geschichte, sie- Sie können sich die einzelnen Iterations-
he [7]. Es ist ein guter Algorithmus, aber schritte auch ausgeben lassen, indem Sie die
leider nur für skalarwertige Funktionen mit entsprechende Option mit der optimset-
einer skalaren Variablen einsetzbar. Den Funktion setzen. Dies geht wie folgt:
m-File fzero ndet man im Verzeichnis
Toolbox/MATLAB/funfun. >> options = optimset('Display',...
Die Buckelfunktion humps hat zwei Null- 'iter');
stellen, siehe Abbildung 5. Wir berechnen >> x2 = fzero(f,1,options);
diese mit fzero.

>> fzero(@humps,1)
Mit der Matlab -Funktion optimset kön-
nen Sie verschiedene Parameter (zum
ans =
Beispiel Genauigkeitswerte) von Optimie-
1.2995
rungsfunktionen setzen. Da das Lösen
>> fzero(@humps,0)
nichtlinearer Gleichungen eng verwandt ist
ans =
mit dem Lösen von Optimierungsproble-
-0.1316
men wird auch der Name optimset ver-
ständlich.
Wir wollen fzero noch an der nichtlinearen Parameterabhängige nichtlineare Gleichun-
Gleichung x2 − 4 sin(x) = 0 illustrieren. Die gen können Sie ebenfalls mit fzero lösen.
Gleichung hat die beiden Nullstellen: x1 =
Gleichungen mit Polynomfunktionen kön-
0 und x2 ≈ 1.9. Man erhält diese durch zum nen Sie ezient mit der Funktion roots
Beispiel durch
lösen. Nichtlineare Gleichungen mit mehr
als zwei Variablen sind mit der Funktion
>> f = @(x)x^2-4*sin(x); fsolve anzugehen. Diese Funktion gehört
>> x1 = fzero(f,1) aber zur Optimization Toolbox und deshalb
x1 = nur dann verwendbar, wenn diese installiert
-1.2470e-026 ist.

Aufgabe 90 (Nichtlineare Gleichungen)


bzw.
Berechnen Sie mit fzero die Lösung der

>> x2 = fzero(f,3) nichtlinearen Gleichung

x2 =
e−x = x
1.9338
Lösung: Die Lösung ndet man wie folgt:
Das zweite Argument des Funktionsaufru-
fes gibt jeweils den Startpunkt des itera- >> f = @(x)exp(-x)-x;
tiven Verfahren an, x0 = 1 bzw. x0 = 3. >> x = fzero(f,2)

117 Copyright
c G. Gramlich
x = (a) f1 (x) = 1/2ex/3 − sin(x)
0.5671
(b) f2 (x) = log(x + 1) − x2

© ....................................... © (c) f3 (x) = ex − 5x2

Aufgabe 91 (Nichtlineare Gleichungen)Lösung:


Berechnen Sie mit fzero die Lösung der
(a) Man zeichnet zunächst den Graphen
nichtlinearen Gleichung
der Funktion (s. Abbildung 39) mit
x
e + 2x = 0
>> f = @(x) 1/2*exp(x/3) - sin(x);
Die Abbildung 38 zeigt die Geometrie. >> fplot(f,[0 10])
exp(x)+2 x
>> xlabel('x'),ylabel('f(x)')
>> grid on
10

15
5

10
0
f(x)

5
−5
−2 −1 0 1 2
x 0

−5
Abbildung 38: Graph von f (x) = ex + 2x, 0 2 4 6 8 10
x
x∈R

Lösung: Die Lösung ndet man wie folgt: Abbildung 39: Graph der Funktion f1 im
Intervall [0,10]
>> f = @(x) exp(x)+2*x;
>> x = fzero(f,3) Die Nullstelle liegt oensichtlich im In-
x = tervall [0,1]. Mit
-0.3517
>> fzero(f,[0,1])
© ....................................... © ans =
0.6772
Aufgabe 92 (Nichtlineare Gleichungen)
Finden Sie die positiven Nullstellen der fol- sieht man, dass die Nullstelle im Punkt
genden Funktionen: x = 0.6772 liegt.

118 Copyright
c G. Gramlich
(b) Man zeichnet zunächst den Graphen
der Funktion (s. Abbildung 40) mit function y = f3(x)
y = exp(x)-5*x.^2;
>> f = @(x) log10(x+1)-x^2;
>> fplot(f,[0 1]) Mit Hilfe des Graphen der Funktion,
>> xlabel('x'),ylabel('f(x)') der durch
>> grid on
>> fplot(@f3,[0 6])
>> xlabel('x'),ylabel('f(x)')
0.2 >> grid on
0
erzeugt werden kann (s. Abbildung 41),
−0.2 erkennt man, dass die beiden Nullstel-
f(x)

−0.4
250

−0.6
200

−0.8 150
0 0.2 0.4 0.6 0.8 1
x
f(x)

100

50
Abbildung 40: Graph der Funktion f2 im
0
Intervall [0,1]
−50
0 1 2 3 4 5 6
x
Die Nullstelle liegt oensichtlich im In-
tervall [0.3,0.5]. Mit
Abbildung 41: Graph der Funktion f3 im

>> fzero(f,[0.3,0.5]) Intervall [0,6]

ans =
len im Intervall [0,1] und im Intervall
0.3696
[4,5] liegen. Mit

sieht man, dass die Nullstelle im Punkt >> fzero(@f3,[0,1])


x = 0.3696 liegt. ans =
0.6053
(c) Statt des @-Befehls kann man auch ein
m-File verwenden, das die entsprechen-
und
de Funktion enthält. Dazu legt man ein
m-File unter dem Namen f3.m an, dass >> fzero(@f3,[4,5])
folgenden Inhalt hat: ans =

119 Copyright
c G. Gramlich
4.7079
>> solve('log(x)/log(0.5)-x')
erkennt man, dass sie bei x1 = 0.6053 ans =
und x2 = 4.7079 liegen. .64118574450498598448620048211482

© ....................................... ©
oder

Aufgabe 93 (Exponentialgleichung) >> solve('ln(x)/ln(0.5)-x')


Berechnen Sie in Matlab die Lösung von
ans =
(0.5)x = x .64118574450498598448620048211482

Lösung: Erste Möglichkeit


Die Funktion solve ist eine symbolische
Funktion, das heiÿt es wird versucht, eine
>> solve('0.5^x=x')
symbolische Lösung zu nden. Dies ist aber
ans =
.64118574450498598448620048211482 nicht möglich, daher schaltet solve auf ein
numerisches Verfahren um und liefert eine
numerische Lösung.
Die Funktion solve ist eine symbolische
Zweite Möglichkeit:
Funktion, das heiÿt es wird versucht, eine
symbolische Lösung zu nden. Dies ist aber
>> f = @(x) log(x)/log(0.5)-x;
nicht möglich, daher schaltet solve auf ein
>> fzero(f,[0.1,1])
numerisches Verfahren um und liefert eine
ans =
numerische Lösung.
0.6412
Zweite Möglichkeit:

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


>> fzero(f,[0,1])
ans = Aufgabe 95 (Polynomgleichungen)
0.6412 Berechnen Sie mit roots die Lösung der Po-
lynomgleichung

© ....................................... ©
x3 + 6x2 − 11x − 6 = 0
Aufgabe 94 (Logarithmusgleichung) Lösung:
Matlab
Die drei Lösungen ndet man wie
Berechnen Sie in die Lösung von folgt:

log0.5 x = x
>> roots([1 6 -11 -6])
Lösung: Erste Möglichkeit: ans =

120 Copyright
c G. Gramlich
-7.3803 x =
1.8256 -0.7854
-0.4453 fWert =
-1.4142
©. . . . . . . . . .© Alle drei Lösungen sind reell.

Wie bei der Funktion fzero können Sie Op-


tionen in einer Strukturvariablen durch die

52. Optimierung (Teil 1) optimset-Funktion spezizieren. Der von


fminbnd verwendete Algorithmus ist eine

Matlab besitzt zwei Funktionen, um zu Kombination des goldenen Schnittes und

optimieren: fminbnd und fminsearch. Mit parabolischer Interpolation.

fminbnd kann man ein lokales Minimum Mit der Funktion fminsearch ist es
einer reellwertigen Funktion einer reel- möglich, ein lokales Minimum einer
len Variablen ausndig machen und mit reellwertigen Funktion von n ≥ 1
fminsearch kann man eine reellwertige Variablen zu berechnen. Die Syntax
Funktion mehrerer Variablen minimieren. ist ähnlich fminbnd: x =
wie die von

Das Kommando x = fminbnd(fun, x1, fminsearch(fun,x0,options), auÿer dass


x2) versucht von der Funktion fun über das zweite Argument x0 ein Startvektor ist
dem Intervall [x1 , x2 ] ein lokales Minimum anstatt eines Intervalls. Die quadratische
2 2
zu nden. Im Allgemeinen hat eine Funkti- Funktion f (x1 , x2 ) = x1 + x2 − x1 x2 ,
on mehrere Minima. In Matlab
gibt es je- (x1 , x2 ) ∈ R
2 hat in x∗ = (0, 0) eine

doch keine Funktion, dieses schwierige Pro- Minimalstelle, denn es ist:

blem zu lösen, nämlich ein globales Mini-


mum zu nden.
>> f = @(x)x(1)^2+x(2)^2-x(1)*x(2);
>> x = fminsearch(f,ones(2,1))
Wollen Sie eine Funktion f maximieren
x =
statt minimieren, dann können Sie −f mi-
1.0e-004 *
nimieren, da Maxx f (x) = −Minx (−f (x))
-0.4582
ist.
-0.4717
Als Beispiel betrachten wir das eindimen-
sionale (univariate) Optimierungsproblem:
Das Verfahren hinter der Funktion
Minimiere sin x − cos x fminsearch basiert auf dem Nelder -
x ∈ [−π, π] Mead Simplexverfahren, eine direkte
Suchmethode, die ohne Ableitungsinforma-
Die Lösung erhalten wie folgt:
tionen auskommt.

>> f = @(x)sin(x)-cos(x); Es ist möglich, dass das Verfahren zu kei-


>> [x,fWert] = fminbnd(f,-pi,pi) nem lokalen Minimum gelangt oder sehr

121 Copyright
c G. Gramlich
langsam konvergiert. Dagegen hat es den 53. FFT
Vorteil, robust gegenüber Funktionsunste-
tigkeiten zu sein. Die diskrete Fourier -Transformation ist

Weitere verfeinerte Algorithmen nden Sie eine unitäre lineare Abbildung von Cn nach
in derOptimization Toolbox, siehe doc Cn , wobei einem Vektor x∈ Cn der Vektor
optim (help optim). y = F nx zugeordnet wird. Hierbei ist Fn
die unitäre Matrix aus Cn×n , die die uni-

Aufgabe 96 (Optimierung)
täre Abbildung beschreibt. Für n=4 hat
diese die Form
Lösen Sie das Problem
 
1 1 1 1
Minimiere ex1 −x2 + x21 + x22 .  1 ω ω2 ω3 
Fn = 
 1 ω2 ω4 ω6  ,
 ω = e−2πi/4 .
x ∈ R2
1 ω3 ω6 ω9
Geben Sie die Lösung auf vier Nachkom-
mastellen an.
Die schnelle Fourier -Transformation
(Fast Fourier Transform = FFT) ist ein
Lösung: Die Lösung ist x∗ = (x∗1 , x22 ) ≈
ezientes Verfahren um den Bildvektor y
(−0.2836, 0.2836) mit f (x1 , x2 ) ≈ 0.7281.
Mit der Matlab-Funktion fminsearch ge-
anstatt der obigen Matrix-Vektor Multi-
plikation zu berechnen. Die Funktion fft
winnt man die Lösungen wie folgt. Man
realisiert diese Methode und wird mit y =
schreibe eine m-File, in dem man die Ziel-
fft(x) aufgerufen. Die Ezienz von fft
funktion deniert
hängt vom Wert n ab; Primzahlen sind
schlecht, zerlegbare Zahlen sind besser
function f = myf(x)
und Vielfache von 2 sind am Besten. Die
f = exp(x(1)-x(2))+x(1).^2+...
inverse FFT, x = n−1 F n y , wird durch die
x(2).^2;
Funktion ifft ausgeführt: x = ifft(y).
Wir geben ein Beispiel:

und ruft dann die fminsearch Funktion


auf.
>> y = fft([1 1 -1 -1]')
y =
0
>> fminsearch(@myf,[1;1])
2.0000 - 2.0000i
ans =
0
-0.2836
2.0000 + 2.0000i
0.2835
>> x = ifft(y)
x =
© ....................................... © 1
1

122 Copyright
c G. Gramlich
-1
-1 >> y = fft([1 0 -1 0])
y =
0 2 0 2
Aufgabe 97 (FFT, Konstante)
Berechnen Sie die diskrete Fourier -
Transformation des Vektors x = (1, 1, 1, 1). © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©
Machen Sie sich jedoch erst klar, was her-
Es existieren in Matlab auch Funktionen
aurauskommen sollte.
Lösung: Es ist
für mehrdimensionale diskrete Fourier -
Transformationen und ihre Inversen: sie-
he doc fft2 (help fft2), doc fftn (help
>> y = fft([1 1 1 1])
fftn), doc ifft2 (help ifft2) und doc
y =
ifftn (help ifftn).
4 0 0 0
Die FFT-Algorithmen in Matlab werden
durch das Softwarepaket FFTW (the "Fas-
Die Abbildung 42 zeigt die Vektoren x = test Fourier Transform in the West") rea-

x y
lisiert. Dieses Paket ist ein Beispiel einer
1.5 4.5
adaptiven Software in dem Sinne, dass die-
4
se dafür sorgt, dass die Ausführungszeit am
3.5

1 3 schnellsten ist, unabhängig davon auf wel-


2.5 cher Computerumgebung man sich gerade
2
bendet. Die Funktion fftw stellt Parame-
0.5 1.5
ter zur Verfügung um diesen Prozess zu tu-
1

0.5
nen, siehe doc fftw (help fftw).
0 0
1 2 3 4 1 2 3 4

54. Integration
Abbildung 42: Zu Aufgabe 97

Unter numerischer Integration versteht


(1, 1, 1, 1) und y = (4, 0, 0, 0). © . . . . . . . . . ©
man die Berechnung einer Approxima-
tion an bestimmte Integrale der Form
Aufgabe 98 (FFT, Kosinus)
Rb
a f (x)dx. Matlab stellt die beiden Funk-
Berechnen Sie die diskrete Fou- tionen quad und quadl als adaptive Inte-
rier -Transformation des Vektors grationsfunktionen zur Verfügung. Sie be-
x = (1, 0, −1, 0). Überlegen Sie jedoch rechnen eine Näherung an das bestimmtes
Rb
zuerst, was herauskommen sollte. Integral
a f (x)dx. Hierbei müssen die In-
Lösung: Es ist tegrationsgrenzen a und b endlich sein und

123 Copyright
c G. Gramlich
der Integrand f (x) darf im Intervall [a, b] Abbildung wurde dabei mit folgenden An-
keine Singularitäten besitzen. weisungen erstellt:

Wir diskutieren die Funktion quad; quadl >> x = linspace(0,1);


funktioniert analog. Ein Aufruf der Form
>> y = humps(x);
>> area(x,y,'FaceColor','r',...
quad(fun,a,b)
'LineWidth',2,'EdgeColor','b');

berechnet das bestimmte Integral. Der Inte- Das bestimmte Integral


grand fun kann sowohl in einem m-File als Z 1
auch als @-Funktion deniert werden. Er xx dx
muss jedoch in vektorisierter Form vorlie- 0

gen, so dass ein Vektor zurückgegeben wer- kann von Matlab nicht exakt (symbolisch)

den kann, wenn das Argument x von f ein berechnet werden.

Vektor ist.
>> syms x
Wegen >> f = x^x;
>> int(f,0,1)
>> quad(@humps,0,1) Warning: Explicit integral could
ans = not be found.
29.8583 > In sym.int at 58
ans =
ist der Flächeninhalt unter dem Graph von int(x^x,x = 0 .. 1)
humps im Intervall [0, 1] ungefähr gleich 30.
Die Abbildung 43 zeigt die Geometrie in Das Integral wird unverändert als nichtbe-
rechenbar ausgegeben. Wir können das In-
100 tegral aber numerisch berechnen. Es ist:

80 >> quad(@(x)x.^x,0,1)
60
ans =
0.7834
40

Die Abbildung 44 zeigt die dazugehörige


20
Geometrie.
0
0 0.2 0.4 0.6 0.8 1
Aufgabe 99 (Numerische Integration)
Berechnen Sie die Länge der Zykloide

Abbildung 43: Fläche unter humps in [0, 1] f : R → R2


Form von Graph und Flächeninhalt. Die
t 7→ (t − sin t, 1 − cos t)

124 Copyright
c G. Gramlich
1
function f = fxlog(x)
0.8 f = x.*log(x);
0.6

deniert, so erhält man nach Eingabe von


0.4

0.2 >> quad(@fxlog,2,4)


0
ans =
0 0.2 0.4 0.6 0.8 1
6.7041

Abbildung 44: Fläche unter xx in [0, 1] eine Approximation an das zu berechnende


Integral.
von t = 0 bis t = 2π . Beachten Sie die Array-Multiplikation .* in
Lösung: Es ist f 0 (t) = (1 − cos t, sin t) und obiger Funktion fxlog, damit die Funktion
somit gilt für vektorwertige Eingabeargumente kor-
Z 2π rekt funktioniert. © ..................... ©
0
Lf = |f (t)|dt
0 Die Funktion quad Simp-
basiert auf der

son Newton-Cotes
Z q
2 -Regel, welche eine 3-
= (1 − cos t)2 + sin t dt
0 Punkt Regel ist, das heiÿt sie ist für Po-

und damit in Matlab lynome bis zum Grad 3 exakt. Die Funk-
tion quadl setzt eine genauere Gauÿ-
>> f = @(t)sqrt((1-cos(t)).^2+... Lobatto 4-Punkt Regel mit einer 7-Punkt

sin(t).^2); Kronrod Erweiterung ein. Somit ist diese

>> quad(f,0,2*pi) für Polynome bis zum Grad 5 bzw. 9 genau.

ans = Beide Funktionen arbeiten adaptiv. Sie un-

8.0000 terteilen das Integrationsintervall in Teil-


intervalle und verwenden über jedem Teil-
intervall die zugrundeliegende Integrations-
© ....................................... ©
regel. Die Teilintervalle werden aufgrund
des lokalen Verhaltens des Integranden ge-
Aufgabe 100 (Numerische Integration)
wählt, wobei das kleinste Intervall dort aus-
Berechnen Sie
gesucht wird, wo der Integrand sich am
Z 4 meisten ändert. Eine Warnung wird ausge-
x ln(x)dx. geben, wenn die Teilintervalle zu klein wer-
2
den oder falls zu viele Funktionsauswertun-
Lösung: Ist die Funktion gen gemacht werden müssen, worauf oft ge-

125 Copyright
c G. Gramlich
schlossen werden kann, dass der Integrand Dann geben wir ein:
eine Singularität besitzt.

>> dblquad(@fxy,0,1,4,6)
54.1. Mehrfachintegrale ans =
87.2983
Man spricht von einem zweifachen Integral
(Doppelintegral) wenn es die Form
Die Funktion, die dblquad im ersten Ar-
gument übergeben wird, muss einen Vek-
Z Z
f (x, y)dxdy tor x und einen Skalar y vertragen kön-
D
nen. Zurückgegeben wird ein Vektor. Zu-
hat. Hierbei ist D ein beschränktes Gebiet sätzliche Argumente für dblquad sind mög-
im zweidimensionalen Raum R2 . Ein drei- lich, um die Toleranz und die Integrations-
faches Integral (Dreifachintegral) liegt vor, methode zu bestimmen. Standardmäÿig ist
wenn die Gestalt dies quad.
Z Z Z
f (x, y, z)dxdydz Aufgabe 101 (Doppelintegral)
G Berechnen Sie das Integral

hat, wobei G ein beschränktes Gebiet im Z 2 Z 1


dreidimensionalen Raum R3 ist. Analog
(x2 )dxdy
sind vier- und mehrfache Integrale deniert. y=0 x=0
Die Berechnung mehrfacher Integrale lässt
sich auf die Berechnung mehrerer einfacher
Lösung: Es ist

Integrale zurückführen.
>> dblquad(@(x,y) x.^2,0,1,0,2)
Doppelintegrale können mit dblquad nume-
ans =
risch berechnet werden. Angenommen wir
0.6667
wollen das Integral

Z 6 Z 1
(y 2 ex + x cos y)dxdy © ....................................... ©
y=4 x=0
Dreifachintegrale können mit triplequad
approximieren, dann können wir wie folgt
berechnet werden.
verfahren. Zunächst denieren wir den In-
tegranden, der nun ein Funktionsterm von
>> triplequad(@(x,y,z)...
zwei unabhängigen Variablen ist.
(y*sin(x)+z*cos(x)),0,pi,0,1,-1,1)
ans =
function out = fxy(x,y) 2.0000
out = y^2*exp(x)+x*cos(y);

126 Copyright
c G. Gramlich
Aufgabe 102 (Dreifachintegral)
Berechnen Sie das Integral >> trapz(x,y)
Z 1 Z 1 Z π
ans =
(x3 )dxdydz 1.9993
z=−1 y=0 x=0

Lösung: Es ist Wir zeigen noch ein Beispiel für eine nicht
gleichmäÿige Diskretisierung des Intervalls
>> triplequad(@(x,y,z) x.^3,... [0, π]
0, pi, 0, 1, -1, 1)
ans = >> x = sort(rand(1,101)*pi);
48.7045 >> y = sin(x);
>> trapz(x,y)
ans =
© ....................................... ©
1.9983

54.2. Tabellarische Daten Im allgemeinen sind jedoch die Funktionen


quad und quadl vorzuziehen, wenn der In-
Eine weitere Integrationsroutine ist trapz, tegrand analytisch verfügbar ist.
welche wiederholt die Trapezregel anwen-
Steht der Integrand f in tabellarischer
det. Sie unterscheidet sich von quad und
Form (ti , f (ti )), i = 1, 2, . . . , m zur Ver-
quadl dadurch, dass die Eingabeargumen-
fügung und ist man an der tabellarischen
te Vektoren xi , f (xi ) und nicht der analyti-
Form der Integralfunktion Jt1 mit
sche Funktionsterm f (x) ist. Deshalb kann
die Funktion auch nicht adaptiv arbeiten.
Z x
Wir zeigen die Funktionsweise an einem
Jt1 (x) = f (t)dt
Rπ t1
Beispiel. Der exakte Wert von sin x dx
Matlab
0
ist 2. Wir bestätigen dies mit der Funkti- interessiert, so kann man die -
on trapz. Hierzu diskretisieren wir das In- Funktion cumtrapz verwenden. Das be-
tervall [0, π] gleichmäÿig und berechnen die stimmte Integral von t1 bis zu irgendeinem
dazugehörigen Sinusfunktionswerte, damit Punkt x = ti wird dann durch die Trapez-
die Eingabeargumente tabellarisch vorlie- regel berechnet. Der Aufruf
gen.
z = cumtrapz(t,f)
>> x = 0:pi/50:pi;
>> y = sin(x);
liefert einen Vektor z zurück, der die glei-
che Länge wie t hat und in dem die Wer-
Als Näherung erhalten wir somit te Jt1 (x = ti ) für i = 1, 2, . . . , m stehen.

127 Copyright
c G. Gramlich
Das folgende Beispiel zeigt die Funktions- Intervall von −3 bis 3, und in dieselbe Fi-
weise der Funktion cumtrapz an der humps- gur auch den Graph von f. Kennen Sie die
Funktion. Bedeutung der Funktionen f und F−∞ .
Lösung: Die Abbildung 46 zeigt die Gra-
>> t = linspace(-1,2);
>> f = humps(t); 1
>> z = cumtrapz(t,f); f
0.8 F−∞

0.6
Die Abbildung 45 zeigt den Graph der

0.4
100
f 0.2
80 F−1

0
60 −3 −2 −1 0 1 2 3

40

20
Abbildung 46: Die Graphen zu Aufgabe
0 103

−20
−1 −0.5 0 0.5 1 1.5 2
phen. f ist die Dichtefunktion und F−∞
ist die Verteilungsfunktion der Standard-
normalverteilung aus der Statistik. Der da-
humps-Funktion
Abbildung 45:
gralfunktion im
und Inte-
Intervall
zugehörige Matlab -Code ist

[−1, 2]
>> t = linspace(-3,3,500);
humps-Funktion und den Graph der dazuge- >> f = 1/sqrt(2*pi)*exp(-t.^2/2);
cumtrapz
hörigen Integralfunktion, die mit
>> z = cumtrapz(t,f);
berechnet wurde. Die Abbildung wurde ein-
>> plot(t,f,t,z), grid,
fach mit
>> legend('f','F_{-\infty}')

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


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

erzeugt. 54.3. Zusammenfassung


Aufgabe 103 (Integration) Zusammenfassend können wir sagen: Mat-
Zeichnen Sie den Graph der Integralfunkti-
√ 2
lab stellt zur numerischen Berechnung von
on F−3 von f (t) = 1/ 2πe−t /2 , t ∈ R im Integralen mehrere Funktionen zur Verfü-

128 Copyright
c G. Gramlich
gung. Liegt die zu integrierende mathe- eine gewöhnliche Dierenzialgleichung.
matische Funktion f in analytischer Form Hierbei ist a 6= 0 eine reelle Konstante. Die
vor, so kann der Funktionsterm in ei- Gleichung
nem m-File oder als anonyme Funktion
deniert werden. Die Matlab -Funktionen
utt (x, t) = c2 uxx (x, t)
quad, quadl, quadv, dblquad, triplequad ist eine partielle Dierenzialgleichung. Ge-
und alle Funktionen zur numerischen Lö-
sucht ist die reellwertige Funktion u mit
sung von Dierenzialgleichungen, siehe Ab-
den beiden unabhängigen Variablen x und
schnitt 55, können dann eingesetzt wer-
t, wobei c 6= 0 eine reelle Konstante ist. Sie-
den. Die Funktion quadv ist eine vektorri- he Abschnitt 60.19 für symbolisches Lösen
elle Form der Funktion quad. Liegt der In- von Dierenzialgleichungen.
tegrand tabellarisch vor, so sind die Funk-
tionen trapz und cumtrapz zu verwenden.
Zur symbolischen Berechnung von Integra- 55.1. Anfangswertaufgaben
int dsolve
len stehen die Funktionen
zur Verfügung, siehe Abschnitt 60.12 und
und
In Matlab gibt es mehrere Funktionen,
um Anfangswertaufgaben von gewöhnli-
60.19.
chen Dierenzialgleichungen numerisch zu
lösen. Anfangswertaufgaben haben folgen-
de Form
55. Dierenzialgleichungen (
d
AWA : dt y(t)
= f (t, y(t))
t0 ≤ t ≤ tf
Eine Gleichung zur Bestimmung einer
y(t0 ) = y 0
Funktion heiÿt Dierenzialgleichung, wenn
wobei t eine reelle Variable, y eine unbe-
sie mindestens eine Ableitung der gesuch-
kannte vektorwertige Funktion und die ge-
ten Funktion enthält. Die Ordnung der
gebene Funktion f ebensfalls vektorwertig
in der Dierenzialgleichung vorkommenden
ist. Konkret kann man sich t als die Zeit
höchsten Ableitung der gesuchten Funkti-
vorstellen. Die Funktion f bestimmt die ge-
on heiÿt Ordnung der Dierenzialgleichung.
wöhnliche Dierenzialgleichung und zusam-
Hängt die in der Dierenzialgleichung ge-
men mit der Anfangsbedingung y(t0 ) = y 0
suchte Funktion nur von einer Variablen ab,
wird die Anfangswertaufgabe deniert. Der
so nennt man die Dierenzialgleichung ge-
einfachste Weg solch ein Problem in Mat-
wöhnlich. Enthält die Dierenzialgleichung
partielle Ableitungen, so heiÿt sie partiell.
lab zu lösen, besteht darin, eine Funkti-
on zu schreiben, die f auswertet und dann
Zum Beispiel ist die Bestimmungsgleichung
für die reellwertige Funktion y einer Varia-
einen der Matlab -Löser aufzurufen. Die
geringste Information, die man dem Löser
blen t
mitteilen muss, ist der entsprechende Funk-
y 0 (t) = ay(t) tionsname, das Intervall [t0 , tf ] wo man die

129 Copyright
c G. Gramlich
Lösung sucht und die Anfangsbedingung 1

y0. Zusätzlich können weitere extra Ein-


und Ausgabeargumente optional angegeben 0.5

werden, die mehr über das mathematische

y(t)
Problem aussagen und wie es gelöst wer- 0

den soll. Jeder einzelne Löser ist in speziel-


−0.5
len Situationen besonders ezient, jedoch
können sie prinzipiell gegeneinander ausge-
−1
tauscht werden. Im nächsten Anschnitt zei- 0 0.5 1 1.5 2 2.5 3
t
gen wir Beispiele, die den Löser ode45 illus-
trieren. Diese Funktion realisiert ein adap-
tives Runge-Kutta Verfahren und ist für Abbildung 47: Skalares Anfangswertpro-

die meisten Probleme ezient. blem

Um das skalare (m = 1) Anfangswertpro-


blem (0≤ t ≤ 3)
von ode45 sind die Funktion rSeite, der 2-
Vektor tspan, der die Zeitspanne der Simu-
(
d −t sin(5t)
dt y(t) = −y(t) − 5e
AWA : lation speziziert und der Anfangswert y0.
y(0) = 1
Zwei Argumente t und y werden zurück-
gegeben. Die t-Werte liegen alle im Inter-
mit ode45 zu lösen, kreieren wir als erstes
vall [0, 3] und y(i) approximiert die Lösung
den m-File rSeite.m, der die rechte Seite
zur Zeit t(i). Die Werte t(2:end-1) wer-
der Dierenzialgleichung deniert.
den von der Funktion ode45 automatisch
gewählt. In den Bereichen, wo sich die Lö-
function dy = rSeite(t,y)
sungsfunktion rapid ändert, werden mehr
dy = -y-5*exp(-t)*sin(5*t);
Punkte ausgewählt. Für weitere Informa-
tionen siehe doc funfun (help funfun).
Danach machen wir folgende Eingabe
Mit der Funktion ode15i kann man An-
fangswertaufgaben, deren Dierenzialglei-
tspan = [0,3]; y0 = 1;
chung in impliziter Form vorliegt, nu-
[t,y] = ode45(@rSeite,tspan,y0);
merisch lösen. Wir betrachten ein ska-
plot(t,y,'-'), grid,
lares Problem. Die Eingabe ist ent-
xlabel t, ylabel y(t)
sprechend den anderen ODE-Funktionen:
ode15i(odefun,tspan,y0,yp0). Das ers-
Dies erzeugt die Abbildung 47 (Beachten te Argument speziziert die Funktion
Sie, dass wir beim Setzen der y - f (t, y, y 0 ), das Zweite und Dritte den Simu-
x- und
Labels die Kommando/Funktionsdualität lationsbereich (Integrationsintervall) [t0 , tf ]
ausgenutzt haben). Die Eingabeargumente bzw. den Anfangswert y(t0 ) und das vierte

130 Copyright
c G. Gramlich
Argument den Anfangswert der Ableitung,
das heiÿt y 0 (t0 ). Als Beispiel betrachten wir function res = fuerode15i(t,y,yp)
das Anfangswertproblem res = yp*y+t;
(
y 0 (t)y(t) + t = 0
AWA : Dann ergibt sich die numerische Lösung
y(0) = 1
durch die Anweisungen:
im Intervall [t0 , tf ] = [0, 0.9]. In die-
sem Problem liegt die Dierenzialgleichung y0 = 1; yp0 = 0;
y 0 (t)y(t) + t =0 in impliziter Form vor; sie t0 = 0; tf = 0.9;
ist von erster Ordnung. Ich habe diese Dif- [t,y] = ode15i(@fuerode15i,[t0 tf],...
ferenzialgleichung gewählt, weil deren ana- y0,yp0);
lytische Lösung bekannt ist und man diese
so mit dem numerischen Ergebnis verglei-
Die Abbildung 48 zeigt die numerische
chen kann. Die allgemeine implizite Lösung
von y 0 (t)y(t) + t = 0 ist die Kreisgleichung
t2 + y 2 = c, c ≥ 0. Wir bestätigen die- 1

ses Ergebnis symbolisch mit der Funktion 0.9

dsolve, siehe Abschnitt 60.19. 0.8


y

0.7
>> dsolve('Dy*y+t=0','t')
0.6
ans = symbolisch
(-t^2+C1)^(1/2)
0.5
numerisch

-(-t^2+C1)^(1/2) 0.4
0 0.2 0.4 0.6 0.8
t

Mit der Anfangsbedingung y(0) = 1 ergibt


sich die Konstante zu 1 und die Lösung ist Abbildung 48: Implizites Anfangswertpro-
p blem
y(t) = 1 − t2 .
und symbolische (analytische) Lösung der
Hier die Bestätigung:
impliziten Anfangswertaufgabe. Die Abbil-

ytrue = dsolve('Dy*y+t=0',... dung wurde mit den Anweisungen

'y(0)=1','t')
ytrue = ezplot(ytrue,[0,0.9])
(-t^2+1)^(1/2) hold on
plot(t,y,'ro')
Wir lösen die Anfangswertaufgabe nun nu-
merisch mit ode15i. Die Funktion f de- erzeugt. Für weitere Informationen siehe
nieren wir im m-File fuerode15i wie folgt: doc ode15i (help ode15i).

131 Copyright
c G. Gramlich
Die nachfolgende Aufzählung gibt eine Nicht alle schwierigen Probleme sind steif,
komplette Übersicht über alle AWA-Löser aber alle steifen Probleme sind schwierig für
in Matlab . Dazu wird angegeben für wel- ODE-Löser, die nicht für steife Probleme
chen Problemtyp der Löser geeignet ist und ausgelegt sind.
welches Verfahren dahinter steht. Die Entwickler dieser Algorithmen, Sham-
pine und Reichelt haben Ergebnisse ihrer
• ode45 für nicht steife Dierenzial- Arbeit in [24] dargestellt. Die Funktionen
gleichungen. Verfahren: Runge-Kutte - sind so konstruiert, dass man sie gegenein-
Verfahren der Ordnungen 4 und 5 ander leicht austauschen kann. So ist es zum
Beispiel leicht möglich den ode45-Löser aus
• ode23 für nicht steife Dierenzial-
gleichungen. Verfahren: Runge-Kutte -
den obigen Beispielen durch einen anderen
Löser auszutauschen. Aus [24] entnehmen
Verfahren der Ordnungen 2 und 3
wir:

• ode113 für nicht steife Dierenzialglei- The experiments reported here


chungen. Verfahren: Explizites lineares and others we have made suggest
Mehrschrittverfahren der Ordnungen 1 that except in special circumstan-
bis 13 ces, ode45 should be the code tried
rst. If there is reason to believe
• ode15s für steife Dierenzialgleichun-
the problem to be sti, or if the
gen. Verfahren: Implizites lineares Mehr-
problem turns out to be unexpec-
schrittverfahren der Ordnungen 1 bis 5
tedly dicult for ode45, the code
ode15s code should be tried.
• ode15i für implizite Dierenzialgleichun-
gen. Verfahren: Implizites lineares Mehr-
schrittverfahren der Ordnungen 1 bis 5 55.2. Randwertaufgaben
Treten in den Bedingungsgleichungen zur
• ode23s für steife Dierenzialgleichungen.
Verfahren: Modiziertes Rosenbrock -
eindeutigen Charakterisierung der Lösung
einer Dierenzialgleichung die Funktions-
Verfahren der Ordnungen 2 und 3
und Ableitungswerte der gesuchten Funk-

• ode23t für mäÿig steife Dierenzialglei- tion nicht nur wie bei Anfangswertproble-

chungen. Verfahren: Implizite Trapezre- men (AWP) an einer einzigen, sondern an

gel der Ordnungen 2 und 3 zwei Stellen auf, und ist man nur an ei-
ner Lösung auf dem Intervall zwischen die-
• ode23tb für steife Dierenzialgleichun- sen beiden Stellen interessiert, so spricht
gen. Verfahren: Implizites Runge- man von einer Randwertaufgabe (RWA)
Kutta -Verfahren der Ordnungen 2 und (Randwertproblem (RWP); englich: Boun-
3 dary Value Problem (BVP)).

132 Copyright
c G. Gramlich
Die Funktion bvp4c realisiert eine Dies sieht man so. Die allgemeine Lösung
Kollokationsmethode, um Zweipunkt- der Dierenzialgleichung u00 = 6x ist
Randwertaufgaben zu lösen. Diese Systeme
können in folgender Form geschrieben
u(x) = x3 + c1 x + c2 .
werden:
Die Randbedingungen bestimmen dann die
(
d Konstanten c1 und c2
RWA : dx y(x)= f (x, y(x))
x0 ≤ x ≤ xf
g(y(x0 ), y(xf )) = 0 0 = u(0) = c2 : c2 = 0
1 = u(1) = 1 + c1 : c1 = 0
Hier ist, wie auch bei Anfansgwertauf-
gaben, y eine unbekannte vektorwertige
Funktion und f eine gegebene vektorwer-
Wir verwenden nun bvp4c, um diese Lö-
tige Funktion von x
y . Die Lösung
und
sung zu bestätigen. Im einfachsten Fall
wird auf dem Intervall [x0 , xf ] erwartet und
hat bvp4c drei Funktionsargumente: Ei-
die gegebene Funktion g speziziert die Ne-
ne Funktion, in der das Dierenzialglei-
benbedingungen. Bei Randwertaufgaben ist
chungssystem deniert ist, eine Funktion
es üblich, die unabhängige Variable mit
mit den Randbedingungen und eine drit-
x statt mit t zu bezeichnen, weil sie bei
te Funktion, die ein Startgitter sowie eine
Anwendungen meist eine Ortsvariable ist.
Matlab
Anfangsvermutung für die Lösungsfunktion
Dies ist auch konsistent mit der -
auf diesem Gitter beinhaltet. Das Dieren-
Dokumentation. Das Lösen von Randwert-
zialgleichungssystem wird genauso gehand-
aufgaben ist im Allgemeinen anspruchsvol-
habt wie bei den Anfangswertproblemen,
ler als das Lösen von Anfangswertaufga-
nämlich als System erster Ordnung. Es ist
ben. Insbesondere ist es nicht ungewöhn-
daher als erstes notwendig, die Dieren-
lich, dass eine Randwertaufgabe mehrere
zialgleichung zweiter Ordnung in ein Sys-
Lösungen hat. Daher ist es beim Aufruf
tem erster Ordnung umzuschreiben. Wir
von bvp4c notwendig, eine Schätzung für
schreiben gleich das ganze Randwertpro-
die Lösungsfunktion mitanzugeben.
blem zweiter Ordnung in ein System ers-
Als Beispiel betrachten wir die Zweipunkt- ter Ordnung. Mit den Denitionen y1 (x) =
Randwertaufgabe: u(x) und y2 (x) = u0 (x) erhalten wir die
( Randwertaufgabe erster Ordnung:
u00 = 6x
RWA : 0 ≤ x ≤ 1.

0
u(0) = 0 u(1) = 1 y1 (x) = y2 (x)

RWA : y20 (x) = 6x 0≤x≤1

Diese ist analytisch lösbar und hat die ein- y1 (0) = 0, y1 (1) = 1

deutige Lösung
Das Dierenzialgleichungssystem wird nun
u(x) = x3 . in der Funktion odes deniert

133 Copyright
c G. Gramlich
function dydx = odes(x,y) sol = bvp4c(@odefun,@bcfun,solinit,
dydx = [y(2);6*x]; options,p1,p2,...)

Die Randbedingungen werden durch eine


In odefun wird das Dierenzialgleichungs-

Residuenfunktion ausgedrückt. Die beiden


system ausgewertet, in bcfun werden die

Randbedingungen y1 (0) = 0, y1 (1) = 1 Randbedingungen solinit


ausgewertet,
beschreibt den Anfangszustand, in options
werden dann wie folgt (zum Beispiel in der
können Optionen übergeben werden und
Funktion bcs) programmiert:
die Eingabeargumente p1, p2 erlauben zu-
sätzliche Parameter.
function res = bcs(yx0,yxf)
res = [yx0(1);yxf(1)-1]; Zusammenfassend sind für die Durchfüh-
rung folgende Schritte empfehlenswert:

Als Startlösungsfunktionen wählen wir die 1. Schreiben Sie das Problem als Rand-
Nullfunktion. wertproblem erster Ordnung.

function yinit = guess(x) 2. Schreiben Sie eine Matlab -Funktion,


in der das System erster Ordnung de-
yinit = [0;0];
niert ist.

Die nachfolgenden Matlab -Zeilen berech- 3. Schreiben Sie eine Funktion für die

net die Lösung und stellt sie grasch dar. Randbedingungen.

4. Schreiben Sie eine Funktion für die


solinit = bvpinit(linspace(0,1,5),... Startnäherung.
@guess);
sol = bvp4c(@odes,@bcs,solinit); 5. Rufen Sie den RWA-Löser bvp4c auf.

xint = linspace(0,1); 6. Zeigen Sie die Resultate.


sxint = deval(sol,xint);
plot(xint,sxint(1,:)) Aufgabe 104 (Randwertaufgaben)
Wir betrachten die Randwertaufgabe

Der Aufruf der Funktion bvpinit kreiert


(
y 00 = −y
die Struktur solinit, welche die Daten RWA : 0 ≤ x ≤ π/2.
beinhaltet, die durch Auswerten von guess
y(0) = 3, y(π/2) = 7
an fünf äquidistanten Punkten von 0 bis 1
(a) Zeigen Sie, dass
berechnet werden; in diesem Fall alle Null.
y(x) = 7 sin(x) + 3 cos(x), x ∈ [0, π/2]
Im Allgemeinen hat ein Aufruf von bvp4c
die Form: die eindeutige Lösung ist.

134 Copyright
c G. Gramlich
(b) Bestätigen sie (a), indem Sie die Lö- % Subfunctions.
sung mit der Funktion bvp4c nume- %--------------------------------
risch berechnen. function dydx = odes(x,y)
dydx = [y(2);-y(1)];
Lösung: %--------------------------------
function res = bcs(ya,yb)
(a) Die allgemeine Lösung der Dierenzial- res = [ya(1)-3;yb(1)-7];
gleichung ist %--------------------------------
function yinit = guess(x)
y(x) = c1 sin(x) + c2 cos(x).
yinit = [0;0];
Die unbekannten Konstanten c1 und c2
können dann aus den Randbedingun- © ....................................... ©
gen bestimmt werden:

3 = y(0) = c1 sin(0) + c2 cos(0) = c2 55.3. Partielle Dierenzialgleichungen


und
Mit der Funktion pdepe kann man partiel-
le Dierenzialgleichungen lösen. Matlab s
7 = y(π/2) = c1 sin(π/2)+c2 cos(π/2) pdepe löst eine Klasse von parabolischen
= c1 . bzw. elliptischen partiellen Dierenzialglei-
chungssysteme (PDE: Partial Dierential
Die Lösung der Randwertaufgabe ist
Equation). Die allgemeine Klasse hat die
somit
Form:

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


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

(b) Die numerische Lösung mit der Mat- x−m (xm f (x, t, u, ux ))x + s(x, t, u, ux ),
lab -Funktion bvp4c erledigt der fol- wobei u die gesuchte Funktion ist. Sie hängt
gende Function-File: von den Variablen x (Raumvariable) und
t (Zeitvariable) ab und kann vektorwertig
function RWA sein. Für die unabhängigen Variablen x und
solinit = bvpinit(linspace(0,... t gilt:x0 ≤ x ≤ xf und t0 ≤ t ≤ tf . Die
pi/2,5),@guess); Zahl m kann die Werte 0, 1 oder 2 haben,
sol = bvp4c(@odes,@bcs,solinit); je nachdem, ob keine, Zylinder- oder Ku-
xint = linspace(0,pi/2); gelsymmetrie vorliegt. Die Funktion c ist
sxint = deval(sol,xint); matrixwertig und die Fluÿ- bzw. Quellen-
plot(xint,sxint(1,:),'r') funktionen f , s sind vektorwertig. Anfangs-
%-------------------------------- und Randbedingungen müssen in folgender

135 Copyright
c G. Gramlich
Form zur Verfügung gestellt werden. Für m = 0, c(x, t, u) = 1, f (x, t, u, ux ) = ux
x0 ≤ x ≤ xf und t = t0 muss die Lösung und s(x, t, u, ux ) = 0. Für x = x0 sind
gleich u0 (x) sein, wobei die Funktion u0 ge- p(x, t, u) = u und q(x, t, u) = 0 die Rand-
geben ist. Für x = x0 und t0 ≤ t ≤ tf muss bedingungen, und für x = xf haben wir
die Lösung dem Gleichungssystem p(x, t, u) = u und q(x, t, u) = 0. Die Functi-
on pdeWaerme realisiert die Lösung des Pro-
px0 (x, t, u) + qx0 (x, t)f (x, t, u, ux ) = 0 blems.

genügen, wobei die Funktionen px0 und qx0


gegeben sind. Ähnlich muss für x = xf und
function pdeWaerme
t 0 ≤ t ≤ tf %Löst die eindimensionale Wärme-
%leitungungsgleichung mit den
pxf (x, t, u) + qxf (x, t)f (x, t, u, ux ) = 0 %angegebenen Anfangs- und Rand-
%bedingungen.
gelten, wobei die Funktionen p xf und qxf
m = 0;
gegeben sind. Für weitere Details siehe doc
t0 = 0;
pdepe (help pdepe). tf = 0.5;
Ein Aufruf von pdepe hat die allgemeine x0 = 0;
Form xf = 1;
xmesh = linspace(x0,xf,40);
sol = pdepe(m,@pdefun,@pdeic,...
tspan = linspace(t0,tf,20);
@pdebc,xmesh,tspan,...
sol = pdepe(m,@pdefun,...
options,p1,p2,...);
@pdeic,@pdebc,xmesh,tspan);
u = sol(:,:,1);
was der Syntax von bvp4c gleicht. mesh(xmesh,tspan,u)
Als Beispiel betrachten wir die eindimen- xlabel('x'), ylabel('t'),
sionale Wärmeleitungsgleichung zlabel('u')
%-----------------------------
ut (x, t) = uxx (x, t) %Subfunctions.
für 0 ≤ x ≤ 1 und 0 ≤ t ≤ 0.5 mit der
%-----------------------------
Anfangsbedingung
function [c,f,s] =
pdefun(x,t,u,DuDx)
u(x, 0) = sin(πx) %Differenzialgleichung.
c = 1;
und den Randbedingungen
f = DuDx;
u(0, t) = u(1, t) = 0. s = 0;
%-----------------------------
Dieses Problem ist mit pdepe lösbar, da es function u0 = pdeic(x)
die von pdepe erlaubte Form besitzt. Es ist %Anfangsbedingungen.

136 Copyright
c G. Gramlich
u0 = sin(pi*x); ist.
2
%----------------------------- Lösung: Leiten wir u(x, t) = e−π t sin(πx)
function [px0,qx0,pxf,qxf] = nach t ab, so erhalten wir die linke Seite der
pdebc(x0,u0,xf,uf,t) Dierenzialgleichung
%Randbedingungen. 2
px0 = u0; ut (x, t) = −π 2 sin(πx)e−π t .
qx0 = 0; 2
pxf = uf; Leiten wir u(x, t) = e−π t sin(πx) zweimal

qxf = 0; nach x ab, so erhalten wir die rechten Seite


der Dierentialgleichung

Hierbei haben wir die Funktion linspace 2


verwendet, um ein Gitter zwischen x0 und uxx (x, t) = −π 2 sin(πx)e−π t .
xf , sowie eines zwischen t0 und tf zu erzeu-
gen. Um die Lösung zu plotten, haben wir
Da beide Seiten für alle x und t gleich sind,
mesh verwendet. Die Abbildung 49 zeigt das ist alles gezeigt. ©.......................©

1
56. Statistik
0.5 Vorhersagen sind schwierig 
u

vor allem über die Zuknnft


0
0.5
Niels Bohr .
1
0.5
t 0 0 x
Mit der Statistics Toolbox stehen Ihnen Sta-
tistikfunktionen zur Verfügung. Die Tabelle
26 zeigt ein paar grundlegende Funktionen
Abbildung 49: Lösung der PDE
für die beschreibende Statistik.
Ergebnis. Mit help stats (doc stats) erhalten Sie
einen Überblick über alle Funktionen der
Aufgabe 105 (Partielle DGL)
Bestätigen Sie, dass
Statistics Toolbox. Ein paar Dichtefunktio-
nen sind in Tabelle 27 zu sehen.
2
u(x, t) = e−π t sin(πx)
eine Lösung des Wärmeleitungsproblems
 57. Kombinatorik
ut (x, t) = uxx (x, t)

u(x, 0) = sin(πx) 0 ≤ x ≤ 1, t ≥ 0 Mit der Funktion nchoosek kann man Bi-

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

137 Copyright
c G. Gramlich
Aufgabe 106 (Binomialzahlen)
Wie viele Möglichkeiten gibt es aus n = 49
verschiedenen Objekten k = 6 verschiedene
Objekte auszuwählen?
Lösung: n

Beschreibende Statistik Es ist gibt Möglichkeiten. Al-
k
corrcoef Korrelationsmatrix so ist

cov Kovarianzmatrix
>> nchoosek(49,6)
geomean Geometrischer Mittelwert
ans =
mad Mittlere absolute Abw.
13983816
mean Arithmetischer Mittelwert
median Zentralwert (Median)
Demnach beträgt die Wahrscheinlich-
mode Häugster Wert
keit beim Lotto sechs richtige zu ha-
range Spannweite
ben 1/13983816 ≈ 7.1511 · 10−8 =
std Standardabweichung
0.000000071511. © . . . . . . . . . . . . . . . . . . . . . . ©
tabulate Häugkeitstabelle
var Varianz Mit der Anweisung nchoosek(1:n,k) er-
halten Sie alle Anordnungsmöglichkeiten
Tabelle 26: Grundlegende Funktionen
für k Objekte ohne Wiederholung und ohne
Berücksichtigung der Reihenfolge aus n ver-
schiedenen Objekten. Zum Beispiel ist dies
für n=5 und k = 3:
>> nchoosek(1:5,3)
ans =
1 2 3
1 2 4
1 2 5
Dichtefunktionen
1 3 4
binopdf Binomialdichte
1 3 5
geopdf Geometrische Dichte
1 4 5
normpdf Normaldichte
2 3 4
unidpdf Diskrete gleichmäÿige Dichte
2 3 5
unifpdf Stetige gleichmäÿige Dichte
2 4 5
Tabelle 27: Dichtefunktionen 3 4 5

Aufgabe 107 (Binomialzahlen)


Geben Sie alle Teilmengen der Menge
{1, 2, 3, 4, 5, 6} mit genau vier Elementen

138 Copyright
c G. Gramlich
an. Wieviel gibt es?
Lösung: Es ist: >> factorial(4)
ans =
>> nchoosek(1:6,4) 24
ans =
1 2 3 4 Möglichkeiten. Alternativ zur Funktion
1 2 3 5 factorial können Sie die Funktion prod
1 2 3 6 verwenden.
1 2 4 5
1 2 4 6 >> prod(1:4)
1 2 5 6 ans =
1 3 4 5 24
1 3 4 6
1 3 5 6 © ....................................... ©
1 4 5 6
2 3 4 5 Die Funktion perms gibt alle Anordungs-
2 3 4 6 möglichkeiten an.
2 3 5 6
2 4 5 6 Aufgabe 109 (Fakultät)
3 4 5 6 Gegeben sind n = 3 verschiedene Objek-
te. Geben Sie alle Anordnungsmöglichkei-
ten ohne Wiederholung an.
Demnach gibt es Lösung: Davon gibt es genau 3! = 6 Mög-
lichkeiten; diese sind:
>> nchoosek(6,4)
ans = >> perms(1:3)
15 ans =
3 2 1
3 1 2
Möglichkeiten. © ........................ ©
2 3 1
2 1 3
Mit Hilfe der Funktion factorial kann
1 2 3
man die Fakultät berechnen.
1 3 2
Aufgabe 108 (Fakultät)
Gegeben sind n = 4 verschiedene Objek- © ....................................... ©
te. Wie viele Anordnungsmöglichkeiten oh-
ne Wiederholung gibt es? Siehe auch doc specfun (help specfun)
Lösung: Es gibt genau für weitere Funktionen.

139 Copyright
c G. Gramlich
58. Zufallszahlen Statistik Toolbox wird Ihnen diese Arbeit
abgenommen, siehe Abschnitt 58.4.

Zufallszahlen sind im wissenschaftlichen


In Matlab gibt es zwei eingebaute Funk-
tionen rand und randn, mit denen man
Rechnen ein nützliches Hilfsmittel. In vie-
Zufallszahlen erzeugen kann. Wir wollen
len Fällen werden Zufallszahlen in einer
im folgenden diese beiden Funktionen vor-
rechnergestützten Simulation eines komple-
stellen und miteinander vergleichen. Dabei
xen Problems eingesetzt, zum Beispiel bei
werden uns ihre statistischen Eigenschaf-
der Planung von Produktionssystemen oder
ten durch grasche Darstellungen verdeut-
von Groÿprojekten. Diese Simulation kann
lichen.
dann auf dem Rechner immer und immer
wieder ausgeführt werden, und die Resul-
tate können analysiert werden. Oft werden 58.1. Gleichverteilte Zufallszahlen
Zufallszahlen auch als Testdaten benutzt.
Zufallszahlen sind durch die Verteilung ih-
Hat man zum Beispiel einen Algorithmus
rer Werte charakterisiert. Zum Beispiel
entwickelt, der ein beliebiges Gleichungs-
sind gleichverteilte Zufallszahlen dadurch
system lösen soll, so kann man eine Matrix
gekennzeichnet, dass alle Werte der Zahlen-
als auch eine rechte Seite des Systems zum
folge in einem bestimmten Intervall gleich-
Testen des Algorithmus mit Zufallszahlen
verteilt liegen. So erzeugt die Funktion
generieren.
rand(10,1) einen Spaltenvektor mit 10
Zufallszahlen werden am Computer mit
gleichmäÿig über das Intervall ]0, 1[ ver-
Hilfe spezieller Algorithmen berechnet. Sol-
teilten Zufallszahlen (Genaugenommen er-
che Algorithmen nennt man Zufallsgenera-
zeugt rand eine Gleitpunktzahl im abge-
toren. Grundlegend ist dabei die Erzeugung
schlossenen Intervall [eps/2, (1 − eps/2)]):
von Zufallszahlen x1 , x2 , . . ., xn , deren Wer-
te sich in sehr guter Näherung wie Realisie-
>> rand(10,1)
rungen von unabhängigen auf [0, 1] gleich-
ans =
verteilten Zufallsvariablen X1 , X2 , . . ., Xn
0.9501
verhalten. Da die Werte x1 , x2 , . . ., xn
0.2311
tatsächlich jedoch berechnet werden, sind
0.6068
sie nicht echt zufällig. Man spricht des-
0.4860
halb auch von Pseudo-Zufallszahlen, die
0.8913
sich (fast) wie echte verhalten. Mit Hil-
0.7621
fe von gleichverteilten Zufallszahlen lassen
0.4565
sich Zufallszahlen für andere Verteilungen
0.0185
durch geeignete Transformationen erzeu-
0.8214
gen. Je nach Verteilung kann dies sehr ein-
0.4447
fach oder aber auch kompliziert sein. In der

140 Copyright
c G. Gramlich
Der Aufruf rand(50,2) erzeugt eine Ma- ne n × n-Matrix, deren Einträge gleichver-
trix mit 50 Zeilen und 2 Spalten mit Wer- teilte Zufallszahlen aus dem Intervall ]0, 1[
ten zwischen 0 und 1. Testen Sie dies! All- sind. Schreiben Sie einen Function-File, der
gemein erzeugt der Aufruf rand(m,n) eine n×n-Matrizen erzeugt, deren Einträge Zah-
(m, n)-Matrix mit gleichverteilten Zufalls- len aus {1, 2, 3, 4, 5, 6} sind.
zahlen zwischen 0 und 1. Lösung: Dies erreicht man zum Beispiel
In den Anwendungen werden oft auch Zu- mit folgender Funktion. Die Funktion ceil

fallszahlen gesucht, die in einem anderen rundet zur nächsten ganzen Zahl auf

Intervall als ]0, 1[ liegen. Mit der Matlab - (nächste ganze Zahl in Richtung +∞).
Funktion rand ist auch dies leicht möglich.
Zum Beispiel erzeugt die Anweisung
function A = randganz1bisk(m,n,k)
if nargin == 1, n=m; end;
5 + 3*rand(n,1) if nargin < 3, k=9; end;
A = ceil( k*rand(m,n) );
einen Spaltenvektor mit n gleichverteilten
Werten im Intervall ]5, 8[. © ....................................... ©
Mit rand und der eingebauten Matlab -
Funktion floor lassen sich auch leicht
ganzzahlige Zufallszahllen generieren. Die
58.2. Normalverteilte Zufallszahlen
Rundungsfunktion floor(A) rundet alle
Erzeugen wir Zufallszahlen mit der Funkti-
Elemente von A auf die nächstkleinere gan-
on rand, so treten alle Werte in einem be-
ze Zahl (nächste ganze Zahl in Richtung
stimmten Intervall gleichmäÿig häug auf.
−∞). Der folgende Function-File realisiert
In den Anwendungen sucht man oft auch
das Erzeugen von ganzzahligen Zufallszah-
Zufallszahlen, deren Werte nicht gleich-
len. Auÿer der Gröÿe der gewünschten Ma-
mäÿig auftreten, sondern wo bestimm-
trix läÿt sich auÿerdem mit k ein Intervall
te Werte häuger vorkommen als andere,
[-k:k] angeben, aus dem die Zahlen zufäl- man nennt sie normalverteilte Zufallszahlen
lig erzeugt werden. Wird k nicht angegeben,
so wird k=9 gewählt.
(auch Gauÿ sche Zufallszahlen genannt).

In Matlab erzeugt man normalverteilte

function A = randganz(m,n,k) Zufallszahlen mit Mittelwert 0 und Vari-

if nargin == 1, n=m; end; anz 1 mit der Funktion randn. Der Befehl

if nargin < 3, k=9; end; randn(10,1) erzeugt zum Beispiel folgende


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

ans =
Aufgabe 110 (Zufallszahlen) -0.4326
Die Matlab -Funktion rand(n) erzeugt ei- -1.6656

141 Copyright
c G. Gramlich
0.1253 hist(yn,x)
0.2877 h = findobj(gca,'Type','patch');
-1.1465 set(h,'FaceColor','b',...
1.1909 'EdgeColor','w')
1.1892 title('Normalverteilte
-0.0376 Zufallszahlen')
0.3273
0.1746
illustriert die beiden Matlab -Funktionen
rand und randn grasch, siehe Abbildung
Will man eine normalverteilte n-wertige 50. Das obere Histogramm zeigt, wie sich
Zufallsfolge mit Mittelwert 10 und Stan- die 10000 Zufallszahlen gleichmäÿig über
dardabweichung 5 erzeugen, so erreicht man das Intervall]0, 1[ verteilen. Mit dem Be-
dies durch: fehl rand(10000,1) wird ein Spaltenvek-
tor mit 10000 Werten erzeugt und yg zuge-
10+5*randn(n,1) ordnet. Die Matlab -Funktion hist erstellt
nun das Histogramm. Mit dieser Funkti-
on kann man verschiedene Ziele erreichen.
58.3. Im Vergleich: Gleich- und Ein Aufruf wie hist(yg,25) erzeugt ein
normalverteilte Zufallszahlen Histogramm, das angibt, wie oft ein Wert
in einem Subintervall von ]0, 1[ vorkommt.
Histogramme bieten eine geeignete Mög-
Die Zahl 25 schreibt vor, das Intervall ]0, 1[
lichkeit, um Zufallszahlen grasch darzu-
in 25 gleichgroÿe Subintervalle einzuteilen
stellen. Der Script-File
und 25 Rechtecksächen zu zeichnen, de-
ren Breite die Subintervallänge und deren
subplot(2,1,1)
Höhe die Anzahl der Zufallswerte in dem
yg = rand(10000,1);
jeweiligen Subintervall angeben. Das unte-
re Histogramm in Abbildung 50 zeigt, wie
hist(yg,25)
sich 10000 Zufallszahlen mit Mittelwert 0
h = findobj(gca,'Type','patch');
und Varianz 1 ähnlich einer Gauÿschen Glo-
set(h,'FaceColor','b',...
ckenkurve verteilen.
'EdgeColor','w')
axis([-1 2 0 600]) Der Skript-File

title('Gleichmä{\ss}igverteilte
Zufallszahlen') Punkte = rand(10000,2);
subplot(1,2,1)
yn = randn(10000,1); plot(Punkte(:,1),Punkte(:,2),'.')
x = min(yn):0.2:max(yn); title('Gleichmä{\ss}igverteilte
subplot(2,1,2) Zufallszahlen')

142 Copyright
c G. Gramlich
Gleichmäßigverteilte Zufallszahlen Aufgabe 111 (Zufallszahlen)
600
Erzeugen Sie zehn gleichverteilte Zufalls-
400
zahlen im jeweils angegebenen Intervall
200

0 (a) zwischen 0 und 10.


−1 −0.5 0 0.5 1 1.5 2
Normalverteilte Zufallszahlen
1000 (b) zwischen -1 und 1.

500 (c) zwischen -20 und 10.

0
(d) zwischen −π und π.
−4 −3 −2 −1 0 1 2 3 4

Lösung: Dies kann wie folgt erreicht wer-


Abbildung 50: Zufallszahlen
den.

axis([0 1 0 1]) (a) 10*rand(10,1).


axis('square') (b) -1+2*rand(1,10).
Punkte = randn(10000,2); (c) -20+30*rand(1,10).
subplot(1,2,2)
plot(Punkte(:,1),Punkte(:,2),'.') (d) -pi+2*pi*rand(1,10).
title('Normalverteilte
Zufallszahlen') © ....................................... ©
axis([-3 3 -3 3])
axis('square') Aufgabe 112 (Zufallszahlen)
Erzeugen Sie tausend gleichverteilte Zu-
fallszahlen
erzeugt die Abbildung 51, um Unterschiede
(a) mit Mittelwert 1/2 und Varianz 1/12
Gleichmäßigverteilte Zufallszahlen Normalverteilte Zufallszahlen
1 3
(b) mit Mittelwert 0 und Varianz 1/12
0.8 2
1
0.6 (c) mit Mittelwert 0 und Varianz 1
0
0.4
−1
0.2 −2
(d) mit Mittelwert 0 und Varianz 3
0 −3
Lösung:
0 0.5 1 −2 0 2
Dies kann man wie folgt erreichen:

Abbildung 51: Zufallszahlen


(a) rand(1000,1)

zwischen rand und randn klar zu machen. (b) rand(1000,1)-0.5

143 Copyright
c G. Gramlich
(c) sqrt(12)*(rand(1000,1)-0.5) 58.4. Andere Verteilungen
(d) sqrt(3*12)*(rand(1000,1)-0.5) Wenn Sie über die Statistik Toolbox verfü-
gen, so können Sie Zufallszahlen konforta-

mit den Funktionen mean und var können


bel und interaktiv mit randtool erzeugen;
für ingesamt 20 verschiedene Verteilungen
Sie das überprüfen; am Besten mit noch
zum Beispiel für die Exponential- oder Bi-
mehr Zahlen. © ......................... ©
nomialverteilungen. Die Abbildung 52 zeigt

Samples
Aufgabe 113 (Zufallszahlen) 50

Erzeugen Sie tausend normalverteilte Zu- 40

fallszahlen 30
Counts
20

(a) mit Mittelwert 1.0 und Varianz 0.5. 10

0
0 2 4 6 8
Values
(b) mit Mittelwert -5.5 und Standardab-
weichung 0.25.

(c) mit Mittelwert -5.5 und Standardab-


Abbildung 52: Exponentialverteilung
weichung 1.25.

eine Exponentialverteilung mit Erwartung-


Lösung: Dies kann wie folgt erreicht wer- wert 1.
den.

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


(b) 0.25*randn(1000,1)-5.5;. Eine stochastische Simulation liegt vor,
wenn es um die Lösung von Problemen

(c) 1.25*randn(1000,1)-5.5;. geht, bei denen Zufallseinüsse auftreten.


Stochastische Simulationsmethoden werden

Dies gilt wegen den Transformationsfor-


auch Monte Carlo Methoden genannt.
Solche Methoden sind nützlich bei:
meln für den arithmetischen Mittelwert
bzw. für die Varianz: Ist yi = axi + b, so • Nichtdeterministischen (stochastischen)
gilt ȳ = ax̄ + b und s2Y = a2 s2X . Hier gilt, Prozessen.
dass die Zahlen xi den Mittelwert null und
die Standardabweichung (Varianz) eins ha- • Deterministischen Systemen, die zu kom-

ben. © .................................. © pliziert sind, um sie analytisch zu behan-


deln.

144 Copyright
c G. Gramlich
n=100 n=1000
• Deterministischen Problemen, die so 0.14 0.14

hoch dimensional sind, dass Standard- 0.12 0.12


diskretisierungsverfahren ungeignet sind
Monte Carlo
0.10 0.10
(zum Beispiel Integra-
0.08 0.08
tionen).
0.06 0.06

0.04 0.04
Die beiden grundsätzlichen Voraussetzun-
0.02 0.02
gen stochastischer Simulationsmethoden
0 0
sind: 0 0.5 1 0 0.5 1

• Kenntnis über relevante Wahrscheinlich- Abbildung 53: Empirische Verteilungen


keitsverteilungen.

• Unterstützung bei der Erzeugung von die zehn Teilklassen nach n = 100 Spielen.
Zufallszahlen. Man sieht, dass die relativen Häugkeiten
zum Teil noch deutlich von dem zu erwar-
Mit gleichverteilten Zufallszahlen können tenden Wert 0.10 abweichen. Für n = 1000
wir zum Beispiel Spiele mit dem Glücks- haben sich diese Häugkeiten bereits we-
rad am Rechner simulieren. Wenn wir et- sentlich besser an den Wert 0.10 stabilisiert.
wa die relative Häugkeit von Werten be- Anders ausgedrückt: Die empirische Vertei-
rechnen, die im Intervall [0.2, 0.6] liegen, lung der gezogenen Zahlen approximiert die
und mit der Wahrscheinlichkeit P (0.2 ≤ wahre Gleichverteilung besser.
X ≤ 0.6) = 0.4 vergleichen, dann sollte
für gröÿeres n die relative Häugkeit nach
dem Gesetz groÿer Zahlen mit hoher Wahr- 59.1. Näherung für π
scheinlichkeit bei 0.4 liegen. Auch sollte die
empirische Verteilungsfunktion der gezoge- Mit stochastischen Simulationen ist es
nen Zahlen x1 , x2 , . . ., xn sich der [0, 1]- möglich, Antworten auch auf nicht-
Gleichverteilung annähern. stochastische Fragestellungen zu geben.

Wir spielen nun Glücksrad am Computer, Mit einer stochastischen Simulation werden

indem wir wiederholt auf [0, 1] gleichverteil- wir nun eine Näherung für die Kreiszahl

ter Zufallszahlen ziehen. Das Intervall [0, 1] π = 3.14159 . . . berechnen.


wird wie in Abbildung 53 in zehn Teilin- Wir denken uns zunächst folgendes Experi-
tervalle der Länge 0.1 zerlegt und zu jedem ment, wozu man eine Zielscheibe und Dart-
Spiel wird festgelegt, in welches Teilint- pfeile benötigt. Die Zielscheibe besteht aus
zervall die gezogene Zufallszahl fällt. Abbil- einem Quadrat und einem einbeschriebenen
dung 53 zeigt links das resultierende Histo- Kreis. Dann werfen wir nach dem Zufalls-
gramm mit den relativen Häugkeiten für prinzip mit Dartpfeilen auf diese Scheibe

145 Copyright
c G. Gramlich
und bestimmen die relative Häugkeit der PiNaeherung = zeros(500,1);
Kreistreer, das heiÿt for k=1:500
x = -1+2*rand(100,1);
Anzahl der Treer
h= . y = -1+2*rand(100,1);
Anzahl der Würfe AnzahlimKreis = AnzahlimKreis
Hierbei werden nur Würfe gezählt, bei de- + sum(x.^2+y.^2<=1);
nen mindestens das Quadrat getroen wur- PiNaeherung(k) =
de. Schreibt man die relativen Häugkeiten 4*AnzahlimKreis/(k*100);
der Kreistreer auf, so stellt man fest, dass end
sie sich mit zunehmender Wurfzahl dem plot(PiNaeherung)
Wert π/4 nähert, denn die relative Häu- title(sprintf('Näherung von Pi =
gkeit h der Kreistreer wird mit zuneh- %5.3f',PiNaeherung(end)));
mender Wurfzahl etwa dem Verhältnis (Flä- xlabel('mal Hundert')
cheninhalt des Kreises) zu (Flächeninhalt
des Quadrates) entsprechen. Ist also r der
Die Abbildung 54 zeigt das Ergebnis der
r2 π π
Kreisradius, so gilt: h≈ 4r 2
= 4 und somit
Näherung von Pi = 3.144
3.3
π ≈ 4h.
3.25

Wir führen dieses Experiment nicht real


3.2
aus (selbstverständlich können Sie dies tun,
wenn Sie wollen), sondern simulieren es auf 3.15

dem Computer. Wie ist das möglich? Die


3.1
Wahrscheinlichkeit eines zufälligen Ereig-
nisses ist die idealisierte relative Häugkeit, 3.05
0 100 200 300 400 500
mal Hundert
mit welcher dieses vorkommt, wenn das zu-
gehörige Zufallsexperiment sehr oft wieder-
Abbildung 54: Näherung für π
holt wird. Der nachfolgende Script-File rea-
lisiert die Simulation.
Simulation. Siehe auch Aufgabe 150.

%--------------------------------
% Script-File: Pfeilwurf. 59.2. Zum Ziegenproblem
%
% Simulation von 50 000 Pfeil- In einer Spielshow ist als Hauptpreis ein
% würfen zur Näherungsberechnung Auto ausgesetzt. Hierzu sind auf der Bühne
% von Pi. drei verschlossene Türen aufgebaut. Hinter
%-------------------------------- einer rein zufällig ausgewählten Tür ben-
AnzahlimKreis = 0; det sich der Hauptpreis, hinter den beiden

146 Copyright
c G. Gramlich
anderen jeweils eine Ziege. Der Kandidat M = a(:,3);
wählt eine der Türen, beispielsweise Tür %M darf keine Autotür (A) sein
1 aus; diese bleibt aber vorerst verschlos- %und auch nicht die gewählte
sen. Der Spielleiter, der weiÿ, hinter welcher %Tür (W1).
Tür das Auto steht, önet daraufhin mit for j=1:10000
den Worten: Soll ich Ihnen mal etwas zei- while ( (M(j)==A(j)) |...
gen?eine der beiden anderen Türen, zum (M(j)==W1(j)) )
Beispiel Tür 3, und eine Ziege schaut ins M(j) = ceil(3*rand(1,1));
Publikum. Der Kandidat hat nun die Mög- end
lichkeit, bei seiner ursprünglichen Wahl zu end
bleiben oder die andere verschlossene Tür %W2 wäre die Tür, zu der nun
(in unserem Beispiel Nr.2) zu wählen. Er %gewechselt werden kann. Es
erhält dann den Preis hinter der von ihm %muss sein: M+W1+W2=6.
zuletzt gewählten Tür. In dem nachfolgen- W2 = 6-M-W1;
den Skript nden Sie die Antwort auf diese %Wenn W2 die Autotür ist, ein
Frage. %Punkt für 'Wechseln ist richtig'.
%Sonst ein Punkt für 'Wechseln
%-------------------------------- %ist falsch', da W1 gleich A ist.
% Script-File: Ziegen %Die Variablen R und F zählen das
% %richtige bzw. falsche Wechseln.
% Simulation des Ziegenproblems. R = sum(W2==A);
% Es werden zehn Versuche mit F = 10000-R;
% jeweils zehntausend sprintf('Wechseln ist richtig:
% Durchgängen simuliert. %3.0f\t Wechseln ist falsch:
%-------------------------------- %3.0f',R,F)
%Zehn Versuche. subplot(2,5,i); pie([R,F]);
for i=1:10 end
%Zehntausend Durchgänge. %Grafische Ausgabe als Kreisdiagramm.
%Zufall wird vorbereitet. legend('Wechseln ist richtig',
%Es wird eine (10000,3)-Zu- 'Wechseln ist falsch');
%fallsmatrix mit den Werten
% 1,2 und 3 erzeugt.
a = ceil(3*rand(10000,3)); 59.3. Das Geburtstagsparadox
%Zufallswahl der Autotür A.
A = a(:,1); Stellen wir uns vor, dass sich in einem
%Zufällige Erstwahl W1. Raum eine gewisse Anzahl von Personen
W1 = a(:,2); bendet. Wir interessieren uns dafür, ob
%Moderator will Tür M öffnen. zwei am gleichen Tag Geburtstag haben.

147 Copyright
c G. Gramlich
Wie viele Personen müssen vorhanden sein, gen. Dazu dient der folgende Script-File.
damit garantiert zwei am gleichen Tag Ge-
burtstag haben? Das ist eine einfache Fra-
ge: Da das Jahr 365 Tage hat, haben von %--------------------------------
366 Personen bestimmt zwei am gleichen % Script-File: Geburtstag
Tag Geburtstag (Wir gehen auf Schaltjah- %
re nicht ein). Eine wesentlich interessantere % Das Geburtstagsparadox.
Frage ist: Wie viele Personen müssen vor- %--------------------------------
handen sein, damit es wahrscheinlich ist, clear all
dass zwei am gleichen Tag Geburtstag ha- %kmax: Anzahl der Simulationen.
ben? Genauer: Wie viele Personen braucht kmax = 5000;
man, dass mit einer Wahrscheinlichkeit von %n: Anzahl der Personen im Raum.
über 50% zwei am gleichen Tag Geburtstag for n = [5,10,15,20,22,23,25,...
haben? Die Antwort ist überraschend: Be- 30,35,40,45,50,55]
reits 23 Personen reichen aus, um die Wahr- r = 0;
scheinlichkeit für einen gleichen Geburtstag for k=1:kmax
auf über 50% zu bringen. Achtung: Es ist %Zufallszahlen zwischen 1
weder danach gefragt, dass zwei am 1. Ja- %und 365.
nuar Geburtstag haben oder dass jemand g = ceil(365*rand(n,1));
am gleichen Tag wie Sie Geburtstag hat, for i=1:n
sondern danach, ob zwei Leute am 1. Janu- a = g-g(i)*ones(n,1);
ar oder am 2. Januar oder usw. Geburtstag if( sum(~a)>=2 )
haben. %Zwei Zahlen sind
%gleich.
In einem Raum sind n Personen versam-
r = r+1;
melt. Unter der Voraussetzung, dass jedes
break
Jahr 365 Tage hat (es gibt keine Schaltjah-
end
re) und dass die Geburtstage übers Jahr
end
gleichverteilt sind, ist die Wahrscheinlich-
end
keit dafür, dass mindestens zwei Personen
%Wahrscheinlichkeit.
am gleichen Tag Geburtstag haben gegeben
p = r/kmax;
durch die Formel:
[n,p]
364 · 363 · · · (365 − n + 1) end
P =1−
365n−1
Für n = 23 ergibt sich 0.5073 = 50.73%
und für n = 50 bereits 0.9704 = 97.04%. Die Ergebnisse der theoretischen Berech-
Diese Resultate der Wahrscheinlichkeitsre- nungen und der Simulation sind in Tabelle
chung lassen sich simulationsmäÿig bestäti- 28 gegenübergestellt.

148 Copyright
c G. Gramlich
n Theorie Simulation ans =
5 0.0271 0.0248 0.7850
10 0.1169 0.1118
15 0.2529 0.2526
Somit ist also
20 0.4114 0.4216
Z 1
22 0.4757 0.4846
xx dx ≈ 0.7850
23 0.5073 0.5156 0
25 0.5687 0.5642
30
35
0.7063
0.8144
0.6980
0.8064
60. Symbolisches Rechnen
40 0.8912 0.8910
45 0.9410 0.9424
50 0.9410 0.9700
55 0.9863 0.9880

Tabelle 28: Zum Geburtstagsparadox

59.4. Bestimmte Integrale


Das bestimmte Integral

Z 1
Symbolisches Rechnen ist der Versuch, die
xx dx
0 Methoden, die man beim Rechnen mit Pa-

kann von Matlab nicht exakt (symbolisch)


pier und Bleistift kennt, auf Computern ab-
zubilden und dort schlieÿlich durchzufüh-
berechnet werden, siehe Abschnitt 54. Wir
ren.
können aber mit Hilfe der Näherung
Um mit Matlab symbolisch rechnen zu
Z 1
1X
n können, muss die Symbolic Math Toolbox
f (x)dx ≈ f (xi ) installiert sein.
0 n
i=1
Symbolische Rechnungen basieren auf Va-
einen geschätzten Wert erhalten. Hierbei riablen, denen nicht unbedingt Zahlen zu-
sind xi gleichmäÿig verteilte Zufallszahlen gewiesen sind. Man rechnet mit Symbo-
aus dem Intervall ]0, 1[. len und Termen, wie man es vom Rech-
nen mit Papier und Bleistift kennt. Arith-
>> n = 1000; metische Operationen können exakt durch-
>> x = rand(n,1); geführt werden. Auÿerdem kann man Nä-
>> y = x.^x; herungen bis auf eine beliebig vorgegebe-
>> sum(y)/n ne gewünschte Anzahl von Stellen nden.

149 Copyright
c G. Gramlich
Man kann Polynome oder rationale Aus-
drücke symbolisch addieren, subtrahieren >> syms a b
und dividieren. Ausdrücke können dieren- >> simplify((a^2-b^2)/(a-b))
ziert werden und man erhält die gleichen ans =
Ergebnisse, die bisher nur mit Bleistift und a+b
Papier zu erzielen waren. Ausdrücke können
sogar unbestimmt integriert werden, sofern Es ist
sie Integrale in geschlossener Form besit-
zen. Diese Möglichkeiten erleichtern das er- (a + b + c)2 = a2 + b2 + c2 + 2(ab + ac + bc)
müdende und fehlerbedrohte Manipulieren
komplizierter Ausdrücke, das auch häug >> syms a b c
das Vorspiel numerischer Behandlung bil- >> expand((a+b+c)^2)
det. Mit symbolischem Rechnen lassen sich ans =
auch kleinere lineare Gleichungssysteme oh- a^2+2*a*b+2*a*c+b^2+2*b*c+c^2
ne Rundungsfehler lösen. Auf jeden Fall ist
symbolisches Rechnen ein sich ständig ent- Mit dem pretty-Befehl kann man Formeln
wickelndes Gebiet, dessen Bedeutung für in etwas lesbarerer Form ausgeben.
das wissenschaftliche Rechnen zunehmen
Mit der Funktion simplify können sym-
wird.
bolische Terme vereinfacht werden. In der
Mathematik lernt man die Gültigkeit von
60.1. Erste Schritte sin(x)2 + cos(x)2 = 1. Mit der Funktion
simplify kann man dies bestätigen:
Durch

>> syms x
>> syms x t
>> simplify( sin(x)^2+cos(x)^2 )
ans =
werden die beiden symbolischen Variablen 1
x und t erzeugt, mit denen man durch

>> 3*x^2+x*t-1 Substitutionen können mit der Funktion

ans = subs durchgeführt werden. Die folgenden

3*x^2+x*t-1 Anweisungen substituieren cos(x) anstelle


von x.
den Ausdruck 3x2 + xt − 1 kreiert. >> syms x
Bekanntlich ist >> subs( sqrt(1-x^2),x,cos(x) )
a2 − b2 ans =
= a + b. (1-cos(x)^2)^(1/2)
a−b

150 Copyright
c G. Gramlich
Matlab verfügt über viele eingebaute ma-
thematische Funktionen mit denen man b) >> sym(2+3*4)
symbolisch rechnen kann. Mit diesen vorde- ans =
nierten Funktionen ist es uns dann mög- 14
lich, weitere Funktionen zu konstruieren,
indem man die entsprechenden Funktions- c) >> sym(1+2/3*4)
terme f (x) miteinander verküpft. ans =
Funktionsterme sind Ausdrücke, das heiÿt, 11/3
sie können wie gewöhnliche Terme erzeugt
werden. Angenommen wir wollen mit dem © ....................................... ©
Funktionsterm f (x) = 2x2 +3x+4 arbeiten,
zum Beispiel dierenzieren oder integrieren,
Aufgabe 115 (Potenzregeln)
so deniert man diesen wie folgt.
Bestätigen Sie die folgenden Rechenregeln:

>> syms x (a) am · an = am+n


>> f = 2*x^2+3*x+4;
am
(b)
an = am−n
f 0 (x) =
Danach kann man zum Beispiel
4x + 3 bilden.
Verwenden Sie die Matlab -Funktion
simplify.
>> diff(f) Lösung:  syms a n m
ans =
4*x+3 (a) >> simplify(a^m*a^n)
ans =
a^(m+n)
Aufgabe 114 (Rangordnung)
Berechnen Sie symbolisch:
(b) >> simplify(a^m/a^n)
(a) 210/10 ans =
a^(m-n)
(b) 2+3*4
(c) 1+2/3*4. © ....................................... ©

Lösung: Es ist Aufgabe 116 (Rechnen)


Berechnen Sie den Ausdruck
a) >> sym(2^10/10)

ans = 16 + cos(π/3)
512/5 √3
8+4

151 Copyright
c G. Gramlich
symbolisch und numerisch. erhält man
Lösung: Symbolische Rechnung:
Sowohl ans =
(-y+x)/(x+y)
>> sym((sqrt(16)+cos(pi/3))...
/(8^(1/3)+4))
Somit ist die Vereinfachung dann also

also auch x2 + 2xy + y 2 x−y


2 2
= .
x −y x+y
>> (sym(sqrt(16)) + sym(cos(pi/...
3)))/sym(8^(1/3)+4) Anmerkung: Man kann statt simplify
auch den Befehl simple verwenden. ©...©

liefert
Aufgabe 118 (Multiplikation)
ans = Multiplizieren Sie
3/4
(x2 + x + 1) · (x3 − x2 + 1).
Numerische Rechnung:
Lösung: Mit

>> (sqrt(16)+cos(pi/3))/(8^(1/3)+4) >> syms x


ans = >> collect( (x^2+x+1)*(x^3-x^2+1))
0.7500 ans =
x^5+x+1
© ....................................... ©
sieht man, dass
Aufgabe 117 (Vereinfachen)
Vereinfachen Sie den Ausdruck (x2 + x + 1) · (x3 − x2 + 1) = x5 + x + 1

x2 + 2xy + y 2 ist. © ................................... ©


x2 − y 2

Lösung: Mit
Aufgabe 119 (Potenzieren)
Berechnen Sie

>> syms x y
>> simplify((x^2-2*x*y+y^2)/... (1 + x)4 .
(x^2-y^2))
Lösung: Mit

152 Copyright
c G. Gramlich
>> syms x mhelp <Name>
>> expand((1+x)^4)
ans = Maple -Online-Informationen erhalten.
1+4*x+6*x^2+4*x^3+x^4 Mit dem Aufruf

>> mhelp index[function]


sieht man, dass

(1 + x)4 = x4 + 4x3 + 6x2 + 4x + 1 erhält man eine Liste aller Maple -


Funktionen.
ist. © ................................... ©
Als Beispiel betrachten wir den Befehl

Aufgabe 120 (Faktorisieren) >> mhelp gcd


Faktorisieren Sie das Polynom

Da man auf diese Art die Syntax der


x6 + x4 − x2 − 1.
Maple -Funktion gcd erfahren hat, kann

Lösung: Mit man nun die Funktion maple benutzen, um


gcd zu verwenden. Die nachfolgenden Zei-
len zeigen, wie man den gröÿten gemeinsa-
>> syms x
>> factor(x^6+x^4-x^2-1) men Teiler der Polynome x2 −y 2 und x3 −y 3
berechnet:
ans =
(x-1)*(1+x)*(1+x^2)^2
>> syms x y
p1 = x^2-y^2;
sieht man, dass p2 = x^3-y^3;
maple('gcd',p1,p2)
(x6 +x4 −x2 −1) = (x−1)·(x+1)·(x2 +1)2 ans =
-y+x
ist. © ................................... ©

Die Anweisungen

60.2. Wie man Maple-Funktionen >> maple('gcd',225,725)


verwendet ans =
Die Funktion maple erlaubt es, jede
25
Maple -Funktion direkt zu verwenden.
Kennt man den Namen der gewünschten bestimmen den gröÿten gemeinsamen Teiler
Maple -Funktion, so kann man mit von 225 und 725.

153 Copyright
c G. Gramlich
60.3. Mathematische Funktionen
>> diff(f)
Matlab verfügt über viele eingebaute Ma- ans =
thematische Funktionen mit denen man diff(f(x),x)
symbolisch rechnen kann. Mit diesen vorde- >> diff(f,'t')
nierten Funktionen ist es uns dann auch ans =
möglich, weitere Funktionen zu konstruie- 0
ren, indem man die entsprechenden Funk-
tionsterme f (x) miteinander verküpft.
Der Funktionsterm f (x) nach x abgeleitet,
Funktionsterme sind Ausdrücke, das heiÿt,
sie können wie gewöhnliche Terme erzeugt
ergibtf 0 (x) bzw. in Matlab
-Terminologie
diff(f(x),x); nach t abgeleitet ist er aber
werden. Angenommen wir wollen mit dem
0, denn f (x) hängt nciht von t ab.
Funktionsterm f (x) = 2x2 +3x+4 arbeiten,
zum Beispiel dierenzieren oder integrieren, Damit können wir nun den Dierenzenquo-

so deniert man diesen wie folgt. tient der Funktion f im Punkt x̄ bilden

>> syms x >> syms xbar h


>> f = 2*x^2+3*x+4; >> ( subs(f,xbar+h)-subs(f,xbar) )/h
ans =
Danach kann man zum Beispiel f 0 (x) = (f(xbar+h)-f(xbar))/h
4x + 3 bilden.

>> diff(f) und dann auch die Ableitung (Dierenzial-

ans = quotient) f 0 (x̄) im Punkt x̄.


4*x+3
>> limit(ans,h,0)
Will man einen abstrakten Funktionsterm ans =
f (x) erzeugen, das heiÿt einen Term, der ir- D(f)(xbar)
gendein spezieller Funktionsterm sein kann,
so ist das durch die die Anweisung
Als weiteres Beispiel bestätigen wir die Pro-

>> f = sym('f(x)') duktregel.

möglich. Hierdurch wird das symbolisches


>> diff(f*g)
Objekt f erzeugt, das wie f (x) agiert, das
ans =
heiÿt, dem Objekt f ist bekannt, dass eine
diff(f(x),x)*g(x)+f(x)*diff(g(x),x)
unabhängige Variable x existiert. Das dem
so ist, zeigen die nachfolgenden Zeilen.

154 Copyright
c G. Gramlich
Aufgabe 121 (Funktionsterme) Wir können f (x) aber auch für mehrere x-
Bestätigen Sie die Quotientenregel Werte auswerten. Numerisch:

 f (x) 0 f 0 (x)g(x) − f (x)g 0 (x) >> subs(f,[1, 2, 3, 4])


=
g(x) 2g(x) ans =
1.0000 1.4142 1.7321 2.0000
Lösung: Hier die Bestätigung:

und symbolisch:
f = sym('f(x)'); g = sym('g(x)');
diff(f/g) >> subs(f,sym([1, 2, 3, 4]))
ans = ans =
diff(f(x),x)/g(x)-f(x)/g(x)^2* [ 1, 2^(1/2), 3^(1/2), 4^(1/2)]
diff(g(x),x)
Mit zwei gegebenen Funktionen f und g
© ....................................... © und den Operationen Addition, Subtrakti-
on, Multiplikation und Division kann man
Häug hat man einen symbolischen Funkti- die Summe f + g, die Dierenz f − g, das
onsterm deniert und möchte dann symbo- Produkt fg und den Quotienten f /g bil-
lische oder numerische Funktionswerte be- den. Zusätzlich kann man die Komposition
rechnen. Als Beispiel betrachten wir den von f und g, in Zeichen f ◦ g, denieren.

symbolischen Funktionsterm f (x) = x. Die Sinusfunktion f = sin und die Expo-
Es soll f (2) zunächst symbolisch ausgewer- nentialfunktion g = exp sind eingebaute
tet werden; hierbei hilft die subs-Funktion. Funktionen. Wir können damit die Sum-
menfunktion f + g = sin + exp oder die
>> syms x Verkettung f ◦ g = esin dieser beiden Funk-
>> f = sqrt(x); tionen bilden. Die folgenden Anweisungen
>> pretty(subs(f,sym(2))) zeigen die Umsetzung:

1/2 >> syms x


2 >> sin(x) + exp(x)
ans =
sin(x)+exp(x)
Auch die numerische Funktionsberechnung
>> exp(sin(x))
kann mit der subs-Funktion erfolgen.
ans =
exp(sin(x))
>> subs(f,2)
ans =
oder alternativ mit der Funktion compose
1.4142
für die Komposition.

155 Copyright
c G. Gramlich
>> syms x >> double(ans)
>> compose(exp(x),sin(x)) ans =
ans = 2.4826
exp(sin(x))
oder direkt

Wir können auch (symbolische) Funktions- >> exp(sin(x));


werte berechnen. >> subs(ans,2)
ans =
>> sin(sym(1.5)) 2.4826
ans =
sin(3/2) Mit dem Befehl type ist die Überprüfung
möglich, ob eine vorliegende Funktion f ge-
rade oder ungerade ist. Eine reellwertige
Den dazugehörigen numerischen Werte er-
halten wir durch die Anweisung
Funktion f mit symmetrischem Denitions-
bereichDf ⊆ R wird als gerade bezeichnet,
wenn f (x) = f (−x) für alle x ∈ Df gilt.
>> double(ans)
Demnach ist die Kosinusfunktion cos eine
ans =
gerade Funktion. Wir überprüfen diese Be-
0.9975
hauptung.

>> syms x
>> sin(sym(pi/4)) >> f = cos(x);
ans = >> maple('type',f,'evenfunc(x)')
1/2*2^(1/2) ans =
true
Wir können auch die Funktion subs ver-
Die Exponentialfunktion exp ist dagegen
wenden, um Funktionswerte zu berechnen.
weder gerade noch ungerade.

>> syms x >> g = exp(x);


>> exp(sin(x)); >> maple('type',g,'evenfunc(x)')
>> subs(ans,sym(2)) ans =
ans = false
exp(sin(2)) >> maple('type',g,'oddfunc(x)')
ans =
false
Der numerische Wert ist

156 Copyright
c G. Gramlich
Mit der Funktion finverse kann man von und Integralrechung. Die Maple -Funktion
der Funktion f die Umkehrfunktion f −1 iscount überprüft, ob eine vorliegende
nden, genauer: man kann den Funktions- Funktion f auf einem anzugebendem Inter-
term von f
−1 berechnen. Das folgende Bei- vall stetig ist. Die Funktion f (x) = 1/x ist
spiel zeigt dies für die Exponentialfunktion auf [1, 3] stetig, nicht aber auf [−1, 3]. Hier
f (x) = ex , x ∈ R. die Bestätigung:

>> syms x >> syms x


>> f = exp(x); >> maple('iscont',1/x,'x=1..3')
>> finverse(f) ans =
ans = true
log(x) >> maple('iscont',1/x,'x=-1..3')
ans =
Die Umkehrfunktion ist somit f −1 (x) = false
ln(x), x > 0, wobei der Denitionsbereich
von Matlab nicht angegeben wird, son- Stückweise denierte Funktionen lassen
dern in Eigenverantwortung hingeschrieben sich mit der Funktion piecewise denie-
werden muss. ren. Hier ein Beispiel.

Ist bei der Umkehrfunktion besonders auf


den Denitionsbereich zu achten, so gibt >> f = maple('piecewise','x<=0',...
Matlab eine Warnung heraus, wie folgen- 'x','0<x','1/x')
des Beispiel zeigt: f =
PIECEWISE([x, x <= 0],[1/x, 0 < x])
>> g = x^2; >> diff(f)
>> finverse(g) ans =
Warning: finverse(x^2) is not unique. PIECEWISE([1, x < 0],[NaN, x = 0],
> In C:\MATLAB6p1\toolbox\symbolic\ [-1/x^2, 0 < x])
@sym\finverse.m at line 43 >> int(f)
ans = ans =
x^(1/2) PIECEWISE([1/2*x^2, x < 0],
[NaN, x = 0],[log(x), 0 < x])
Die Umkehrfunktion von der quadratischen
Funktion f (x) = x2 , x ∈ R ist die Wurzel-
60.4. Algebraische Gleichungen
funktion, der Denitionsbereich dieser ist
aber nicht ganz R, sondern R≥0 . Mit der Funktion solve kann man Glei-
Der Stetigkeitsbegri ist ein zentraler Be- chungen lösen. Das nachfolgende Beispiel
gri der Analysis bzw. der Dierenzial- löst x2 − x = 0.

157 Copyright
c G. Gramlich
Mit der Funktion limit lassen sich auch
>> solve('x^2-x = 0') Grenzwerte von Funktionen berechnen. Die
ans = Tabelle 29 Möglichkeiten mit limit.
[0]
[1] Mathematik Matlab
lim f (x) limit(f)
x→0
Findet man keine exakte symbolische Lö- lim f (x) limit(f,x,a)
x→a
sung, so wird die Lösung in variabler Ge- oderlimit(f,a)
nauigkeit ausgegeben. lim f (x)
x→a
limit(f,x,a,'left')
x<0
>> solve('cos(x) = x') lim f (x)
x→a
limit(f,x,a,'right')
ans = x>0
.739...87 Tabelle 29: Grenzwerte berechnen

(f (x) −
60.5. Grenzwerte Besitzt der Dierenzenquotient
f (x̄))/(x − x̄) der Funktion f für x → x̄
Die Folge einen Grenzwert, so heiÿt f an der Stelle
x̄ dierenzierbar. Der Grenzwert wird mit
2n + 1 f 0 (x̄) bezeichnet und man schreibt
an = , n≥1
4n
hat den Grenzwert 1/2. Der nachfolgende f (x) − f (x̄)
f 0 (x̄) = lim
Matlab
.
-Code bestätigt dies: x→x̄ x − x̄

>> limit((2*n+1)/(4*n),inf) Man nennt den Grenzwert auch Dieren-

ans = zialquotient und die Berechnungsmethode

1/2 von f 0 (x̄) die x-Methode.


Wir können limit einsetzen, um die Ablei-
Die Euler sche Zahl e = 2.7183 . . . ist der
tung einer Funktion f an der Stelle x̄ zu
berechnen. Als Beispiel berechnen wir für
Grenzwert der Folge mit der Bildungsvor-
die Funktion f (x) = 3/x, x > 0 die Ablei-
schrift (1 + 1/n)n , n ≥ 1 für n → ∞. Die
0
tung f (2).
nachfolgenden Anweisungen zeigen dies:

>> syms n >> syms x


>> limit((1+1/n)^n,inf) >> limit( (3/x-3/2)/(x-2) ,x,2 )
ans = ans =
exp(1) -3/4

158 Copyright
c G. Gramlich
Somit ist f 0 (2) = −3/4 oder und
− abs(0)
abs(x)
lim = −1
3/x − 3/2 3 x→0 x−0
lim =− x<0
x→2 x−2 4
Wir bestätigen dies:
Anstatt die Ableitung von f an der Stelle x̄
mit Hilfe der x-Methode zu berechnen, ist >> limit( (abs(x)-abs(0))/(x-0),...
es manchmal zweckmäÿiger die sogenannte x,0,'right')
h-Methode einzusetzen. In diesem Fall wird ans =
f 0 (x̄) wie folgt berechnet: 1
>> limit( (abs(x)-abs(0))/(x-0),...
f (x̄ + h) − f (x̄) x,0,'left')
f 0 (x̄) = lim .
h→0 h ans =
-1
Für obiges Besipiel mit f (x) = 3/x, x > 0
und x̄ = 2 erhält man:
Die Ableitung einer Funktion basiert be-
>> syms h kanntermaÿen auf dem Prozeÿ der Grenz-
>> limit( (3/(2+h)-3/2)/h, h, 0) wertbildung. Zum Beispiel ist die Ab-
ans = leitungsfunktion der Kosinusfunktion cos
-3/4 die Funktion − sin. Mathematisch bedeutet
dies:

Bekanntlich hat der Dierenzenquotient d cos(x + h) − cos(x)


cos(x) = lim
(f (x) − f (x̄))/(x − x̄) für die Betragsfunk- dx h→0 h
tion f (x) = abs(x) = |x|, x ∈ R und x̄ = 0 = − sin(x)
keinen Grenzwert. In Matlab erhalten wir:
Dies können wir mit der limit-Funktion
>> syms x bestätigen.

>> limit( (abs(x)-abs(0))/(x-0),x,0)


ans = >> syms x h
NaN >> limit( (cos(x+h)-cos(x))/h, h, 0)
ans =
-sin(x)
Zwar ist die Betragsfunktion abs im Punkt
0 nicht dierenzierbar, hat aber dort einen
rechten und linken Grenzwert, das heiÿt es Die folgenden Matlab -Anweisungen be-

gilt rechnen den Grenzwert

abs(x) − abs(0)
lim =1 lim cos(x) = 1
x→0 x−0 x→0
x>0

159 Copyright
c G. Gramlich
Somit ist der Grenzwert
>> syms x cos(h) − 1
>> limit(cos(x)) lim = 0.
h→0 x
ans = 1 © ....................................... ©

Aufgabe 124 (Grenzwerte)


Aufgabe 122 (Grenzwerte)
Bestimmen Sie den Grenzwert
Berechnen Sie den Grenzwert
lim xe−x
x→∞
sin x
lim und interpretieren Sie ihn.
x→0 x
Lösung: Der Grenzwert ist Null, denn es
Lösung: Man berechnet den Grenzwert ist:
mit
>> syms x
>> syms x >> limit(x*exp(-x),inf)
>> limit( sin(x)/x ) ans =
ans = 0
1
Die Exponentialfunktion f (x) = e−x , x ∈
R fällt für x → ∞ schneller als die linea-
Somit ist der Grenzwert
re Funktion g(x) = x, x ∈ R für x → ∞
sin(x) steigt. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©
lim = 1.
x→0 x
© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . © Aufgabe 125 (Grenzwerte)
Bestimmen Sie den Grenzwert

Aufgabe 123 (Grenzwerte) (x + h)3 − x3


lim .
Berechnen Sie den Grenzwert h→0 h
Was bedeutet dieser Grenzwert?
cos(h) − 1
lim Lösung: Es ist:
h→0 h
>> syms x h
Lösung: Man berechnet den Grenzwert
>> limit(((x+h)^3-x^3)/h,h,0)
mit
ans =
>> syms h 3*x^2
>> limit( (cos(h)-1)/h )
ans = Der Grenzwert ist der Ableitungsterm der

0 Funktion f (x) = x3 , x ∈ R. © . . . . . . . . . . . ©

160 Copyright
c G. Gramlich
60.6. Endliche und unendliche Summen Aufgabe 126 (Endliche Summen)
Berechnen Sie
Endliche oder unendliche Reihen lassen sich
mit der Matlab -Funktion symsum berech-
10
X 1
.
nen, die symbolisches Summieren erlaubt. k
k=1
Die Summe der endlichen Reihe

10
Lösung: Mit
X
k
2 = 2 + 4 + 8 + · · · + 1024
k=1
>> syms k
>> symsum(1/k,1,10)
ist 2046, was man durch folgende Zeilen be-
stätigen kann:
erhält man

>> symsum(2^k,1,10) ans =


ans = 7381/2520
2046
Es ist somit also

Ob die Summe einer unendlichen Reihe 10


existiert und welchen Wert sie gegebenen-
X 1 7381
= .
falls hat, läÿt sich ebenfalls mit der Mat- k 2520
lab
k=1
-Funktion symsum beantworten. In der
Analysis beweist man :
3 © ....................................... ©


X 1 π2 Aufgabe 127 (Endliche Summen)
= . Bestätigen Sie die folgenden Ergebnisse
n2 6
n=1
Pn n(n+1)
Mit dem Kommando symsum kann man dies (a) k=1 k = 2
überprüfen: Pn n(n+1)(2n+1)
2
(b) k=1 k = 6

>> syms n Pn 3 n2 (n+1)2


(c) k=1 k = .
>> symsum(1/n^2,1,inf) 4

ans = Lösung: Deniert man zunächst


1/6*pi^2
>> syms k n
3
Zum Beispiel mit Hilfe der Theorie der Fourier-
Reihen. so erhält man

161 Copyright
c G. Gramlich
Aufgabe 129 (Unendliche Summen)
a) >> simple(symsum(k,1,n)) Bestätigen Sie, dass für die harmonische

ans = Reihe gilt

1/2*n*(n+1) ∞
X 1
(−1)k−1 = ln(2).
k
b) >> simple(symsum(k^2,1,n)) k=1
ans = Lösung: Mit
1/6*n*(n+1)*(2*n+1)
>> syms k
c) >> simple(symsum(k^3,1,n)) >> symsum( (-1)^(k-1)/k,1,inf)
ans =
1/4*n^2*(n+1)^2 erhält man

ans =
© ....................................... © log(2)

Aufgabe 128 (Unendliche Summen) © ....................................... ©


Berechnen Sie die Summe der Reihe

Aufgabe 130 (Unendliche Summen)



X 1
. Berechnen Sie die Leibnizsche Reihe
4k 2 − 1 ∞
k=1 X 1
(−1)k
Lösung: Mit
k=1
2k + 1

>> syms k Lösung: Mit

>> symsum( 1/(4*k^2-1),1,inf) >> syms k


>> symsum( (-1)^k/(2*k+1),1,inf)
erhält man

erhält man
ans =
1/2 ans =
-1+1/4*pi
Also ist die Summe der Reihe


Also ist die Leibnizsche Reihe
X 1 1 ∞
1 π
= .
X
2
4k − 1 2 (−1)k = −1.
k=1 2k + 1 4
k=1
© ....................................... © © ....................................... ©

162 Copyright
c G. Gramlich
60.7. Dierenziation ist. © ................................... ©

Die Funktion diff berechnet die symboli-


Aufgabe 132 (Ableitungen)
sche Ableitung eines Funktionsterms. Um
Berechnen Sie
einen symbolischen Ausdruck zu erzeugen,
muss man zuerst die verwendeten symbo- d
arctan(x)
lischen Variablen denieren, und dann den dx
gewünschten Ausdruck bilden, und zwar ge- Lösung: Mit den Anweisungen
nauso, wie man es mathematisch tun wür-
de. Die folgenden Anweisungen >> syms x
>> diff(atan(x))
>> syms x ans =
>> f = x^2*exp(x); 1/(1+x^2)
>> diff(f)
erkennt man, dass
erzeugen eine symbolische Variable x, bil-
2
den den symbolischen Ausdruck x exp(x) d 1
arctan(x) =
und berechnen die Ableitung von f nach x. dx 1 + x2
Das Ergebnis ist:
ist. © ................................... ©
ans =
Aufgabe 133 (Ableitungen)
2*x*exp(x)+x^2*exp(x)
Berechnen Sie

Aufgabe 131 (Ableitungen)


d xx
(x )
Berechnen Sie dx
Lösung: Mit den Anweisungen
d 2 x
(x e )
dx >> syms x
Lösung: Mit >> diff(x^(x^x))
ans =
>> syms x x^(x^x)*(x^x*(log(x)+1)*log(x)+x^x/x)
>> diff(x^2*exp(x))
ans =
erkennt man, dass
2*x*exp(x)+x^2*exp(x)
xx
 
d xx
 xx x
x =x x (ln (x) + 1) ln (x) +
sieht man, dass dx x
d 2 x ist. © ................................... ©
(x e ) = 2xex + x2 ex
dx

163 Copyright
c G. Gramlich
60.8. Partielle Dierenziation
>> syms x y z real
Es können auch partielle Ableitungen be- >> jacobian(exp(x+2*y)+...
rechnet werden: 2*x*sin(z)+z^2*x*y)'
>> syms w x y ans =
>> diff(sin(w*x*y)) [ 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]
berechnet die Ableitung von sin(wxy) nach
x. Das Ergebnis ist cos(wxy)wy . Das Er-
gebnis von
60.10. Die Hesse-Matrix
>> diff(sin(w*y)) Der Gradient der Funktion f (x, y) = 2x4 +
3x2 y + 2xy 3+ 4y 2 ,
(x, y) ∈ R2 ist
ist cos(wy)w. Selbstverständlich kann man
8x3 + 6xy + 2y 3
 
auch steuern, nach welcher Variablen die- ∇f (x) =
renziert werden soll.
3x2 + 6xy 2 + 8y

>> diff(sin(w*y),w) und die Hesse -Matrix ergibt sich zu

24x2 + 6y 6x + 6y 2
 
H f (x) = .
liefert das Ergebnis 6x + 6y 2 12xy + 8

ans = Wir bestätigen dies in Matlab ; hilfreich

cos(w*y)*y ist wieder die jacobian-Funktion.

>> syms x y real


Es ist auch möglich, Ableitungen höherer
>> f = 2*x^4+3*x^2*y+2*x*y^3+4*y^2;
Ordnung zu berechnen.
>> gradf = jacobian(f)'
gradf =
60.9. Der Gradient [ 8*x^3+6*x*y+2*y^3]
[ 3*x^2+6*x*y^2+8*y]
Mit der Funktion jacobian ist es mög- >> hessf = jacobian(gradf)
lich, den Gradient einer reellwertigen Funk- hessf =
tion zu berechnen. Für f : R3 → R mit [ 24*x^2+6*y, 6*x+6*y^2]
f (x, y, z) = ex+2y + 2x sin(z) + z 2 xy ist [ 6*x+6*y^2, 12*x*y+8]
 x+2y
+ 2 sin(z) + z 2 y

e
∇f (x) =  2ex+2y + z 2 x . Im Punkt (x̄, ȳ) = (−2, 3) gilt
2x cos(z) + 2xyz  
−46
Wir bestätigen dies in Matlab .
∇f (−2, 3) =
−72

164 Copyright
c G. Gramlich
und Aufgabe 134 ( Jacobi-Matrizen)

114 42
 Berechnen Sie die Jacobi -Matrix der Funk-

Hf (−2, 3) = . tion f : R2 → R3 ,(x, y) 7→ (x +


42 −64
y, x2 sin y, exy ) in einem beliebigen Punkt
In Matlab : (x, y) ∈ R2 . Wie lautet die Jacobi
-Matrix
im Punkt (1, 0)?
>> subs(gradf,{x,y},{-2,3}) Lösung: Es ist
ans =
-46 >> syms x y
-72 >> J = jacobian([x+y,x^2*sin(y),...
>> subs(hessf,{x,y},{-2,3}) exp(x*y)],[x,y])
ans = J =
114 42 [ 1, 1]
42 -64 [ 2*x*sin(y), x^2*cos(y)]
[ y*exp(x*y), x*exp(x*y)]

60.11. Die Jacobi-Matrix


Die Jacobi -Matrix im Punkt (1, 0) ist:
Bei Funktionen mehrerer Veränderlicher
berechnet man die Funktionalmatrix oder >> subs(J,[x,y],[1,0])
Jacobi -Matrix mittels jacobian. Will man ans =
dieJacobi -Matrix der Funktion 1 1
f: R3 → R3 0 1
(x, y, z) 7→ (xy, x, z) 0 1

berechnen, so geht das wie folgt:


© ....................................... ©
>> syms x y z
>> J = jacobian([x*y,x,z],[x,y,z])
60.12. Integration
J = Die Funktion int erlaubt symbolische Inte-
[ y, x, 0] gration.
[ 1, 0, 0] Als erstes Beispiel wollen wir die Gleichung
[ 0, 0, 1] R
sin(x)dx = − cos(x) + c bestätigen.

Im ersten Argument der Function jacobian >> syms x


steht der Funktionsterm und im Zweiten >> f = sin(x);
stehen die unabhängigen Variablen. >> int(f)

165 Copyright
c G. Gramlich
ans =
-cos(x) >> int('sin(x)',0,pi)
ans =
2
Bei parameterabhängigen unbestimmten
Integralen der Form

Z Aufgabe 135 (Integration)


Ft (x) = f (x, t)dx Berechnen Sie das unbestimmte Integral

Z
(t ist der Parameter) empelt es sich x und x sin(x)dx.
t als symbolische Variablen zu denieren.
(x − t)2 dx = Lösung:
R
Als Beispiel betrachten wir Mit
1/3(x − t)3 + c
>> syms x
>> syms x t >> int(x*sin(x))
>> pretty(int((x-t)^2)) ans =
sin(x)-x*cos(x)
3
1/3 (x - t)
sieht man, dass
Z
Sie können die Symbolic Math Toolbox her- x sin(x)dx = sin(x) − x cos(x) + c
anziehen, um bestimmte Integrale

Z b ist. © ................................... ©
f (x)dx
a
Aufgabe 136 (Integration)
symbolisch zu lösen. Auch parameterab- Berechnen Sie das bestimmte Integral

hängige bestimmte Integrale Z π


Z b x sin(x)dx
0
φt = f (x, t)dx
a
symbolisch.

können gelöst werden. Es ist Lösung: Mit

π
>> syms x
Z
sin(x)dx = 2.
0 >> int(x*sin(x),0,pi)
ans =
Wir bestätigen dies mit der Funktion int
pi
aus der Symbolic Math Toolbox.

166 Copyright
c G. Gramlich
folgt also, dass folgt also, dass

π
Z ∞
2
Z
x sin(x)dx = π sin(2t)e−st dt =
0 0 s2 +4
ist. © ................................... © ist. Es handelt sich hier um die La-
place -Transformierte der Funktion f (t) =
Aufgabe 137 (Integration) sin(2t), t ∈ R. Mit der eingebauten Funk-

Berechnen Sie das uneigentliche Integral tion laplace kann man die Laplace -
Transformierte auch unmiitelbar berech-
Z ∞
1 nen:
dx.
1 x5
>> syms t;
Lösung: Mit >> laplace(sin(2*t))
ans =
>> syms x 2/(s^2+4)
>> int(x^(-5),1,inf)
ans =
© ....................................... ©
1/4
Aufgabe 139 (Ableitungen, Integrale)
folgt also, dass Berechnen Sie symbolisch mit den Mat-
Z ∞
1 1 lab -Funktionen diff und int die Ablei-

5
dx = tungen bzw. Integrale folgender Exponen-
1 x 4
tialfunktionen:
ist. © ................................... ©
(a) ex
Aufgabe 138 (Integration)
(b) 2x
Berechnen Sie das uneigentliche Integral
Z ∞
(c) 10x
sin(2t)e−st dt
0
(d) ax
symbolisch. Lösung:  syms x a
Lösung: Mit
(a) >> diff(exp(x))
>> syms t; syms s positive; ans =
>> int(sin(2*t)*exp(-s*t),t,0,inf); exp(x)
>> F = simple(ans) >> int(exp(x))
F = ans =
2/(s^2+4) exp(x)

167 Copyright
c G. Gramlich
Die Funktion horner erlaubt die Darstel-
(b) >> diff(2^x) lung eines Polynoms in Horner -Form.
ans =
2^x*log(2) >> syms x
>> int(2^x) >> p = -3*x^3+3*x^2+10*x+5;
ans = >> ph = horner(p)
1/log(2)*2^x ph =
5+(10+(3-3*x)*x)*x
(c) >> diff(10^x)
ans = Will man dieses zum Beispiel an der Stelle
10^x*log(10) x=3 auswerten, so geht das wie folgt:
>> int(10^x)
ans = >> subs(ph,x,3)
1/log(10)*10^x ans =
-19
(d) >> diff(a^x)
ans = Will man den Grad eines Polynoms bestim-
a^x*log(a) men, so hilft die Maple -Funktion degree.
>> int(a^x)
ans = >> maple('degree',p)
1/log(a)*a^x ans =
3
Damit gilt:

f (x) f 0 (x)
R
f (x)dx
Weitere Matlab bzw. Maple Funktio-
nen zum Rechnen mit Polynomen n-
ex ex ex
den Sie in der Tabelle 30. Hilfe zu den
2x
10x
ln(2)2x
ln(10)10x
2x / ln(2)
10x / ln(10)
Maple -Funktionen erhalten Sie mit mhelp
<Funktionsname>.
ax ln(a)ax ax / ln(a)
© ....................................... ©
60.14. Taylor-Polynome
Die Funktion taylor erlaubt das symboli-
60.13. Polynome sche Berechnen des Taylor -Polynoms ei-
ner Funktion. Zum Beispiel liefert
Wir zeigen nun Beispiele für den Umgang
mit symbolischen Polynomen, siehe Ab-
>> syms x
schnitt 46 für Rechnungen mit numeri-
>> taylor(sin(x))
schen Polynomen  .

168 Copyright
c G. Gramlich
Funktion Bedeutung 60.15. Die Funktionen funtool und
coeff Koezient ( Maple ) taylortool
convert Konvertiert ( Maple )
degree Grad des Polynoms ( Maple ) Die Funktionen funtool und taylortool
factor Linearfaktoren (Maple ) stellen pädagogische Hilfsmittel zur Ver-

horner Horner -Darstellung fügung. Die Funktion funtool ist eine

solve Nullstellen Art grascher Taschenrechner, der wich-

subs Ersetzen tige Operationen und einfache Visualisie-


rungen bei Funktionen einer Veränder-
lichen ermöglicht. Mit Hilfe des Kom-
Tabelle 30: Zum symbolischen Rechnen mit
Polynomen
mandos taylortool können Sie Taylor -
Approximationen studieren.

das Taylor -Polynom bis zur fünften Ord-


60.16. Mehrdimensionale
Taylor-Polynome
nung:

ans =
x-1/6*x^3+1/120*x^5 Zur Berechnung des Taylor -Polynoms ei-
ner reellwertigen Funktion mehrerer Varia-
mtaylor
Aufgabe 140 ( Taylor-Polynome) blen kann man die Funktion
Maple
aus

Berechnen Sie das Taylor -Polynom der


verwenden.

Kosinus-Funktion DasTaylor -Polynom zweiten Grades der


Funktion f (x, y) = ex+y , (x, y) ∈ R2 mit
f (x) = cos(x) Entwicklungspunkt (0, 0) ist gegeben durch
vom Grad vier im Entwicklungspunkt 0. T2 (x, y) = 1 + x + y + 1/2(x2 + y 2 ) + xy .
Lösung: Es ist Hier die Bestätigung in Matlab :

>> syms x >> syms x y


>> taylor(cos(x),5,x,0) >> T2 = maple('mtaylor',exp(x+y),...
ans = '[x,y]',3)
1-1/2*x^2+1/24*x^4 T2 =
1+x+y+1/2*x^2+x*y+1/2*y^2
d.h. das Taylor -Polynom der Kosinus-
Funktion vom Grad vier im Entwicklungs-
punkt 0 ist Aufgabe 141 ( Taylor)
x2 x4
Berechnen Sie das Taylor -Polynom zwei-
f (x) = 1 − + . ter Ordnung mit dem Entwicklungspunkt
2 24
(−1/2, −1/2) der quadratischen Funktion
© ....................................... ©
q(x, y) = x2 + y 2 + x + y , (x, y) ∈ R2 .

169 Copyright
c G. Gramlich
Lösung: Die folgenden Matlab -Zeilen be- ans =
rechnen die Lösung: 0.7619
>> abs(subs(T2,[x,y],[0.5,0.5])...
>> syms x y -subs(f,[x,y],[0.5,0.5]))...
>> T2 = maple('mtaylor',... /abs(subs(f,[x,y],[0.5,0.5]))
x^2+y^2+x+y,'[x=-1/2,y=-1/2]',3) ans =
T2 = 0.0156
-1/2+(x+1/2)^2+(y+1/2)^2
Der relative Fehler ist demnach zirka1.5%.
Wir bestätigen das Ergebnis: © ....................................... ©

>> simplify(T2)
ans = 60.17. Lineare Algebra
x^2+y^2+x+y
Siehe Abschnitt 42

© ....................................... ©
60.18. Dierenzengleichungen
Aufgabe 142 ( Taylor) Maple kann Dierenzengleichungen lösen.
Approximieren Sie die Funktion f (x, y) =
Die Funktion rsolve kann lineare Dieren-
xey − x3 y , (x, y) ∈ R2 in der Nähe des
Nullpunktes durch ihr Taylor -Polynom T2
zengleichungen mit konstanten Koezien-
ten, Systeme linearer Dierenzengleichun-
zweiten Grades. Vergleichen Sie dann die
gen mit konstanten Koezienten und man-
Funktionswerte von f und T2 an der Stel-
che nichtlineare Gleichungen erster Ord-
le(0.5, 0.5), indem Sie den relativen Fehler
nung. Implementiert sind Standardtechni-
|T2 (0.5, 0.5) − f (0.5, 0.5)|/|f (0.5, 0.5)| be-
ken wie erzeugende Funktionen und z-
rechnen.
Transformationen, sowie Methoden basie-
Lösung: Es ist
rend auf Substitutionen und charakteristi-
schen Gleichungen.
>> syms x y
>> f = x*exp(y)-x^3*y; Die lineare Dierenzengleichung erster Ord-

>> T2 = maple('mtaylor',f,'[x,y]',3) nung

T2 = yt = −0.9yt−1
x+x*y hat die Lösung
>> subs(T2,[x,y],[0.5,0.5]),...
subs(f,[x,y],[0.5,0.5]) yt = (−1)t (0.9)t y0 .
ans =
0.7500 Hier die Bestätigung in Matlab .

170 Copyright
c G. Gramlich
60.19. Dierenzialgleichungen
>> maple('rsolve',...
'y(t)=-0.9*y(t-1)','y(t)') Mit Hilfe der Matlab -Funktion dsolve ist
ans = es möglich, allgemeine Lösungen von Die-

y(0)*(-9/10)^t renzialgleichungen zu berechnen, Anfangs-


wertaufgaben und Randwertaufgaben zu lö-
sen. Hierbei kann eine einzelne Dieren-
Die Komplexität der Gauÿ schen Elimina- zialgleichung oder aber auch ein System
tion ist von Gleichungen vorliegen. Mit der Funkti-
on pdsolve können sogar einfache partielle
>> maple('rsolve','{T(n)=T(n-1) Dierenzialgleichungen bzw. partielle Die-
+n^2','T(1)=0}','T(n)') renzialgleichungssysteme gelöst werden.
ans = Die gewöhnliche Dierenzialgleichung y0 =
-3*(n+1)*(1/2*n+1)+n+2*(n+1)* ay hat die allgemeine Lösung y(t) = ceat .
(1/2*n+1)*(1/3*n+1)
>> factor(sym(maple('rsolve',...
In Matlab bestätigt man das wie folgt:

'{T(n)=T(n-1)+n^2','T(1)=0}',...
>> dsolve('Dy = a*y')
'T(n)')))
ans =
ans =
exp(a*t)*C1
1/6*(n-1)*(2*n^2+5*n+6)

Aufgabe 144 (Dierenzialgleichung)


Aufgabe 143 (Dierenzengleichungen)
Berechnen Sie die allgemeine Lösung der
Bestätigen Sie die Lösung yt = (0.5)t (y0 − gewöhnlichen Dierenzialgleichung
12) + 12 der Dierenzengleichung

y 0 (t) = −y(t) − 5e−t sin(5t)


yt = 0.5yt−1 + 6
siehe Abschnitt 55.
Lösung: Es ist Lösung: Die allgemeine Lösung ist

>> maple('rsolve',... >> y = dsolve('Dy=-y-5*...


'y(t)=0.5*y(t-1)+6','y(t)') exp(-t)*sin(5*t)')
ans = y =
y(0)*(1/2)^t-12*(1/2)^t+12 exp(-t)*cos(5*t)+exp(-t)*C1

© ....................................... © © ....................................... ©

171 Copyright
c G. Gramlich
Aufgabe 145 (Anfangswertaufgabe) Lösung y(t) = 1/23 cos(11t)−1/23 cos(12t)
Berechnen Sie die Lösung der Anfangswert- ist eine Überlagerung von zwei Schwingun-
aufgabe gen mit unterschiedlichen Frequenzen. Man
( spricht von einer Schwebung (amplituden-
y 0 (t) = −y(t) − 5e−t sin(5t) modulierte Schwingung), eine Bewegungs-
AWA : t≥0
y(0) = 1 form, die für die Akustik und Funktechnik
von groÿer Bedeutung ist. Die Abbildung
aus Abschnitt 55. 55 zeigt die Lösung. ©. . . . . . . . . . . . . . . . . . .©
Lösung: Die Lösung ist
−1/23 cos(12 t)+1/23 cos(11 t)

>> y = dsolve('Dy=-y-5*...
exp(-t)*sin(5*t)','y(0)=1') 0.05
y =
exp(-t)*cos(5*t) 0

−0.05
© ....................................... ©
−0.1
0 5 10 15
t
Aufgabe 146 (Anfangswertaufgabe)
Berechnen Sie die Lösung der Anfangswert-
Abbildung 55: Lösung der AWA
aufgabe

(
y 00 (t) + 144y(t) = cos(11t)
AWA : t≥0 Wir berechnen die Lösung der Randwert-
y(0) =, y 0 (0) = 0 aufgabe

und stellen Sie die Lösung im Intervall


(
u00 = 6x
[0, 6π] dar. RWA : 0 ≤ x ≤ 1.
Lösung: Die Lösung ist
u(0) = 0, u(1) = 1

aus Abschnitt 55.2.


>> y = dsolve('D2y+144*y=cos(11*t)',
'y(0)=0','Dy(0)=0')
>> u = dsolve('D2u-6*x=0',
y =
'u(0)=0','u(1)=1','x')
-1/23*cos(12*t)+1/23*cos(11*t)
u =
x^3
Eine Dierenzialgleichung dieses Types
nennt man die Gleichung des (ungedämpf-
ten) harmonischen Oszillators mit äuÿerer Aufgabe 147 (Randwertaufgabe)
harmonischer Anregung, hier cos(11t). Die Berechnen Sie die Lösung der Randwertauf-

172 Copyright
c G. Gramlich
gabe
( >> maple('pdsolve',utt-c^2*uxx)
y 00 = −y u(x,t) = _F1(t*c+x)+_F2(t*c-x)
RWA : 0 ≤ x ≤ π/2.
y(0) = 3, y(π/2) = 7

aus Abschnitt 55.2. Hierbei sind _F1 und _F2 zwei beliebige

Lösung: Es ist zweimal stetig dierenzierbare Funktionen.


Wählt man für diese beiden Funktionen die
2
>> y = dsolve('D2y=-y','y(0)=3', Funktion e−z , z ∈ R und für den Para-
'y(pi/2)=7','x') meter c den Wert 1, so erhält man die Lö-
2 2
y = sungsfunktion u(x, t) = e−(t+x) + e−(t−x) .
7*sin(x)+3*cos(x) Die Abbildung 56 zeigt den Graph der Lö-

exp(−(t+x)2)+exp(−(t−x)2)
© ....................................... ©

Mit der Maple -Funktion pdsolve kann


man einfache partielle Dierenzialgleichun-
1.5
gen lösen. Als Beispiel betrachten wir die
1
eindimensionale homogene Wellengleichung 0.5 6
4
0
2
utt − c2 uxx = 0 (c 6= 0). 5 0
0 −2
−4
−5 t
Dies ist eine lineare partielle hyperbolische x −6

Dierenzialgleichung zweiter Ordnung. Um


diese symbolisch zu lösen, denieren wir zu-
Abbildung 56: Lösung der eindimensiona-
nächst die symbolischen Variablen x, t, c len Wellengleichung
und die Funktion u(x, t):
sungsfunktion, der mit
>> syms x t c
>> u = sym('u(x,t)');
>> ezsurf('exp(-(t+x)^2)+
exp(-(t-x)^2)')
Danach berechnen wir die Ableitungen
zweiter Ordnung

erzeugt wurde. Man erkennt, dass die all-


>> uxx = diff(u,x,2); gemeine Lösung der homogenen Wellenglei-
>> utt = diff(u,t,2); chung eine Überlagerung zweier gegenläu-
ger Wellen darstellt.

und schlieÿlich die allgemeine Lösung

173 Copyright
c G. Gramlich
Aufgabe 148 (Dierenzialgleichung) Cosinusfunktionen aus
Berechnen Sie mit pdsolve eine Lösung der Z
partiellen Dierenzialgleichung fˆ(ω) = f (t)e−iωt dt.
R

axux + btut = 0. Die Abbildung f → fˆ heiÿt kontinu-


ierliche Fourier -Transformation (CFT).
Stellt die unabhängige Variable t die Zeit
Lösung: Es ist dar, so hat die Variable ω die Bedeutung
der Frequenz. Somit ist die Frequenz ω
>> syms x t a b eine kontinuierliche Gröÿe, das heiÿt al-
u = sym('u(x,t)'); le möglichen Frequenzen sind darstellbar.
ux = diff(u,x); Die kontinuierliche Fourier -Transformati-
ut = diff(u,t); on (CFT) bildet die Funktion f vom Zeitbe-
maple('pdsolve',a*x*ux+b*t*ut) reich oder Originalbereich in den Frequenz-
ans = bereich oder Bildbereich ab. Die inverse
u(x,t) = _F1(t/(x^(b/a))) Fourier -Transformation (ICFT) transfor-
miert umgekehrt.

Für den Rechteckimpuls


© ....................................... ©
(
1, falls |t| < T
f (t) =
0, sonst
60.20. Die kontinuierliche
Fourier-Transformation soll die Fourier -Transformation fˆ(ω) be-
rechnet werden. Es ergibt sich
Die kontinuierliche Fourier -Transformati- Z ∞ Z T
on (CFT) untersucht, welche Frequenzen fˆ(ω) = f (t)e−iωt dt = e−iωt dt
mit welchen Amplituden in einem Zeitsi- −∞ −T
T
e−iωt

gnal f (t) enthalten sind, wenn das Zeit- 1
= =(e−iT ω − eiT ω )
signal nicht periodisch ist. Man nennt −iω −T −iω
dieses Vorgehen wie bei den Fourier - 2 1 iT ω
− e−iT ω

Reihen die Frequenzanalyse des Zeitsi-
= e
ω 2i
gnals f (t). Man kann sagt auch, die konti- 2 sin(ωT )
nuierliche Fourier -Transformation (CFT)
=
ω
.
zerlegt ein Signal in sinusförmige Wellen
Die nachfolgenden Anweisungen bestätigen
unterschiedlicher Frequenzen.
die Rechnung.
Die kontinuierliche Fourier -Transformati-
on (CFT) drückt ein Signal f (t) als eine >> syms t T
stetige Linearkombination von Sinus- und >> Rechteck = heaviside(t+T)-...

174 Copyright
c G. Gramlich
heaviside(t-T); rechnet werden. Es ergibt sich
>> fourier(Rechteck) Z ∞
ans = fˆ(ω) = f (t)e−iωt dt
2/w*sin(T*w) Z−∞
∞ Z ∞
−bt −iωt
= ae e dt = a e−(b+iω) dt
0 0
" #t=∞
Die nachfolgenden Anweisungen geben eine e−(b+iω)t a
zweite Möglichkeit, obiges Resultat zu be-
=a = .
−(b + iω) b + iω
t=0
stätigen. Es ist T = 1.
Die nachfolgenden Anweisungen bestätigen
das Ergebnis symbolisch in Matlab .
>> maple('T:=1');
>> maple('Rechteck(t/T):= >> maple('assume(a>0,b>0)');
Heaviside(t+T)-Heaviside(t-T):'); >> maple('fourier(a*exp(-b*t)
>> maple('simplify(fourier(Rechteck *Heaviside(t),t,w)')
(t/T),t,w))') ans =
ans = a/(b+i*w)
2/w*sin(w)
Beachten Sie, dass die Konstanten a und
b so wie es die Theorie erfordert gröÿer als
Das nachfolgende Beispiel zeigt, dass die
Fourier -Transformierte fˆ(·) einer Funkti-
Null deniert werden müssen, weil sonst ge-
gebenenfalls das Integral bzw. die Fouri-
on f (·) im allgmeinen eine komplexwerti-
er -Transformation nicht existiert.
ge Funktion ist. Der Graph einer komplex-
wertigen Funktion liegt im R4 und ist so-
Die Fourier -Transformierte von

mit nicht direkt darstellbar. Entweder man 2


f (x) = e−x
zeichnet den Real- und Imaginärteil ge-
trennt oder man zerlegt die komplexe Funk- ist
√ 2 /4
tion in Betrag und Phase. fˆ(ξ) = πe−ξ .
Für die von den Parametern a>0 und b> Wir bestätigen dies symbolisch mit der
0 abhängige Funktion
fourier Funktion

( >> syms x
ae−bt , falls t>0
f (t) = >> f = exp(-x^2);
0, sonst >> fhat = fourier(f)
fhat =
pi^(1/2)*exp(-1/4*w^2).
soll die Fourier -Transformation fˆ(ω) be-

175 Copyright
c G. Gramlich
Aufgabe 149 ( Fourier-Transformation)Beachten Sie, dass die unabhängige Varia-
Berechnen Sie zunächst per Hand und dann ble der Fourier -Transformierten w ist. Die
mit Matlab die Fourier -Transformierte Abbildung 57 ©© zeigt die Funktion f und
von

f (x) = e−|x| . 1
exp(−abs(x))

2
2/(1+w2)

Fourier
0.9 1.8

Lösung:
0.8 1.6

Die -Transformierte von 0.7 1.4

0.6 1.2

0.5 1

−|x| 0.4 0.8

f (x) = e 0.3

0.2
0.6

0.4

0.1 0.2

0 0

ist
−4 −3 −2 −1 0 1 2 3 4 −6 −4 −2 0 2 4 6

2
fˆ(ξ) = ,
1 + ξ2 Abbildung 57: Zur stetigen Fourier -

denn Transformation

Fourier
Z
fˆ(ξ) = e−|x| e−ixξ dx ihre -Transformierte fˆ.
R
Z∞ Z 0
−|x| −ixξ
= e edx + e−|x| e−ixξ dx
Z0 ∞ Z −∞∞ 60.21. Laplace-Transformation
= e−x e−ixξ dx + e−x eixξ dx
Z0 ∞ Z0 ∞ Die Laplace -Transformation kann symbo-
= ex(−1−iξ)
dx + ex(−1+iξ) dx lisch mit der Funktion laplace berechnet
0 0 werden. Siehe Aufgabe 138 für ein Beispiel.
" #x=r
e−x(1+iξ) e−x(1−iξ)
= lim +
r→∞ −1 − iξ −1 + iξ
1 1
x=0
60.22. Spezielle mathematische
=− −
−1 − iξ −1 + iξ
Funktionen
2
= . Über 50 spezielle mathematische Funktio-
1 + ξ2 nen stehen mit der Symbolic Math Tool-
Wir bestätigen dies symbolisch
box zur Verfügung. Diese Funktionen wer-
den mit mfun angesprochen und werten die
entsprechende Funktion an der gewünsch-
>> syms x
ten Stelle numerisch aus. Dies stellt so-
>> f = exp(-abs(x));
mit auch eine Erweiterung zum Standard-
>> fhat = fourier(f)
fhat =
Matlab dar, denn diese klassischen Funk-
tionen stehen dort nicht zur Verfügung. Sie-
2/(1+w^2)
he doc mfunlist (help mfunlist).

176 Copyright
c G. Gramlich
60.23. Variable Rechengenauigkeit Das nächste Beispiel berechnet die Eu-
ler sche Zahl e auf 50 Nachkommastellen
Zusätzlich zu Matlab 's doppelt genau- genau, gibt sie aus und überprüft, ob der
er Gleitpunktarithmetik und der symbo- Logarithmus davon wieder 1 ergibt:
lischen Rechenmöglichkeit wird durch die
Symbolic Toolbox eine variable Rechenge- >> digits(50);
nauigkeitsarithmetik unterstützt, die durch >> x = vpa(sym('exp(1)'))
den Maple -Kern durchgeführt wird. Diese x =
Art von Arithmetik zu verwenden, ist dann 2.71828182845904523536028747135266
sinnvoll, wenn eine genaue Lösung verlangt 24977572470937000
wird, aber eine exakte unmöglich oder aber >> vpa(log(x))
zu zeitaufwendig zu berechnen ist. ans =
Mit der Funktion digits ist es möglich, die 1.00000000000000000000000000000000
Anzahl der genauen dezimalen Stellen ein- 00000000000000000
zustellen, mit der die Rechnungen durchge-
führt werden sollen. Standardmäÿig sind 32
Vorsicht Falle:
Stellen eingestellt, was Sie durch den Auf-
ruf von digits überprüfen können. Wol-
>> x = vpa(sym(exp(1)))
len Sie diese Zahl zu n abändern, so geht
x =
das mit digits(n). Die variable Rechenge- 2.71828182845904553488480814849026
nauigkeitsarithmetik basiert auf dem vpa-
50117874145507813
Kommando. Der einfachste Gebrauch be-
>> vpa(log(x))
steht zum Beispiel darin, die Kreiszahl π ans =
auf 32 Stellen zu berechnen:
1.00000000000000011018891328384949
58218182413442295
>> digits

Digits = 32 Wir haben auf die Hochkomma in exp(1)


verzichtet. Das Resultat ist, dass Matlab
>> vpa(pi) exp(1) mit doppelter Genauigkeit berech-

ans = net, diese 16-stellige Dezimalzahl in eine 50-

3.1415926535897932384626433832795 stellige Dezimalzahl transformiert (34 Stel-


len sind somit bedeutungslos) und dann den
Logarithmus anwendet, was zu einem unge-
Wie der Aufruf vpa(pi,40) zeigt, können nauen Ergebnis führt. Erst die Hochkomma
Sie mit dem zweiten Argument von vpa die sorgen dafür, dass der Matlab -Interpreter
zur Zeit aktuelle Anzahl von gültigen Dezi- übergangen wird, damit Maple den Aus-
malen überschreiben. druck auswerten kann.

177 Copyright
c G. Gramlich
Aufgabe 150 (Symbolisches Rechnen) die entsprechenden Maple -Befehle auf-
Berechnen Sie π auf 50 Stellen genau! rufen. Eine Liste dieser Funktionen er-
Lösung: Sowohl halten Sie mit help symbolic. Darüber
hinaus besteht die Möglichkeit, andere
>> digits(50) Maple -Kommandos anzusprechen, die
>> vpa(pi) zur Standardbibliothek von Maple ge-
hören. Hierzu verwendet man die maple-
Funktion.
als auch

• Die Extended Symbolic Math Toolbox be-


>> vpa pi 50
sitzt alle Funktionalitäten der Standard
Symbolic Math Toolbox, und darüber hin-
liefern aus besteht die Möglichkeit, die Maple -
Programmierstrukturen, die Ein- und

ans = Ausgabe Möglichkeiten als auch Funktio-

3.14159265358979323846264338327 nen und Kommandos spezieller Maple -

95028841971693993751 Pakete zu nutzen.

Mit dem Aufruf


© ....................................... ©
>> mhelp index[packages]

60.24. Überblick über alle


symbolischen Funktionen erhalten Sie eine Liste über die Maple -
Pakete.

Mit help symbolic (doc symbolic) erhal- Wenn Sie sich nun näher für ein Paket in-
ten Sie einen Überblick über alle Funktio- teressieren, zum Beispiel für das Paket mit
nen der Symbolic Math Toolbox. den kombinatorischen Funktionen, so hilft
der Aufruf mhelp combinat weiter. Dieser

60.25. Weitere Bemerkungen und listet dann alle relevanten Funktionen auf.
maple('with(combinat)') laden Sie
Hinweise Mit
das Paket und mit mhelp binomial erhal-

Es gibt zwei Levels der Symbolic Math Tool- ten Sie zum Beispiel weitere Informationen

box. über die Funktion binomial, etwa wie man


sie aufzurufen hat.

• Die Standard Symbolic Math Toolbox ver- Das PaketLinearAlgebra enthält die
fügt über annähernd 50 eingebaute Mat- Funktion Basis. Mit mhelp Basis erhalten
lab -Funktionen und Kommmandos, die Sie die Meldung

178 Copyright
c G. Gramlich
te Optimierung und Nichtlineare Optimie-
Multiple matches found: rung. Siehe doc optim (help optim) für ei-
SolveTools,Basis ne komplette Übersicht über alle in Mat-
Modular,Basis lab lösbaren Optimierungsmodelle.
LinearAlgebra,Basis Zu beachten ist, dass jedes Optimierungs-
problem als Minimierungsproblem formu-

Dann hilft mhelp('LinearAlgebra,Basis') liert werden muss.

oder mhelp LinearAlgebra[Basis] wei-


ter.
61.1. Lineare Optimierung
Eine Online-Einführung in die Symbolic
Math Toolbox erhalten Sie mit dem Be- An einem einfachen Beispiel zur Linea-

fehl demos. Geben Sie hierzu demos nach ren Optimierung zeigen wir, wie man un-

dem Matlab -Prompt ein. Es wird dann ter Matlab solche Probleme löst. Als Bei-

das Matlab -Demo-Fenster geönet spiel betrachten wir die Optimierungsauf-


gabe (u.d.N. steht als Abkürzung für unter
den Nebenbedingungen)
61. Optimierung (Teil 2)
Minimiere
−2x1 − 3x2
(x1 , x2 ) ∈ R2
x1 + 2x2 ≤ 10
u.d.N. x1 + x2 ≤ 6
x1 ≥ 0, x2 ≥ 0

Mit den Anweisungen

c = [-2;-3]; A = [1 2; 1 1];
b = [10;6]; u = [0;0];

Mit der Optimization Toolbox kann man


und dem Funktionsaufruf
Optimierungsaufgaben lösen, insbesondere
solche, wo Nebenbedingungen (Restriktio-
[x,fWert] = linprog(c,A,b,[],[],u)
nen) auftreten. Diese sind in der Praxis
auch meist vorhanden. Sie treten linear als
auch nichtlinear auf. Für folgende Optimie- erhalten wir die Ausgabe
rungsmodelle stehen Matlab -Funktionen
zur Verfügung: Lineare Optimierung, Qua- Optimization terminated successfully.
dratische Optimierung, Minmax Optimie- x =
rung, Mehrzielige Optimierung, Semiinni- 2.0000

179 Copyright
c G. Gramlich
4.0000 der Variablen fWert den zugehörigen Wert
fWert = der Zielfunktion cT x =: f (x). Wie bei al-
-16.0000 len anderen Matlab -Funktionen entspre-
chenden Typs können Argumente weggelas-

Das bedeutet, dass x


∗ = (x∗1 , x∗2 ) = (2, 4) sen werden, wenn nicht alle Formen der Ne-

die Minimalstelle des linearen Optimie- benbedingungen auftreten. Damit aber die

rungsproblems ist, und −(2)(2) − (3)(4) = Reihenfolge erhalten bleibt, müssen gege-

−16 der Zielfunktionswert, das heiÿt das benenfalls eckige Klammern [] hierfür ge-

Minimum ist. schrieben werden. Ferner können Optionen


gesetzt werden und weitere Ausgabeargu-
Das erste Argument c der Funktion
mente angegeben werden. Für weitere Hin-
linprog beinhaltet die Koezienten der
weise verweisen wir auf die Online-Hilfe,
Zielfunktion. Die Matrix A beinhaltet die
Koezienten der linearen Ungleichungen,
siehe doc linprog (help linprog).
wobei die Koezienten der rechten Sei-
Aufgabe 151 (Lineare Optimierung)
ten der Ungleichungen im Vektor b stehen.
Die lineare Optimierungsaufgabe
Schlieÿlich werden die unteren Grenzen der
Variablen im Vektor u gespeichert und als
Minimiere
sechstes Argument in linprog übergeben. −x1 − x2
x ∈ R2
Das vierte und fünfte Argument der Funk-
x1 + 3x2 ≤ 13
tion linprog ist für eventuell vorkommende
3x1 + x2 ≤ 15
lineare Gleichungen vorgesehen. u.d.N.
−x1 + x2 ≤ 3
Allgemein gilt: Mit der Funktion linprog x1 ≥ 0, x2 ≥ 0
können lineare Optimierungsaufgaben der
Form hat die Minimalstelle x∗ = (4, 3) mit dem

Minimiere Minimum −7, wie die Abbildung 58 grasch


cT x
x ∈ Rn
Lineare Optimierungsaufgabe
Ax ≤ b 8

u.d.N. Bx = d −7

l≤x≤u 6

−7
l und u dürfen
gelöst werden. Die Vektoren 4
auch Koordinaten −∞ bzw. ∞ haben. Falls
−7
der Aufruf 2 Zulässige Menge

[x,fWert] = linprog(c,A,b,B,d,l,u) 0
−7

0 2 4 6 8

erfolgreich war, ndet man in der Variablen


x den berechneten Lösungsvektor und in Abbildung 58: Lineare Optimierung

180 Copyright
c G. Gramlich
zeigt. Bestätigen Sie die Lösung in Matlab und die Nebenbedingungen wie bei der Li-
mit der Funktion linprog. nearen Optimierung linear sind. Die allge-
Lösung: Die Lösung erhält man in Mat- meine Problemstellung ist:
lab wie folgt:

>> c = [-1 -1]; Minimiere 1 T


A = [1 3; 3 1; -1 1]; 2 x Hx + cT x
x ∈ Rn
b = [13; 15; 3]; Ax ≤ b
lb = [0; 0]; u.d.N. Bx = d
[x,fx] = linprog(c,A,b,[],[],lb) l≤x≤u
Optimization terminated.
x =
4.0000 Die Matrix H in der Zielfunktion ist aus
3.0000 Rn×n und symmetrisch. Ansonsten gilt
fx = analoges wie bei Linearen Optimierungs-
-7.0000 aufgaben. Falls der Aufruf

© ....................................... ©
[x,qWert] = quadprog(c,A,b,B,d,l,u)

61.2. Quadratische Optimierung


Die Quadratische Optimierung gehört be- erfolgreich war, ndet man in der Va-
reits in die Klasse der Nichtlinearen Opti- riablen x den berechneten Lösungsvektor
mierungsaufgaben, stellt aber bereits einen und in der Variablen qWert den zugehö-
wichtigen Spezialfall dieser Problemklasse rigen Wert der Zielfunktion 1/2xT Hx +
dar, sowohl aus theoretischen als auch aus cT x =: q(x). Wie bei allen anderen Mat-
algorithmisch numerischen Gründen. Qua- lab -Funktionen entsprechenden Typs kön-
dratische Programme treten im Bereich der nen Argumente weggelassen werden, wenn
Regelungstechnik häug bei der Online- nicht alle Formen der Nebenbedingungen
Optimierung von Stellgröÿen linearer Sys- auftreten. Damit aber die Reihenfolge er-
teme mit quadratischen Gütefunktionalen halten bleibt, müssen gegebenenfalls ecki-
und linearen Nebenbedingungen auf. Li- ge Klammern [] hierfür geschrieben wer-
neare Regressionsprobleme sind wiederum den. Ferner können Optionen gesetzt wer-
wichtige Spezialfälle Quadratischer Opti- den und weitere Ausgabeargumente ange-
mierungsaufgaben. geben werden. Für weitere Hinweise ver-
Eine Quadratische Optimierungsaufgabe weisen wir auf die Online-Hilfe, siehe doc
liegt vor, wenn die Zielfunktion quadratisch quadprod (help quadprog).

181 Copyright
c G. Gramlich
Als Beispiel betrachten wir die Aufgabe Optimization terminated.
x =
Minimiere
q(x1 , x2 ) 50.0000
x ∈ R2 150.0000
x1 + x2 ≤ 200 qWert =
1.25x1 + 0.75x2 ≤ 200 -155950
u.d.N.
x2 ≤ 150
x1 ≥ 0, x2 ≥ 0.

mit der quadratischen Zielfunktion 61.3. Überblick über alle Funktionen


q(x1 , x2 ) = −(4 + 2x1 )x1 − (5 + 4x2 )x2 − zur Optimierung
8x1 x2 , x = (x1 , x2 ) ∈ R2 .
Es ist dann
Mit doc optim (help optim) erhalten Sie
einen Überblick über alle Funktionen der
Optimization Toolbox.
   
−4 −8 −4
H= , c= ,
−8 −8 −5

62. Nichtlineare
   
1 1 200
A =  1.25 0.75  , b =  200 
0 1 150 Ausgleichsaufgaben
und l = (0, 0). Nach den Zuweisungen
Zu Optimization Toolbox gehören
der
auch die
Funktionen lsqnonlin und
H = [-4 -8; -8 -8]; c = [-4;-5];
lsqcurvefit, siehe doc lsqnonlin (help
A = [1 1; 1.25 0.75; 0 1];
lsqnonlin) und doc lsqcurvefit (help
b = [200;200;150];
lsqcurvefit). Mit diesen Funktionen kann
l = [0;0];
man nichtlineare Ausgleichsaufgaben lösen.
Nichtlineare Ausgleichsaufgaben treten bei
und dem Aufruf Parameteridentikationsproblemen auf und
spielen in den Anwendungen eine groÿe
[x,qWert] = quadprog(H,c,A,b,[],[],l) Rolle. Wenn Sie sich für diesen Problem-
kreis näher interessieren, sehen Sie auch

erhält man die Ausgabe unter den Worten Inverse Probleme nach
([21]). Wir zeigen das Lösen einer nichtli-

Warning: Large-scale method does nearen Ausgleichsaufgabe an einem Beispiel

not currently solve this problem in nachfolgender Aufgabe.

formulation,
switching to medium-scale method. Aufgabe 152 (lsqcurvefit)
> In quadprog at 236 Gegeben sind die vier Datenpunkte

182 Copyright
c G. Gramlich
t 0.0 1.0 2.0 3.0 2

1.8
y 2.0 0.7 0.3 0.1
1.6

1.4
und die nichtlineare Modellfunktion
1.2

x2 t 1
φ(t, x) = x1 e .
0.8

0.6
Bestimmen Sie x = (x1 , x2 ), sodass
0.4
die Funktion f die Datenpunkte im Sin-
0.2
ne kleinster Quadrate bestmöglichst aus-
0
0 0.5 1 1.5 2 2.5 3
gleicht.
Lösung: Das Problem kann in Matlab Abbildung 59: Zu Aufgabe 152
mit der Funktion lsqcurvefit gelöst wer-
den.

t = [0:3]; Für lineare Ausgleichsaufgaben siehe Ab-

y = [2 0.7 0.3 0.1]; schnitt 45.

fxt = @(x,t) x(1)*exp(x(2)*t);


x0 = [1,0];
[x,resnorm] = lsqcurvefit(fxt,x0,t,y)
Optimization terminated successfully: 63. Simulink
Relative function value changing by
less than OPTIONS.TolFun
x = Simulink
ist ein blockorientiertes, interak-
tives System zur Simulation linearer und
1.9950 -1.0095
nichtlinearer dynamischer Systeme. Es han-
resnorm =
delt sich um ein mausgesteuertes Grak-
0.0020
programm, das ein Modell eines techni-
schen oder physikalischen Systems, das als
Die Lösungsstelle ist somit x∗ ≈ Blockdiagramm auf dem Bildschirm darzu-
(1.995, −1.0095). Die Abbildung 59 stellen ist, unter dynamischen Einwirkun-
zeigt die dazugehörige Geometrie und gen nachbildet. Es kann für lineare, nicht-
wurde wie folgt erzeugt: lineare, zeitkontinuierliche oder zeitdiskrete
Prozesse eingesetzt werden. Grundlage sind
tt = linspace(0,3); Matlab -Funktionen zur Lösung gewöhn-
ff = x(1)*exp(x(2).*tt); licher Dierenzialgleichungen (DGL) bzw.
plot(tt,ff,t,y,'ro'), grid, Anfangswertaufgaben (AWA).

Wir zeigen nun, wie man Anfangswertauf-


© ....................................... © gaben mit Simulink löst. Als Beispiel wäh-

183 Copyright
c G. Gramlich
len wir die Anfangswertaufgabe
Scope
(
y 0 (t) = −y(t) − 5e−t sin(5t)
AWA :
y(0) = 1 1
s
Integrator

die wir bereits in Abschnitt 55.1 numerisch


und in Abschnitt 60 symbolisch behandelt
f(u)
haben. Die Lösung ist Clock Fcn

y(t) = e−t cos(5t).


Als ersten Schritt löst man die gegebe-
ne Dierenzialgleichung nach der höchsten Abbildung 60: Simulink -Modell

Ableitung auf. In diesem Fall ist diese eins


und die Gleichung braucht nicht umgeformt
Doppelklicken auf das Symbol und dem
zur werden
Eintrag des Anfangwertes, hier 1. Der letz-
0 −t te Schritt besteht in der Wahl der Simu-
y (t) = −y(t) − 5e sin(5t).
lationsparameter. Unter mehreren Integra-
Zur Integration wird der Block Integrator tionsverfahren (das sind gerade die DGL-
verwendet. Er sorgt für die numerische In- Löser (ODE-Löser) ode45, usw. von Mat-
tegration der Dierenzialgleichung. Danach lab ) muss ein geeignetes aufgewählt wer-
wird die rechte Seite der Dierenzialglei- den. Voreingestellt ist ode45. Auÿerdem ist
chung mit Hilfe von Integrieren, Additi- die Simulationszeit einzustellen. Ich habe
onsstellen, usw. aufgebaut. Im vorliegenden ich das Intervall [t0 = 0, tf = 3] gewählt.
Fall wird mit dem Bock fcn der Ausdruck Die grasche Darstellung der Simulation,
5e−t sin(5t) gebildet und durch die Summa- das heiÿt die Lösung der Dierenzialglei-
tionsstelle mit dem Ausgang des Integrie- chung ist in Abbildung 47 zu sehen.
rers zusammengefasst. Da die rechte Seite
nun komplett ist und diese gleich der ers-
ten Ableitung ist, wird der Ausgang mit 64. Dünn besetzte Matrizen
dem Integrierereingang verbunden (Rück-
kopplung). Zur graschen Darstellung des Rechnet man mit einer Matrix, so geht
Signals (Lösung y der Dierezialgleichung) Matlab davon aus, dass diese dicht be-
während der Simulation wird der Block Sco-
Simulink
setzt ist, das heiÿt, nur wenige Matrixele-
pe verwendet. Das -Modell zur mente sind Null. Sind in einer Matrix je-
Lösung der Dierenzialgleichung ist in Ab- doch viele Elemente Null (zum Beispiel 95%
bildung 60 dargestellt. oder mehr) so spricht man von einer Sparse-
Nun setzen wir beim Integrierer die An- matrix oder von einer dünn besetzten Ma-
fangsbedingungen. Dies geschieht durch trix. Liegt solch eine Sparsematrix vor und

184 Copyright
c G. Gramlich
möchte man Matrixoperationen mit dieser Mit S = sparse(F) wird F im Sparsemodus
durchführen, so kann man meistens Gleit- abgespeichert:
punktoperationen auf den Nullelementen
einsparen. Darüber hinaus muss man nicht S =
die ganze Matrix abspeichern, sondern es (1,1) 2
genügt, nur die von Null verschiedenen Ele- (2,1) -1
mente abzulegen. Trägt man diesen Sach- (1,2) -1
verhalten Rechnung, so läÿt sich die Ezi- (2,2) 2
enz von Algorithmen in bezug auf Speicher- (3,2) -1
und Zeitaufwand reduzieren. Damit ist es (2,3) -1
möglich, gröÿere Probleme zu lösen, die (3,3) 2
sonst nicht lösbar wären. Matlab kann die (4,3) -1
dünne Besetztheit einer Matrix ausnutzen. (3,4) -1
Matlab verfügt über zwei Speichermodi: (4,4) 2
full und sparse, wobei full standardmä- (5,4) -1
ÿig eingestellt ist. Die Funktionen full und (4,5) -1
sparse erlauben es, zwischen beiden Modi (5,5) 2
hin und her zu schalten. (6,5) -1
Im Sparsemodus werden die von Null ver-
(5,6) -1
schiedenen Matrixelemente als eindimensio-
(6,6) 2
nales (lineares) Feld mit ihren Zeilen- und
Spaltenindizes abgespeichert. Die Anwei-
Die von Null verschiedenen Elemente wer-
sung
den zusammen mit ihren Indizes spalten-
weise angeordnet. Mit
>> F = -triu(tril(ones(6),1),-1)
+3*eye(6) >> F = full(S)

erzeugt die (6, 6)-Matrix lässt sich dies rückgängig machen. Der
Funktionsaufruf nnz(F) zeigt Ihnen die An-
F = zahl der von Null verschiedenen Elemente
2 -1 0 0 0 0 der Matrix F.
-1 2 -1 0 0 0
0 -1 2 -1 0 0
0 0 -1 2 -1 0 64.1. Sparsematrizen erzeugen
0 0 0 -1 2 -1
Sparsematrizen können auch direkt erzeugt
0 0 0 0 -1 2
werden. Mit Hilfe der Funktion spdiags

185 Copyright
c G. Gramlich
lässt sich zum Beispiel eine dünn besetz- Ista ein Skalar, so sind die Ergebnisse von
te Bandmatrix erzeugen. Obige Bandma- a*S und a\S vom Sparsemodus.
trix F kann somit direkt wie folgt erstellt Um Eigenwerte oder singuläre Werte einer
werden: Sparsematrix S zu berechnen, muss man S
in den vollen Speichermodus konvertieren
>> m = 6; n = 6; und die Funktionen eig bzw.svd verwen-
>> e = ones(n,1); d = 2*e; den: eig(full(S)) bzw. svd(full(S)).
>> A = spdiags([-e,d,-e],... Will man nur einige Eigenwerte oder sin-
[-1,0,1],m,n); guläre Werte berechnen, so kann man die
Funktionen eigs und svds benutzen. Diese
Der Vektor [-1,0,1] gibt an, in welcher akzeptieren Sparsematrizen als Eingabear-

Diagonalen die Spalten von [-e,d,-e] ste- gument: eigs(S) bzw. svds(S) .

hen. Führen Sie die Anweisungen aus und Bildet man eine Blockmatrix und ist eine
sehen Sie sich die volle Matrix mit full(A) Untermatrix eine Sparsematrix, so ist auch
an. Alternativ dazu können Sie sich mit die Blockmatrix vom Speichermodus spar-
spy(A) die Struktur der Matrix A gra- se.
sch betrachten. Die zu eye, zeros, ones, Weitere Informationen erhalten Sie mit doc
rand und randn analogen Sparsefunktionen sparfun (help sparfun).
sind: speye, sparse, spones, sprand, und
sprandn.
65. Mehrdimensionale Arrays
64.2. Mit Sparsematrizen rechnen
Arrays der Datentypen (Abschnitt 66)
Unabhängig vom Speichermodus können double, char, cell und struct können
Sie die arithmetischen Operationen und mehr als zwei Dimensionen haben. Solche
viele Funktionen verwenden. Welchen Spei- mehrdimensionale Arrays werden in natür-
chermodus haben dann die Ergebnismatri- licher Verallgemeinerung zu Techniken, wie
zen? Operationen mit vollen Matrizen erge- man sie für Matrizen kennt, deniert und
ben volle Matrixresultate. Ist S eine Spar- manipuliert.
sematrix und F eine vollbesetzte Matrix, so Mit den Funktionen zeros, rand und randn
ist: können mehrdimensionale Arrays erzeugt
werden. Zum Beispiel wird durch
Sparse: S+S, S*S, S.*S, S.*F,
S^n, S.^n, S\S randn(3,4,5)
Sparse: inv(S),chol(S), lu(S),
diag(S), max(S), sum(S)
ein (3, 4, 5)-Array mit insgesamt 3·4·5 = 60
Full: S+F, S*F, S\F, F\S
normalverteilten Zufallszahlen erzeugt.

186 Copyright
c G. Gramlich
Ein dreidimensionales Array könnte zum nicht deniert, also nur für Matrizen (zwei-
Beispiel dreidimensionale physikalische Da- dimensionale Arrays).
ten darstellen, etwa die Temperatur in ei- Die Tabelle 31 gibt weitere Matlab -
nem Raum über den Punkten eines recht- Funktionen an, die speziell zum Manipulie-
eckigen Gitters. Es könnte auch eine Folge ren von mehrdimensionalen Arrays geeignet
von Matrizen Ak repräsentieren bzw. Ab- sind.
tastwerte einer zeitabhängigen Matrix A(t)
bezeichnen. Das (i, j)-te Element der k -ten Funktion Bedeutung
Matrix ist dann A(i, j, k) = aijk . cat Verkettet Arrays

Mit Hilfe der cat-Funktion kann man ein ndims Gröÿe, Ordnung

mehrdimensionales Array durch Angabe ndgrid Erzeugt Arrays

der Elemente in einer Anweisung denieren. permute Permutiert Dimension

Das erste Argument gibt die Dimension des ipermute Inverse Permutation

Arrays. Die folgende Anweisung erzeugt ein shiftdim Verschiebt Dimension

dreidimensionales Array der Gröÿe 3×2×2. squeeze Verschiebt Dimension

Tabelle 31: Array-Funktionen


>> A = cat(3,[1 2;3 4;5 6],...
[7 8;9 10;11 12])
A(:,:,1) =
1 2
3 4
66. Datentypen (Klassen)
5 6
Bei der Realisierung numerischer und
A(:,:,2) =
hauptsächlich nichtnumerischer Algorith-
7 8
men sind Datentypen von besonderer Be-
9 10
deutung. Spricht man von einfachen Daten-
11 12
typen, so meint man ganze Zahlen, Gleit-
punktzahlen, Zeichenketten usw. Unter ei-
Funktionen, die elementweise arbeiten, kön- nem zusammengesetzten Datentyp oder ei-
nen auch auf mehrdimensionale Arrays an- ner Datenstruktur versteht man ein Array
gewendet werden, zum Beispiel arithme- (Feld) oder einen Verbund. Datenstruktu-
tische, logische und relationale Operato- ren können statisch und dynamisch sein.
ren. zum Beispiel geben die Ausdrücke Ein statischer Datentyp ist zum Beispiel ein
A.*A, exp(A), 3.A und A>0 die erwarteten Array und eine verkettete Liste ist ein dy-
Ergebnisse. Der (konjugiert) tranponierte namischer Datentyp. Durch die Denition
Operator und die Funktionen diag, inv, von Datentypen werden die möglichen Ope-
eig und \ aus der Linearen Algebra sind rationen mit denen Daten und die Gröÿe
für Arrays der Dimension gröÿer als zwei des Speicherplatzes festgelegt. In Matlab

187 Copyright
c G. Gramlich
wird stets der Begri Datentyp oder Klasse >> isa(f,'function_handle')
verwendet und man meint damit zum Bei- ans =
spiel einen der folgenden Datentypen: 1

• double (numerische Arrays)


Mit den folgenden Anweisungen werden die
• sym (Symbolisches Objekt) Variablen A bis N deniert, die alle einen
anderen Datentyp besitzen. Den Datentyp
• function_handle (Function Handle)
können Sie aus dem Matlab -Workspace

• char (Zeichenketten) ablesen.

• cell (Zellenarrays)
>> A = 'Z';
• struct (Strukturarrays)
>> B = magic(3);
>> C = @(x) x^2;
Bisher haben wir hauptsächlich mit dem >> D = cell(3,2);
Datentyp double und sym (aus der Sym- >> E.field = 1;
bolic Toolbox ) gearbeitet; gelegentlich auch >> F = int8(123);
mit der Klasse function_handle. >> G = uint8(123);
>> H = int16(123);
Um festzustellen von welchem Datentyp ein
>> I = uint16(123);
Objekt ist, kann man die Funktion class
>> J = int32(123);
verwenden:
>> K = uint32(123);
>> class(pi) >> L = single(123);
ans = >> M = sym(123);
double >> N = ss(1,1,1,1);
>> f = @(x) x^2;
>> class(f)
Die vorletzte AnweisungM = sym(123) ist
ans =
mit der Symbolic Math Toolbox und die
function_handle
letzte Anweisung N = ss(1,1,1,1) mit
Control Toolbox möglich. Erstere erzeugt
Auch mit der Funktion isa kann man den eine symbolische Variable und Letztere ein
Datentyp einer Variablen herausnden. Zustandsraummodell. Weitere Matlab -
Datentypen werden von Toolboxen erzeugt.
>> f = @(x) x^2; Für weitere Informationen siehe auch doc
>> isa(f,'double') datatypes (help datatypes). Die drei Da-
ans = tentypen char, cell und struct wollen wir
0 etwas genauer anschauen.

188 Copyright
c G. Gramlich
66.1. Zeichenketten (char) wendet, zum Beispiel von den Funktio-
nen spline, solve und von Optimierungs-
Zeichenketten (Strings) werden durch und Dierenzialgleichungslösern. Auÿer-
Hochkommata begrenzt dem spielen sie beim objektorientierten
Programmieren in Matlab eine groÿe Rol-
>> s = 'Ich bin eine Zeichenkette' le (Darauf sind wir bisher nicht eingegan-
s = gen). Zellenarrays nden zum Beispiel in
Ich bin eine Zeichenkette den Funktionen varargin und varargout
Verwendung, sowie in Grakkommandos,
um Text zu spezizieren.
Die Variable s ist ein Array der Gröÿe
(1, 25) vom Typ char. Mit dieser Varia- Eine Struktur ist ein Datentyp, welcher ver-
blen können Sie nun mit allen erlaubten schiedene Werte von möglicherweise ver-
Arrayoperationen manipulieren. Sie kön- schiedenen Datentypen beinhaltet. Eine
nen zum Beispiel Zeichenketten zusammen- Matlab -Struktur ist mit dem Datentyp
fügen oder trennen. Mit den Funktionen Record in der Sprache Pascal vergleich-
str2num oder num2str können Sie Zeichen bar. Im einfachsten Fall lässt sich eine
in Zahlen konvertieren oder umgekehrt. Struktur durch einfache Anweisungen er-
zeugen. Die nachfolgenden Anweisungen
Für weitere Informationen siehe doc
strfun (help strfun). erzeugen die Variable M vom Datentyp
struct. M ist ein (1, 1)-Array.

66.2. Zellen- und Strukturenarrays n = 2;


M.Name = 'Hilbert';
Die Datentypen cell und struct erlau-
M.Matrix = hilb(n);
ben es, unterschiedliche aber logisch zusam-
M.Eigenwerte = eig(sym(hilb(n)));
mengehörige Daten (Felder) zu einer Varia-
blen zusammenzufassen. Zum Beispiel kön-
nen Zeichenketten und numerische Felder Gibt man M ein, so erhält man die Feldna-

unterschiedlicher Gröÿe in einer Zelle ge- men, aber nicht deren Inhalt:

speichert werden. Mathematische Operatio-


nen sind darauf aber nicht deniert. Hierzu >> M
muss man gegebenenfalls auf den Inhalt zu- M =
greifen. Strukturen und Zellen sind ähnlich. Name: 'Hilbert'
Ein Unterschied besteht jedoch darin, dass Matrix: [2x2 double]
Strukturen durch Namen und nicht durch Eigenwerte: [2x1 sym]
Zahlen identiziert werden.

Strukturenarrays werden innerhalb von Das erste Feld M.Name ist vom Typ char,
Matlab an verschiedenen Stellen ver- das zweite vom Typ double und das dritte

189 Copyright
c G. Gramlich
vom Typ sym. Den Inhalt des zweiten Feldes
erhält man zum Beispiel durch >> Z{2,1}
ans =
>> M.Matrix 1 1 1
ans = 1 2 3
1.0000 0.5000 1 3 6
0.5000 0.3333
Mit der Funktion cellplot kann man sich

Ein Zellenarray ist ein Matlab -Array, das die grasche Struktur eines Zellenarrays in

als Elemente Matlab -Arrays haben kann. einem Grakfenster anschauen. Der Aufruf

Ein Element heiÿt Zelle oder Zellenelement.


Im Gegensatz zu Strukturenarrays werden
cellplot(A)
Zellenarrays nicht durch Namen, sondern
durch Zahlen identiziert. Ein Weg, um erzeugt die Abbildung 61.
ein Zellenarray zu denieren besteht dar-
in, geschweifte Klammern zu verwenden.
Die folgende Anweisung erzeugt das (2, 2)-
Zellenarray Z und gibt Informationen über 3.1416

die einzelnen Zellen am Bildschirm aus.

>> Z = {sym(2), pi; pascal(3), 'ABC'}


Z = ABC

[1x1 sym ] [3.1416]


[3x3 double] 'ABC'

Ein Zellenarray erlaubt es somit, Arrays Abbildung 61: Die cellplot-Funktion


verschiedener Datentypen zu einem Objekt
zusammenzufassen. Im obigen Beispiel be-
Z aus Arrays des Typs
steht das Zellenarray
double und char. Sind die Zellen nicht zu
67. WWW-Seiten
groÿ, so werden sie am Bildschirm ange-
Die Firma MathWorks kann über das
zeigt. Lässt es der Raum aber nicht zu, so
World Wide Web (WWW) erreicht werden.
erscheint nur die Gröÿe der jeweiligen Zelle. 4
Die URL-Adresse lautet: http://www.
Eine Zelle kann auch eine mehrdimensiona-
mathworks.com Der Deutsche Web Mir-
le Struktur sein. Die Inhalte von einzelnen
ror (Spiegel) ist http://www.mathworks.
Zellen sind zur Ausgabe mit Indizes in ge-
4
schweiften Klammern anzugeben. Beispiel: URL: Uniform Resource Locator.

190 Copyright
c G. Gramlich
de Von hier aus ndet man verschiedene In- 68. Das Matlab-Logo
formationen über Matlab und Simulink
sowie deren Toolboxen. Auÿerdem gibt es Zur Geschichte des Matlab -Logos (Ab-
Hinweise über Blocksets, eine Liste von Bü- http://www.mathworks.
bildung 62) siehe
chern über Matlab sowie m-Files von an- com/company/newsletters/news_notes/
deren Benutzern. Auch Informationen zur clevescorner/win03_cleve.html.
Studentenversion sind dort zu haben. Es
empehlt sich, hin und wieder die Home-
page aufzusuchen, da dort die aktuellen In-
formationen über Matlab zu nden sind.

Um sich m-Files von der User Community


http://www.
zu besorgen, steht die Adresse
mathworks.de/matlabcentral zur Verfü-
gung.

Programmiertipps stehen unter


http://www.mathworks.de/access/
helpdesk/help/techdoc/matlab_prog.
In dieser Beschreibung ndet Sie auf der Abbildung 62: Das Matlab -Logo
letzten Seite weitere Adressen, um weitere
Infos über Realease Notes, Function Refe-
rence, Newsgroup-Adressen, Suchadressen
nach Online-Quellen, Digest-Infos, News
& Notes, Dokumentationen (Handbücher),
69. Studentenversion
Beispielsammlung, usw. Übrigens, diese
Programmiertips (mit den Adressen auf der Eine Studentenversion von Mat-
letzten Seite) werden auch als PDF-File lab erhalten Sie https://www.
unter

mit Matlab mitgeliefert. Über das Menü academic-center.de/cgi-bin/home.


help inMatlab help unter Printable
Dokumentation (PDF) kommen Sie an das
PDF-Dokument.
70. Cleve's Corner
Ein FAQ-Text (FAQ = Frequently Asked
Questions) zu Matlab nden Sie unter
Besonders interessant nde ich Cleve's
http://www.mit.edu/~pwb/cssm. Corner. Darin benden sich interessante
Artikel rund um Matlab von Cleve Mo-
ler, siehewww.mathworks.com/company/
newsletters/news_notes/clevescorner/
index.html.

191 Copyright
c G. Gramlich
71. Handbücher System ähnlich. Andere kommerzielle
Systeme sind zum Beispiel Gauss HiQ , ,
Die Handbücher [14], [15], [16] IDL Mathcad
, und PV-WAVE .
und [17] sind als PDF-Files unter Andere interaktive Systeme, die ihre Stär-
http://www.mathworks.de/access/ ken hauptsächlich im Bereich symbolischer
helpdesk/help/helpdesk.html erhältlich. Rechnungen Axiom De-
haben, sind: ,
rive Macsyma Maple Mathematica
, , , ,
MuPAD Reduce
und . Man nennt die-
72. Progammierungstips se Systeme Computeralgebra-Systeme (CA-
Systeme ).
Tips zur ezienten Programmierung in
Matlab nden http://www.
Sie unter
mathworks.de/access/helpdesk/help/
pdf_doc/matlab/programming_tips.pdf.

73. Literatur
Bücher zu und über Matlab ndet
man http://www.mathworks.de/
unter
support/books. Darunter auch das sehr
empfehlenswerte Buch von C. Moler , sie-
he [19].

74. Ähnliche Systeme


Diejenige, dieMatlab
sich nicht
leisten können, sei auf die Public
Domain Scilab http:
Software (
//www-rocq.inria.fr/scilab/ 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 bezüglich
Syntax und Kapazität dem Matlab -

192 Copyright
c G. Gramlich
A. Glossar Figure. Ein Matlab -Fenster zur Anzeige
von Grak.
Array (Feld). Unter einem Array (Feld)
versteht man eine Reihe (Ansamm- Function M-File. Ein Typ von m-File, der

lung) von Daten eines bestimmten Ein- und Ausgabeargumente akzep-

Typs. Vektoren und Matrizen sind die tiert. Variablen sind dort lokal de-

bekanntesten Beispiele. niert.

Array Editor. Ein Tool, das es erlaubt, den Handle Graphics. Ein objekt-orientiertes
Inhalt von Arrays anzuzeigen und zu Graksystem, dem die Grak von
verändern. Matlab unterliegt. Objekte sind hier-
achisch organisiert und werden durch
Class (Klasse oder Datentyp). Ein Da-
Matlab
Handles manipuliert.
tentyp in .

Help Browser. Ein Browser, mit dem man


Command History (Kommando-Historie). Matlab
Ein Tool, das früher eingebaute Mat- die Dokumentation von
MathWorks
und

lab Kommandos anzeigt, sowohl für


anderen
schauen und suchen kann.
Produkten an-

die gegenwärtige als auch für frühere


Sitzungen. IEEE arithmetic (IEEE-Arithmetik). Ein
Standard-Gleitpunktsystem, das in
Command Window (Kommando-Fenster).
Das Fenster, in dem Matlab den
Matlab realisiert ist.

Prompt  anzeigt und man Komman-


LAPACK. Eine Bibliothek von FORTRAN
dos eingeben kann. Es ist Teil der
Matlab Arbeitsoberäche.
77 Programmen zur Lösung
rer Gleichungen, Ausgleichsaufgaben,
linea-

Current Directory Browser. Eigenwert- und Singulärwertberech-


Matlab
Aktueller
nnungen. Viele -Funktionen
Verzeichnis-Browser. Ein Browser,
zur linearen Algebra basieren auf LA-
in dem m-Files und andere Files
PACK.
angezeigt werden. Es können auch
Operationen angewendet werden.
Launchpad. Ein Fenster für den Zugang

Editor/Debugger. Ein Tool zum Erzeu- zu Tools, Demos und Dokumentatio-

gen, Editieren und zur Fehlersuche von nen von MathWorks Produkten.

Files.
M-File. Ein File mit der Endung .m, der
FIG-le. Ein File mit der Endung .fig, Matlab Kommandos beinhaltet. Ein
der eine Matlab -Figur speichert und m-File ist entweder ein Function oder
in Matlab eingeladen werden kann. Script-File.

193 Copyright
c G. Gramlich
MAT-File. Ein File mit der Endung .mat,
der Matlab Variablen beinhaltet. Es
wird mit den Kommandos save und
load erzeugt bzw. eingeladen.

Matlab desktop (Arbeitsoberäche).


Eine Benutzer-Arbeitsoberäche, um
Files, Tools und Anwendungen mit
Matlab zu bearbeiten.

MEX-File. Ein Unterprogramm mit C


oder FORTRAN-Code, das plattform-
abgängige Endungen hat. Es verhält
sich wie ein m-File oder eine eingebau-
te Funktion.

Script M-File. Ein Typ von m-File, das


kein Ein- und Ausgabeargument hat
und auf Daten im Workspace (Ar-
beitsspeicher) operiert.

Toolbox. Eine Sammlung von m-Files, die


den Funktionsumfang von Matlab er-
weitert, gewöhnlich im Hinblick auf ein
spezielles Anwendungsfeld.

Workspace. Arbeitsspeicher, der über die


Matlab -Befehlszeilen erreichbar ist.
Beim Beenden werden die Variablen
gelöscht.

Workspace Browser. Ein Browser, der alle


Variablen im Workspace auistet und
Operationen auf diesen erlaubt.

194 Copyright
c G. Gramlich
B. Die Top Matlab-Funktionen Arrays
size
In diesem Anhang liste ich Matlab -
length
Arraygröÿe
Vektorlänge
Funktionen auf, von denen ich glaube, dass
reshape
sie vom typischen Matlab -User am Häu-
:
Ändert Form
Doppelpunkt
gsten eingesetzt werden. Informationen
end Letzter Index
über diese Funktionen erhalten Sie mit den
diag
Online-Hilfen von Matlab insbesondere
tril
Diagonalmatrizen
Dreiecksmatrizen
mit doc und help. triu Dreiecksmatrizen

Vektoren/Matrizen
repmat Blockmatrix

zeros Nullmatrix
ones Einsmatrix Kontrollstrukturen
eye Einheitsmatrix error Fehlermeldung
rand Zufallsmatrix for For-Schleife
randn Zufallsmatrix if If-Abfrage
linspace Gleicher Abstand switch, case Fallunterscheidung
while Wiederholungen

Spezielle Variablen/Konstanten
ans Nullarray Datenanalysis
eps Maschinengenauigkeit max Maximum

i Imaginäre Einheit min Minimum

j Imaginäre Einheit mean arithm. Mittelwert

inf ∞ std Standardabweichung

NaN Not a Number sum Summe

pi Kreiszahl π prod Produkt


sort Sortieren

Logische Operatoren
all Test auf Nichtnullen Lineare Algebra
any Test für ein Nichtnullelement norm Norm

find Findet Indizes cond Kondition

isempty Test auf leeres Array \ Löst LGS

isequal Test auf Gleichheit eig Eigensysteme


lu LU-Faktorisierung
qr QR-Faktorisierung
svd Singulärwertzerlegung

195 Copyright
c G. Gramlich
m-Files
Numerische Methoden
edit Editor
bvp4c Randwertaufgabe
lookfor Suche
fft FFT
nargin Anzahl Input-Argumente
fminbnd Minimierung
nargout Anzahl Output-Argumente
interp1 Interpolation
type Listet File
ode45 Löst ODE
which Pfadname
polyfit Polynomt
quadl Numerische Integration
Gemischtes
roots Nullstellen
clc Löscht
spline Splines
demo Demonstrationen
diary Aufzeichnungen
dir Verzeichnis Grak
doc Hilfe plot x, y -Plot
help Hilfe fplot Funktionsplot
tic, toc Zeitmessung ezplot Funktionsplot
what Listet Files semilog Halblogarithmisch
bar Barplot
Datentypen
hist Histogramm
double Double Precision
axis Axen
char Zeichen
xlim x-Achse
cell Zelle
ylim y -Achse
num2str Zahl2Zeichen
grid Gitter
sparse Sparsematrix
xlabel x-Label
struct Struktur
ylabel y -Label
title Titel
Workspace
legend Legende
clear Löscht
text Text
who Listet Variablen
subplot Subplot
load Läd Variablen
hold Einfrieren
save Speichert
contour Höhenlinien
exit, quit Beendet
mesh 3D-Netz

Ein- und Ausgabe


surf 3D-Flächengraf

disp Zeigt Text oder Array


spy Sparsestruktur

fprintf Schreibt Daten


print Drucken

sprintf Schreibt Daten


clf Löscht Figur

input Prompt für Eingabe


close Schlieÿt Figur

196 Copyright
c G. Gramlich
Literatur [7] Gramlich, G., Werner, W. Nu- :
Matlab
merische Mathematik mit .
Die Literaturangaben sind alphabetisch dpunkt.verlag, 2000.
nach den Namen der Autoren sortiert.
[8] Greenbaum, A. Iterative Methods
:
for Solving Linear Systems . Society
[1] Anderson, E., Bai, Z., Bischof, for Industrial and Applied Mathema-
C., Demmel, J., Dongarra, J., tics, Philadelphia, PA, USA, 1997.
Croz, J. D., Greenbaum, A.,
Hammarling, S., McKenney, A., [9] Higham, D., Higham, N. Matlab :
Ostrouchov, S., Sorensen, D. : Guide . Society for Industrial and Ap-
LAPACK User's Guide . Society for plied Mathematics, Philadelphia, PA,
Industrial and Applied Mathematics, USA, 2000.
Philadelphia, PA, USA, 3. Auf lage,
1999. [10] Kanzow, C. : Numerik linearer Glei-

[2] Dongarra, J., Bunch, J., Moler, chungssysteme . Springer Verlag, 2005.
C., Stewart, G. LINPACK Users'
:
[11] Kelley, C. Iterative Methods for Li-
:
Guide . Society for Industrial and Ap-
near ans Nonlinear Equations . Society
plied Mathematics, Philadelphia, PA,
for Industrial and Applied Mathema-
USA, 1979.
tics, Philadelphia, PA, USA, 1995.

[3] Golub, G., van Loan, C. : Matrix


Computations . The Johns Hopkins [12] Knorrenschild, M. : Numeri-
University Press, 3. Auf lage, 1996. sche Mathematik . Mathematik-

Gramlich, G.
Studienhilfen. Fachbuchverlag Leipzig
[4] : Lineare Algebra . im Carl Hanser Verlag, 2003.
Mathematik-Studienhilfen. Fachbuch-
verlag Leipzig im Carl Hanser Verlag, [13] Lehoucq, R., Sorensen, D., Yang,
2003. C. ARPACK User's Guide: Soluti-
:

[5] Gramlich, G. : Anwendungen der on of Large-Scale Eigenvalue Problems


with Implicitly Restarted Arnoldi Me-
Linearen Algebra . Mathematik-
Studienhilfen. Fachbuchverlag Leipzig
thods . Society for Industrial and Ap-
plied Mathematics, Philadelphia, PA,
im Carl Hanser Verlag, 2004.
USA, 1998.
[6] Gramlich, G. : Über (2, 2)-
Eigensysteme . Skript, FH [14] Matlab : Data Analysis . The Ma-
Ulm, Februar 2005. http: thWorks, Natick, MA, USA, 2005.
//www.rz.fh-ulm.de/~gramlich. http://www.mathworks.de.

197 Copyright
c G. Gramlich
[15] Matlab : Graphics . The MathWorks, [25] Smith, B., Boyle, J., Dongarra,
Natick, MA, USA, 2005. http://www. J., Garbow, B., Ikebe, Y., Kleme,
mathworks.de. V., Moler, C. Matrix Eigensystem
:
Routines-Eispack Guide
[16] Matlab : Mathematics . The Ma-
Verlag, 1976.
. Springer-

thWorks, Natick, MA, USA, 2005.


http://www.mathworks.de.

[17] Matlab : Programming . The Ma-


thWorks, Natick, MA, USA, 2005.
http://www.mathworks.de.

[18] Meister, A. : Numerik linearer Glei-


chungssysteme . Vieweg-Verlag, 1999.

[19] Moler, C. Numerical: Computing


with Matlab . Society for Industri-
al and Applied Mathematics, Philadel-
phia, PA, USA, 2004.

[20] Nitschke, M. : Geometrie .


Mathematik-Studienhilfen. Fach-
buchverlag Leipzig im Carl Hanser
Verlag, 2005.

[21] Rieder, A. : Keine Probleme mit In-


versen Problemen . Vieweg Verlag,
2003.

[22] Saad, Y. Iterative Methods for Sparse


:
Linear Systems . Society for Industri-
al and Applied Mathematics, Philadel-
phia, PA, USA, 2. Auf lage, 2003.

[23] Shampine, L., Gladwell, I.,


Thompson, S. ODEs with Matlab
: .
Cambridge, 2003.

[24] Shampine, L. F., Reichelt, M. W. :


The MATLAB ODE suite . SIAM J.
SCI. Computing , (18):122, 1997.

198 Copyright
c G. Gramlich
Stichwortverzeichnis
', 25 bench, 37
*, 14, 18, 28 bicg, 102
+, 14, 18, 26, 28 bicgstab, 102
-, 14, 18, 26, 28 binomial, 178
-all, 14 binopdf, 138
-realmin, 19 blkdiag, 33, 35
.*, 28 box off, 43
.+, 30 box on, 43
./, 29 bvp4c, 133136, 196
., 29 bvpinit, 134
.\, 29
/, 14, 18 C, 38
:, 24, 195 C. Moler , 192
, 14, 28 C/C++ , 9, 10, 57, 62
\, 70, 78, 86, 89, 92, 93, 96, 109, 187, 195 cart2pol, 53
cart2sph, 53
abs, 18
cat, 33, 35, 187
all, 195
cd, 37
all(any(B)), 32
ceil, 141
angle, 18
ceil(x), 31
ans, 14, 15, 17, 195
cell, 186, 188, 196
any, 195
cellplot, 190
any(all(B)), 32
cgs, 102
any(B(1:2,1:3)), 32
char, 95, 186, 188190, 196
any(B), 32
Axiom , 192
chol, 98, 99
Cholesky , 98
axis, 51, 196
cholinc, 103
axis equal, 51
axis square, 51
Cholseky , 98
circshift, 33
backsub, 89, 91 class, 188
bar, 53, 196 clc, 14, 196
bar3, 53 clear, 196
bar3h, 53 clear global, 66
barh, 53 Cleve Moler , 2, 191
Basis, 178 clf, 196

199
close, 196 doc bicg, 103
coeff, 169 doc chol, 99
colorbar, 46 doc cholinc, 103
colormap, 46 doc clear, 36
colspace, 76, 86 doc colon, 23
compose, 155 doc condest, 96
computer, 17, 20, 37 doc datatypes, 22, 188
cond, 96, 195 doc demo, 13
condest, 96 doc demos, 13
contour, 196 doc eigs, 104
conv, 110, 113 doc elfun, 13, 38, 39
convert, 169 doc elmat, 17, 26
corrcoef, 138 doc fft2, 123
cos, 38, 105 doc fftn, 123
cosd, 38 doc fftw, 123
cov, 108, 138 doc format, 17
cross, 75, 87 doc function, 40, 63
cumtrapz, 127129 doc function_handle, 40, 45, 106
doc funfun, 38, 130
dblquad, 126, 129 doc gallery, 103
deconv, 112, 113 doc general, 63
degree, 168, 169 doc graph2d, 44
delete, 37 doc graph3d, 44
demo, 196 doc graphics, 56
demos, 179 doc gsvd, 101
Derive , 192 doc ifft2, 123
det, 80, 86, 97 doc ifftn, 123
diag, 26, 86, 187, 195 doc imread, 54
diag(rot90(B)), 28 doc inputname, 63
diary, 196 doc iofun, 38
diary off, 22 doc lang, 17, 60, 63
Dichtefunktionen, 138 doc linprog, 180
diff, 163 doc linsolve, 86
digits, 177 doc lsqcurvefit, 182
dir, 37, 196 doc lsqnonlin, 182
disp, 196 doc luinc, 103
doc, 13, 195, 196 doc movie, 56
doc axis, 51 doc nargchk, 63

200 Copyright
c G. Gramlich
doc nargin, 63 eps*realmin, 20
doc nargout, 63 error, 195
doc ode15i, 131 Euler , 158, 177, 192
doc ops, 23, 26, 29, 58 exist, 37
doc optim, 122, 179, 182 exit, quit, 196
doc pdepe, 136 exp, 39, 105
doc plot, 41 expm, 86, 105
doc polyfun, 113 eye, 26, 71, 87, 186, 195
doc print, 54 ezmesh, 44, 49
doc quadprod, 181 ezplot, 45, 47, 50, 105, 196
doc quiver, 53 ezplot3, 47
doc rcond, 96 ezsurf, 49
doc sin, 13
doc slash, 86 factor, 169
doc sparfun, 186 factorial, 139
doc specfun, 39, 139 feval, 106
doc specgraph, 44 fft, 122, 196
doc stats, 137 fftw, 123
doc strfun, 189 find, 195
doc subplot, 43 find(B), 32
doc symbolic, 178 finite(B(:,3)), 32
doc uicontrol, 56 finverse, 157
doc vectorize, 35 fix(x), 31
dot, 74, 87 fliplr, 33
double, 3, 16, 1922, 95, 186, 188190, fliplr(A), 28
196 flipud, 33
dsolve, 129, 131, 171 floor, 141
floor(x), 31
echo off, 61 fminbnd, 108, 121, 196
echo on, 61 fminsearch, 121
edit, 63, 196 for, 58, 59, 195
eig, 62, 81, 8486, 102, 104, 105, 186, format, 17
187, 195 format bank, 17
eigs, 3, 84, 104, 105, 186 format long, 17
eigshow, 83 format short, 17
Eispack , 8 Fortran , 9, 10, 62, 93
end, 108, 195 Fourier , 122, 123, 174176
eps, 17, 19, 96, 100, 195 fourier, 175

201 Copyright
c G. Gramlich
fplot, 38, 45, 66, 196 help colon, 23
fprintf, 37, 38, 196 help datatypes, 188
fread, 37, 38 help demo, 13
Frobenius , 95 help demos, 13
Frobenuis , 95 help elfun, 13, 38, 39
fscanf, 37, 38 help elmat, 17, 26
fsolve, 117 help fft2, 123
full, 104, 185 help fftn, 123
function, 39, 62, 63 help fftw, 123
function_handle, 188 help format, 17
Funktionsgrenzwerte, 158 help function, 40, 63
funtool, 169 help function_handle, 40
fwrite, 37, 38 help funfun, 38, 130
fzero, 38, 116118, 121 help graph2d, 44
help graph3d, 44
Gauss , 192 help graphics, 56
gausselim, 89, 91, 93 help gsvd, 101
gaussjord, 89, 93 help ifft2, 123
Gauÿ , 92, 171 help ifftn, 123
Gauÿ-Jordan , 89 help imread, 54
gcd, 153 help iofun, 38
gemres, 102 help lang, 17, 60
geomean, 138 help linprog, 180
geopdf, 138 help linsolve, 86
get, 56 help lsqcurvefit, 182
global, 66 help lsqnonlin, 182
gmres, 102, 104 help matfun, 105
Grenzwerte help movie, 56
von Funktionen, 158 help ode15i, 131
grid, 42, 196 help ops, 23, 26, 29, 58
gsvd, 109 help optim, 122, 179, 182
guide, 56 help pdepe, 136
help polyfun, 113
hadamard, 108 help quadprog, 181
Heaviside , 64 help quiver, 53
heaviside, 64 help slash, 86
help, 1214, 195, 196 help sparfun, 104, 186
help clear, 36 help specfun, 39, 139

202 Copyright
c G. Gramlich
help specgraph, 44 intmin, 21
help stats, 137 inv, 71, 85, 86, 96, 187
help strfun, 189 inverse, 13
help subplot, 43 ipermute, 187
help symbolic, 178 isa, 188
help uicontrol, 56 iscount, 157
help vectorize, 35 isempty, 195
Hermite , 98, 102, 105 isequal, 195
Hermitesch , 102
Hesse , 164
j, 17, 195
Jacobi
Higham , 103
, 165

HiQ , 192
jacobian
Java , 10
, 164, 165

hist, 53, 196


hold, 196 Jordan , 86

horner, 168, 169 jordan, 86

horzcat, 33, 35 kron, 29


hostid, 37 Kronecker , 29
humps, 45, 117, 124, 128
Lapack , 93
i, 17, 195 Laplace , 167, 176
IDL , 192 laplace, 167, 176
Ieee , 17, 19 legend, 196
if, 58, 59, 195 length, 195
ifft, 122 license, 37
imag, 18 limit, 158, 159
image, 54, 56 LinearAlgebra, 178
imread, 54, 56 Linpack , 8
Inf, 17, 19 linprog, 180, 181
inf, 17, 195 linsolve, 86
input, 196 linspace, 24, 137, 195
inputname, 63 load, 36, 37, 196
int, 129, 165, 166 log, 39
int16, 20, 21 log10, 39
int32, 20, 21 log2, 39
int8, 20, 21 loglog, 51
interp1, 116, 196 logspace, 24
interp2, 47 lookfor, 13, 14, 63, 196
intmax, 21 lookfor complex, 18

203 Copyright
c G. Gramlich
ls, 37 nargout, 62, 196
lsqcurvefit, 182, 183 nchoosek, 137
lsqnonlin, 182 ndgrid, 187
lsqr, 102 ndims, 187
lu, 71, 87, 97, 98, 195 norm, 93, 95, 195
luinc, 103 normest, 95
normpdf, 107, 138
Macsyma , 192 null, 76, 86, 100
mad, 138 num2str, 189, 196
Maple , 89, 153, 157, 169, 170, 173, 177,
178, 192 Octave , 192
maple, 89, 153, 178 ode113, 132
maple('with(combinat)'), 178 ode15i, 130132
Mathcad , 192 ode15s, 132
Mathematica , 192 ode23, 132
Matlab , 120 ode23s, 132
matlabroot, 37 ode23t, 132
max, 195 ode23tb, 132
mean, 60, 138, 144, 195 ode45, 38, 109, 130, 132, 184, 196
median, 60, 138 ones, 26, 186, 195
mesh, 44, 137, 196 optimset, 117, 121
meshgrid, 44 orth, 76, 86, 100
mfun, 176
mhelp, 168 Pascal , 10, 62, 189

mhelp Basis, 178 path, 36

mhelp binomial, 178 Path Browser, 36


mhelp combinat, 178 pathtool, 36
mhelp LinearAlgebra[Basis], 179 pcg, 102, 103
mhelp('LinearAlgebra,Basis'), 179 pdepe, 135, 136
min, 195 pdsolve, 171, 173, 174

minres, 102 peaks, 46, 47


mode, 138 perms, 139
mtaylor, 169 permute, 187
MuPAD , 192 pi, 17, 195
pie, 53
NaN, 17, 19, 64, 195 piecewise, 157
nargchk, 63 pinv, 97
nargin, 62, 196 pinv(A)*b, 88

204 Copyright
c G. Gramlich
plot, 4143, 45, 196 reshape, 33, 35, 195
plot3, 43 reshape(A,4,3), 28
plotyy, 52 RLaB , 192
pol2cart, 53 roots , 113, 117, 120, 196
polar, 53 Rosenbrock , 132
poly, 81, 86, 110, 113 rot90(A,3), 28
polyder, 112, 113 rot90(B), 28
polyfit, 109, 113, 114, 196 round, 31
polyval, 112, 113 round(x), 31
pretty, 150 rref, 71, 86, 8993
print, 54, 56, 196 rsolve, 170
prod, 139, 195 Runge-Kutta , 130, 132
PV-WAVE , 192 Runge-Kutte , 132
pwd, 37
save, 36, 37, 196

qmr, 102 saveas, 56


qr, 87, 195 Scilab , 192

quad, 38, 40, 123127, 129 sdvs, 105


quad, quadl, 109 semilog, 196
quadl, 123125, 127, 129, 196 semilogx, 51
quadv, 129 semilogy, 51
quit, 12 set, 56
quiver, 53 Shampine , 132
shiftdim, 187
rand, 28, 140, 141, 143, 186, 195 simplify, 150
rand(n), 141 Simulink , 3, 10, 11, 191
randn, 140, 141, 143, 186, 195 sin, 13, 38, 105
randtool, 144 sind, 38
range, 138 single, 20, 22
rank, 77, 86, 100 size, 25, 27, 62, 195
rcond, 96 solve, 89, 92, 93, 120, 157, 169, 189
real, 18 sort, 60, 195
realmax, 19 sparse, 185, 186, 196
realmin, 20 spdiags, 185
Record , 189 speye, 186
Reduce , 192 sph2cart, 53
Reichelt , 132 spline, 115, 189, 196
repmat, 33, 35, 195 spones, 186

205 Copyright
c G. Gramlich
sprand, 186 triu(B), 28
sprandn, 186 type, 37, 156, 196
sprintf, 196
spy, 196 uint16, 20, 21
sqrt, 12, 18, 23, 39
uint32, 20, 21
squeeze, 187 uint8, 20, 21
Stateflow , 11
unidpdf, 138
std, 60, 138, 195 unifpdf, 138
stem, 53
var, 108, 138, 144
str2num, 189
varargin, 108, 109, 189
struct, 186, 188, 189, 196
varargout, 109, 189
subplot, 43, 196 vectorize, 35, 68
subs, 150, 155, 156, 169 ver, 37
sum, 195 version, 37
surf, 44, 196 vertcat, 33, 35
svd, 86, 186, 195 vpa, 177
svds, 105, 186
switch, 58, 59 Wathen , 103
switch, case, 195 what, 37, 196
sym, 188, 190 whatsnew, 37
symmlq, 102 which, 37, 196
symsum, 161 while, 58, 59, 195
who, 36, 196
tabulate, 138
whos, 36
tan, 38 whos global, 66
tand, 38 why, 108
Taylor , 169, 170 workspace, 36
taylor, 168
taylortool, 169 xlabel, 43, 196
text, 196 xlim, 196
tic, 105
tic, toc, 196 ylabel, 43, 196

title, 42, 43, 196 ylim, 196


toc, 105
zeros, 26, 58, 71, 87, 186, 195
trapz, 127, 129
zlabel, 43
tril, 86, 195
triplequad, 126, 129
triu, 86, 195

206 Copyright
c G. Gramlich