Beruflich Dokumente
Kultur Dokumente
Einf MATLAB
Einf MATLAB
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-
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,
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
3 Copyright
c G. Gramlich
Inhaltsverzeichnis 20. Matrizen 24
15. Ieee -Arithmetik und double 19 32. Dateien lesen und schreiben 37
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
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
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
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
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.
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
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
• Programmierung
Beiträge vieler Benutzer hat sich Matlab
zu seinem heutigen Umfang entwickelt. In
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-
Stateflow ist eine Erweiterung von Si- miersprache lassen sich Algorithmen
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.
>> 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
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
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
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
>> 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
Dezimalpunkt und ein positives oder nega- kleiner oder gleich (<=)
4 101 0.0001
Tabelle 2: Vorrang-Tabelle
9.84757 1.5e-12 8.997
3i -3.4j 4e3i
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?
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
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
© ....................................... ©
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
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
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.
21 Copyright
c G. Gramlich
17. Eine Sitzung aufzeichnen
>> intmax('int32')
ans = Das Kommando
2147483647
>> diary MeineSitzung
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
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 '-
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.
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 .
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 .
28 Copyright
c G. Gramlich
>> C.*D -5 25 1 -5 0 0
ans = 10 -10 -2 2 0 0
5 12
21 32
© ....................................... ©
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. © ................ ©
30 Copyright
c G. Gramlich
Aufgabe 25 (Rundungsfunktionen)
a + b a' + b Berechnen Sie die folgenden Ausdrücke per
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
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
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:
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);
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
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
fwrite × −3 bis 3:
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
© ....................................... © 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.
40 Copyright
c G. Gramlich
usw. beeinussen (siehe Menü-Item Show Der Befehl
Plot Tools in der geöneten Figur).
>> plot(x,y)
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
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
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)
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
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.
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
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
[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
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
100 −4 0
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
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
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.
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
[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
[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. © .......................... ©
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.
2π
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
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
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-
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
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
−3 −2 −1 0 1 2 3
Zum Zeichnen von Polarkoordinaten ist die x
Funktion polar geeignet.
Abbildung 19: Vektorfeld
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
−1
−2
−3 −2 −1 0 1 2 3
35.13. Graken importieren, Hat man eine Grak erzeugt, so will man
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
200
Apply und dann auf OK. 250
300
4. Wählen Sie aus dem File Menü das Pa- 350
450
Dialogbox an. 100 200 300 400 500 600
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.
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
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
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
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-
>> 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)
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
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
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.
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
gM = prod(x)./length(x);
Die Funktion heaviside aus Matlab ist
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);
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 .
Der Aufruf fplot(@f,[-3,3]) zeichnet globalen Variablen mit whos global, ge-
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.
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.
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
Programmierung ist:
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 =
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 © ....................................... ©
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
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]
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
74 Copyright
c G. Gramlich
ans = ans =
2 2
-7
Den Winkel aus Beispiel 2.9 berechnen wir
-6
wie folgt
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]
des Nullraumes und des Spaltenraumes ste- A. Eine Basis der Länge 1 erhält man mit
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
[ 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
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
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
80 Copyright
c G. Gramlich
ans = Das charakteristische Polynom einer Ma-
-1 trix erhalten wir mit der Funktion poly;
siehe Beispiel 6.2.
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]
−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:
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 .
>> 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].
83 Copyright
c G. Gramlich
Vektoren x, sodass gilt diagonalisiert A. Man erhält sie mit der
Funktion eig.
Ax = λBx.
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
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
−10
−10 −5 0 5 10 32.
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
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
siehe doc slash (help slash). Auch die rref Reduzierte Zeilenstufenform
86 Copyright
c G. Gramlich
Weitere Funktionen Aufgabe 77 (Lineare Systeme)
cross Kreuzprodukt Berechnen Sie die allgemeine Lösung des li-
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.
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.
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
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
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]
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
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:
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:
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
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
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
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=2 sind auch rechteckige Matrizen erlaubt, Null oder es gibt einen Vektor v 6= o mit
viel gesagt. Hier soll noch ergänzt werden, Faktorisierung mit partieller Pivotisierung
dass der \-Operator (Backslash-Operator) berechnet. Gleichzeit wird mit rcond der
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
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.
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.
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
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.
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
gehandelt.
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-
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
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-
nach der ein Funktionsname als eine Zei- ren Versionen musste hier mit der Funktion
also zum Beispiel ezplot('cos'). Weitere Informationen nden Sie mit doc
Die Idee des nächsten Beispiels ist es, den function_handle.
Dierenzenquotient
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. © ........... ©
>> 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
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:
• 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
108 Copyright
c G. Gramlich
• quad, quadl: Rekursive Funktionen lynomen zu arbeiten. Zum symbolischen
Rechnen mit Polynomen siehe Abschnitt
• gsvd: Subfunctions
60.13.
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.
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
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 -
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
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-
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
60
Interpolation
20
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.
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
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
ans =
len im Intervall [0,1] und im Intervall
0.3696
[4,5] liegen. Mit
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
© ....................................... ©
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.
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
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:
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
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
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:
gen, so dass ein Vektor zurückgegeben wer- kann von Matlab nicht exakt (symbolisch)
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
124 Copyright
c G. Gramlich
1
function f = fxlog(x)
0.8 f = x.*log(x);
0.6
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
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
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
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}')
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
y(t)
Problem aussagen und wie es gelöst wer- 0
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
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
'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:
• ode23t für mäÿig steife Dierenzialglei- tion nicht nur wie bei Anfangswertproble-
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,...)
Als Startlösungsfunktionen wählen wir die 1. Schreiben Sie das Problem als Rand-
Nullfunktion. wertproblem erster Ordnung.
Die nachfolgenden Matlab -Zeilen berech- 3. Schreiben Sie eine Funktion für die
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:
(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.
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
1
56. Statistik
0.5 Vorhersagen sind schwierig
u
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
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.
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).
if nargin == 1, n=m; end; anz 1 mit der Funktion randn. Der Befehl
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
(d) zwischen −π und π.
−4 −3 −2 −1 0 1 2 3 4
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-
Samples
Aufgabe 113 (Zufallszahlen) 50
fallszahlen 30
Counts
20
0
0 2 4 6 8
Values
(b) mit Mittelwert -5.5 und Standardab-
weichung 0.25.
144 Copyright
c G. Gramlich
n=100 n=1000
• Deterministischen Problemen, die so 0.14 0.14
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
• 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
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
%--------------------------------
% 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
Z 1
Symbolisches Rechnen ist der Versuch, die
xx dx
0 Methoden, die man beim Rechnen mit Pa-
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
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:
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
liefert
Aufgabe 118 (Multiplikation)
ans = Multiplizieren Sie
3/4
(x2 + x + 1) · (x3 − x2 + 1).
Numerische Rechnung:
Lösung: Mit
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
Die Anweisungen
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
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:
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:
155 Copyright
c G. Gramlich
>> syms x >> double(ans)
>> compose(exp(x),sin(x)) ans =
ans = 2.4826
exp(sin(x))
oder direkt
>> 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.
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:
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̄
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:
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 © ....................................... ©
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
∞
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
161 Copyright
c G. Gramlich
Aufgabe 129 (Unendliche Summen)
a) >> simple(symsum(k,1,n)) Bestätigen Sie, dass für die harmonische
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)
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. © ................................... ©
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
24x2 + 6y 6x + 6y 2
H f (x) = .
liefert das Ergebnis 6x + 6y 2 12xy + 8
164 Copyright
c G. Gramlich
und Aufgabe 134 ( Jacobi-Matrizen)
114 42
Berechnen Sie die Jacobi -Matrix der Funk-
165 Copyright
c G. Gramlich
ans =
-cos(x) >> int('sin(x)',0,pi)
ans =
2
Bei parameterabhängigen unbestimmten
Integralen der Form
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
π
>> 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-
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
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 = 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-
'{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)
© ....................................... © © ....................................... ©
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
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
exp(−(t+x)2)+exp(−(t−x)2)
© ....................................... ©
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
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
( >> 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
0.6 1.2
0.5 1
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
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
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
• 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-
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-
c = [-2;-3]; A = [1 2; 1 1];
b = [10;6]; u = [0;0];
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-
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-
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
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:
© ....................................... ©
[x,qWert] = quadprog(c,A,b,B,d,l,u)
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.
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-
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.
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
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
Das erste Argument gibt die Dimension des ipermute Inverse Permutation
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
• 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.
unterschiedlicher Gröÿe in einer Zelle ge- men, aber nicht deren Inhalt:
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
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.
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].
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
Typs. Vektoren und Matrizen sind die tiert. Variablen sind dort lokal de-
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 .
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.
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
Logische Operatoren
all Test auf Nichtnullen Lineare Algebra
any Test für ein Nichtnullelement norm Norm
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
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.
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-
:
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-
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
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
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
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
206 Copyright
c G. Gramlich