einfmatlab

206

Upload: vtwien

Post on 24-Jun-2015

939 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: EinfMATLAB

Aus Sicht eines Mathematikers

Günter M. GramlichProfessor für Mathematik an der

Fachhochschule UlmFachbereich Grundlagen

http://www.rz.fh-ulm.de/~gramlich

Ulm, 5. Januar 2006

Page 2: EinfMATLAB

Vorwort

Matlab1 ist ein sehr leistungsfähi-ges Softwaresystem für alle Ar-ten von Berechnungen. Der Nu-meriker Cleve Moler hat die

erste Version von Matlab in FORTRANEnde der siebziger Jahre geschrieben. Eswurde in Lehre und Forschung beliebt undmündete in ein kommerzielles Softwaresys-tem.Matlab wird nun in Hochschulen undIndustrie eingesetzt.

Matlab dient im Gegensatz zu Com-puteralgebrasystemen (CAS) nicht primärder symbolischen, sondern der numerischen(zahlenmäÿigen) Lösung von Problemen.

Heutzutage werden viele physikalische, bio-logische, technische, informationstechnischeund ökonomische Produkte am Computerentwickelt. Hierbei ist eine Simulation einwesentlicher Bestandteil. Mit Hilfe einer Si-mulation kann ein Funktionsnachweis oftschneller erbracht werden. Auÿerdem ist siemeist schneller als ein Experiment, kanndaher ein Projekt zeitlich verkürzen undso die Kosten reduzieren. Durch Compu-teranimationen entsteht eine Anschaulich-keit und auÿerdem ist eine Simulation völ-lig ungefährlich. Mit dem SoftwaresystemMatlab lassen sich realitätsnahe Anwen-dungen rasch und unaufwendig bereits mitwenigen Codezeilen programmieren bzw. si-mulieren.

Diese Einführung soll ein Einstieg in Mat-lab sein. Ich habe nur die wichtigesten Ei-

1Matlab R© ist eingetragenes Warenzeichen von

The MathWork Inc.

genschaften von Matlab behandelt. Da-bei zeige ich, wie und wozu man Funk-tionen aus Matlab nutzen kann, erkläreaber nicht die Mathematische Theorie unddie Algorithmen, die sich dahinter verber-gen. Auch gehe ich davon aus, dass Sie, lie-ber Leser, grundlegende Kenntnisse im Pro-grammieren und mit dem Umgang wenigs-tens eines Betriebssystems haben.

Der Umfang von Matlab ist in den letz-ten Jahren stark angestiegen. An den Do-kumentationen können Sie dies gut erken-nen, siehe [14, 15, 16, 17]. Hier ein kleinerAbriss über die verschiedenen Versionen:

1978: Klassisches MatlabFORTRAN-Version

1984: Matlab 1C-Version

1985: Matlab 230% mehr Funktionen und Kommandos,Dokumentation

1987: Matlab 3Schnellere Interpreter, Farbgra�k, hoch-au�ösende Gra�k als Hardkopie

1992: Matlab 4Sparsematrizen, Animation, Visualisie-rung, User-Interface-Kontrolle, Debug-ger, Handle-Gra�k

1997: Matlab 5Pro�ler, objekt-orientierte Programmie-rung, mehrdimensionale Arrays, Zellen-arrays, Strukturen, mehr lineare Algebrafür Sparse-Probleme, neue DGL-Löser,Browser-Hilfe

2 Copyright c© G. Gramlich

Page 3: EinfMATLAB

2000: Matlab 6 (R12)Matlab-Desktop mit Browser-Hilfe,Matrizenrechnungen basierend auf LA-PACK mit BLAS, Handle-Funktionen,eigs Schnittstelle zu ARPACK,Randwertproblemlöser, partiellerDi�erenzialgleichungssystem-Löser,JAVA Unterstützung

2002: Matlab 6.5 (R13)Performance-Beschleunigung, schnellereGeschwindigkeit der Kernfunktionen derLinearen Algebra für den Pentium 4,mehr Fehler- und Warnhinweise

2004: Matlab 7 (R14)Mathematik auch auf nicht double-Datentypen (single precision,integer); Anonymous Functions; NestedFunctions; m-Files können in HTML,LATEX, usw. publiziert werden; erweiterteund verbesserete Plot-Möglichkeiten

Nicht näher gehe ich auf die Themen: Ob-jektorientiertes Programmieren mit Mat-lab, Java-Schnittstellen, GUI (GraphicalUser Interface) Werkzeuge und die Publi-kationstools wie HTML, XML, LATEX,usw.ein. Dafür �nden Sie aber einen Zugangzum symbolischen Rechnen mit Matlab,zu Optimierungs- und Statistikfunktio-nen, sowie ein Simulink-Modell (Symbolic-Toolbox, Optimization Toolbox, StatisticsToolbox, Simulink). Im Anhang �nden Sieein kleines Glossar, sowie ein Au�istungwichtiger Matlab-Funktionen.

Den vorliegenden Text habe ich vollstän-dig in LATEX erstellt. Die Literaturhinwei-se wurden mit BibTEXund der Index mit

MakeIndex erzeugt. Alle Bilder habe ichmit Matlab erstellt.

Die Mathematik habe mit den dort üb-lichen Symbolen und der dort üblichenSchreibweise ausgedrückt. Vektoren sindkleine (a, b, c usw.) und Matrizen sindgroÿe lateinische Buchstaben (A, B, Cusw.). Funktionen, Kommandos, Codes,usw. ausMatlab habe ich in die SchriftartTypwriter gesetzt. Das Ende von Aufgabenhaben wir wie folgt gekenntzeichnet: © . . ©

Für jede Anregung, nützlichen Hinweis oderVerbesserungsvorschlag bin ich dankbar.Sie erreichen mich am Besten über E-Mail:[email protected].

Nun viel Freude und Erfolg mit Matlab!

Ulm, 5. Januar 2006 Günter Gramlich

3 Copyright c© G. Gramlich

Page 4: EinfMATLAB

Inhaltsverzeichnis

1. Einleitung 8

2. Was macht den Erfolg vonMatlab aus? 11

3. Starten und beenden 12

4. Matlab unterbrechen 12

5. Lange Eingabezeilen 12

6. Das help-Kommando 12

7. Das doc-Kommando 13

8. Demos 13

9. Das lookfor-Kommando 13

10. Einfaches Rechnen 14

11. Welche arithmetische Operati-on hat Vorang? 15

12. Zahlen und Formate 16

13. Variablen und Konstanten 17

14. Komplexe Zahlen 18

15. Ieee-Arithmetik und double 19

16. Nicht double-Datentypen 20

17. Eine Sitzung aufzeichnen 22

18. Vektoren 22

19. Vektoroperationen 24

20. Matrizen 24

21. Matrizenoperationen 28

22. Rundungsfunktionen 31

23. Weitere Funktionen 32

24. Zweidimensionale Arrays 3324.1. Zeile löschen . . . . . . . . . . 3324.2. Gröÿtes Element bestimmen . 3324.3. Aus Matrizen Vektoren machen 3424.4. Zeilen-/Spaltentausch . . . . . 3424.5. Ordnungen ändern . . . . . . 3524.6. Blockmatrizen . . . . . . . . . 35

25. Vektorieller Programmierung 35

26. Der Path Browser 36

27. Der Workspace Browser 36

28. Den Workspace verwalten 36

29. Den Datenträger verwalten 37

30. Wie man mitMatlab System-informationen erhält 37

31. Neuigkeiten und Versionen 37

32. Dateien lesen und schreiben 37

33. Function Functions 38

34. Mathematische Funktionen 38

35. Gra�k 4035.1. 2D-Gra�k . . . . . . . . . . . 4135.2. 3D-Gra�k . . . . . . . . . . . 43

4 Copyright c© G. Gramlich

Page 5: EinfMATLAB

35.3. Funktionsdarstellungen . . . . 4535.4. Parametrisierte Kurven . . . . 4735.5. Parametrisierte Flächen . . . . 4935.6. Implizite Kurven . . . . . . . 5035.7. Implizite Flächen . . . . . . . 5035.8. Koordinatenachsen skalieren . 5135.9. Zwei y-Achsen . . . . . . . . . 5235.10. Koordinatentransformationen 5335.11. Spezielle Gra�kfunktionen . . 5335.12. Vektorfelder visualisieren . . . 5335.13. Gra�ken importieren, expor-

tieren und drucken . . . . . . 5435.14. Animationen . . . . . . . . . . 5635.15. Handle Graphics . . . . . . . . 5635.16. Graphical User Interface (GUI) 56

36. Vergleichsoperatoren, Ver-gleichsfunktionen 56

37. Logische Operatoren und logi-sche Funktionen 57

37.1. Logische Operatoren . . . . . 5737.2. Logische Funktionen . . . . . 57

38. Steuerstrukturen 5838.1. for-Schleife . . . . . . . . . . 5838.2. while-Schleife . . . . . . . . . 5938.3. if-Anweisung . . . . . . . . . 5938.4. switch-Anweisung . . . . . . . 59

39. m-Files 6039.1. Script-Files . . . . . . . . . . . 6039.2. Function-Files . . . . . . . . . 6139.3. Namen von m-Files . . . . . . 6339.4. Editieren von m-Files . . . . . 6339.5. Zur Struktur eines m-Files . . 6339.6. Blockkommentare . . . . . . . 6339.7. Übungsaufgaben . . . . . . . . 64

40. Globale und lokale Variablen 66

41. Wie man e�ziente Programmeschreibt 66

42. Lineare Algebra (1) 7042.1. Lineare Gleichungssysteme

und Matrizen . . . . . . . . . 7042.2. Vektoren in der Ebene und

im Raum . . . . . . . . . . . . 7442.3. Analytische Geometrie von

Geraden und Ebenen . . . . . 7642.4. Reelle Vektorräume und Un-

terräume . . . . . . . . . . . . 7642.5. Determinanten . . . . . . . . . 8042.6. Eigenwerte und Eigenvektoren 8142.7. Lineare Abbildungen und

Matrizen . . . . . . . . . . . . 8442.8. Matlab-Funktionen für die

Lineare Algebra im Überblick 8542.9. Lineare Gleichungssysteme (2) 8642.9.1. Quadratische Systeme . . . . . 8742.9.2. Überbestimmte Systeme . . . 8742.9.3. Unterbestimmte Systeme . . . 8842.10. Lineare Gleichungssysteme (3) 89

43. Lineare Algebra (2) 9343.1. Normen . . . . . . . . . . . . 9343.2. Konditionszahlen . . . . . . . 9543.3. Lineare Gleichungssysteme (4) 9643.4. Inverse . . . . . . . . . . . . . 9643.5. Determinante . . . . . . . . . 9743.6. Pseudoinverse . . . . . . . . . 9743.7. LU-Faktorisierung . . . . . . . 9743.8. Cholseky-Faktorisierung . . 9843.9. QR-Faktorisierung . . . . . . . 9943.10. Singulärwertzerlegung . . . . . 10043.11. Eigensysteme . . . . . . . . . 102

5 Copyright c© G. Gramlich

Page 6: EinfMATLAB

43.12. Iterative Methoden . . . . . . 10243.12.1. Iterative Methoden für linea-

re Gleichungssysteme . . . . . 10243.12.2. Iterative Methoden für Ei-

gensysteme . . . . . . . . . . . 10443.12.3. Iterative Methoden für Sin-

gulärwertsysteme . . . . . . . 10543.13. Funktionen einer Matrix . . . 105

44. Mehr zu Funktionen 10544.1. Function-Handles . . . . . . . 10544.2. Anonymous Functions . . . . 10644.3. Subfunctions . . . . . . . . . . 10744.4. Nested Functions . . . . . . . 10844.5. Beispielhafte Funktionen . . . 108

45. Lineare Ausgleichsaufgaben 109

46. Polynome 10946.1. Darstellung von Polynomen . 10946.2. Nullstellen von Polynomen . . 10946.3. Multiplikation von Polynomen 11046.4. Addition und Subtraktion

von Polynomen . . . . . . . . 11146.5. Division von Polynomen . . . 11246.6. Ableiten von Polynomen . . . 11246.7. Auswerten von Polynomen . . 11246.8. Zusammenfassung . . . . . . . 113

47. Polynominterpolation 113

48. Polynomapproximation 114

49. Kubische Splineinterpolation 115

50. Stückweise lineare Interpolati-on 116

51. Nichtlineare Gleichungen 116

52. Optimierung (Teil 1) 121

53. FFT 122

54. Integration 12354.1. Mehrfachintegrale . . . . . . . 12654.2. Tabellarische Daten . . . . . . 12754.3. Zusammenfassung . . . . . . . 128

55. Di�erenzialgleichungen 12955.1. Anfangswertaufgaben . . . . . 12955.2. Randwertaufgaben . . . . . . 13255.3. Partielle Di�erenzialglei-

chungen . . . . . . . . . . . . 135

56. Statistik 137

57. Kombinatorik 137

58. Zufallszahlen 14058.1. Gleichverteilte Zufallszahlen . 14058.2. Normalverteilte Zufallszahlen . 14158.3. Im Vergleich: Gleich- und

normalverteilte Zufallszahlen . 14258.4. Andere Verteilungen . . . . . 144

59. Stochastische Simulationen 14459.1. Näherung für π . . . . . . . . 14559.2. Zum Ziegenproblem . . . . . . 14659.3. Das Geburtstagsparadox . . . 14759.4. Bestimmte Integrale . . . . . . 149

60. Symbolisches Rechnen 14960.1. Erste Schritte . . . . . . . . . 15060.2. Wie manMaple-Funktionen

verwendet . . . . . . . . . . . 15360.3. Mathematische Funktionen . . 15460.4. Algebraische Gleichungen . . . 15760.5. Grenzwerte . . . . . . . . . . . 158

6 Copyright c© G. Gramlich

Page 7: EinfMATLAB

60.6. Endliche und unendlicheSummen . . . . . . . . . . . . 161

60.7. Di�erenziation . . . . . . . . . 16360.8. Partielle Di�erenziation . . . . 16460.9. Der Gradient . . . . . . . . . . 16460.10. Die Hesse-Matrix . . . . . . . 16460.11. Die Jacobi-Matrix . . . . . . 16560.12. Integration . . . . . . . . . . . 16560.13. Polynome . . . . . . . . . . . 16860.14. Taylor-Polynome . . . . . . 16860.15. Die Funktionen funtool und

taylortool . . . . . . . . . . 16960.16. Mehrdimensionale Taylor-

Polynome . . . . . . . . . . . 16960.17. Lineare Algebra . . . . . . . . 17060.18. Di�erenzengleichungen . . . . 17060.19. Di�erenzialgleichungen . . . . 17160.20. Die kontinuierliche Fouri-

er-Transformation . . . . . . 17460.21. Laplace-Transformation . . . 17660.22. Spezielle mathematische

Funktionen . . . . . . . . . . . 17660.23. Variable Rechengenauigkeit . . 17760.24. Überblick über alle symboli-

schen Funktionen . . . . . . . 17860.25. Weitere Bemerkungen und

Hinweise . . . . . . . . . . . . 178

61. Optimierung (Teil 2) 17961.1. Lineare Optimierung . . . . . 17961.2. Quadratische Optimierung . . 18161.3. Überblick über alle Funktio-

nen zur Optimierung . . . . . 182

62. Nichtlineare Ausgleichsaufga-ben 182

63. Simulink 183

64. Dünn besetzte Matrizen 18464.1. Sparsematrizen erzeugen . . . 18564.2. Mit Sparsematrizen rechnen . 186

65. Mehrdimensionale Arrays 186

66. Datentypen (Klassen) 18766.1. Zeichenketten (char) . . . . . 18966.2. Zellen- und Strukturenarrays . 189

67. WWW-Seiten 190

68. Das Matlab-Logo 191

69. Studentenversion 191

70. Cleve's Corner 191

71. Handbücher 192

72. Progammierungstips 192

73. Literatur 192

74. Ähnliche Systeme 192

A. Glossar 193

B. Die Top Matlab-Funktionen 195

Literatur 197

Stichwortverzeichnis 199

7 Copyright c© G. Gramlich

Page 8: EinfMATLAB

It is probably fair to say thatone of the three or four most im-portant developments in numeri-cal computation in the past decadehas been the emergence of Mat-lab as the preferred language oftens of thousands of leading scien-tists and engineers.Lloyd N. Trefethen, 1997.

1. Einleitung

Matlab2 ist ein sehr leistungs-fähiges Softwaresystem für al-le Arten von Berechnungen.Der Name Matlab kommt von

Matrix-Laboratory und verweist auf diezwei Überlegungen, die bei der Entwicklungeine Rolle gespielt haben. Grundelementesind Matrizen und ihre Manipulation, diein numerischen Verfahren optimal einge-setzt werden können, gleichzeitig verfolgtman über Laboratory den Gedanken derEntwicklung und Erweiterung.Matlab istein interaktives Matrix-orientiertes Softwa-resystem, in dem sich Probleme und Lösun-gen in vertrauter mathematischer Schreib-weise darstellen lassen.

Typische Anwendungen sind:

• Numerische Berechnungen aller Art.

• Entwicklung von Algorithmen.

• Modellierung, Simulation und Entwick-lung von Prototypen technischer und

2Matlab R© ist eingetragenes Warenzeichen von

The MathWork Inc.

wirtschaftlicher Probleme.

• Analyse, Auswertung und gra�sche Dar-stellung von Datenmengen; Visualisie-rungen.

• Wissenschaftliche und technische Dar-stellungen.

• Applikationsentwicklung mit Aufbau ei-ner gra�schen Benutzerschnittstelle.

In den siebziger Jahren wurde in den USAeine intensive Aktivität zur Entwicklunghochqualitativer Software gestartet, dasNATS-Projekt. 1976 lag als Ergebnis dieserBemühungen das Softwarepaket Eispackzur Lösung algebraischer Eigenwertpro-bleme vor [25]. Im Jahr 1975 begannendie Arbeiten an einem e�zienten undportablen Softwarepaket zur Lösung linea-rer Gleichungssysteme. Das Ergebnis wardas Softwarepaket Linpack [2]. Linpackund Eispack gewährleisteten lange Zeitdie zuverlässige und portable Lösung vonProblemen der Linearen Algebra. Um diesebeiden Pakete leichter handhabbar zu ma-chen, wurde Matlab geschrieben. Damitbestand auch die Möglichkeit, ausgereifteSoftware e�zient in der Lehre � zunächstin der (Numerischen) Linearen Algebra,später und jetzt in vielen anderen Berei-chen � einzusetzen. Zur Geschichte vonMatlab siehe http://www.mathworks.

com/company/newsletters/news_notes/

clevescorner/dec04.html.

Der Einsatz von Matlab lohnt sich. Ne-ben den sonst üblichen Lehrbuchbeispielenkönnen kompliziertere und praxisbezogene

8 Copyright c© G. Gramlich

Page 9: EinfMATLAB

Aufgaben schon im Ausbildungsprozess be-arbeitet werden. Matlab erhöht die Leis-tungsfähigkeit, Probleme aus Wirtschaft,Technik und Natur zu lösen, und erhöhtdie Motivation sich mit Mathematik zu be-schäftigen.

Der Umfang von Matlab ist in den letz-ten Jahren stark angestiegen. Informatio-nen über die neuste Version und ande-re Hinweise �nden Sie unter http://www.

mathworks.de.

Die drei Hauptkomponenten von Matlabsind:

• Berechnung

• Visualisierung

• Programmierung

Berechnung. Matlab verfügt über einenumerische � qualitativ hochwertige � Pro-grammsammlung. Dem Benutzer bleibt esdadurch erspart, Standardalgorithmen neuprogrammieren zu müssen. Er kann aufgrundlegende, gut ausgetestete Programmezurückgreifen und darauf aufbauend eigeneAlgorithmen realisieren.Visualisierung. Matlab verfügt übermoderne Visualisierungsmöglichkeiten. Da-durch ist der Benutzer in der Lage, Datenauf verschiedene Art und Weise darzustel-len.Programmierung. Matlab verfügt übereine eigene höhere Programmiersprache.Dadurch stellt Matlab ein o�enes Systemdar. Der Benutzer hat somit die Möglich-keit, die Funktionalität vonMatlab durch

eigene Programme beliebig zu erweitern.Dies kann dadurch geschehen, dass erMat-lab-Programme schreibt � sogenannte m-Files � oder C/C++, Fortran bzw. Java-Codes einbindet.

Die grundlegenden Datenelemente vonMatlab sind Matrizen bzw. mehrdimen-sionale Felder (Arrays), die nicht dimensio-niert werden müssen. Dadurch lassen sichviele technische Aufgabenstellungen, vor al-lem wenn sie mit Matrizen oder Vekto-ren dargestellt werden können, mit einemBruchteil des Zeitaufwandes lösen, der fürdie Programmierung in einer skalaren, nichtinteraktiven Sprache wie Fortran oderC/C++ erforderlich wäre.

Im Verlauf mehrerer Jahre und durchBeiträge vieler Benutzer hat sich Matlabzu seinem heutigen Umfang entwickelt. InHochschulen ist Matlab das bevorzugteLehrmittel für Grund- und Aufbaukursein Mathematik, Ingenieurswissenschaften,Naturwissenschaften und Wirtschafts-wissenschaften. In der Industrie �ndetMatlab immer mehr Zuwachs in For-schung, Entwicklung, Datenauswertungund Visualisierungen aller Art. FolgendePunkte tragen auÿerdem zum Erfolg vonMatlab bei:Syntax. Matlab besitzt eine benutzer-freundliche, intuitive Syntax, die kurz undeinfach ist. Sie lehnt sich stark an diemathematischen Schreibweisen an. Aucheinen umgekehrten Prozess kann manbeobachten. Matlab nimmt Ein�uÿ aufmathematische Beschreibungen, siehe zumBeispiel [3].

9 Copyright c© G. Gramlich

Page 10: EinfMATLAB

Toolboxen. In Form von sogenanntenToolboxen lässt sich der Funktionsum-fang von Matlab auf vielen Gebietenerweitern. Unter anderem stehen folgen-de Toolboxen zur Verfügung: ExtendedSymbolic Math Toolbox, Financial Toolbox,Image Processing Toolbox, Neural NetworkToolbox, Optimization Toolbox, PartialDi�erential Equation Toolbox, Signal Pro-cessing Toolbox, Spline Toolbox, StatisticsToolbox und Wavelet Toolbox. Darüberhinaus stellt Matlab eine Schnittstellezur numerischen Programmbibliothek Nag(http://www.nag.com) bereit.Matrizen. Grundlage von Matlab sindreelle und komplexe (einschlieÿlich dünnbesetzter) Matrizen. Die Einführung einerMatrix als grundlegendes Datenelementhat sich nicht nur in der (numerischen)Mathematik, sondern auch in vielen ande-ren rechnerorientierten Bereichen als sehrvorteilhaft herausgestellt.Symbolisches Rechnen. Durch die(Extended) Symbolic Math Toolbox ist esinnerhalb der Matlab-Umgebung mög-lich, symbolisch zu rechnen. Dadurch kannder Benutzer symbolische und numerischeBerechnungen miteinander verknüpfen. InAbschnitt 60 wird diese Toolbox genauerbeschrieben.Prototyprealisierung. In der Praxiskommt es vor, dass man � aus den ver-schiedensten Gründen heraus � daraufangewiesen ist, Algorithmen in anderenProgrammiersprachen, wie zum BeispielC/C++, Fortran, Pascal oder Java,zu implementieren. Aber auch dann ist esvorteilhaft, einen Prototyp des Verfahrens

in Matlab zu realisieren, da dies meistsehr schnell möglich ist, bevor man denAlgorithmus überträgt bzw. automatischübertragen lässt (Zum Beispiel mit Hilfedes Matlab C/C++ Compilers).Handle Graphics (Gra�ken bearbei-ten). Das Matlab-Gra�ksystem umfasstHochsprachenbefehle für die Darstellungvon zwei- und dreidimensionalen Daten-strukturen, für die Bildverarbeitung, fürTrickbewegungen und Präsentationsgra�-ken. Hierzu gehören auch einfache Befehle,mit denen sich Gra�ken kundenspezi�schgestalten oder auch vollständig gra�scheBenutzerschnittstellen für eigene Applika-tionen aufbauen lassen.Bibliothek von mathematischenFunktionen. Matlab verfügt über eineumfangreiche Sammlung von mathemati-schen Algorithmen und Funktionen. DieseFunktionalität reicht von elementarenFunktionen über Eigenwertberechnun-gen bis hin zur schnellen Fourier-Transformation.Application Program Interface (API).Diese Anwenderschnittstelle ermöglicht dieErstellung von Programmen in C/C++und Fortran, um sie dann in Matlabeinzubinden.Simulink. Simulink � ein Partnerpro-gramm zu Matlab � ist ein blockorien-tiertes, interaktives System zur Simulationlinearer und nichtlinearer dynamischerSysteme. Es handelt sich um ein mausge-steuertes Gra�kprogramm, das ein Modelleines technischen oder physikalischenSystems, das als Blockdiagramm auf demBildschirm darzustellen ist, unter dynami-

10 Copyright c© G. Gramlich

Page 11: EinfMATLAB

schen Einwirkungen nachbildet. Es kannfür lineare, nichtlineare, zeitkontinuierlicheoder zeitdiskrete Prozesse eingesetzt wer-den. Grundlage sind Matlab-Funktionenzur Lösung gewöhnlicher Di�erenzialglei-chungen (DGL-Löser, ODE-Löser).Blocksets sind Ergänzungen zu Simu-link, die weitere Bausteinbibliotheken fürSpezialanwendungen bereitstellen.Stateflow ist eine Erweiterung von Si-mulink zur Simulation ereignisorientierterModelle (Endliche Zustandsautomaten,Finite Sate Machines).Real-time Workshop ist ein Programm,mit dem sich aus den Blockdiagrammen einC-Code bilden läÿt, der von einer Vielzahlvon Echtzeitsystemen abgearbeitet werdenkann.

Wir verwenden den Begri� Funk-tion im Folgenden doppeldeu-tig. Zum Einen sind mathema-tische Funktionen gemeint undzum Anderen handelt es sichum Matlab-Funktionen, also umUnterprogramme. Aus dem Zu-sammenhang sollte aber immerklar sein, um welchen Typ Funk-tion es sich handelt.

2. Was macht den Erfolg vonMatlab aus?

Matlab hat gegenüber der traditionel-len numerischen Programmierung (wie zumBeispiel mit FORTRAN, C/C++ oder demAufruf von numerischen Bibliotheken) fol-

gende Vorteile:

• Matlab verfügt über eine benutzer-freundliche und intuitive Syntax; dieSyntax ist kurz und einfach.

• Die numerischen Programme zeichnensich durch eine hohe Qualität aus.

• In einer eingebauten höheren Program-miersprache lassen sich Algorithmenschnell und leicht realisieren.

• Datenstrukturen erfordern minimaleAufmerksamkeit; zum Beispiel müssenArrays nicht deklariert werrden, bevorman sie benutzt.

• Ein interaktives Arbeiten erlaubt schnel-les experimentieren und leichte Fehlersu-che.

• Matlab verfügt über mächtige, benut-zerfreundliche und qualitativ hochwärti-ge Gra�k- und Visualisierungsmöglich-keiten.

• Matlab m-Files sind für eine groÿeKlasse von Plattformen kompatibel.

• Es bestehen Erweiterungsmöglichkeitendurch Toolboxen (Signalverarbeitung,symbolische Rechnungen usw.).

• Über das Internet sind viele m-Files vonanderen Benutzern zu bekommen.

Wir geben hier nur eine Einführung indie Mächtigkeit von Matlab. Für aus-führlichere Darstellungen bezüglich Mat-lab und Mathematik (numerisch und sym-bolisch) verweise ich Sie auf unser Buch [7]

11 Copyright c© G. Gramlich

Page 12: EinfMATLAB

bzw. auf [9] und [23] und auf die Matlab-Dokumentationen [14, 15, 16, 17].

3. Starten und beenden

Bei vielen kommandoorientierten Rechner-systemen wird Matlab durch das Kom-mando matlab gestartet. Oder � bei gra-�schen Ober�ächen � klickt man nach demStart auf ein entsprechendesMatlab-Icon.Bei manchen Installationen ist es auch mög-lich, dass SieMatlab aus einem Menü her-aus aufrufen können. In jedem Fall soll-ten Sie denMatlab-Prompt � sehen (bzw.EDU�). Mit dem Kommando quit verlassenSie Matlab. Weitere Hinweise �nden Siein den Matlab-Handbüchern. Gegebenen-falls müssen Sie Ihren Systemmanager nachlokalen Installationseigenschaften befragen.

4. Matlab unterbrechen

Mit ctrl-c können Sie Matlab jederzeitunterbrechen.

5. Lange Eingabezeilen

Ist Ihre Eingabezeile lang, so können Siediese mit drei Punkten beenden ... undin der nächste Zeile fortfahren.

>> s = 1+1/2+1/3+1/4+1/5+...

1/6+1/7+1/8+1/9+1/10

s =

2.9290

6. Das help-Kommando

Das help-Kommando ist eine einfache Mög-lichkeit, Hilfe über eine Matlab-Funktionim Kommandofenster zu erhalten. Hierzugibt man help und den Funktionsnamen,das Kommando oder das Symbol ein.

Das folgende Beispiel zeigt, wie man sich In-formationen über die eingebaute Matlab-Funktion sqrt verscha�t.

>> help sqrt

SQRT Square root.

SQRT(X) is the square ...

Au�allend ist, dass in der Erklärung derName der sqrt-Funktion groÿ geschriebenist. Dies dient lediglich dazu, diesen Na-men vom übrigen Text abzusetzen. Derrichtige Name ist sqrt, klein geschrieben.Matlab unterscheidet zwischen Groÿ- undKleinbuchstaben, deshalb liefert die Einga-be help SQRT eine Fehlermeldung.

SQRT.m not found.

Matlab-eigene Funktionsnamenbestehen stets aus Kleinbuchsta-ben. Nur im Hilfetext werden siegroÿ geschrieben.

Das help-Kommando ist nur geeignet,wenn man den Namen der Funktion kennt,zu der man Hilfe sucht. Was aber, wennman ihn nicht kennt?

12 Copyright c© G. Gramlich

Page 13: EinfMATLAB

Alle Matlab-Funktionen sind in logischeGruppen (Themen) eingeteilt, und dieMatlab-Verzeichnisstruktur basiert aufdieser Einteilung. Gibt man help alleineein, so wird diese Gruppierung angezeigt.

>> help

HELP topics

matlab\general - General ...

matlab\ops - Operators ...

matlab\lang - Programming ...

matlab\elmat - Elementary ...

usw.

Mit help elfun (doc elfun) zum Beispielerhalten Sie eine Liste aller elementarer ma-thematische Funktionen in Matlab.

7. Das doc-Kommando

Eine konfortablere Hilfe erhalten Sie mitdem doc-Kommando. Beispielsweise er-halten Sie mit doc sin eine Html-Dokumentation über die sin-Funktion. Mitdoc elfun bekommen Sie eine Liste allerelementaren mathematischen Funktionen,die in Matlab realisiert sind.

8. Demos

Durch den Aufruf

>> demo

wird das Hilfe-Fenster geö�net und Sie kön-nen sich Demos über Matlab und seineToolboxen anschauen. Dort �nden Sie inForm von Video-Tutorials die neuen Fea-tures der neusten Matlab-Version. Wei-tere Info erhalten Sie mit doc demo (helpdemo) oder doc demos (help demos).

9. Das lookfor-Kommando

Basierend auf einem Schlüsselwort kön-nen Sie mit dem lookfor-Kommando nachFunktionen suchen. Dabei wird die ers-te Zeile des help-Textes jeder Matlab-Funktion zurückgegeben, die das entspre-chende Schlüsselwort enthält. Zum Beispielgibt es inMatlab keine Funktion mit demNamen inverse. Somit ist die Antwort auf

>> help inverse

folgende:

inverse.m not found.

Aber der Aufruf

>> lookfor inverse

liefert � in Abhängigkeit der installiertenToolboxen � folgendes:

INVHILB Inverse Hilbert matrix.

IPERMUTE Inverse permute array ...

ACOS Inverse cosine.

ACOSH Inverse hyperbolic cosine.

13 Copyright c© G. Gramlich

Page 14: EinfMATLAB

ACOT Inverse cotangent.

ACOTH Inverse hyperbolic cotangent.

ACSC Inverse cosecant.

ACSCH Inverse hyperbolic cosecant.

ASEC Inverse secant.

ASECH Inverse hyperbolic secant.

ASIN Inverse sine.

ASINH Inverse hyperbolic sine.

ATAN Inverse tangent.

ATAN2 Four quadrant inverse tangent.

ATANH Inverse hyperbolic tangent.

ERFCINV Inverse complementary ...

ERFINV Inverse error function.

INV Matrix inverse.

PINV Pseudoinverse.

IFFT Inverse discrete Fourier

transform.

usw...

Will man, dass alle help-Zeilen durchsuchtwerden, so muss man im Aufruf die Option-all verwenden:

>> lookfor inverse -all

Falls Sie Hilfe zu einem Begri� suchenund den entsprechenden englischen Aus-druck nicht kennen, verwenden Sie ein Wör-terbuch. Auf meiner Homepage �nden Sieeinen Link zu einem Mathematischen Wör-terbuch, das Ihnen weiterhelfen kann, siehehttp://www.rz.fh-ulm.de/~gramlich.

Aufgabe 1 (lookfor-Kommando)Mit welchem Befehl wird das Kommando-fenster (command window) gelöscht?Lösung: Mit dem Aufruf

>> lookfor command

�nden Sie das Kommando clc. Damit wirddas Kommandofenster gelöscht, nicht je-doch der Workspace. © . . . . . . . . . . . . . . . . . .©

10. Einfaches Rechnen

Addition +, Subtraktion -, Multiplikation*, Division / und Potenzieren � sind grund-legende Rechenoperationen. Hier ein paarBeispiele:

>> 3+4

ans =

7

>> 9/3

ans =

3

>> 2^8

ans =

256

Matlab nennt das Ergebnis ans (kurz füranswer).

Geben Sie dem Ergebnis keinenVariablennamen (siehe Abschnitt13), so wählt Matlab standard-mäÿig (default) den Variablenna-men ans.

Schlieÿen Sie die Eingabezeile mit einemStrichpunkt (Semikolon) ab, so rechnetMatlab zwar, unterdrückt aber die Aus-gabe:

14 Copyright c© G. Gramlich

Page 15: EinfMATLAB

>> 1+2;

Im Workspace können Sie erkennen, dassMatlab die Variable ans angelegt hat, denWert der Variablen ans jedoch nicht aus-gibt.

Ein Semikolon am Ende der Ein-gabe unterdrückt die Bildschirm-ausgabe!

11. Welche arithmetischeOperation hat Vorang?

Die arithmetischen Operationen von Mat-lab genügen den gleichen Vorrangsregelnwie in vielen Computersprachen und Ta-schenrechnern. Grob gesprochen gelten dieüblichen Rechenregeln �Punktrechnung vorStrichrechnung�. Die Regeln sind in Tabel-le 1 aufgezeigt (Eine komplette Tabelle füralleMatlab-Operationen zeigt die Tabelle2). Für Operatoren, die auf einer Ebene ste-hen, ist der Vorrang von links nach rechtsgeregelt. Klammern können immer verwen-det werden, um den Vorrang entsprechendabzuändern.

>> 2^10/10

ans =

102.4000

>> 2+3*4

ans =

14

>> -2-3*4

ans =

-14

>> 1+2/3*4

ans =

3.6667

>> 1+2/(3*4)

ans =

1.1667

Aufgabe 2 (Rechnen)Ermitteln Sie das Ergebnis von

>> 3+4/5*6

zunächst mit Bleistift und Papier und über-prüfen Sie es dann mit Matlab.Lösung: Mit den Vorrang-Regeln gilt: 3 +4/5·6 = 3+(4/5)·6 = 3+(0.8·6) = 3+4.8 =7.8. Hier die Bestätigung in Matlab:

>> 3+4/5*6

ans =

7.8000

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 3 (Rechnen)Ermitteln Sie das Ergebnis von

>> 48/3-3^2

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

15 Copyright c© G. Gramlich

Page 16: EinfMATLAB

>> 48/3-3^2

ans =

7

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Priorität Operator1 (höchste) Potenzieren (�)2 Unäres Plus (+)

unäres Minus (-)3 Multiplikation (*)

Division (/)4 (niedrigste) Addition (+)

Subtraktion (-)

Tabelle 1: Vorrang-Tabelle

12. Zahlen und Formate

Matlab verarbeitet Zahlen in der üblichenDezimalschreibweise, wobei wahlweise einDezimalpunkt und ein positives oder nega-tives Vorzeichen verwendet werden können.In der wissenschaftlichen Notation bezeich-net der Buchstabe e eine Skalierung umZehnerpotenzen. Zulässige Zahlen sind zumBeispiel:

4 101 0.0001

9.84757 1.5e-12 8.997

3i -3.4j 4e3i

Alle Zahlen werden intern im double-Format (Langformat) gemäÿ der Spezi�-kation durch die Gleitpunktnorm der Ie-

Priorität Operator1 (höchste) Transponieren (.')

Potenzieren (.�)kongugiert complex (')Matrix-Potenzieren(�)

2 Unäres Plus (+)unäres Minus (-)logische Negation (�)

3 Multiplikation (.*)rechte Division (./)linke Division (.\)Matrix-Multiplikation (*)rechte Matrix-Division (/)linke Matrix-Division (\)

4 Addition (+)Subtraktion (-)

5 Doppelpunktoperator (:)6 Kleiner (<)

kleiner oder gleich (<=)gröÿer (>)gröÿer oder gleich (>=)gleich (==)nicht gleich (�=)

7 Logisches und (&)8 (niedrigste) Logisches oder (|)

Tabelle 2: Vorrang-Tabelle

16 Copyright c© G. Gramlich

Page 17: EinfMATLAB

ee abgespeichert. Matlabs Zahlenausga-be folgt mehreren Regeln. Ist das Ergeb-nis ganzzahlig, so wird eine ganze Zahlausgegeben. Wenn das Ergebnis eine reelleZahl ist, dann gibt Matlab das Resultatstandardmäÿig auf 4 Dezimalen gerundetaus. Ist das Matrixelement gröÿer als 103

oder kleiner als 10−3, so wird es in expo-nentieller Form auf dem Bildschirm darge-stellt. Sollen Zahlen in einem anderen For-mat ausgegeben werden, so hilft das Mat-lab-Kommando format, siehe doc format

(help format). Die Tabelle 3 gibt möglichenumerische Zahlenformate an.

Kommando Beispiel: piformat short 3.1416

format long 3.14159265358979

format bank 3.14

Tabelle 3: Zahlenausgabe in Matlab

13. Variablen und Konstanten

Ein Variablenamen muss mit einem Buch-staben beginnen und darf aus maximal 31Buchstaben, Zahlen und Unterstrichen be-stehen. Ist ein Name länger, so sind nur dieersten 31 Stellen signi�kant. Umlaute sindnicht erlaubt! Erlaubt sind zum Beispiel

MeineVariable Anna x1 X3

z23c1 My_Var

Nicht erlaubt sind

Meine-Variable 2Var $2 &x

Aufgabe 4 (Variablennamen)Wieviel verschiedene Matlab Variablena-men stehen in folgender Zeile?

anna ANNA anNa aNna_anna

Lösung: Vier verschiedene Variablenna-men. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

Achten Sie in Matlab unbedingtauf Groÿ-und Kleinschreibung!

Darüber hinaus gibt es vorde�nierte (vorbe-legte) Variablen, siehe Tabelle 4. Achtung!

Spezielle Variable Bedeutungans Resultat (Default)computer Identi�zierteps Maschinengenauigkeiti Imaginäre EinheitInf, inf In�nityj Imaginäre EinheitNaN Not-a-Numberpi Kreiszahl π ≈ 3.14

Tabelle 4: Spezielle Variablen

Sie können diese spezielle Variablen über-schreiben; vermeiden Sie dies aber, wennimmer möglich.

Vermeiden Sie das Überschreibenspezieller Variablen!

Weitere Infos unter doc elmat (helpelmat) bzw. doc lang (help lang).

17 Copyright c© G. Gramlich

Page 18: EinfMATLAB

14. Komplexe Zahlen

Komplexe Zahlen können wie folgt eingege-ben werden:

>> z1 = 3+4*j, z2 = 1-3i

z1 =

3.0000 + 4.0000i

z2 =

1.0000 - 3.0000i

Wie Sie sehen kann die imaginäre Zahl i =√−1 als i oder j eingegeben werden, wobei

das Multiplikationszeichen * wahlweise ver-wendet werden kann. Die Operatoren +, -, *und / sind bei Verwendung komplexer Zah-len die komplexe Addition, komplexe Sub-traktion, komplexe Multiplikation und diekomplexe Division. Hier zwei Beispiele:

>> z1+z2

ans =

4.0000 + 1.0000i

>> z1*z2

ans =

15.0000 - 5.0000i

Die Wurzel der komplexen Zahl 1 + 2i be-rechnet man mit der Funktion sqrt

>> sqrt(1+2i)

ans =

1.2720 + 0.7862i

Die konjugiert komplexe Zahl zu 1 + 3i ist

>> conj(1+3i)

ans =

1.0000 - 3.0000i

Den Absolutbetrag und Phasenwinkel einerkomplexen Zahl z kann mit abs bzw angle

berechnet werden.

Aufgabe 5 (Komplexe Zahlen)Gegeben ist die komplexe Zahl z = 4i/(1 +i). Wie lautet die zu z konjugiert komple-xe Zahl? Wie groÿ sind Absolutbetrag undPhasenwinkel von z?Lösung:

>> z = 4i/(1+i);

>> conj(z)

ans =

2.0000 - 2.0000i

>> phi = angle(z)*180/pi

phi =

45

>> a = abs(z)

a =

2.8284

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 6 (Komplexe Zahlen)Finden Sie heraus, wie man den Real- undImaginärteil einer komplexen Zahl berech-net. Berechnen Sie dann den Real- und Ima-ginärteil von z = (3 + 2i)/(1− i).Lösung: Mit lookfor complex �ndet mandie Funktionen real und imag. Damit gilt

18 Copyright c© G. Gramlich

Page 19: EinfMATLAB

>> z = (3+2i)/(1-i);

>> real(z), imag(z)

ans =

0.5000

ans =

2.5000

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

15. Ieee-Arithmetik und double

Standardmäÿig ist in Matlab ist derIEEE-Standard 754 mit doppelt genau-er Gleitpunktarithmetik realisiert. So wirdjede Zahl defaultmäÿig in den Datentypdouble konvertiert. Jede Zahl vom Da-tentyp double belegt einen Speicherplatzvon 64 Bits. Von Null verschiedene positi-ve Zahlen liegen daher ungefähr zwischen10−308 und 10+308 und die relative Rechen-genauigkeit (unit roundo�) ist 2−53 ≈ 1.11·10−16. Das wesentliche Merkmal der relati-ven Rechengenauigkeit ist, dass sie eine re-lative Fehlerschranke für das Konvertiereneiner reellen Zahl in eine Gleitpunktdarstel-lung und auch eine Schranke für den rela-tiven Fehler darstellt, der entsteht, wennman zwei Gleitpunktzahlen addiert, sub-trahiert, multipliziert oder dividiert, oderdie Quadratwurzel aus einer Gleitpunktzahlzieht. Grob gesagt: Matlab speichert undführt elementare Rechenoperationen mit ei-ner Genauigkeit von ungefähr 16 Dezimal-stellen durch.

Die Funktion eps (machine precision) gibt

den Abstand von 1.0 zur nächst gröÿerenGleitpunktzahl zurück.

>> eps

ans =

2.2204e-016

Dieser Abstand ist 2−52, also zweimal derrelativen Rechengenauigkeit. Da Matlabden Ieee-Standard realisiert, erzeugt je-de Rechnung eine Gleitpunktzahl, womög-lich aber in einem besonderen Format. Istdas Ergebnis einer Berechnung gröÿer alsrealmax, dann tritt ein Over�ow ein unddas Resultat ist Inf, was für unendlich (in-�nity) steht. Ist das Resultat kleiner als-realmin, so kommt -inf heraus.

>> realmax

ans =

1.7977e+308

>> -1.1*realmax

ans =

-Inf

>> 1.2*realmax

ans =

Inf

Ist eine Rechnung mathematisch nicht de�-niert, so ist das Resultat NaN, was für Not aNumber steht. Die Ausdrücke 0/0, inf/infund 0*inf sind von dieser Art.

>> 0/0

Warning: Divide by zero.

ans =

NaN

19 Copyright c© G. Gramlich

Page 20: EinfMATLAB

>> inf/inf

ans =

NaN

>> 0*inf

ans =

NaN

Hat man einmal ein NaN erzeugt, so p�anztsich dies im Laufe der Rechnung fort.

>> 3+NaN

ans =

NaN

>> NaN-NaN

ans =

NaN

>> 0*NaN

ans =

NaN

Die Funktion realmin gibt die kleinste po-sitive normalisierte Gleitpunktzahl zurück.Jede Rechnung, deren Ergebnis kleiner alsrealmin ist, erzeugt einen Under�ow undwird auf Null gesetzt, wenn sie kleiner alseps*realmin ist oder erzeugt eine nichtnor-male Zahl (subnormal number) mit führen-dem Bit 0 in der Mantisse.

>> realmin

ans =

2.2251e-308

>> realmin*eps

ans =

4.9407e-324

>> realmin*eps/2

ans =

0

Die Funktion computer gibt den Computer-Typ zurück, auf dem Matlab läuft. DerRechner auf dem diese Zeilen und die mat-lab-Codes geschrieben werden, produziertfolgende Ausgabe

>> computer

ans =

PCWIN

16. Nicht double-Datentypen

Auÿer double werden in Matlab auchnoch andere Datentypen zur Verfügung ge-stellt, um Zahlen zu speichern und mit die-sen zu rechnen. Diese sind

• single

• int8 und uint8

• int16 und uint16

• int32 und uint32

Diese Datentypen sind insbesondere dannvorteilhaft, wenn Speicherplatz gespartwerden soll, also zum Beispiel wenn Bildergespeichert und verarbeitet werden sollen(Bildverarbeitung).

Ganzzahlige Datentypen können ganzeZahlen in einem bestimmten Bereich spei-chern. Zum Beispiel ist uint8 ein ganzzah-liger Datentyp der im Speicher acht Bits be-nötigt, um Zahlen im Bereich von 0 bis 255zu spreichern; 28 = 256. Die Tabelle 5 zeigtdie ganzzahligen Datentypen mit Speicher-bedarf und Wertebereich. Die folgende An-

20 Copyright c© G. Gramlich

Page 21: EinfMATLAB

Klasse Speicherbedarf Wertebereichuint8 8 Bit 0 bis 28 − 1int8 8 Bit −27 bis 27 − 1uint16 16 Bit 0 bis 216 − 1int16 16 Bit −215 bis 215 − 1int32 32 Bit −231 bis 231 − 1uint32 32 Bit 0 bis 232 − 1

Tabelle 5: Ganzzahlige Datentypen

weisung erzeugt die Variable x vom Daten-typ uint8 und ordnet ihr die Zahl 7 zu.

>> x = uint8(7)

x =

7

Hier ein paar Rechnungen:

>> x+4

ans =

11

>> x+pi

ans =

10

>> x+253

ans =

255

>> x+254

ans =

255

>> x-8

ans =

0

>> x-9

ans =

0

Die Rechnungen zeigen mehrere Eigen-schaften. Das Ergebnis ist stets vom Daten-typ uint8 auch dann, wenn eine double-Zahl hinzuaddiert wird. Diese wird zuvorgerundet. Wird die gröÿte Zahl 255 über-schritten, so wird das Ergebnis gleich diesergröÿten Zahl Zahl gesetzt. Analog verhältes sich, wenn das Ergebnis kleiner als Nullist.

Aufgabe 7 (int8-Rechnungen)Finden Sie heraus, wie eine double-Zahl aufden Datentyp int8 gerundet wird.Lösung: Die Rechnungen

>> int8(3.6)

ans =

4

>> int8(3.5)

ans =

4

>> int8(3.4)

ans =

3

>> int8(-3.5)

ans =

-4

zeigen die Antwort.Matlab rundet auf dienächste ganze Zahl. Liegt die Zahl in derMitte, so wird aufgerundet, falls die Zahlpositiv und abgerundet, falls die Zahl ne-gativ ist. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

Mit den Funktionen intmax und intmin

können Sie die gröÿte bzw. kleinste Zahl desjeweiligen Datentyps ermitteln.

21 Copyright c© G. Gramlich

Page 22: EinfMATLAB

>> intmax('int32')

ans =

2147483647

Um eine Zahl mit dem Datentyp single

zu speichern, braucht man nur halb so vielSpeicher wie mit dem Datentyp double.Dies zeigen die folgenden Zeilen.

>> a = single(5);

>> b = 5;

>> whos

Name Size Bytes Class

a 1x1 4 single array

b 1x1 8 double array

single-Zahlen können mit double-Zahlenverknüpft werden. Das Ergebnis ist single.

>> single(4.1)+double(3)

ans =

7.1000

>> whos

Name Size Bytes Class

ans 1x1 4 single array

Ganzahlige und single-Datentypen können nicht ver-knüpft werden.

Siehe doc datatypes, [16], [19] und Ab-schnitt 66 für weitere Informationen.

17. Eine Sitzung aufzeichnen

Das Kommando

>> diary MeineSitzung

sorgt dafür, dass der nachfolgendeBildschirmtext komplett in der DateiMeineSitzung aufgezeichnet wird. DieAufzeichung können Sie anhalten, wennSie diary off eingeben. MeineSitzung istnur eine Beispieldatei; sie können selbst-verständlich jeden zulässigen Dateinamenangeben.

18. Vektoren

Vektoren (Zeilen- oder Spaltenvektoren)sind spezielle Matrizen. Zeilenvektoren sind(1, n)-Matrizen und Spaltenvektoren sind(m, 1)-Matrizen. Aussagen über Matrizensind demnach auch für Vektoren inter-essant. Wir verweisen auf Abschnitt 20;dort werden Matrizen und somit auch Vek-toren ausführlich behandelt. Da Matrizen(und somit Vektoren) grundlegende Bau-steine vonMatlab sind, emp�ehlt sich, be-reits hier etwas darüber zu sagen.

Nehmen wir an, wir möchten Werte vondem Quadratwurzelterm

√x berechnen, sa-

gen wir, für die Zahlen x = 0, 2, 4, 6, 8, 10.Hier kommt uns Matlab sehr entgegen.Wir fassen die x-Werte zu einem Zeilenvek-tor (eindimesionales Array, Liste) zusam-men:

>> x = [0 2 4 6 8]

22 Copyright c© G. Gramlich

Page 23: EinfMATLAB

x =

0 2 4 6 8

Vektoren werden in eckigen Klammern(brackets) eingegeben. Die einzelenen Ele-mente (Koordinaten) des Vektors sind da-bei durch Leerzeichen oder Kommas zutrennen. Die Funktionswerte für die einzel-nen Werte von x müssen nun nicht einzelnberechnet werden, sondern können alle aufeinmal mit

>> y = sqrt(x)

y =

0 1.4142 2.0000 2.4495

2.8284

erhalten werden. Die Matlab-Funktionsqrt angewendet auf einen Vektor x gibtnämlich die Anweisung: Nimm von jedemElement von x die Wurzel und schreib dasErgebnis als entsprechendes Element ei-nes neuen Vektors (hier y genannt). Manspricht von vektorielle Auswertung oder all-gemein: In Matlab kann man vektoriellprogrammieren! Diese einfache Art, einenBefehl (hier das Wurzelziehen) elementwei-se anzuwenden, ist eine groÿe Stärke vonMatlab. 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: Beginnemit 0 und zähle 2 dazu, dann zähle wieder2 dazu, usw. bis die Grenze 8 erreicht ist.Diese Anweisung ist bei der Eingabe vonVektoren mit vielen Elementen sehr nütz-lich.

Aufgabe 8 (Vektoren erzeugen)Erzeugen Sie einen Zeilenvektor mit der ers-ten Koordinate 29 und der letzten 1, wobeisich die Koodinaten absteigend um 2 unter-scheiden sollen.Lösung: Dies kann man wie folgt erreichen:

>> x = 29:-2:0

x =

Columns 1 through 11

29 27 25 usw.

Columns 12 through 15

7 5 3 1

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Ist die Schrittweite gleich 1, so kann mandie Angabe der Schrittweite weglassen.Für weiter Informationen zu diesem Dop-pelpunktoperator, siehe doc colon (helpcolon). Siehe auch doc ops (help ops).

Aufgabe 9 (Vektoren erzeugen)Geben Sie die Vektoren a und b mit denElementen −10,−8, . . . , 10 und 10, 9, 8, . . .mit kurzen Anweisungen ein.Lösung: Das geht wie folgt:

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

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 10 (Vektoren erzeugen)Erzeugen Sie einen Vektor y, der die Funk-tionswerte des natürlichen Logarithmus anden Stellen 1, 3, 5, 7 enthält. Was ist y(1)?Lösung: Das geht wie folgt:

23 Copyright c© G. Gramlich

Page 24: EinfMATLAB

>> x = 1:2:7;

>> y = log(x)

y =

0 1.0986 1.6094 1.9459

y(1) ist die erste Koordinate des Vektors y,also y(1)=0. © . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Mit der Funktion linspace können Vekto-ren erzeugt werden, indem man den Wertder ersten, letzten, sowie die Anzahl derKomponenten (drittes Argument im Auf-ruf) vorgibt. Mit dem Doppelpunktopera-tor : ist es dagegen möglich, die Schrittwei-te direkt anzugeben, nicht aber die Anzahlder Koordinaten. Sind a und b reelle Zahlen,dann erzeugt x = linspace(a,b,n) einenZeilenvektor x der Länge n mit den Ko-ordinaten xk = a + (b − a) · k−1

n−1 , wobeik = 1, . . . , n ist.

>> x = linspace(1,2,3)

x =

1.0000 1.5000 2.0000

>> x = linspace(10,40,4)

x =

10 20 30 40

>> x = linspace(1,1.2,3)

x =

1.0000 1.1000 1.2000

>> x = linspace(0,1,3)

x =

0 0.5000 1.0000

Mit der Funktion logspace ist es mög-lich, einen Vektor zu erzeugen, dessen Kom-ponenten logarithmischen Abstand haben.

Allgemein ist x = logspace(a,b,n) äqui-

valent zu xk = 10a+(b−a)· k−1n−1 , wobei k =

1, . . . , n und a, b reelle Zahlen sind.

>> x = logspace(-2,2,4)

x =

0.0100 0.2154 4.6416 100.0000

>> x = logspace(1,3,3)

x =

10 100 1000

Zusammenfassend gilt: Vektoren könnenauf drei Arten erzeugt werden:

• Wir geben die Koordinaten explizit ein.

• Wir verwenden eingebaute Matlab-Operatoren oder Funktionen, wie zumBeispiel: : oder linspace.

• Wir lesen einen entsprechenden Daten�leein, siehe Abschnitt 32.

19. Vektoroperationen

Vektoren sind spezielle Matrizen. Für Vek-toroperationen verweise ich Sie daher aufAbschnitt 21.

20. Matrizen

Ein rechteckiges Zahlenschema mit m Zei-len und n Spalten heiÿt (m,n)-Matrix. Esist üblich, eine Matrix in eckige oder rundeKlammern zu setzen; wir wählen eckige. Ist

24 Copyright c© G. Gramlich

Page 25: EinfMATLAB

m = 2 und n = 3, so liegt eine (2, 3)-Matrixvor, zum Beispiel

A =[

1√

2 −27 −3 π

].

Die Matrix A können wir nun Zeile für Zeilewie folgt in Matlab eingeben

>> A = [1 sqrt(2) -2; 7 -3 pi]

A =

1.0000 1.4142 -2.0000

7.0000 -3.0000 3.1416

Die Zeilen werden durch ein Semikolon unddie Spalten durch ein Leerzeichen getrennt.Spalten können auch durch ein Komma ge-trennt werden. Besteht eine Matrix nur auseiner Zeile, so liegt eine Zeilenmatrix bzw.ein Zeilenvektor vor. Analog spricht manvon einer Spaltenmatrix bzw. von einemSpaltenvektor, wenn die Matrix nur eineSpalte hat. Eine Zeilenmatrix hat die Gröÿe(1, n) und eine Spaltenmatrix (m, 1).

Will man nun einzelne Elemente der Ma-trix A ändern, so kann dies auf zwei Artengeschehen. Die Anweisung A(1,3) = 5 än-dert zum Beispiel das Elemente a13 = −2der Matrix A zu a13 = 5 ab. Eine zweiteMöglichkeit dies zu tun besteht darin, denWorkspace-Browser zu verwenden und dasSymbol für die Matrix A anzuklicken. DerArray-Editor wird geö�net und Sie könnendie Elemente interaktiv ändern.

Besteht eine Matrix nur aus einer Zeile, soliegt eine Zeilenmatrix bzw. ein Zeilenvek-tor vor. Einen Zeilenvektor mit Zahlen glei-chen Abstands kann man zum Beispiel wiefolgt erzeugen

>> x = 2:6

x =

2 3 4 5 6

Die Schrittweite muss nicht notwendiger-weise Eins sein. Im folgenden Beispiel istdie Schrittweite 0.2:

>> x = 1.3:0.2:1.8

x =

1.3000 1.5000 1.7000

Mit der Funktion size können Sie stets dieGröÿe einer Matrix bestimmen.

>> size(A)

ans =

2 3

Macht man bei einer Matrix A aus denZeilen Spalten und aus den Spalten Zeile,so entsteht die transponierte Matrix AT.In Matlab erreicht man dies mit dem '-Operator.

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

A =

1 2 3

4 5 6

ans =

1 4

2 5

3 6

Nützliche und häu�g verwendete Matrizenstellt Matlab als eingebaute Funktionen

25 Copyright c© G. Gramlich

Page 26: EinfMATLAB

zur Verfügung; man muss nur die Gröÿe an-geben. Die Funktion ones erzeugt eine Ma-trix mit lauter Einsen.

>> ones(2,3)

ans =

1 1 1

1 1 1

Die Nullmatrix wird mit der Funktionzeros erzeugt.

>> Z1 = zeros(3,2)

Z1 =

0 0

0 0

0 0

>> Z2 = zeros(size(A))

Z2 =

0 0 0

0 0 0

Eine (n, n)-Matrix heiÿt quadratische Ma-trix; dann genügt ein Argument, um zumBeispiel die (3, 3)-Einheitsmatrix mit derFunktion eye zu erzeugen.

>> eye(3)

ans =

1 0 0

0 1 0

0 0 1

Diagonalmatrizen werden mit der Funktiondiag erzeugt.

>> D = diag([1 2 3])

D =

1 0 0

0 2 0

0 0 3

Ist A eine (m,n)-Matrix und x ein n-Spaltenvektor, so ist das Matrix-Vektor-Produkt Ax de�niert.

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

>> A*x

ans =

1

11

Die Operatoren + und - können eingesetztwerden, um Matrizen miteinander zu addie-ren bzw. zu subtrahieren.

Skalare sind (1, 1)-Matrizen.

Mit doc elmat (help elmat) erhalten Sieviele Infos rund um Matrizen; unter doc

ops (help ops) sind die Operatoren zu �n-den.

Aufgabe 11 (Diagonalmatrizen)Erzeugen Sie eine Diagonalmatrix mit 1, 2,3, 4 und 5 auf der Diagonalen!Lösung:

>> diag([1 2 3 4 5])

ans =

1 0 0 0 0

0 2 0 0 0

0 0 3 0 0

0 0 0 4 0

0 0 0 0 5

26 Copyright c© G. Gramlich

Page 27: EinfMATLAB

Aufgabe 12 (Dreiecksmatrizen)Erzeugen Sie eine 6×6 obere (untere) Drei-ecksmatrix mit Zufallszahlen zwischen 0und 1!Lösung:

>> triu(rand(6))

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 13 (Symmetrische Matrizen)Erzeugen Sie eine 10×10 symmetrische Ma-trix S mit Zufallswerten zwischen 0 und 8!Lösung:

>> A = 4*rand(8);

>> A+A';

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 14 (Matrizen)Wir betrachten die folgende Matrix A:

A =

5.5 0.4 3.19.4 5.5 3.3

−0.3 4.6 −4.30.4 −4.6 9.05.0 5.5 7.7

.

Geben Sie die Ordnung (Gröÿe) dieser Ma-trix an! Wie kann man inMatlab die Grö-ÿe von A bestimmen? Geben Sie alle Indi-zes an, deren Matrixelemente 5.5 sind.Lösung: Die Ordnung der Matrix A ist(5, 3). Mit der Funktion size kann man dieOrdnung in Matlab bestimmen. Die Indi-zes sind: 1, 1, 2, 2 und 5, 2. © . . . . . . . . . . . . ©

Aufgabe 15 (Matrizen)Gegeben sei die folgende Matrix A:

A =

5.5 0.4 3.19.4 5.5 3.3

−0.3 4.6 −4.30.4 −4.6 9.05.0 5.5 7.7

.

Was ist A(:,2), A(3,:), A(4:5,2:3)?Überprüfen Sie Ihr Resultat in Matlab.Lösung: A(:,2) ist die zweite Spalteund A(3,:) ist die dritte Zeile von A.A(4:5,2:3) ist die Untermatrix[

−4.6 9.05.5 7.7

].

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 16 (Matrizen, Vektoren)Geben Sie jeweils den Vektor c an, nach-dem Sie die folgenden Operationen ausge-führt haben. Überprüfen Sie Ihre Ergebnis-se in Matlab.

a = [2 -1 5 0];

b = [3 2 -1 4];

(a) c = b+a-3;

(b) c = a./b;

(c) c = 2*a+a.�b;

(d) c = 2.�b+a;

(e) c = 2*b/3.*a;

27 Copyright c© G. Gramlich

Page 28: EinfMATLAB

Aufgabe 17 (Matrizen)Erzeugen Sie mit der Matlab-Funktionrand eine 5 × 5-Zufallsmatrix A. Welchessind die Werte der folgenden Ausdrücke?Überlegen Sie sich die Resultate, bevor Siedie Rechnung am Computer durchführen.

A(2,:) A(:,1)

A(:,5) A(1,1:2:5)

A([1,5]) A(4:-1:1,5:-1:1)

Aufgabe 18 (Matrizen)Gegeben seien die folgenden Matrizen:

A =

0 −1 0 34 3 5 01 2 3 0

und

B =

1 3 5 03 6 9 124 3 2 11 2 3 4

.

Bestimmen Sie die Rückgabewerte undüberprüfen Sie diese dann in Matlab.

(a) rot90(B)

(b) rot90(A,3)

(c) fliplr(A)

(d) reshape(A,4,3)

(e) triu(B)

(f) diag(rot90(B))

21. Matrizenoperationen

Beachten Sie im folgenden stets, dass Vek-toren und Skalare spezielle Matrizen sind!

Die Tabelle 6 zeigt Matrizenoperationen inMatlab.

Symbol Operation+ Addition- Subtraktion* Multiplikation� Potenzieren

Tabelle 6: Matrizenoperationen in Mat-lab

Wenn Sie zwei Matrizen multiplizieren, sogeht geht das natürlich nur dann, wenn dieMulitplikation de�niert ist, das heiÿt dieMatrizen die entsprechenden Gröÿen ha-ben.

>> A = [1 2 4; 2 6 0];

B = [4 1 4 3; 0 -1 3 1; ...

2 7 5 2];

A*B

ans =

12 27 30 13

8 -4 26 12

Analog für die anderen Operationen.Manchmal ist es notwendig, Matrizen ele-mentweise zu multiplizieren (Hadamard-Produkt), dann hilt der .*-Operator.

>> C = [1 2; 3 4];

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

28 Copyright c© G. Gramlich

Page 29: EinfMATLAB

>> C.*D

ans =

5 12

21 32

Andere Operatoren, die elementweise arbei-ten, sind ./ (rechte Division), .\ (rechteDivision) und .� (Potenzieren).

Weitere Infos mit doc ops (help ops).

Aufgabe 19 (Direktes Produkt)Berechnen Sie in Matlab das direkte Pro-dukt von

A =

1 2 33 1 −25 −1 0

und

B =

1 3−1 5

2 −2

.

Lösung: Das direkte Produkt ist auch un-ter dem Namen Kronecker-Produkt be-kannt und kann mit der Funktion kron be-rechnet werden.

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

>> B = [1 3; -1 5; 2 -2];

>> kron(A,B)

ans =

1 3 2 6 3 9

-1 5 -2 10 -3 15

2 -2 4 -4 6 -6

3 9 1 3 -2 -6

-3 15 -1 5 2 -10

6 -6 2 -2 -4 4

5 15 -1 -3 0 0

-5 25 1 -5 0 0

10 -10 -2 2 0 0

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 20 (Matrizenoperationen)Es seien A, B, C und D nachfolgend de�-nierte Matrizen.

A =

1 32 43 1

B =

−1 24 −27 −1

C =[

1 5−5 3

]und

D =

4 3 −21 0 52 −1 6

.

Berechnen Sie zunächst per Hand folgen-de Matrizenalgebra. Geben Sie die Matri-zen dann in Matlab ein und vergleichenSie die jeweiligen Resultate.

(a) A + B

(b) B + C

(c) DA

(d) 2A− 3B

(e) AT

(f) C2

Lösung:

29 Copyright c© G. Gramlich

Page 30: EinfMATLAB

(a) >> A+B

ans =

0 5

6 2

10 0

(b) B + C ist nicht de�niert.

(c) >> D*A

ans =

4 22

16 8

18 8

(d) >> 2*A-3*B

ans =

5 0

-8 14

-15 5

(e) >> A'

ans =

1 2 3

3 4 1

(f) >> C^2

ans =

-24 20

-20 -16

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 21 (Matrizenoperationen)Die nachfolgenden Regeln der Matrizenal-gebra sehen so aus wie die der reellen Zah-

len. Trotzdem sind einige davon falsch. Be-nutzen Sie Matlab, um die falschen her-auszu�nden, und geben Sie für jede falscheRegel ein Gegenbeispiel.

(a) A + B = B + A

(b) AB = BA

(c) Falls AB = O ist, dann ist A = Ooder B = O.

(d) Falls A2 = O ist, dann ist A = O.

(e) (A + B)2 = A2 + 2AB + B2

(f) (A−B)(A + B) = A2 −B2

(g) A(B + C) = AB + AC

(h) (A + B)C = CA + CB

(i) (AB)2 = A2B2

Aufgabe 22 (Matrizenoperationen)Warum gibt es in Matlab keinen .+-Operator?Lösung: Die Matrizenaddition ist bereitselementweise de�niert. © . . . . . . . . . . . . . . . . ©

Aufgabe 23 (Matrizenoperationen)Es seien zwei Vektoren a und b wie folgtde�niert:

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

Führen Sie die folgenden Matlab-Operationen durch. Welche sind de�niertund welche nicht? Erklären Sie! Was sinddie Resultate?

30 Copyright c© G. Gramlich

Page 31: EinfMATLAB

a + b a' + b

a + b' a' + b'

a - b a' - b

a - b' a' - b'

a * b a' * b

a * b' a' * b'

a \ b a' \ b

a \ b' a' \ b'

a .* b a' .* b

a .* b' a' .* b'

a .\ b a' .\ b

a .\ b' a' .\ b'

Aufgabe 24 (Matrizenoperationen)Was ist 00 in Matlab?Lösung: Es ist 00 = 1 in Matlab. © . . . .©

22. Rundungsfunktionen

In Matlab gibt es die folgenden Funktio-nen:

ceil(x) Rundet x zur nächsten ganzenZahl auf (Runden nach Unendlich).

fix(x)Wählt von x den ganzzahligen An-teil (Runden nach Null).

floor(x) Rundet x zur nächsten ganzenZahl ab (Runden nach minus Unend-lich).

round(x) Rundet x zur nächsten ganzenZahl.

Aufgabe 25 (Rundungsfunktionen)Berechnen Sie die folgenden Ausdrücke perHand und überprüfen Sie Ihre Ergebnissemit Matlab.

(a) round(-2.6)

(b) fix(-2.6)

(c) floor(-2.6)

(d) ceil(-2.6)

(e) floor(ceil(10.8))

Zeichnen Sie die Funktionen im Intervall[−3, 3]!Lösung:

>> round(-2.6), fix(-2.6),

ans =

-3

ans =

-2

>> floor(-2.6), ceil(-2.6),

ans =

-3

ans =

-2

>> floor(ceil(-2.6))

ans =

-2

Wir zeichnen die Funktion round.

>> x = linspace(-3,3,1000);

>> y = round(x);

>> plot(x,y)

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

31 Copyright c© G. Gramlich

Page 32: EinfMATLAB

23. Weitere Funktionen

In den nachfolgenden Übungsaufgaben stel-len wir weitere Funktionen vor.

Aufgabe 26 (Funktionen)Gegeben seien die Vektoren

x = [0 3 -2 7];

y = [3 -1 5 7];

und die Matrix

A = [1 3 7; 2 8 4; 6 -1 -2];

Bestimmen Sie folgende Ausdrücke, zu-nächst mit Bleistift und Papier, danach mitMatlab.

max(x); min(A);

min(x,y); mean(A);

median(x); cumprod(A);

sort(2*x+y); sort(A);

Lösung: Es ist

>> max(x)

ans =

7

>> min(A)

ans =

1 -1 -2

>> min(x,y)

ans =

0 -1 -2 7

>> mean(A)

ans =

3.0000 3.3333 3.0000

>> median(x)

ans =

1.5000

>> cumprod(A)

ans =

1 3 7

2 24 28

12 -24 -56

>> sort(2*x+y)

ans =

1 3 5 21

>> sort(A)

ans =

1 -1 -2

2 3 4

6 8 7

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 27 (Matlab-Funktionen)Bestimmen Sie die Werte der folgendenAusdrücke. Überprüfen Sie Ihre Ergebnis-se dann in Matlab.

B =

1 0 40 0 38 7 0

(a) any(B)

(b) find(B)

(c) all(any(B))

(d) any(all(B))

(e) finite(B(:,3))

(f) any(B(1:2,1:3))

32 Copyright c© G. Gramlich

Page 33: EinfMATLAB

Lösung:

>> any(B)

ans =

1 1 1

>> find(B)

ans =

1

3

6

7

8

>> all(any(B))

ans =

1

>> any(all(B))

ans =

0

>> finite(B(:,3))

ans =

1

1

1

>> any(B(1:2,1:3))

ans =

1 0 1

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

24. Zweidimensionale Arrays

Wir zeigen ein paar nützliche Oprationenmit zweidimensionalen Arrays (Matrizen).Dabei stehen nicht mathematische Opera-tionen im Vordergrund, sondern das daten-technische, e�ziente Arbeiten mit zweidi-

mensionalen Arrays. Die folgenden Funk-tionen sind dabei von besonderem Interesse:circshift, fliplr flipud, reshape, cat,horzcat, vertcat, blkdiag und repmat.

24.1. Zeile löschen

Löschen Sie von der Matrix

A =

1 2 34 5 67 8 9

die zweite Zeile.

>> A = [1 2 3; 4 5 6; 7 8 9];

>> A(2,:) = []

A =

1 2 3

7 8 9

24.2. Gröÿtes Element bestimmen

Bestimmen Sie von der Matrix

A =

1 2 34 5 67 8 9

das gröÿte Element.

>> A = [1 2 3; 4 5 6; 7 8 9];

>> max(max(A))

ans =

9

33 Copyright c© G. Gramlich

Page 34: EinfMATLAB

24.3. Aus Matrizen Vektoren machen

Machen Sie aus der Matrix

A =

1 2 34 5 67 8 9

einen spaltenweise einen Spaltenvektor.

>> A = [1 2 3; 4 5 6; 7 8 9];

>> s = A(:)

s =

1

4

7

2

5

8

3

6

9

Machen Sie aus der Matrix

A =

1 2 34 5 67 8 9

einen zeilenweise einen Spaltenvektor.

>> A = [1 2 3; 4 5 6; 7 8 9];

>> AT = A';

>> s = AT(:)

s =

1

2

3

4

5

6

7

8

9

24.4. Zeilen-/Spaltentausch

Vertauschen Sie von der Matrix

A =

1 2 34 5 67 8 9

die letzte mit der ersten Zeile.

>> A = [1 2 3; 4 5 6; 7 8 9];

>> circshift(A,1)

ans =

7 8 9

1 2 3

4 5 6

Spiegeln Sie von der Matrix

A =

1 2 34 5 67 8 9

die Spalten.

>> A = [1 2 3; 4 5 6; 7 8 9];

>> fliplr(A)

ans =

3 2 1

6 5 4

9 8 7

34 Copyright c© G. Gramlich

Page 35: EinfMATLAB

24.5. Ordnungen ändern

Bilden Sie von der Matrix

A =

1 2 34 5 67 8 9

eine neue (2, 4)-Matrix. Das geht nur wenndie Eingangsmatrix genau so viele Elemen-te hat wie die Ausgangsmatrix. Ist dies derFall, so hilft die Funktion reshape.

24.6. Blockmatrizen

Die Funktionen cat, horzcat, vertcat,blkdiag und repmat erlauben es, Matrizenzu Blockmatrizen zusammen zu fügen.

25. Vektorieller Programmierung

Eine der groÿen Vorzüge von Matlab be-steht darin, dass man Ausdrücke vektoriellprogrammieren und so auf Schleifen weit-gehend verzichten kann. Was ist damit ge-meint? Wir zeigen die Idee am Besten an ei-nem einfachen Beispiel. Will man zum Bei-spiel den Funktionsterm y = x2 im Punktx = 1.4 auswerten, so geht das wie folgt

>> x = 1.4;

>> y = x^2;

und in der Variablen y ist der Wert 1.96 ge-speichert. Will man nun aber zum Beispielin hundert verschiedenen x-Werten die ent-sprechenden y-Werte (ein Vektor mit 100

Koordinaten) berechnen, so braucht manin Matlab keine Schleife, sondern kanngleichzeitig alle hundert y-Werte ausrech-nen, indem man den �.-Operator verwen-det, der die Potenzierung zweier Matrizen(Vektoren) elementweise durchführt. Hierein Beispiel mit der gleichen Funktionsglei-chung y = x2 wie oben:

>> x = linspace(0,3,100);

>> y = x.^2;

In der ersten Anweisung werden hundert x-Werte (ein Vektor mit hundert Koordina-ten) erzeugt (hundert äquidistante Punk-te im Intervall [0, 3]) und in der zweitenAnweisung wird der Vektor y mit hundertKoordinaten generiert, der die entsprechen-den Funktionswerte enthält. Diese Vorge-hensweise hat den Vorteil, dass man aufSchleifen verzichten kann und auÿerdemeinen übersichtlicheren Programmcode er-hält. Eingebaute Matlab-Funktionen er-lauben als Eingabeparameter fast immerVektoren. Daher gilt:

Programmieren Sie vektoriell,wenn immer dies möglich ist!

Der Befehl vectorize kann in der einoder anderen Situation hilfreich sein, siehedoc vectorize (help vectorize). In Ab-schnitt 41 gehen wir auf diese Thematiknochmals ausführlicher ein.

Aufgabe 28Berechnen Sie e−x2

in 200 äquidistantenPunkten zwischen -3 und 3 und speichern

35 Copyright c© G. Gramlich

Page 36: EinfMATLAB

Sie die Werte in der Variablen y.Lösung: Hier ein möglicher Lösungsweg:

>> x = linspace(-3,3,200);

>> y = exp(-x.^2);

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

26. Der Path Browser

Matlab ermittelt die Art, in der die aufge-rufenen Funktionen auszuführen sind, übereinen Suchpfad, das ist eine geordnete Lis-te von Verzeichnissen. Mit dem Kommandopath erhält man die aktuelle Liste von Ver-zeichnissen, in denen Matlab sucht. Die-ser Befehl kann auch dazu verwendet wer-den, um Verzeichnisse aus dem Suchpfadzu löschen oder anzuhängen. Mit dem PathBrowser kann der Pfad bequem geändertoder ausgegeben werden. Falls Sie ein Win-dows Betriebssystem verwenden, so könnenSie den Path Browser über die Schalt�ä-che des Kommandofensters, über Set Pathim Menü File oder über das Kommandopathtool ö�nen.

27. Der Workspace Browser

Sie können den Workspace Browser ver-wenden, um sich den aktuellen Inhalt desWorkspace anzuschauen. Dieser stellt einegra�sche Darstellung des whos Kommandosdar. Falls Sie ein Windows Betriebssystemverwenden, so können Sie den Workspace

Browser über die Schalt�äche des Komman-dofensters, über Show Workspace im MenüFile oder über das Kommando workspace

ö�nen.

28. Den Workspace verwalten

Mit dem Befehl who kann man heraus-�nden, welche Variablen momentan imWorkspace gespeichert sind. Um Daten zusichern kann man die Funktion save ver-wenden. Mit load kann man gespeicherteDaten in den Workspace laden. Die Tabelle7 zeigt weitere Funktionen zum Verwaltendes Workspaces.

Funktion Beschreibungclear Löscht Variablenclear all Löscht allesload Daten ladensave Daten speichernwho Zeigt Variablenwhos Zeigt mehr als who

Tabelle 7: Workspace verwalten

Aufgabe 29 (Workspace verwalten)Angenommen Sie möchten die Variablen a

und b aus dem Workspace löschen. Wiegeht das?Lösung: Dies können Sie mit clear a undclear b tun. Falls Sie sich Tipparbeit spa-ren wollen, geben Sie clear a b ein. Hilfeerhalen Sie mit doc clear (help clear). ©©

36 Copyright c© G. Gramlich

Page 37: EinfMATLAB

29. Den Datenträger verwalten

Die Funktionen aus der Tabelle 8 zeigenMöglichkeiten, wie man den Datenträgerverwalten kann.

Kommando Beschreibungcd Verzeichnis wechselncd oder pwd Zeigt Verzeichnispfaddelete Löscht Filenamedir oder ls Zeigt Filesexist Überprüft Existenzmatlabroot Zeigt Matlab-Wurzeltype Typewhat M, mat und mex-Fileswhich Lokalisiert Funktionen

Tabelle 8: Den Datenträger verwalten

30. Wie man mit Matlab

Systeminformationen erhält

Die Tabelle 9 zeigt Matlab-Funktionen,

Funktion Beschreibungcomputer Typ des Rechnershostid Identi�kationsnummerlicense Lizenznummer

Tabelle 9: Systeminformationen

die man verwenden kann, um Informatio-nen über den eigenen Computer zu erhal-ten.

31. Neuigkeiten und Versionen

Weitere Informationen und Demonstratio-nen zu Matlab �nden Sie in Tabelle 10.

Funktion Beschreibungbench Benchmarksver Versionenversion Versionsnummerwhatsnew Release Notes

Tabelle 10: Weitere Infos

32. Dateien lesen und schreiben

InMatlab kann man Daten- bzw. Textda-teien lesen und schreiben. Hierbei könnenSie zwischen binärem Matlab- und les-barem Ascii-Format wählen. Binärdateienhaben gegenüber Ascii-Dateien die Vortei-le, dass sie weniger Speicherplatz benötigenund schneller gelesen und beschrieben wer-den können. Ihr Nachteil ist, daÿ sie nichtleicht mit einem Editor gelesen werden kön-nen.

Für das Lesen und Schreiben in Ascii-Format gibt es die high-level Befehle load

und save und die low-level Funktionenfscanf und fprintf. Für das Lesen undSchreiben im Binärformat stehen wieder diehigh-level Befehle load und save und dielow-level Funktionen fread und fwrite zurVerfügung.

Binärdateien werden im sogenannten mat-Format abgespeichert. Die low-level Funk-

37 Copyright c© G. Gramlich

Page 38: EinfMATLAB

tionen können �exibler eingesetzt werden.Sie sind an die Programmiersprache Cangelehnt. Die Tabelle 11 fasst Funktio-nen zum Lesen und Schreiben von Datei-en zusammen, siehe auch doc iofun (helpiofun).

Funktion Ascii binärload × ×save × ×fscanf ×fprintf ×fread ×fwrite ×

Tabelle 11: Dateien lesen und schreiben

33. Function Functions

In Matlab hat sich der Begri� functi-on function eingebürgert. Damit ist eineMatlab-Function gemeint, die ihrerseitsals Eingabeargument eine Function benö-tigt. (Matlab-Functions werden wir nochausfrührlich behandeln). Ein Beispiel einerFunction Function ist fplot, mit der manGraphen von mathematischen Funktionenzeichnen kann. Diese Function benötigt alserstes Eingabeargument eine Function. Wirzeigen die Arbeitsweise an einem Beispiel.

Geplottet werden soll die Funktion f(x) =x2, x ∈ R im Intervalle [−2, 2]. Diese kannin Matlab durch

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

de�niert werden. Der Aufruf

>> fplot(f,[-2,2])

zeichnet dann die Funktion im Intervallevon −2 bis 2. Man sieht, dass das erste Ar-gument von fplot selbst eine Funktion ist,nämlich in diesem Fall die selbstde�nierteFunktion f(x) = x2, x ∈ R. Für eingebauteFunktionen entfällt natürlich deren De�ni-tion. Hier ein Beispiel mit der eingebautenSinusfunktion sin. Die nachfolgende Zeileplottet die Sinusfunktion im Intervall von−3 bis 3:

>> fplot(@sin,[-3,3])

Andere Function Functions sind zum Bei-spiel fzero, quad, ode45, usw. Wir wer-den diese und andere Funktionen in denspäteren Abschnitten ausführlicher bespre-chen. Alle Function Functions sind im Ver-zeichnis funfun untergebracht, siehe doc

funfun (help funfun).

34. Mathematische Funktionen

Matlab verfügt über viele mathematischeFunktionen, zum Beispiel über die trigono-metrischen Funktionen sin, cos oder tan.Ihre Arumente werden im Bogenmaÿ (Ra-diant, rad) erwartet. Liegen die Werte inGrad (◦) (Gradmaÿ) vor, so sind die Funk-tionen sind, cosd und tand zu verwenden.Für die anderen trigonometrischen Funk-tionen gilt entsprechendes, siehe doc elfun

(help elfun).

38 Copyright c© G. Gramlich

Page 39: EinfMATLAB

Die nachfolgenden Zeilen bestätigen die Er-gebnisse cos(π/2) = 0 und cos(90◦) = 0.

>> cos(pi/2)

ans =

6.1232e-017

>> cosd(90)

ans =

0

Aufgabe 30 (Trigonometrische F.)Bestätigen Sie die Tabelle

x 0 1/2π π 3/2π 2π

cos x 1 0 −1 0 1

und die Tabelle

φ (in Grad) 0 90 180 270 360cos φ 1 0 −1 0 1

Lösung: Hier die Bestätigung:

>> cos(x)

ans =

0.0000 -1.0000 -0.0000 1.0000

>> phi = 180*[1/2 1 3/2 2];

>> cosd(phi)

ans =

0 -1 0 1

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Andere Funktionen sind zum Beispiel sqrt,exp oder log.

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

ans =

2

ans =

54.5982

ans =

2.8332

Ein komplette Übersicht über die grund-legenden und speziellen mathematischenFunktionen von Matlab �ndet man mitHilfe der Kommandos doc elfun (helpelfun) und doc specfun (help specfun).

Aufgabe 31 (Logarithmen)Finden Sie heraus, welche Logarithmus-funktionen Ihnen in Matlab zur Verfü-gung stehen?Lösung: Die Tabelle 12 zeigt die Logarith-musfunktionen. © . . . . . . . . . . . . . . . . . . . . . . . ©

Mathematisches Symbol Matlab

ln = loge log

lb = log2 log2

lg = log10 log10

Tabelle 12: Logarithmusfunktionen

Liegt Ihnen der Funktionsterm einer ma-thematischen Funktion vor, so können Siediesen Matlab auf zwei Arten bekanntmachen:

• Sie de�nieren den Funktionsterm in einerfunction als m-File, siehe Abschnitt 39.Zum Beispiel erklärt man die quadrati-sche Funktion f(x) = x2, x ∈ R durchfolgenden function-File f.m:

39 Copyright c© G. Gramlich

Page 40: EinfMATLAB

function y = f(x)

y = x.^2;

• Sie de�nieren den Funktionsterm inder Kommandozeile durch einen Stringund Vorstellung eines @-Zeichens. ZumBeispiel de�niert man die quadratischeFunktion f(x) = x2, x ∈ R durch

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

Achten Sie darauf, Funktionsterme gleichin vektorieller Form zu de�nieren, da die-se meist vektoriell ausgewertet werden bzw.weil Funktionen wie zum Beispiel quad (ei-ne Funktion zur numerischen Integration,siehe Abschnitt 54) dies auch so verlangen.Funktionen mit mehreren Variablen könnenebenso erklärt werden.

Aufgabe 32 (Funktionen)De�nieren Sie in Matlab die Funktion

f(x, y) = −xye−2(x2+y2), (x, y) ∈ R2 undwerten Sie diese an den Stellen (0, 0) und(1, 1) aus.Lösung: Dies kann man zum Beispiel wiefolgt erreichen:

>> f = @(x,y) -x.*y.*...

exp(-2*(x.^2+y.^2));

>> f(0,0), f(1,1)

ans =

0

ans =

-0.0183

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Weitere Informationen �ndenSie mit doc function und doc

function_handle (help function bzw.help function_handle). Für symbolischeFunktionen, siehe Abschnitt 60.

35. Gra�k

Twenty years ago, we did notinteract with computers graphical-ly; now, everything is graphical. Inthe next twenty years an equallygreat change will occur as we beginto communicate with machines byspeech.Lloyd N. Trefethen

Matlab verfügt über moderne und mäch-tige Visualisierungsmöglichkeiten. Dies isteiner der Gründe für den Erfolg von Mat-lab. Das Visualisieren von Daten ist ty-pisch im praktischen Einsatz von Mat-lab, während das Zeichnen von explizitbekannten Funktionen sehr von Nutzen inder Lehre ist. Eine Vielzahl von Gestal-tungsmöglichkeiten statistische Daten dar-zustellen stehen bereit. Auf der Homepa-ge von The Mathworks steht ein Online-Gra�khandbuch zur Verfügung, siehe [15].

Wenn wir nun gra�sche Fähigkeiten vonMatlab zeigen, so handelt es sich umdie Beschreibung gra�scher Funktionen, dieman zur Visualisierung von Daten im Com-mand Window eingibt. Fast alle hier aufge-zeigten Merkmale können Sie nach Ö�neneiner Figur durch Mausklick über den PlotBrowser, Figure Palette, Property Editor,

40 Copyright c© G. Gramlich

Page 41: EinfMATLAB

usw. beein�ussen (siehe Menü-Item ShowPlot Tools in der geö�neten Figur).

35.1. 2D-Gra�k

Wir beginnen die gra�schen Möglichkeitenvon Matlab mit 2D-Gra�ken (zweidimen-sionalen Gra�ken). Eine häu�g verwendeteFunktion ist die plot-Funktion (doc plot).Dieser werden im einfachsten Fall Koordi-naten von Punkten aus der Ebene überge-ben, die dann von plot durch gerade Li-nien verbunden werden. Ein einfaches Bei-spiel soll dies erläutern.

Hierzu nehmen wir an, dass die Messungdes zeitlichen Verlaufs der Abkühlung ei-ner Flüssigkeit die Werte aus der Tabelle 13ergab. Wir wollen dieses Messergebnis nun

Zeitpunkt in min Temperatur in 0C0.0 620.5 551.0 481.5 462.0 422.5 393.0 373.5 364.0 35

Tabelle 13: Abkühlung einer Flüssigkeit

gra�sch darstellen. Hierzu speichern wir dieZeitpunkte im Vektor x und die Tempera-turwerte in y, also

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

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

Der Befehl

>> plot(x,y)

erzeugt ein Gra�kfenster und zeichnet dieElemente von x gegen die Elemente von y

und verbindet diese Punkte geradlinig. DieAbbildung 1 zeigt das Ergebnis.

0 0.5 1 1.5 2 2.5 3 3.5 435

40

45

50

55

60

65

Abbildung 1: Abkühlung einer Flüssigkeit

Wir zeichnen nun den Graph der explizitgegebenen Funktion f(x) = sin(x) auf demIntervall [0, 2π]. Dazu müssen drei Dingegetan werden:

1. Einen Vektor x erzeugen, der das Inter-vall [0, 2π] diskretisiert:

0 = x1 < x2 < · · · < xn = 2π

2. Die Funktion muss an jedem Diskreti-sierungspunkt ausgewertet werden:

yk = f(xk) k = 1 : n

3. Ein Streckenzug muss gezeichnet wer-den, der die Punkte (x1, y1), (x2, y2), . . .,(xn, yn) verbindet.

41 Copyright c© G. Gramlich

Page 42: EinfMATLAB

Das folgende Script zeigt die Realisierung:

>> n = 20;

>> x = linspace(0,2*pi,n);

>> y = sin(x);

>> plot(x,y)

Hierzu haben wir das Intervall [0, 2π] in20 äquidistante Punkte eingeteilt und dieWerte dem Vektor x zugeordnet. Die Si-nusfunktion ist eine eingebaute Matlab-Funktion, die Vektoren als Argumente ver-arbeiten kann. Dadurch wird der Vektor yerzeugt. Mit grid zeichnen wir noch einGitter und geben mit title der Abbildungnoch eine Überschrift.

>> grid

>> title('Die Sinusfunktion im

Intervall [0,2\pi]')

Die Abbildung 2 zeigt das Ergebnis.

0 2 4 6 8−1

−0.5

0

0.5

1Die Sinusfunktion im Intervall [0,2π]

Abbildung 2: Ein einfacher Plot

Aufgabe 33 (2D-Gra�k)Erzeugen Sie mit einem einzigen plot-Befehl die Graphen der Funktionsterme

sin(kx) über dem Intervall [0, 2π] für k =1 : 5.Lösung: Dies kann man zum Beispiel mitden beiden folgenden Methoden erreichen.

%-Methode 1:

x = linspace(0,2*pi);

plot(x,sin(x),x,sin(2*x),x,...

sin(3*x),x,sin(4*x),x,sin(5*x))

%-Methode 2:

x = linspace(0,2*pi);

Y = [sin(x);sin(2*x);sin(3*x);...

sin(4*x);sin(5*x)];

plot(x,Y)

%-Methode 3:

x = linspace(0,2*pi);

plot(x,sin(x))

hold on

for k=2:5

plot(x,sin(k*x),'-')

end

hold off

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 34 (2D-Gra�k)Zeichnen Sie den Graph der Funktion

rect(x) =

{1 |x| ≤ 0.50 sonst

über dem Intervall [−3, 3].Lösung: Wir de�nieren zunächst die Funk-tion rect in einem Function-File und zeich-nen dann mit plot den Graph der Funkti-on.

42 Copyright c© G. Gramlich

Page 43: EinfMATLAB

function y = rect(x)

n = length(x);

y = zeros(n,1);

y = (x<0.5)-(x<-0.5);

Die folgenden Befehle zeichnen den Graph.

x = linspace(-3,3,1000);

y = rect(x);

plot(x,y)

axis([-3 3 -0.5 1.5])

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Mit der Funktion subplot besteht dieMöglichkeit, mehrere Bilder untereinanderund/oder nebeneinander in einer Figur zu-setzen, siehe doc subplot (help subplot).

35.2. 3D-Gra�k

Die zur plot-Funktion analoge Funktionfür die 3D-Welt ist die plot3-Funktion.Die Verwendung von plot3 ist ähnlichwie die von plot, wobei statt Paarenun Tripel von Daten einzugeben sind.Das folgende Beispiel zeigt den einfachs-ten Gebrauch: plot3(x,y,z) zeichnet ei-ne Kurve im Raum, indem die Punktex(i),y(i),z(i) in der vorgegebenen Rei-henfolge verbunden werden. Das Ergebnisist in Abbildung 3 zu sehen.

t = -5:0.005:5;

x = (1+t.^2).*sin(20*t);

y = (1-t.^2).*cos(20*t);

z = t;

plot3(x,y,z), grid on

xlabel('x(t)'), ylabel('y(t)'),...

zlabel('z(t)')

title('\it{plot3-Beispiel}',...

'FontSize',14)

−50

0

50

−50

0

50−5

0

5

x(t)

plot3−Beispiel

y(t)

z(t)

Abbildung 3: 3D-Plot mit plot3

In diesem Beispiel haben wir die Funk-tionen xlabel, ylabel, title und ent-sprechend zlabel zur Beschriftung derAbbildung verwendet. Die Notation \it

im title-Kommando stammt aus TEX,um Italic-Text zu erzeugen. Farben, Mar-ken und Linienstile können in der glei-chen Weise wie bei der plot-Funktion be-ein�usst werden. So erzeugt zum Beispielplot3(x,y,z,'r�') eine rot gestrichelteLinie. Beachten Sie, dass für 3D-Plots boxoff gesetzt ist. Mit box on können Sie Ih-rem Plot eine Box hinzufügen.

Will man den Graph eines Funktionstermsf(x, y) mit den beiden unabhängigen Varia-blen x, y zeichnen, so muss man die Funkti-onswerte auf einem zweidimensionalen Git-ter in der x, y-Ebene auswerten. Das Gitter

43 Copyright c© G. Gramlich

Page 44: EinfMATLAB

kann mit der Funktion meshgrid erzeugtwerden; anschlieÿend kann man den Graphmit mesh, surf usw. zeichnen.

Als Beispiel soll der Graph der Funktionf(x, y) = −xye−2(x2+y2) über dem Bereich[−2, 2]× [−2, 2] gezeichnet werden.

>> [X,Y] = meshgrid(-2:0.1:2, ...

-2:0.1:2);

>> f = -X.*Y.*exp(-2*(X.^2+Y.^2));

>> mesh(X,Y,f)

>> xlabel('x'), ylabel('y'), ...

zlabel('f(x,y)')

Die Abbildung 4 zeigt das Ergebnis.

−2−1

01

2

−2

0

2−0.1

−0.05

0

0.05

0.1

xy

f(x,

y)

Abbildung 4: f(x, y) = −xye−2(x2+y2)

Aufgabe 35 (3D-Gra�k)Zeichnen Sie den Graph der Funktion

f(x1, x2) ={−1

2x2 + 2 für x1, x2 ≥ 02 sonst.

im Bereich (x1, x2) ∈ [−2, 2]2.Lösung: Den Graph kann man wie folgtplotten.

>> [X,Y] = meshgrid(-2:0.1:2,...

-2:0.1:2);

>> Z = 2*ones(size(X));

>> Z = -0.5*Y.*(X>=0 & Y>=0)+2;

>> mesh(X,Y,Z)

>> axis([-2,2,-2,2,1,3])

>> xlabel('x_1'), ylabel('x_2')

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Mehr Informationen über Visualisie-rungsmöglichkeiten �ndet man mit doc

graph2d (help graph2d), doc graph3d

(help graph3d) und doc specgraph (helpspecgraph).

Aufgabe 36 (3D-Gra�k)Zeichnen Sie den Graph des Funktionterms

f(x, y) =15

cos(x) + y exp(−x2 − y2)

mit den Funktionen mesh und ezmesh überdem Quadrat −3 ≤ x ≤ 3, −3 ≤ y ≤ 3.Lösung:

[X,Y] = meshgrid(-3:0.1:3);

Z = 1/5*cos(X)+Y.*exp(-X.^2-Y.^2);

mesh(X,Y,Z)

oder als Einzeiler mit ezmesh.

ezmesh('1/5*cos(x)+y*exp(-x^2-y^2)',

[-3,3])

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

44 Copyright c© G. Gramlich

Page 45: EinfMATLAB

35.3. Funktionsdarstellungen

Kennt man den Funktionsterm einer reell-wertigen Funktion einer reellen Variablen,so kann man mit den Funktionen fplot

und ezplot (easy plotting) den Graph ein-facher darstellen als mit plot. Die Funk-tion fplot verlangt den Funktionsterm ineinem m-File (Abschnitt 39) oder als Func-tion Handle (doc function_handle). DieFunktion ezplot erwartet den Funktions-term in Hochkomma oder als symbolischesObjekt, siehe Abschnitt 60.

Der Aufruf

>> fplot(@(x)exp(-x^2),[-3,3])

plottet die Funktion

f(x) = e−x2, x ∈ R

im Intervall [−3, 3]. Mit

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

plottet man im Intervall [−2, 2] die einge-baute humps-Funktion

f(x) =1

(x− 0.3)2 + 0.01

+1

(x− 0.9)2 + 0.04− 6, x ∈ R.

Die Abbildung 5 zeigt den Graph von humpsim Intervall [−2, 2].

Aufgabe 37 (Funktionsdarstellungen)Zeichnen Sie den Graph des Funktions-terms

f(x) = sin(x2)− 2 cos(x)

−2 −1 0 1 2−20

0

20

40

60

80

100

Abbildung 5: Graph der humps-Funktion

über dem Intervall (0, 5) mit den Funktio-nen plot, fplot und ezplot.Lösung: Dies erreicht man wie folgt:

x = linspace(0,5);

f = sin(x.^2)-2*cos(x);

plot(x,f)

%-oder:

fplot('sin(x^2)-2*cos(x)',[0,5])

%-bzw.

f = @(x) sin(x.^2)-2*cos(x);

fplot(f,[0,5])

%-oder:

ezplot('sin(x^2)-2*cos(x)',[0,5])

%-bzw.

f = @(x) sin(x.^2)-2*cos(x);

ezplot(f,[0,5])

Der Graph ist in Abbildung 6 dargestellt. ©©

Die Abbildung 7 zeigt vier verschiedeneDarstellungen einer Funktion mit zwei Va-riablen. Es handelt sich hier um die soge-

45 Copyright c© G. Gramlich

Page 46: EinfMATLAB

0 1 2 3 4 5

−2

−1

0

1

2

3

x

sin(x.2)−2 cos(x)

Abbildung 6: Graph

−50

5

−50

5−10

0

10

−20

2−2

02

−10

0

10

−2 0 2−3

−2

−1

0

1

2

3

−2 0 2

−2

0

2

Abbildung 7: Darstellungen der peaks-Funktion

nannte peaks-Funktion, die inMatlab be-reits vorde�niert ist. Es ist die Funktion

f(x, y) =3(1− x)2e−x2−(y+1)2

− 10(x/5− x3 − y5)e−x2−y2

− 1/3e−(x+1)2−y2, (x, y) ∈ R2

Die peaks-Funktion geht durch Translatio-nen und Skalierungen aus der GauÿschenNormalverteilungsfunktion hervor. DasBild links oben in Abbildung 7 zeigtden Graph, rechts oben Kurven gleicherHöhe (Höhenschittbilder), links untenein paar Höhenlinien und rechts dane-ben farbig ausgefüllte Höhenlinien derpeaks-Funktion. Die Figur wurde mit denfolgenden Anweisungen erzeugt:

[X,Y,Z] = peaks(30);

subplot(2,2,1), surf(X,Y,Z),

subplot(2,2,2), contour3(X,Y,Z),

subplot(2,2,3), contour(X,Y,Z),

subplot(2,2,4), contourf(X,Y,Z),

Die Abbildung 8 zeigt den Graph der Funk-tion f(x, y) = xex2+y2

, (x, y) ∈ R2, wobeihier die Funktion colormap zum Einsatzkommt und dafür sorgt, dass der Graph(das Netz) blau ist. Die Funktion colormap

erlaubt es, Daten mit Farbtabellen (colormap) zu visualisieren. Mit der Funktioncolorbar können Sie sich die aktuelle Farb-tabelle in der entsprechenden Figur anzei-gen lassen. Die Figur wurde mit Hilfe derAnweisungen erzeugt:

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

46 Copyright c© G. Gramlich

Page 47: EinfMATLAB

−20

2

−2

0

2

−0.4

−0.2

0

0.2

0.4

x

x. exp (− x. 2−y. 2)

y

Abbildung 8: Graph

ezmesh(fh,40)

colormap([0 0 1])

Die Abbildung 9 zeigt Höhenlinien der

−6−4

−4

−2

−2

−2

−2 −2

0 0

0

0

0

0

0

2

2

2

2

2

2

2

4

4 4

6

6

8

200 400 600

100

200

300

400

500

600

700

Abbildung 9: Geglättete Höhenlinien derpeaks-Funktion

peaks-Funktion, wobei die Höhenlinien nunmit der Funktion interp2 geglättet sind.Auÿerdem bekommen die Höhenzahl einenleicht gelblichen Hintergrund mit einemleicht grauen Rahmen. Die Figure wurdemit Hilfe der Anweisungen erzeugt:

Z = peaks;

[C,h] = contour(interp2(Z,4));

text_h = clabel(C,h);

set(text_h,'BackgroundColor',...

[1 1 .6],'Edgecolor',[.7 .7 .7])

35.4. Parametrisierte Kurven

Mit Hilfe der Funktionen ezplot undezplot3 lassen sich Kurven in Parame-terdarstellung in zwei und drei Dimen-sionen darstellen. Als Beispiel einer ebe-nen Kurve betrachten wir eine dreiblätt-rige Blütenblattkurve (Trochoide) Sie hatdie Parameterform x = cos(3t) cos(t), y =cos(3t) sin(t), t ∈ [0, 2π]. Mit Hilfe der An-weisung

r1 = @(t) cos(3*t).*cos(t);

r2 = @(t) cos(3*t).*sin(t);

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

erzeugt man die Abbildung 10.

−0.5 0 0.5 1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

x

y

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

Abbildung 10: Blütenblattkurve

47 Copyright c© G. Gramlich

Page 48: EinfMATLAB

Die Anweisungen

r1 = @(t) exp(-0.2*t).*cos(t);

r2 = @(t) exp(-0.2*t).*sin(t);

r3 = @(t) t;

ezplot3(r1,r2,r3,[0,20],'animate')

erzeugen die räumliche Kurve in Abbil-dung 11. Durch das zusätzlich Argument

−1

0

1

−1

0

10

5

10

15

20

x

x = exp (− 0. 2 t ) cos ( t ), y = exp (− 0. 2 t ) sin ( t ), z = t

y

z

Abbildung 11: Räumliche Kurve

animate im Funktionsaufruf erhält man ei-ne Animation der räumlichen Kurven indem Sinn, dass ein roter Punkte vomAnfagang- zum Endpunt läuft.

Aufgabe 38 (Räumliche Kurve)Plotten Sie die räumliche Kurve

x(t) = (1 + t2) sin(20t)

y(t) = (1 + t2) cos(20t)z(t) = t

für t ∈ [−5, 5].Lösung: Die Kurve kann zum Beispiel wiefolgt geplottet werden.

t = -5:0.005:5;

x = (1+t.^2).*sin(20*t);

y = (1+t.^2).*cos(20*t);

z = t;

plot3(x,y,z),

grid on, xlabel('x(t)'),

ylabel('y(t)'), zlabel('z(t)')

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 39 (Ebene Kurve)Plotten Sie die Zykloide

x(t) = t− sin t

y(t) = 1− cos t

für t ∈ [0, 4π].Lösung: Die Kurve kann zum Beispiel wiefolgt geplottet werden.

ezplot('t-sin(t)','1-cos(t)',...

[0,4*pi])

grid on, xlabel('x(t)'),

ylabel('y(t)')

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 40 (Ebene Kurve)Zeichnen Sie die Kurve

x = sin(−t) + t

y = 1− cos(−t)

in der x, y-Ebene für 0 ≤ t ≤ 4π.Lösung: Es handelt sich um eine Zykloide.

48 Copyright c© G. Gramlich

Page 49: EinfMATLAB

ezplot('sin(-t)+t','1-cos(-t)',...

[0,4*pi])

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 41 (Ebene Kurve)Zeichnen Sie die Kurve

x = sin(−t)y = 1− cos(−t)

in der x, y-Ebene für 0 ≤ t ≤ π.Lösung: Es handelt sich um einen Kreisbo-gen.

ezplot('sin(-t)','1-cos(-t)',...

[0,pi])

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 42 (Räumliche Kurve)Zeichnen Sie die Schraubenlinie (Helix)

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

im x, y, z-Raum für 0 ≤ t ≤ 20π. Animie-ren Sie!Lösung: Eine Schraubenlinie mit Animati-on erhält man wie folgt:

>> ezplot3('cos(t)','sin(t)','t',...

[0,20*pi],'animate')

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

35.5. Parametrisierte Flächen

Mit den Matlab-Funktion ezmesh undezsurf können parametrisierte Flächen imR3 dargestellt werden.

Ein Torus entsteht, wenn ein Kreis um eineAchse rotiert, die in der Ebene des Kreises,aber auÿerhalb des Kreises verläuft. EineParameterdarstellung eines Torus ist:

x = (a + b cos θ) cos φ

y = (a + b cos θ) sinφ

z = b sin θ

Der folgende Script zeichnet einen Torus füra = 10 und b = 4, siehe Abbildung 12.

ezmesh('(10+4*cos(theta))*cos(phi)',...

'(10+4*cos(theta))*sin(phi)',...

'4*sin(theta)'), axis equal,

colormap([0,0,1]),

−10

0

10

−10−5

05

10

−202

x

x = (10+4 cos(θ)) cos(φ), y = (10+4 cos(θ)) sin(φ), z = 4 sin(θ

y

z

Abbildung 12: Ein Torus

Aufgabe 43 (Parametrisierte Flächen)Welche Fläche entsteht durch den folgendenAufruf:

49 Copyright c© G. Gramlich

Page 50: EinfMATLAB

ezsurf('2*cos(u)*cos(v)',...

'2*sin(u)*cos(v)','2*sin(v)',...

[-pi/2,pi/2]), axis equal

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

Aufgabe 44 (Parametrisierte Flächen)Welche Fläche entsteht durch den folgendenAufruf:

ezsurf('u*cos(v)','u*sin(v)',...

'2*v',[0,8*pi]), axis equal

Lösung: Es entsteht eine Wendel�äche,siehe Abbildung 13. Eine Wendel�äche ent-

−200

20

−20

0

200

20

40

x

x = u cos(v), y = u sin(v), z = 2 v

y

z

0

10

20

30

40

50

Abbildung 13: Wendel�äche

steht, wenn eine Strecke um eine zu ihr or-thogonale Achse geschraubt wird. Wir neh-men an, dass diese Achse gleich der z-Achsedes Koordinatensystems ist. Hat die Streckedie Länge l und ist φ der Winkel, den sie mitder positiven x-Achse einschliesst, so ist ei-ne Parameterdarstellung der Wendel�ächedurch

x = lt cos φ, y = lt sinφ, z =c

2π,

für 0 ≤ φ ≤ π, 0 ≤ t ≤ 1 gegeben.Der Parameter c bezeichnet die Ganghöhe,das heiÿt den Höhengewinn bei einer vollenUmdrehung. © . . . . . . . . . . . . . . . . . . . . . . . . . . ©

35.6. Implizite Kurven

Mit der Funktion ezplot lassen sich auchimplizit de�nierte Kurven darstellen. Dernachfolgende Script gibt einige Beispiele:

subplot(2,3,1);

ezplot('x^2/15^2+y^2/9^2-1',[-15,15])

hold on; plot([-12,12],[0,0],'ro');

hold off; grid; pause;

subplot(2,3,2);

ezplot('-x^2/4+y^2/25-1',[-15,15])

grid; pause;

subplot(2,3,3);

ezplot('x^4+y^4-14^4',[-15,15])

grid; pause;

subplot(2,3,4);

ezplot('y^2-x^3/9+6*x+10',[-15,15])

grid; pause;

subplot(2,3,5);

ezplot('(x^2+y^2)^2-14^2*(x^2-y^2)',...

[-15,15]), grid; pause;

subplot(2,3,6);

ezplot('abs(x)+abs(y)-14',...

[-15,15]); grid;

35.7. Implizite Flächen

Implizit de�nierte Flächen können ebenfallsdargestellt werden. Hier ein Beispiel, sieheAbbildung 14.

50 Copyright c© G. Gramlich

Page 51: EinfMATLAB

Abbildung 14: Implizite Fläche

[x,y,z] = meshgrid(-2:0.1:2);

v = sin(10*x)/8+sqrt(z.^2+y.^2)-0.5;

p = patch(isosurface(x,y,z,v,0));

view(34,40), grid on,

set(p,'FaceColor','red'),

set(p,'EdgeColor','None'),

camlight, lighting gouraud,

35.8. Koordinatenachsen skalieren

Beachten Sie, dass Matlab die x- undy-Achse (und natürlich auch die z-Achseim 3D Fall) automatisch skaliert. WollenSie diesen Automatismus nicht, so kön-nen Sie mit axis (doc axis) �per Hand�die Achsen begrenzen. Zum Beispiel er-zeugt axis([-4,4,-2,2]) ein Koordina-tensystem, dessen x-Achse von -4 bis 4 undderen y-Achse von -2 bis 2 begrenzt ist.Wenn Sie möchten, dass die x- und y-Achsegleich lang, also quadratisch sind, dannmüssen Sie axis square eingeben (Qua-dratische Bild�äche). Wollen Sie dagegen,

dass die x- und y-Achse die gleiche Skalie-rung haben, so geht das mit dem Befehtaxis equal. Die Abbildung 15 zeigt dies

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

0

2normal

−8 −6 −4 −2 0 2 4 6 8−2

0

2equal

−4 −2 0 2 4−2

0

2square

Abbildung 15: Skalierungen

anhand des Bereichs [−4, 4]× [−2, 2].

Um logarithmische Skalierungen zu erhal-ten, stehen spezielle Funktionen zur Verfü-gung, siehe Tabelle 14.

Name Beschreibungloglog Logarithmisches KO-Systemsemilogx x-Achse logarithmischsemilogy y-Achse logarithmisch

Tabelle 14: Logarithmische Skalierungen

Aufgabe 45 (Skalierungen)Zeichnen Sie den Graph der Funktion y =3e−1/2x, x ∈ R in einem rechtwinkligen Ko-ordinatensystem von x = 0 bis x = 10, wo-bei die y-Achse logarithmisch skaliert seinsoll.Lösung: Mit

>> x = linspace(0,10);

51 Copyright c© G. Gramlich

Page 52: EinfMATLAB

>> y = 3*exp(-0.5*x);

>> semilogy(x,y); grid;

erhalten wir die Abbildung 16. Der Graph

0 2 4 6 8 1010

−2

10−1

100

101

Abbildung 16: y = 3e−1/2x, x ∈ R

der Exponentialfunktion ist wie erwartet ei-ne Gerade. © . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

Aufgabe 46 (Skalierungen)Zeichnen Sie den Graph der Funktion y =√

x, x ∈ R in einem rechtwinkligen Koordi-natensystem von x = 1 bis x = 1000, wobeidie x- und y-Achse logarithmisch skaliertsein soll.Lösung: Mit

>> x = 1:1000;

>> y = sqrt(x);

>> loglog(x,y); grid;

erhalten wir die Abbildung 17. Der Graphder Quadratwurzelfunktion ist wie erwarteteine Gerade. © . . . . . . . . . . . . . . . . . . . . . . . . . . ©

100

101

102

103

100

101

102

Abbildung 17: y =√

x, x ≥ 1

35.9. Zwei y-Achsen

Mit der Funktion plotyy können wir Da-tensätze mit zwei y-Achsen zeichnen; dieeine Achse links, die Andere rechts. AlsBeispiel betrachten wir die Funktion y =3e−1/2x, x ∈ R. Zeichnet man die Graphdieser Funktion in ein gewöhnliches kartesi-sches Koordinatensystem mit gleicher Ska-lierung, so erhält man den typischen Ver-lauf einer abfallenden Exponentialfunktion.Skaliert man die y-Achse jedoch logarith-misch, so ist der Graph eine Gerade. Wirplotten diese beiden Kurven mit der Funk-tion plotyy nun in eine Figur. Nach denEingaben

>> x = linspace(0,10);

>> y = 3*exp(-0.5*x);

>> plotyy(x,y,x,y,'plot','semilogy')

erhalten wir die Abbildung 18. Die linke y-Achse ist gewöhnlich linear skaliert, wäh-rend die rechte y-Achse logarithmisch ska-liert ist.

52 Copyright c© G. Gramlich

Page 53: EinfMATLAB

0 2 4 6 8 100

0.5

1

1.5

2

2.5

3

0 2 4 6 8 1010

−2

10−1

100

101

Abbildung 18: Zwei Skalierungen

35.10. Koordinatentransformationen

Mit der Funktion cart2pol können kar-tesische Koordinaten in Polar- bzw. Zy-linderkoodinaten transformiert werden. DieFunktion pol2cart transformiert umge-kehrt Polar- bzw. Zylinderkoordinaten inkartesische Koordinaten. Mit cart2sph

bzw. sph2cart können Transformationenvon kartesischen zu Polarkoordinaten undumgekehrt durchgeführt werden.

Zum Zeichnen von Polarkoordinaten ist dieFunktion polar geeignet.

35.11. Spezielle Gra�kfunktionen

Weitere Gra�kfunktionen �ndet man in derTabelle 15. Insbesondere zur Darstellungstatistischer Daten sind diese von groÿerBedeutung.

Name Beschreibungbar Balkendiagramm (vertikal)barh Balkendiagramm (horizontal)bar3 3D-Balkendiagramm (vertikal)bar3h 3D-Balkendiagramm (horizontal)hist Histogrammpie Kreisdiagrammstem Punkte mit Linien

Tabelle 15: Weitere Gra�kfunktionen

35.12. Vektorfelder visualisieren

Mit der Funktion quiver (doc quiver,help quiver) können Sie Vektorfelder dar-stellen. Das Vektorfeld f(x, y) = (−y, x),(x, y) ∈ R2 ist in Abbildung 19 dargestellt.

−3 −2 −1 0 1 2 3

−2

−1

0

1

2

x

y

Abbildung 19: Vektorfeld

Das Vektorfeld wurde mit

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

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

erzeugt. Jeder Vektor ist tangential zu ei-nem Kreis um den Ursprung. Die Längedes Vektors ist durch den Radius des Krei-

53 Copyright c© G. Gramlich

Page 54: EinfMATLAB

ses gegeben. Das Vektorfeld kann als Ge-schwindigkeitsfeld eines Rades interpretiertwerden, das sich gegen den Uhrzeigersinndreht.

Aufgabe 47 (Vektorfeld)Stellen Sie das Vektorfeld

f : R2 → R2

(x, y) 7→ 1√x2+y2

(y,−x)

dar.Lösung: Die Anweisungen

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

>> quiver(X,Y,-X,2*Y), grid

>> axis equal

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

−3 −2 −1 0 1 2 3

−2

−1

0

1

2

Abbildung 20: Vektorfeld

35.13. Gra�ken importieren,exportieren und drucken

Zum Einlesen von Pixel-Gra�ken bietetMatlab die Funktion imread. Der Befehl

image gibt die eingelesene Gra�k in einerFigure aus. So erzeugen die folgenden Be-fehlszeilen die Figure in Abbildung 21, diedas in jpg-Format vorliegende Bild gg.jpgenthält:

>> A = imread('gg.jpg','jpeg');

>> image(A)

Mögliche Formate sind bmp, cur, usw., sie-he doc imread (help imread). Mit demBefehl print (doc print) können Sie dieFigure anschlieÿend drucken oder in eineDatei exportieren.

Abbildung 21: Das bin ich

Hat man eine Gra�k erzeugt, so will mandiese häu�g in einem bestimmten Gra�kfor-mat abspeichern und gegebenenfalls in einSatz- oder Textverarbeitungssystem einbin-den. Soll das Gra�kformat Encapsulated

54 Copyright c© G. Gramlich

Page 55: EinfMATLAB

PostScript sein (Dateiendung: eps), sogeht das zum Beispiel wie folgt:

%-Erzeuge eine Grafik.

surf(peaks(30));

%-Setze den Hintergrund blau.

set(gcf,'Color','blue');

set(gcf,'InvertHardCopy','off');

%-Exportiere in File MyFile.eps

print -depsc2 MyFile.eps

Alternativ können Sie die Gra�k auch überdas Graphical User Interface exportieren.Dies geht wie folgt:

1. Erzeugen Sie eine Figure, zum Beispielmit surf(peaks(30));.

2. Wählen Sie aus dem Edit Menü die Fi-gure Properties. Dies spricht die Proper-ty Editor Dialogbox an.

3. Wählen Sie den Style Panel, skrollen Sieauf die Farbe Blue, klicken Sie unten aufApply und dann auf OK.

4. Wählen Sie aus dem File Menü das Pa-ge Setup. Dies spricht die Page SetupDialogbox an.

5. Wählen Sie den Axes und Figure tapund klicken Sie auf Keep screen back-ground color, damit Matlab nicht aufden weiÿen Hintergrund umschaltet,wenn Sie die Gra�k expotieren.

6. Klicken Sie auf OK.

7. Wählen Sie aus dem File Menü denUnterpunkt Export aus, um die ExportDialogbox zu erzeugen.

8. Wählen Sie den Dateityp EPS Level 2Color, geben Sie den DateinamenMyFi-le.eps ein und speichern Sie Ihre Figurunter diesem Namen.

In Matlab werden vorde�nierte Pixelbil-der zur Verfügung gestellt. Mit dem Befehl

>> load gatlin

werden die Daten der Datei gatlin.mat ge-laden. Die Befehle

>> image(X)

>> colormap(map)

>> axis image

erzeugen die Abbildung 22 eine Fotogra-

100 200 300 400 500 600

50

100

150

200

250

300

350

400

450

Abbildung 22: Pioniere der Mathematik

�e aus dem Jahr 1964 von sechs Pionierender Numerischen Mathematik. Von linksnach rechts handelt es sich um die Wissen-schaftlerWilkinson,Givens, Forsythe,Householder, Henrici und Bauer.

Das Farbbild eines Clowns ist in Abbil-dung 23 zu sehen. Es kann analog der Da-

55 Copyright c© G. Gramlich

Page 56: EinfMATLAB

50 100 150 200 250 300

50

100

150

200

Abbildung 23: Clown

tei gatlin.mat aus der Datei clown.mat er-zeugt werden. In [5] habe ich dieses Bild (alsGrautonbild) für eine Anwendung der Sin-gulärwertzerlegung in der Bildverabeitungverwendet.

Wir fassen die besprochenen Funktionen inTabelle 16 zusammen.

Name Bedeutungimread Pixel-Gra�k einlesenimage Pixel-Gra�k in Figure plottenprint speichern oder druckensaveas speichern

Tabelle 16: Gra�ken importieren usw.

35.14. Animationen

Um Animationen herzustellen und durch-zuführen, siehe zum Beispiel doc movie

(help movie).

35.15. Handle Graphics

Das Gra�ksystem von Matlab stellt so-genannte Low-Level-Funktionen zur Verfü-gung, mit denen alle Aspekte des Gra�k-systems kontrolliert werden können. Da-mit besteht die Möglichkeit, detaillierteGra�ken zu generieren. Die Kommandosset und get erlauben es, jedes Gra�-kobjekt anzusprechen. Mit doc graphics

(help graphics) erhalten Sie eine kom-plette Übersicht über alle zur Verfügungstehenden Kommandos und Funktionen.

35.16. Graphical User Interface (GUI)

Das Matlab-Gra�ksystem verfügt auÿerder Handle-Graphics über eine weitere ob-jektorientierte Gra�kkapazität: GraphicalUser Interface (GUI). Damit hat mandie Möglichkeit, Sliders, Buttons, Menüsund andere Gra�kobjekte zu erzeugen,um so interaktive Benutzerschnittstellenzu generieren. Hierzu steht eine GUI-Entwicklungsumgebung zur Verfügung, sie-he guide. Für weitere Einzelheiten siehedoc uicontrol (help uicontrol).

36. Vergleichsoperatoren,Vergleichsfunktionen

Vergleichsoperatoren und Vergleichsfunk-tionen dienen dazu, zwei Matrizen element-weise hinsichtlich einer bestimmten Eigen-schaft zu vergleichen. In Abhängigkeit da-von, ob diese Eigenschaft besteht oder

56 Copyright c© G. Gramlich

Page 57: EinfMATLAB

nicht, geben sie dann einen entsprechen-den Wahrheitswert zurück, der in Bedin-gungen für Schleifen oder Verzweigungenweiterverwendet werden kann. In Matlabgibt es � wie auch in C/C++, aber andersals etwa in Pascal � keinen expliziten Da-tentyp, der die Wahrheitswerte wahr undfalsch speichern kann. Statt dessen wirdein numerischer Wert ungleich 0 als wahrund der Wert 0 als falsch betrachtet. Ver-gleichsoperatoren haben, hinter den arith-metischen, vor den logischen Operatoren,die zweithöchste Priorität bei der Abarbei-tung von Ausdrücken.

37. Logische Operatoren undlogische Funktionen

Logische Operatoren existieren im Prinzipin allen allgemein verwendbaren Program-miersprachen. Sie dienen dazu, Wahrheits-werte miteinander zu verknüpfen. In denmeisten Sprachen haben sie Namen wieand, or und not und sind damit Schlüs-selwörter für den Compiler. In Matlab �wie auch in C/C++ � ist dies nicht derFall; die logischen Operatoren sind hier ausSonderzeichen aufgebaut.

37.1. Logische Operatoren

Werden Matrizen mit logischen Operato-ren verknüpft, so geschieht dies komponen-tenweise. Die Tabelle 17 zeigt die logischenOperatoren.

Verknüpft man zwei Matrizen mit einem lo-

Logische Operatoren Beschreibung& logisches und| logisches oder� logisches nicht

Tabelle 17: Logische Operatoren

gischen und, so ist die entsprechende Er-gebniskomponente 1, wenn die beiden Kom-ponenten von Null verschieden sind.

>> x = [1 0 2 3 0 4];

>> y = [5 6 7 0 0 8];

>> x & y

ans =

1 0 1 0 0 1

37.2. Logische Funktionen

Verknüpft man zwei Matrizen mit einem ex-klusiven oder, so ist die entsprechende Er-gebniskomponente 1 (wahr), wenn eine derbeiden Komponenten von Null verschiedenist. Andererseits ist die Ergebniskomponen-te 0 (falsch), wenn beide Komponenten 0oder beide ungleich 0 sind.

>> x = [1 0 2 3 0 4];

>> y = [5 6 7 0 0 8];

>> xor(x,y)

ans =

0 1 0 1 0 0

Darüber hinaus gibt es zusätzliche Funktio-nen, die die Existenz spezieller Werte oderBedingungen testen und ein logisches Re-sultat zurückgeben. Weitere Informationen

57 Copyright c© G. Gramlich

Page 58: EinfMATLAB

über logische Operatoren und Funktionen�ndet man mit doc ops (help ops).

Aufgabe 48 (Logische Operatoren)Gegeben seien die Variablen a=5.5, b=1.5und k=-3. Bestimmen Sie die Ergebnisseder folgenden Ausdrücke. Überprüfen SieIhre Resultate dann in Matlab.

(a) a < 10.0

(b) a+b >= 6.5

(c) k = 0

(d) b-k > a

(e) (a == 3*b)

(f) -k <= k+6

(g) a<10 & a>5

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

38. Steuerstrukturen

Programmiersprachen und programmierba-re Taschenrechner erlauben es, den Ab-lauf eines Programms zu steuern. Manspricht von Steuerstruktur. Matlab bietetvier Möglichkeiten, den sequentiellen Ab-lauf durch Verzweigungen und Schleifen zuändern. Dies sind:

• for-Schleifen

• while-Schleifen

• Verzweigungen mit if

• Verzweigungen mit switch

38.1. for-Schleife

Das folgende Beispiel erzeugt in einerfor-Schleife die ersten 20 Fibonacci-Folgenglieder.

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

>> for i=3:20

f(i) = f(i-1)+f(i-2);

end

Der Zeilenvektor f beinhaltet die Zahlen-werte. Bekannterweise nähern sich die Quo-tienten zweier benachbarter Fibonacci-Zahlen der Zahl (

√5−1)/2. Sie können das

mit f(1:19)./f(2:20) nachvollziehen.

Will man innerhalb einer Schleife eine Ma-trix (Vektor) erzeugen, so wie in dem Bei-spiel

>> for k = 1:11

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

end

so gibt es zwei Gründe dafür, die Matrizenzuvor mit zeros zu initialisieren.

1. Durch zeros kann man festlegen, obman einen Zeilen- oder Spaltenvektorerzeugen möchte bzw. welche Gröÿe dieMatrix haben soll. Dadurch wird mangezwungen, explizit über die Orientie-rung und Gröÿe des Vektors bzw. derMatrix nachzudenken, und vermeidet soFehler beim Operieren mit diesen.

2. Der Speichermanager hat durch die-se Initialisierung weniger Arbeit. Be-

58 Copyright c© G. Gramlich

Page 59: EinfMATLAB

trachten wir hierzu obige erste for-Schleife und wie die Variable x zu einem11-dimensionalen Zeilenvektor wird. Imersten Schleifendurchlauf ist x ein Vek-tor der Länge 1 (ein Skalar). Im zweitenDurchlauf weist x(2) den Speicherma-nager an, x zu einem zweidimensionalenVektor zu machen. Im dritten Durchlaufwird der Speichermanager durch x(3)

angewiesen, x in einen Vektor der Län-ge 3 umzuformen. Dies setzt sich fort,bis das Ende der for-Schleife erreichtist und x 11 Koordinaten hat. Es ist ei-ne Konvention in Matlab, dass durchdiese Konstruktionsweise ein Zeilenvek-tor entsteht.

Es ist daher e�zienter, obige erste for-Schleife wie folgt zu programmieren:

>> x = zeros(1,11);

>> for k = 1:11

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

end

Will man eine Matrix in einerSchleife erzeugen, dann sollte manihn zuvor initialisieren.

38.2. while-Schleife

In einer while-Schleife berechnen wir dieSumme der ersten 100 Zahlen.

>> n = 1; Summe = 0;

>> while n <= 100

Summe = Summe+n;

n = n+1;

end

>> Summe

Summe =

5050

Der nachfolgendeMatlab-Code berechnetdie ersten sieben Vektoren Au mit Start-vektor u = (1, 0) und der Markov-Matrix

A =[

0.8 0.30.2 0.7

].

Anschlieÿend werden die Vektoren gezeich-net.

u = [1;0]; A = [0.8 0.3; 0.2 0.7];

x = u; k = 0:1:7;

while length(x) <= 7

u = A*u;

x = [x u];

end

plot(k,x)

38.3. if-Anweisung

Im folgenden Beispiel wird die Anweisungdisp('a ist gerade') nur dann ausge-führt, wenn a durch 2 teilbar ist.

>> if ( rem(a,2) == 0 )

disp('a ist gerade')

end

38.4. switch-Anweisung

Hat im folgenden Beispiel die Variable x

den Wert -1, so wird x ist -1 auf dem

59 Copyright c© G. Gramlich

Page 60: EinfMATLAB

Bildschirm ausgegeben. Entsprechendes ge-schieht bei den anderen Fällen.

switch x

case -1

disp('x ist -1');

case 0

disp('x ist 0');

case 1

disp('x ist 1');

otherwise

disp('x ist ein anderer Wert');

end

Weitere Informationen über Steuerstruktu-ren �ndet man mit doc lang (help lang).

39. m-Files

Bisher wurden Anweisungen zeilenweiseeingegeben und von Matlab verarbeitet.Diese interaktive Arbeitsweise ist unzweck-mäÿig für Algorithmen, die mehrere Pro-grammzeilen benötigen und wieder verwen-det werden sollen. Hierfür eignen sich so-genannte m-Files, die mit einem Editor er-zeugt werden und unter einem Filenamenmit dem Kürzel .m abgespeichert werden.Es gibt zwei Arten von m-Files: die Script-Files und die Function-Files.

39.1. Script-Files

Ein Script-File (Kommando-File) ist ei-ne Folge von gewöhnlichen Matlab-Anweisungen. Die Anweisungen in einemScript-File werden ausgeführt, wenn man

den File-Namen ohne das Kürzel angibt.Ist zum Beispiel der File-Name versuch.m,so gibt man einfach versuch ein. Variablenin einem Script-File sind global, siehe Ab-schnitt 40. Auch kann ein Script-File einenanderen m-File aufrufen. Script-Files habenkeine Ein- und Ausgabeargumente.

Wir geben ein einfaches Beispiel einesScript-Files (ErstesScript).

%-Script: ERSTES-SCRIPT

Daten = [2,10,1,12,-2,3,2]';

sort(Daten)

mean(Daten)

median(Daten)

std(Daten)

Dieser Script-File sortiert den Spaltenvek-tor Daten mit der Funktion sort undberechnet den arithmetischen Mittelwert(mean), den Median (median) und die Stan-dardabweichung (std) der Werte im Da-tenvektor Daten. Gibt man den NamenErstesScript nach dem Matlab Promptein, so erhält man folgende Ausgabe:

ans =

-2

1

2

2

3

10

12

ans =

4

ans =

60 Copyright c© G. Gramlich

Page 61: EinfMATLAB

2

ans =

5.0662

Das folgende Beispiel zeigt ein Eigenwert-Roulette, welches darauf beruht, abzuzäh-len wieviele Eigenwerte einer reellen Zu-fallsmatrix reell sind. Ist die Matrix A re-ell und von der Ordnung 8, dann gibt es0,2,4,6 oder 8 reelle Eigenwerte (die Anzahlmuss gerade sein, weil komplexe Eigenwertein komplex-konjugierten Paaren auftreten).Die beiden Zeilen

A = randn(8);

sum((abs(imag(eig(A))) < 0.0001));

erzeugen eine zufällig normalverteilte 8×8-Matrix und zählen, wieviel Eigenwerte re-ell sind. Dies ist so realisiert, dass geprüftwird, ob der Imaginärteil dem Betrag nachkleiner als 10−4 ist. Jeder Aufruf erzeugtnun eine andere Zufallsmatrix und man er-hält somit unterschiedliche Ergebnisse. Umein Gefühl dafür zu bekommen, welche derfünf Möglichkeiten am wahrscheinlichstenist, kann man folgenden Script ausführen.

%-Script-File: EIGENWERTROULETTE

n = 1000;

Anzahl = zeros(n,1);

for k=1:n

A = randn(8);

Anzahl(k) = ...

sum(abs(imag(eig(A))) < 0.0001);

end

hist(Anzahl,[0 2 4 6 8]);

h = findobj(gca,'Type','patch');

set(h,'FaceColor','r',...

'EdgeColor','w')

Dieser Script-File erzeugt 1000 Zufallszah-len und zeichnet ein Histogramm der Ver-teilung der Anzahl der reellen Eigenwerte.Die Abbildung 24 zeigt ein mögliches Re-sultat. Wollen Sie sehen, wie Ihr Script-File

0 2 4 6 80

100

200

300

400

500

600

Abbildung 24: Histogramm zum Script

den von Ihnen geschriebenen Code abarbei-tet, so geben Sie echo on ein. Mit echo off

können Sie den Vorgang wieder rückgängigmachen.

39.2. Function-Files

Wenn Sie intensiver mit Matlab arbei-ten, dann werden Sie bald feststellen, dasses nicht für alle ihre Wünsche einge-baute Funktionen oder Kommandos gibt.In diesem Fall können Sie sich aber Ih-re eigene Funktion schreiben und damitdie Funktionalität von Matlab erweitern.

61 Copyright c© G. Gramlich

Page 62: EinfMATLAB

Mit Hilfe von Function-Files (Matlab-Funktionen, Funktionen) können Sie denMatlab-Funktionsvorrat erweitern. Varia-blen in Function-Files sind lokale Varia-blen. Function-Files haben demnach ih-ren eigenen nach auÿen nicht sichtba-ren Workspace. Die Übergabe einzelnerVariablen erfolgt über eine Parameterlis-te im Funktionsaufruf. Ein Function-Fileentspricht der subroutine bzw. func-tion in der Programmiersprache Fort-ran, function in C/C++ und proce-dure bzw. function in Pascal. HabenSie eine Funktion in Form eines Function-Files geschrieben, so können Sie diesen ge-nauso aufrufen, wie die eingebauten Mat-lab-Funktionen. Für das Schreiben einesFunction-Files sind verschiedene Dinge zubeachten.

Damit ein File ein Function-File ist, muss ermit dem Schlüsselwort function beginnen,dann folgen die Ausgabeargumente (in ecki-gen Klammern), der Funktionsname undschlieÿlich die Eingabeargumente (in run-den Klammern). Die Form aller Function-Files ist

function [Out_1,...,Out_n] =

Name(In_1,...,In_m)

< Irgendwelche Anweisungen >

wobei Name der vom Anwender anzugeben-de Funktionsname ist. Der Funktionsname(hier Name) muss auch der Filename sein,unter der der Function-File abgespeichertwird. Es ist möglich, dass ein Function-Filekeine Ausgabe- und/oder Eingabeargumen-te hat.

Die folgende Funktion ist ein Beispiel füreinen Function-File.

function [V,D,r] = MatrixEig(A)

[m,n] = size(A);

if m==n

[V,D] = eig(A);

r = rank(A);

else

disp('Fehler: Die Matrix muss

quadratisch sein!')

end

Schreiben Sie sich die obigen Anweisungenin eine Datei mit dem Namen MatrixEig.m

und de�nieren Sie eine Matrix A im Mat-lab-Workspace. Führen Sie

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

aus, dann stehen in der Matrix V die Ei-genvektoren, in der Hauptdiagonalen von D

die Eigenwerte und in r der Rang der Ma-trix A. V,D,r sind die Ausgabe- und A dasEingabeargument der Funktion MatrixEig.Der von uns geschriebene Function-FileMatrixEig ruft mehrer eingebaute Mat-lab-Funktionen auf: size, eig, usw.

Functions können sowohl von anderenFunctions als auch von Scripts aufgeru-fen werden. Es ist eine Stärke von Mat-lab-Funktionen, mit einer unterschiedli-chen Anzahl von Übergabeparameter zu-rechtzukommen. Hierzu exisitieren inner-halb einer Funktion die Variablen nargin

und nargout (number argument in/out),die die Anzahl der übergebenen Parame-ter enthalten. Zusätzlich stehen noch die

62 Copyright c© G. Gramlich

Page 63: EinfMATLAB

Befehle inputname zum Ermitteln der Va-riablennamen der Übergabeargumente undnargchk zum Überprüfen der korrekten An-zahl der übergebenen Argumente zur Verfü-gung. Siehe doc nargin, doc nargout, docinputname und doc nargchk für entspre-chende Beispiele. Für weitere Informatio-nen über Funktionen siehe doc function

(help function) und Abschnitt 44.

39.3. Namen von m-Files

Für m-Files gelten bezüglich der Namens-wahl die gleichen Regeln wie für Variablen,siehe Abschnitt 13. Insbesondere wird zwi-schen Klein- und Groÿbuchstaben unter-schieden. Weitere Infos �nden Sie unter docgeneral und doc lang.

39.4. Editieren von m-Files

Sie haben zwei Möglichkeiten, um einenm-File zu erzeugen und zu editieren. Siekönnen einerseits mit einem Editor IhrerWahl arbeiten oder andererseits den eige-bauten Matlab-Editor/Debugger verwen-den. Diesen können Sie mit dem Befehledit aktivieren oder durch Anklicken derMenüoptionen File-New oder File-Open.

39.5. Zur Struktur eines m-Files

m-Files sollten, um sie auch nach länge-rer Zeit wieder verwenden zu können, gutdokumentiert sein (Software Engineering).Professionalle m-Files haben daher folgen-de Form:

function [Out,...] = Name(In,...)

% H1-Zeile

% Help Text

% Help Text usw.

< Irgendwelche Anweisungen >

Die erste Zeile legt den Funktionsnamenund die Ein- und Ausgabeparameter fest.Dies haben wir bereits besprochen. Diezweite Zeile ist die sogenannte H1-Zeile. Inihr wird in einer Zeile das Programm be-schrieben. Dies ist die erste Zeile, die aufdem Bilschirm ausgegeben wird, wenn Siehelp Name eingeben. Auÿerdem sucht dielookfor-Funktion nur in dieser H1-Zeileund gibt nur diese aus. Geben Sie sich da-her besondere Mühe, diese H1-Zeile kurzund prägnant zu schreiben. In weiteren an-schlieÿenden Zeilen können Sie den m-Fileweiter dokumentieren. Script-Files werdengenauso gehandelt, dann aber entfällt na-türlich die erste Zeile mit dem Schlüssel-wort function. Weitere Informationen �n-den Sie in [17].

39.6. Blockkommentare

SeitMatlab 7 können Sie auch Blöcke vonCodes auskommentieren, indem Sie den Co-de in zwei spezielle Kommentarzeielen set-zen:

%{

<Block>

%}

63 Copyright c© G. Gramlich

Page 64: EinfMATLAB

<Block> steht für eine beliebige Anzahl vonCodezeilen. Matlab betrachtet dann alleZeilen zwischen %{ und %} als Kommentar.Blockkommentare können auch geschach-telt werden.

39.7. Übungsaufgaben

Aufgabe 49 (Function-File)Schreiben Sie einen Function-File, der voneinem Vektor x den arithmetischen undgeometrischen Mittelwert berechnet unddie Werte zurückgibt.Lösung: Die folgende Funktion tut das Ge-wünschte.

function [aM,gM] = Mittelwerte(x)

aM = mean(x);

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

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 50 (Function-File)Schreiben Sie einen Function-File, derdie Sprungfunktion (Einheitssprungfukti-on, Heaviside-Funktion)

h(t) =

{0 t < 01 t ≥ 0

berechnet. Zeichnen Sie diese Funktion imIntervall [−2, 2]. Vergleichen Sie die Funkti-on h mit der in Matlab de�nierten Funk-tion heaviside. Wo gibt es Unterschiede?Lösung: Die Funktion h ist durch denFunction-File

function y = h(t)

y = ( t>=0 );

de�niert und mit den Anweisungen

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

erhält man die Abbildung 25.

−3 −2 −1 0 1 2 3−0.5

0

0.5

1

1.5

Abbildung 25: Sprungfunktion

Die Funktion heaviside aus Matlab istan der Stelle t = 0 unde�niert, das heiÿtMatlab ordnet dem Nullpunkt NaN zu. ©©

Aufgabe 51 (Function-File)Zeichnen Sie die Graphen der verschobenenSprungfunktionen h(t+T ), t ∈ R und h(t−T ), t ∈ R für T = 2 im Intervall [−4, 4].Lösung: Die Funktionen können mit demFunction-File

function y = hT(t,T)

y = ( t>=-T );

berechnet werden. Die Anweisungen

subplot(2,1,1)

fplot(@hT,[-4,4,-0.5,1.5],[],...

64 Copyright c© G. Gramlich

Page 65: EinfMATLAB

[],[],2),

grid, title('h(t+2)')

subplot(2,1,2)

fplot(@hT,[-4,4,-0.5,1.5],[],...

[],[],-2),

grid, title('h(t-2)')

erzeugen die Abbildung 26. © . . . . . . . . . . . ©

−4 −2 0 2 4−0.5

0

0.5

1

1.5h(t+2)

−4 −2 0 2 4−0.5

0

0.5

1

1.5h(t−2)

Abbildung 26: Verschobene Sprungfunktio-nen

Aufgabe 52 (Function-File)Schreiben Sie jeweils einen Function-File,um die folgenden stückweise de�niertenFunktionen zu berechnen:

(a) rect(t) =

{1 |t| ≤ 0.50 sonst

(b) ramp(t) =

{0 t < 0t sonst

(c) g(t) =

0 t < 0sin(πt

2 ) 0 ≤ t ≤ 11 1 < t

Zeichnen Sie die Graphen der Funktionenim Intervall [−2, 2].Lösung: Mit Hilfe der Sprungfunktion hlassen sich diese Funktionen geschlossendarstellen. Es ist rect(t) = h(t+0.5)−h(t−0.5), t ∈ R, ramp(t) = th(t), t ∈ R undg(t) = sin(πt

2 )(h(t)−h(t−1)), t ∈ R. Daherlassen sich diese drei Funktionen in Mat-lab wie folgt berechnen.

function y = rect(t)

y = h(t+0.5)-h(t-0.5);

function y = ramp(t)

y = t.*h(t);

function y = g(t)

y = sin(pi*t/2)*(h(t)-h(t-1))+...

(t>=1);

Die Anweisungen

subplot(3,1,1), title('rect')

fplot(@rect,[-2,2,-0.5,2]), grid

subplot(3,1,2), title('ramp')

fplot(@ramp,[-2,2,-0.5,2]), grid

subplot(3,1,3), title('g')

fplot(@g,[-2,2,-0.5,2]), grid

erzeugen die Abbildung 27. © . . . . . . . . . . . ©

Aufgabe 53 (Function-File)Schreiben Sie einen Function-File, um fol-gende Funktion zu berechnen:

f(x) =

x x < 0x2 0 ≤ x < 24 x ≥ 2

65 Copyright c© G. Gramlich

Page 66: EinfMATLAB

−2 −1 0 1 2

0

1

2

−2 −1 0 1 2

0

1

2

−2 −1 0 1 2

0

1

2

Abbildung 27: Graph der Funktionen

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

function y = f(x)

y1 = x.*(x<0);

y2 = x.^2.*( (x<2)-(x<=0) );

y3 = 4*(x>=2);

y = y1+y2+y3;

Der Aufruf fplot(@f,[-3,3]) zeichnetden Graph im Intervall [−3, 3]. © . . . . . . . .©

Aufgabe 54 (Function-File)Schreiben Sie einen Function-File, um die

Funktion f(t) = t13 , t ∈ R zu berechnen.

Benutzen Sie diesen, um die Funktion f imIntervall [0, 1] zu zeichnen.Lösung: Mit dem Function-File

function y = f(t)

y = t.^(1/3);

kann man den Graph mit fplot(@f,[0,1])zeichnen. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

Aufgabe 55 (Function-File)Zeichnen Sie die konstante Funktion f(x) =5, x ∈ R im Intervall [0, 2].Lösung: Eine Möglichkeit ist:

>> f = @(x) 5;

>> fplot(f,[0,2])

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

40. Globale und lokale Variablen

Die Variablen innerhalb jeder Funktion sindlokal, die in Script-Files sind global. Globa-le Variablen können aber auch mit globalde�niert werden. Um auf diese Variablenzugreifen zu können, muss diese De�niti-on sowohl im Haupt-Workspace als auch inder Function erfolgen. Angezeigt werden dieglobalen Variablen mit whos global, ge-löscht werden sie mit clear global.

41. Wie man e�zienteProgramme schreibt

Schleifen werden inMatlab ine�zient aus-geführt. Deshalb sollten Sie diese vermei-den, wo immer es geht. Nahezu alle Mat-lab-Funktion akzeptieren �vektorielle� Ar-gumente, so dass man auf Schleifen häu�gtatsächlich auch verzichten kann.

66 Copyright c© G. Gramlich

Page 67: EinfMATLAB

Angenommen Sie wollen die ersten 100 na-türlichen Zahlen aufsummieren (nicht aberdie Formel n(n + 1)/2 verwenden). In ei-ner skalaren Programmiersprache wie zumBeispiel in C/C++ würde man wie folgtvorgehen:

int s = 0;

int n;

for (n=1;n<101;++n)

{

s = s+n;

}

print(``%d\n'',s);

Die analoge Version dieses kleinen Pro-gramms in Matlab wäre:

s = 0;

for n=1:100

s = s+n;

end

s

Dieser skalare Matlab-Code kann e�zien-ter und übersichtlicher geschrieben werden:

N = 1:100;

s = sum(N)

Der erste Befehl erzeugt den Zeilenvek-tor N = [1,2,...,100]. Die zweite Anwei-sung summiert die Koordinaten des Vek-tors N auf. sum ist eine eingebauteMatlab-Funktion und verträgt Vektoren als Argu-mente. Viele Matlab-Funktionen können

Vektoren oder Matrizen als Argumente ver-arbeiten. Dies lässt eine vektorielle Verar-beitung zu.

Die rationale Funktion

f(x) =(

1 + x24

1− x12 + x2

384

)8

stellt im Intervall [0, 1] eine Approximationan die Exponentialfunktion e dar.

Der nachfolgende Script zeigt, wie man dieAuswertung dieser Funktion in einer skala-ren Programmiersprache wie zum BeispielFORTRAN oder C/C++ vornehmen müss-te.

n = 200;

x = linspace(0,1,n);

y = zeros(1,n);

for k=1:n

y(k) = ((1+x(k)/24)/(1-x(k)/12...

+(x(k)/384)*x(k)))^8;

end

In Matlab aber sind Vektoroperationenerlaubt, das heiÿt die for-Schleife kanndurch eine einzige vektorwertige Anwei-sung ersetzt werden. Der folgende Script-File zeigt eine vektorielle Implementierungder Funktion f . Der Übersichtlichkeit we-gen splitten wir den Term f(x) in mehrereTerme auf.

n = 200;

x = linspace(0,1,n);

Zaehler = 1 + x/24;

Nenner = 1 - x/12 + (x/384).*x;

67 Copyright c© G. Gramlich

Page 68: EinfMATLAB

Quotient = Zaehler./Nenner;

y = Quotient.^8;

Um der Variablen y die entsprechendenFunktionswerte von f zuzuweisen, werdenverschiedene bekannte und weniger bekann-te Vektoroperationen durchgeführt: Vektor-addition, Vektorsubtraktion, skalare Multi-plikation, punktweise Vektormultiplikation,punktweise Vektordivision und punktweiseVektorexponentiation.

Betrachten wir den Script-File genauer.Matlab erlaubt es, einen Vektor mit ei-nem Skalar zu multiplizieren. Dies zeigtder Term x/24. Dort wird jede Koordina-te des Vektors x durch die Zahl 24 divi-diert bzw. mit 1/24 multipliziert. Das Er-gebnis ist ein Vektor mit der gleichen Län-ge und Orientierung (Zeile oder Spalte) wieder Vektor x. Im obigen Script ist x ein Zei-lenvektor und somit ist x/24 ebenfalls einZeilenvektor. Durch die Anweisung 1+x/24

wird zu jeder Koordinate des neuen Vek-tors x/24 1 hinzuaddiert und der VariablenZaehler zugeordnet. Dies ist natürlich kei-ne Vektorraumoperation, aber eine nützli-che Matlab-Eigenschaft. Wir betrachtennun die Variable Nenner. Hierbei bedeutetdie Operation (x/384).*x eine punktweiseVektormultiplikation. das heiÿt jede Koor-dinate von x/384 wird mit jeder Koordi-naten des Vektors x multipliziert. BeachtenSie, dass die Vektoren die gleiche Länge ha-ben. Zum Ergebnis wird 1 hinzuaddiert undvon jeder Koordinate x/12 subtrahiert, be-vor das Ergebnis der Variablen Nenner zu-geordnet wird. Die Anweisung Quotient =

Zaehler./Nenner bedeutet punktweise Di-vision, das heiÿt, jede Komponente des Vek-tors Zaehler wird durch die entsprechen-de Koordinate des Vektors Nenner dividiertund anschlieÿend der Variablen Quotient

zugeordnet. Schlieÿlich wird durch die An-weisung y = Quotient.�8 punktweise po-tenziert, das heiÿt jede Koordinate des Vek-tor Quotient wird mit 8 potenziert, bevordas Resultat der Variablen y zugeordnetwird.

Die Matlab-Funktion vectorize vektori-siert einen String automatisch. Hierzu be-trachten wir folgendes Beispiel. Sind dieVektoren Zaehler und Nenner wie folgt de-�niert:

Zaehler = [1 2 3];

Nenner = [4 5 6];

dann ist Zaehler/Nenner keine vektorielleDivsion, da vor dem Divisionszeichen / derPunkt . fehlt. Die Anweisung

>> vectorize('Zaehler/Nenner')

ans =

Zaehler./Nenner

erzeugt die gewünschte Syntax. Analogsetzt der Befehl vectorize vor den Zeichen* und � einen Punkt und ermöglichst somiteine vektorisierte Operation.

Aufgabe 56 (E�ziente Programme)Vektorisieren Sie den String '((1+x/24)/

(1-x/12+x�2/384))�8' und zeigen Sie gra-�sch, dass f eine Approximation im Inter-vall [0, 1] an die Exponentialfunktion e ist.

68 Copyright c© G. Gramlich

Page 69: EinfMATLAB

Lösung: Die folgenden Zeilen lösen dieAufgabe.

y = vectorize('((1+x/24)/(1-

x/12+x^2/384))^8');

x = linspace(0,1,20);

vs = vectorize('((1+x/24)/(1-

x/12+x^2/384))^8');

y = eval(vs,x);

plot(x,exp(x),x,y,'ro')

legend('e','f')

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Nicht alle Berechnungen sind jedoch vek-torisierbar. In diesen Fällen muss man aufSchleifen zurückgreifen. Um diese Berech-nungen jedoch schneller auszuführen, sollteman die Ausgabematrizen mit Nullen vor-besetzen (Preallokieren). Wir erläutern aneinem Beispiel, was damit gemeint ist. An-genommen es sei die Matrix

A =[

0.8 0.30.2 0.7

]gegeben und wir wollen die Eigenwerte derMatrizen Ak für k = 1, 2, . . . , 10 berechnen.Die Eigenwerte sollen spaltenweise in derAusgabematrix E gespeichert werden. Dasfolgende Script realisiert dies:

E = zeros(2,10);

for k=1:10

E(:,k) = eig(A^k);

end

Mit der Anweisung E = zeros(2,10); ha-ben wir die Ausgabematrix E mit Nullen

vorbesetzt. Hätten wir dies nicht getan, somüsste Matlab in jedem Schleifendurch-lauf die Gröÿe der Matrix E durch Hin-zunahme einer weiteren Spalte verändern,was sich durch eine längere Ausführungszeitbemerkbar machen würde. Darüber hinaushat das Vorbesetzen der Ausgabematrizenden Vorteil, dass man sich bereits vorherüber die Gröÿe und Orientierung Gedankenmachen muss, was zu disziplinärem Pro-grammierstil erzieht.

Wir fassen noch einmal zusammen: Das Er-setzen einer Schleife durch eine Vektorope-ration nennt man Vektorisierung und hatdrei Vorteile:

• Geschwindigkeit. Viele eingebaute Mat-lab-Funktionen werden schneller ausge-führt, wenn man anstelle eines mehrfa-chen Aufrufs als Argument einen Vektorübergibt.

• Übersichtlichkeit. Es ist übersichtlicher,ein vektorisiertes Matlab-Script zu le-sen, als das skalare Gegenstück.

• Ausbildung. Im wissenschaftlichen Rech-nen ist man bei verschiedenen Rechnerninteressiert, vektorisierte Algorithmen zuentwickeln und zu implementieren.Mat-lab unterstützt dies.

Somit gilt:

Vermeiden Sie Schleifen in Mat-lab, wann immer dies möglichist.

Vektorisieren Sie ihre Rechnun-gen, wann immer dies möglich ist.

69 Copyright c© G. Gramlich

Page 70: EinfMATLAB

Aufgabe 57 (Programmierung)Schreiben Sie die folgendenMatlab-Zeilenvektoriell.

for x = 1:10

y = sqrt(x);

end

Lösung: Die vektorielle und e�zientereProgrammierung ist:

x = 1:10;

y = sqrt(x);

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 58 (Programmierung)Plotten Sie die Funktion

f(x) =2 sin(x) + 3 sin(2x) + 7 sin(3x)+ 5 sin(4x), x ∈ R

im Intervall [−10, 10].Lösung: Wir nutzen die vektorielle Pro-grammierfähigkeit von Matlab, sowie et-was Matrizenrechnung und können f so wiefolgt e�zient darstellen.

n = 200;

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

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

sin(4*x)];

y = A*[2; 3; 7; 5];

plot(x,y)

Der Graph der Funktion f ist in Abbildung28 zu sehen. © . . . . . . . . . . . . . . . . . . . . . . . . . . ©

−10 −5 0 5 10−20

−10

0

10

20

Abbildung 28: Graph von f

42. Lineare Algebra (1)

Diesen Abschnitt habe ich im Zusammen-hang mit meinem Buch [4] geschrieben.Viele Beispiele sind daraus. Im Folgen-den werden wir je nach Bedarf zwischennumerischen und symbolischen Funktionenhin und her wechseln, das heiÿt zwischenGrundfunktionen aus Matlab und zwi-schen Funktionen aus der Symbolic Toolbox,siehe auch Abschnitt 60.

42.1. Lineare Gleichungssysteme undMatrizen

Zu Matrizen siehe auch Abschnitt 20. Daslineare Gleichungssystem

x + y + 2z = 92x + 4y − 3z = 13x + 6y − 5z = 0

aus Beispiel 1.6 in [4] können wir inMatlab mit dem \-Operator (Backslash-Operator) wie folgt lösen.

70 Copyright c© G. Gramlich

Page 71: EinfMATLAB

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

>> b = [9; 1; 0];

>> x = A\b

ans =

1.0000

2.0000

3.0000

Alternativ können wir die Funktion rref

verwenden. Diese transformiert eine gege-bene Matrix in reduzierte Zeilenstufenform.

>> rref([A b])

ans =

1 0 0 1

0 1 0 2

0 0 1 3

Die Lösung kann nun direkt abgelesen wer-den. Die Funktion inv berechnet die Inverseeiner Matrix. Daher �nden wir die Lösungauch wie folgt (Satz 1.8)

>> x = inv(A)*b

x =

1.0000

2.0000

3.0000

Wir bestätigen Satz 1.9 in Matlab.

>> syms a b c d

>> A = [a,b; c,d];

>> inv(A)

ans =

[ d/(a*d-b*c), -b/(a*d-b*c)]

[ -c/(a*d-b*c), a/(a*d-b*c)]

Die Funktion inv kann sowohl fürnumerische als auch für symboli-sche Rechnungen verwendet wer-den. Dies gilt auch für viele ande-re Funktionen.

Die Null- und Einheitsmatrizen jeder Grö-ÿe können durch die Funktionen zeros undeye erzeugt werden. Die Funktion lu be-rechnet die LU-Faktorisierung einer Matrix.

Aufgabe 59 (Lineare Systeme)Berechnen Sie die allgemeine Lösung des li-nearen Gleichungssystems 2 4 −2

4 9 −3−2 −3 7

x1

x2

x3

=

2810

.

A x b

Lösung: Die allgemeine Lösung ist die ein-deutige Lösung x = (−1, 2, 2). Dies zeigendie nachfolgenden Matlab-Zeilen.

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

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

>> x = A\b

x =

-1.0000

2.0000

2.0000

Die Lösung ist eindeutig, sonst wäre dieMatrix A singulär und Matlab hätte miteiner Fehlermeldung geantwortet. Hier nochalternativ die symbolische Lösung.

71 Copyright c© G. Gramlich

Page 72: EinfMATLAB

>> x = sym(A)\b

x =

[ -1]

[ 2]

[ 2]

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 60 (Lineare Systeme)Berechnen Sie die allgemeine Lösung des li-nearen Gleichungssystems

4x1 − 8x2 = 123x1 − 6x2 = 9

−2x1 + 4x2 = − 6.

Lösung: Die allgemeine Lösung können wiraus

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

>> b = [12; 9; -6];

>> rref([A b])

ans =

1 -2 3

0 0 0

0 0 0

ablesen. Demnach ist: x = (3, 0) + t(2, 1),t ∈ R die allgemeine Lösung. Dieses Bei-spiel zeigt, dass auch überbestimmte Syste-me unendlich viele Lösungen haben können.© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 61 (Lineare Systeme)Berechnen Sie die allgemeine Lösung des li-nearen Gleichungssystems

−x2 + 3x3 = 13x1 + 6x2 − 3x3 = −26x1 + 6x2 + 3x3 = 5.

Lösung: Die allgemeine Lösung ist die ein-deutige Lösung x = (3,−2,−1/3), denn esgilt

>> A = [0 -1 3; 3 6 -3; 6 6 3];

>> b = [1; -2; 5];

>> sym(A)\b

ans =

[ 3]

[ -2]

[ -1/3]

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 62 (Lineare Systeme)Berechnen Sie die allgemeine Lösung des li-nearen Gleichungssystems

x1 + x2 + 2x3 = 8−x1 − 2x2 + 3x3 = 13x1 − 7x2 + 4x3 = 10.

Lösung: Die allgemeine Lösung ist die ein-deutige Lösung x = (3, 1, 2), denn es gilt

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

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

>> sym(A)\b

72 Copyright c© G. Gramlich

Page 73: EinfMATLAB

ans =

[ 3]

[ 1]

[ 2]

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 63 (Lineare Systeme)Berechnen Sie die allgemeine Lösung vonAx = b mit

A =

4 1 0 0 01 4 1 0 00 1 4 1 00 0 1 4 10 0 0 1 4

, b =

4.12.44.22.44.1

,

wobei es ganz Ihnen überlassen ist, wie Siedie allgemeine Lösung herausbekommen.Lösung: Die eindeutige Lösung ergibt sichaus den folgenden Anweisungen.

>> A = 4*diag([ones(5,1)])+...

diag([ones(4,1)],1)+...

diag([ones(4,1)],-1)

A =

4 1 0 0 0

1 4 1 0 0

0 1 4 1 0

0 0 1 4 1

0 0 0 1 4

>> b = [4.1,2.4,4.2,2.4,4.1]';

>> A\b

ans =

1.0000

0.1000

1.0000

0.1000

1.0000

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 64 (Beispiel 1.24 in [4])Berechnen Sie die Inverse der Matrix

A =[

1 −23 2

]Lösung: Es ist

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

>> inv(sym(A))

ans =

[ 1/4, 1/4]

[ -3/8, 1/8]

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 65 (Inverse)Finden Sie mitMatlab die Inverse der Ma-trix

S =

a b cd e fg h i

Unter welchen Bedingungen existiert diese?Bestätigen Sie mit diesem Ergebnis die In-verse in Beispiel 1.26 aus [4].Lösung: Die Inverse erhalten wir durch

>> syms a b c d e f g h i

>> S = [a b c; d e f; g h i];

>> pretty(inv(S))

[ e i - f h

[ --------- usw.

[ %1

[

[ d i - f g

73 Copyright c© G. Gramlich

Page 74: EinfMATLAB

[- --------- usw.

[ %1

[

[ -d h + e g

[- ---------- usw.

[ %1

%1 := a e i - a f h - d b i +

d c h + g b f - g c e

Die Inverse exisiert genau dann, wenn derNenner aei − afh − dbi + dch + gbf − gceungleich Null ist. Ein Vergleich mit

>> det(S)

ans =

a*e*i-a*f*h-d*b*i+d*c*h+g*b*f-g*c*e

zeigt, dass dies gerade die Determinantevon S ist. Setzt man für a = 1, b = 1, . . .,i = −5 nach Beispiel 1.26 in [4], so erhältman die Inverse zu 2 −17 11

−1 11 −70 3 −2

.

Übrigends die Determinante der Matrix ist−1. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 66 (Symmetrische Matrizen)Angenommen Sie wollen einen Algorithmustesten, der als Eingabe eine symmetrischeMatrix benötigt. Finden Sie eine Möglich-keit eine beliebige symmetrische Matrix inMatlab zu erzeugen.Lösung: Nach den folgenden Zeilen

n = 44; %-zum Beispiel 44.Ordnung

A = rand(n);

B = A + A';

steht in der Matrix B eine symmetrischeMatrix aus R44×44. © . . . . . . . . . . . . . . . . . . . ©

42.2. Vektoren in der Ebene und imRaum

Zu Vektoren siehe auch Abschnitt 18. Vek-toroperationen lassen sich in Matlab ein-fach ausführen. Die Summe der beiden Vek-toren u = (2, 3,−1) und v = (3,−4, 2) ist(Beispiel 2.3 in [4])

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

>> u+v

ans =

5

-1

1

Die Länge des Vektors v = (4,−3) ist

>> norm([4;-3])

ans =

5

Das Skalarprodukt der beiden Vektorenu = (0, 0, 1) und v = (0,−2, 2) haben wirin Beispiel 2.8 ausgerechnet; hier die Bestä-tigung mit der dot-Funktion

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

>> dot(u,v)

74 Copyright c© G. Gramlich

Page 75: EinfMATLAB

ans =

2

Den Winkel aus Beispiel 2.9 berechnen wirwie folgt

>> KosWinkel = dot(u,v)/...

(norm(u)*norm(v))

KosWinkel =

0.5000

>> phi = acos(KosWinkel)

phi =

1.0472

Beachten Sie, Matlab rechnet im Bogen-maÿ. Die Zeile

>> 180*phi/pi

ans =

60.0000

liefert den Winkel im Gradmaÿ. Wir be-rechnen den Projektionsvektor aus Beispiel2.12

>> p = (u'*a)/(norm(a)^2)*a

p =

2.7692

-0.6923

2.0769

Mit der cross-Funktion können wir dasKreuzprodukt berechnen. Wir bestätigendamit Beispiel 2.13

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

>> cross(u,v)

ans =

2

-7

-6

Das dyadische Produkt abT von Vektora = (1, 2) und b = (4, 1, 4, 3) berechnet sichwie folgt

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

>> a*b'

ans =

4 1 4 3

8 2 8 6

Aufgabe 67 (Skalarprodukt)Berechnen Sie jeweils das Skalarproduktder angegebenen Vektoren:

(a) a = (1, 0); b = (0, 1)

(b) a = (1, 0, 0); b = (0, 1, 0)

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

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

Lösung:

(a) >> dot([1,0],[0,1])

ans =

0

(b) >> dot([1,0,0],[0,1,0])

ans =

0

75 Copyright c© G. Gramlich

Page 76: EinfMATLAB

(c) >> dot([1,1,1],[-2,-2,-2])

ans =

-6

(d) >> dot([2,2,2],[3,3,3])

ans =

18

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

42.3. Analytische Geometrie vonGeraden und Ebenen

Wir berechnen den Normalenvektor ausBeispiel 3.12 in [4]

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

ans =

10 -8 -5

Mehr Geometrie und Matlab �nden Siebei [20].

42.4. Reelle Vektorräume undUnterräume

Zur Berechnung einer orthonormalen Basisdes Nullraumes und des Spaltenraumes ste-hen uns die Funktionen null und orth zurVerfügung. Die Funktion null liefert auchvon symbolischen Matrizen eine Basis; dieseist im Allgemeinen aber nicht orthogonal.Um symbolisch eine Spaltenraumbasis zuerhalten, können wir colspace verwenden.Auch hier gilt, dass diese im Allgemeinen

nicht orthogonal ist. Wir betrachten Zah-lenbeispiele mit der Matrix A aus Beispiel4.23.

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

>> null(A)

ans =

[ -2]

[ 1]

AuchMatlab hat t = 1 gewählt, um einenBasisvektor für den Nullraum von A zu be-stimmen. Eine (numerische) Basis der Län-ge 1 erhält man mit

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

>> null(A)

ans =

-0.8944

0.4472

Die beiden Anweisungen

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

>> colspace(A)

ans =

[ 1]

[ 3]

liefern eine Basis des Spaltenraumes vonA. Eine Basis der Länge 1 erhält man mitorth.

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

>> orth(A)

ans =

-0.3162

-0.9487

76 Copyright c© G. Gramlich

Page 77: EinfMATLAB

Wir bestätigen Satz 4.12.

>> null(A)

ans =

[ -2]

[ 1]

>> Z = rref(A)

Z =

[ 1, 2]

[ 0, 0]

>> null(Z)

ans =

[ -2]

[ 1]

und

>> colspace(A')

ans =

[ 1]

[ 2]

>> colspace(rref(A)')

ans =

[ 1]

[ 2]

Den Rang einer Matrix können wir mit derFunktion rank bestimmen. Wir berechnenden Rang der Matrix A aus Beispiel 4.26.

>> A = [1 2 4 0 1; 0 1 2 0 0;...

0 0 0 1 0; 0 0 0 0 0];

>> rank(A)

ans =

3

In Beispiel 4.28 haben wir alle vier Funda-mentalräume an Hand der Matrix A disku-

tiert. Wir bestätigen nun die dort gefunde-nen Resultate, indem wir zu jedem Funda-mentalraum eine Basis berechnen.

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

>> null(A)

ans =

[ -2]

[ 1]

>> colspace(A)

ans =

[ 1]

[ 3]

>> null(A')

ans =

[ -3]

[ 1]

>> colspace(A')

ans =

[ 1]

[ 2]

Basen der Länge 1 erhalten wir wie folgt

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

>> null(A)

ans =

-0.8944

0.4472

>> orth(A)

ans =

-0.3162

-0.9487

>> null(A')

ans =

-0.9487

0.3162

>> orth(A')

77 Copyright c© G. Gramlich

Page 78: EinfMATLAB

ans =

-0.4472

-0.8944

Der Spaltenraum von A und der Nullraumvon AT sind orthogonale Komplemente imRm. Hier eine Bestätigung

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

>> orth(A)'*null(A')

ans =

-1.6653e-016

bzw. analog im Rn, nun symbolisch.

>> colspace(A')'*null(A)

ans =

0

Mit dem Backslash-Operator \ können wirlineare Ausgleichsaufgaben lösen. Wir be-stätigen damit die Lösung aus Beispiel 4.34.

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

>> b = [6;0;0];

>> A\b

ans =

5.0000

-3.0000

Aufgabe 68 (Lineare Unabhängigkeit)Sind die Vektoren a = (1,−2, 3),b = (5, 6,−1) und c = (3, 2, 1) linearunabhängig (Beispiel 4.16 in [4])?Lösung: Die nachfolgenden Matlab-Zeilen zeigen auf verschiedene Weisen, dassdie drei Vektoren linear abhängig sind.

>> a = [1,-2,3];

>> b = [5,6,-1];

>> c = [3,2,1];

>> A = sym([a',b',c']);

>> det(A), rank(A)

ans =

0

ans =

2

>> eig(A)

ans =

0

4

4

>> svd(A)

ans =

0

(45+3*97^(1/2))^(1/2)

(45-3*97^(1/2))^(1/2)

>> rref(A)

ans =

[ 1, 0, 1/2]

[ 0, 1, 1/2]

[ 0, 0, 0]

>> null(A)

ans =

1

1

-2

>> colspace(A)

ans =

[ 1, 0]

[ 0, 1]

[ 1, -1]

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

78 Copyright c© G. Gramlich

Page 79: EinfMATLAB

Aufgabe 69 (Basen)Bestimmen Sie von der Matrix

A =

1 01 11 2

jeweils eine Basis der vier Fundamentalräu-me.Lösung: Hier eine symbolische Lösung. Zu-erst Basen des Nullraumes und des Spal-tenraumes, dann Basen des transponiertenNullraumes und des Zeilenraumes.

>> null(A), colspace(A)

ans =

[ empty sym ]

ans =

[ 1, 0]

[ 0, 1]

[ -1, 2]

>> null(A'), colspace(A')

ans =

[ 1]

[ -2]

[ 1]

ans =

[ 1, 0]

[ 0, 1]

Für eine numerische Lösung benützt mandie Funktionen null und orth; diese liefernsogar orthonormale Basen. © . . . . . . . . . . . . ©

Aufgabe 70 (LGS und Rang)Wie können Sie (in Matlab) entscheiden,ob ein lineares Gleichungssystem eine Lö-sung hat?

Lösung: Zum Beispiel mit der Funktionrank. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 71 (LGS und Rang)Wenn ein lineares Gleichungssystem eineLösung hat, wie können Sie dann (in Mat-lab) entscheiden, ob es genau eine odermehrere gibt?Lösung: Zum Beispiel mit der Funktionrank. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 72 (Ausgleich)Berechnen Sie die Näherungslösung (imSinne der linearen Ausgleichsrechnung) vonAx = b und den orthogonalen Projektions-vektor p von b auf den Spaltenraum von Ades Systems 1 1

−1 1−1 2

[x1

x2

]=

70

−7

.

A x b

Lösung: Die nachfolgende Zeilen geben dieLösungen.

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

>> b = [7; 0 ; -7];

>> x = A\b

x =

5.0000

0.5000

>> p = A*x

p =

5.5000

-4.5000

-4.0000

79 Copyright c© G. Gramlich

Page 80: EinfMATLAB

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 73 (Ausgleich)Die Datenpunkte

ti bi

0 3.8250.2 4.5280.4 4.7460.6 4.8730.8 4.8651.0 4.813

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

f(t, x) = x1 + x2t + x3 cos(t)

angepasst werden. Zeichnen Sie die Daten-punkte und die Ausgleichsfunktion, nach-dem Sie die Lösung berechnet haben.Lösung:

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

b = [3.825 4.528 4.746 4.873...

4.865 4.813]';

A = [ones(length(t),1),t,cos(t)];

x = A\b

x =

-1.0428

3.1516

4.9265

plot(t,b,'o','MarkerSize',10)

tt = linspace(min(t),max(t));

f = x(1)+x(2)*tt+x(3)*cos(tt);

hold on

plot(tt,f)

0 0.2 0.4 0.6 0.8 13.8

4

4.2

4.4

4.6

4.8

5

Abbildung 29: Zu Aufgabe 73

Die Abbildung 29 zeigt die gra�sche Dar-stellung. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

42.5. Determinanten

Zur Berechnung der Determinante einerMatrix steht die Funktion det zur Verfü-gung, sowohl numerisch als auch symbo-lisch. Wir berechnen die Determinante von

A =[

a bc d

].

>> syms a b c d

>> A = [a b; c d];

>> det(A)

ans =

a*d-b*c

Die folgende Zeile bestätigt das Ergebnisaus Beispiel 5.10.

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

>> det(A)

80 Copyright c© G. Gramlich

Page 81: EinfMATLAB

ans =

-1

Aufgabe 74 (Determinanten)Berechnen Sie die Determinante von

A =

1 1 22 4 −33 6 −5

Lösung: Hier die symbolische Lösung.

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

>> det(A)

ans =

-1

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

42.6. Eigenwerte und Eigenvektoren

Die Funktion eig hift uns beim Lösen einerEigenaufgabe. Es können damit sowohl Ei-genwerte als auch Eigenvektoren berechnetwerden, sowohl numerisch als auch symbo-lisch. Wir bestätigen Beispiel 6.2.

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

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

X =

[ 1, 1]

[ 1, 2]

D =

[ 2, 0]

[ 0, 3]

Das charakteristische Polynom einer Ma-trix erhalten wir mit der Funktion poly;siehe Beispiel 6.2.

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

>> poly(A)

ans =

x^2-5*x+6

Eine symmetrische Matrix ist immer diago-nalisierbar. Wir überprüfen Beispiel 6.12.

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

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

X =

[ 0, 1, 1]

[ -1, -1, 1]

[ 1, 0, 1]

D =

[ 2, 0, 0]

[ 0, 2, 0]

[ 0, 0, 8]

Wir machen die Probe.

>> X*D*inv(X)

ans =

[ 4, 2, 2]

[ 2, 4, 2]

[ 2, 2, 4]

Für eine symbolische Matrix versucht dieFunktion eig ein exaktes Eigenwertsystemzu berechnen. Aus derGalois-Theorie wis-sen wir, dass dies jedoch nicht immer fürMatrizen der Ordnung 5 oder gröÿer mög-

81 Copyright c© G. Gramlich

Page 82: EinfMATLAB

lich ist. Es sei

A =

−6 12 48 −21 −8

−29 72 27

gegeben. Wir wollen Matlab verwenden,um folgende Frage zu beantworten: Ist Areell diagonalisierbar, das heiÿt, können wireine Matrix X �nden, so dass X−1AX dia-gonalisierbar ist? Die Eigenwerte von A �n-den wir mit eig(sym(A)).Matlab antwor-tet mit:

ans =

[ 3]

[ -2]

[ -1]

Da die Eigenwerte von A alle reell und von-einander verschieden sind, kann A diagona-lisiert werden, das heiÿt, es gibt eine MatrixX mit

X−1AX =

−1 0 00 −2 00 0 3

.

Wie �ndet man X? Die Spalten von X kön-nen als Eigenvektoren zu den Eigenwerten-1,-2 und 3 gewählt werden. Gibt man

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

ein, so gibtMatlab in der DiagonalmatrixD die Eigenwerte zurück und die Spaltenvon X sind dazugehörige Eigenvektoren:

X =

[ 1, 0, -4]

[ 0, 1, -2]

[ 1, -3, 1]

D =

[ -2, 0, 0]

[ 0, 3, 0]

[ 0, 0, -1]

Schlieÿlich kann man mit inv(X)*A*X über-prüfen, ob X−1AX die gewünschte Diago-nalmatrix ist. Wir erhalten das gewünschteErgebnis:

ans =

[ -2, 0, 0]

[ 0, 3, 0]

[ 0, 0, -1]

Aufgabe 75 (Eigensysteme)Gegeben ist die 4× 4 Matrix

A =

12 48 68 88

−19 −54 −57 −6822 52 66 96

−11 −26 −41 −64

.

Zeigen Sie mitMatlab, dass die Eigenwer-te von A reell und voneinander verschie-den sind. Finden Sie eine Matrix X, so dassX−1AX diagonal ist.Lösung:

>> A = [ 12 48 68 88;

-19 -54 -57 -68;

22 52 66 96;

-11 -26 -41 -64];

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

X =

82 Copyright c© G. Gramlich

Page 83: EinfMATLAB

[ 1, -12/11, 0, -2]

[ -2, 1, 1, 2]

[ 1, -14/11, -2, -2]

[ 0, 7/11, 1, 1]

D =

[ -16, 0, 0, 0]

[ 0, -4, 0, 0]

[ 0, 0, -8, 0]

[ 0, 0, 0, -12]

>> inv(X)*A*X

ans =

[ -16, 0, 0, 0]

[ 0, -4, 0, 0]

[ 0, 0, -8, 0]

[ 0, 0, 0, -12]

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Die Anweisung J = jordan(A) berechnetdie Jordan-Matrix von A und [V,J]

= jordan(A) zusätzlich die Ähnlichkeit-stransformation V . Die Spalten von V sinddie verallgemeinerten Eigenvektoren von A.

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

>> [V,J] = jordan(A)

V =

[ 1/2, 1]

[ -1/4, 0]

J =

[ 1, 1]

[ 0, 1]

In Matlab gibt es die Funktion eigshow,die das Eigenwertproblem für eine (2, 2)-Matrix visualisiert. Beim Aufruf sieht manden Einheitsvektor x = (1, 0) und mit der

Maus kann man diesen auf dem Einheits-kreis bewegen. Zur gleichen Zeit wird Axangezeigt und bewegt. Manchmal ist Axvor x, manchmal aber auch hinter x. Axkann zu x auch parallel sein. In diesem Au-genblick gilt Ax = λx und x ist ein Eigen-vektor. Der Eigenwert λ bestimmt sich ausder Länge und Richtung von Ax. Die zurVerfügung stehenden Matrizen illustrierenfolgende Möglichkeiten:

1. Es gibt keine (reellen) Eigenvektoren. xund Ax sind nie parallel. Die Eigenwer-te und Eigenvektoren sind komplex. Esgibt keinen Eigenraum von R2.

2. Es gibt nur eine Gerade, auf der die Ei-genvektoren liegen. Dies ist der einzigeEigenraum von R2.

3. Es gibt Eigenvektoren mit zwei unab-hängigen Richtungen. Es gibt genauzwei Eigenräume von R2. Dies ist ty-pisch, der Standardfall.

4. Jeder Vektor ist Eigenvektor oder an-ders gesagt: Jeder eindimensionale Un-terraum von R2 ist Eigenraum.

Auch die Singulärwertzerlegung kann imFall m = n = 2 mit der Funktion eigshow

visualisiert werden. Für weitere Informatio-nen siehe [6].

Viele in der Praxis auftretenden Eigen-wertprobleme haben die Form eines verall-gemeinerten (allgemeinen) Eigenwertpro-blems: Gegeben sind zwei quadratische Ma-trix A und B. Gesucht sind Zahlen λ und

83 Copyright c© G. Gramlich

Page 84: EinfMATLAB

Vektoren x, sodass gilt

Ax = λBx.

Für B 6= E ist diese Aufgabenstel-lung eine Verallgemeinerung der herkömm-lichen Eigenwertaufgabe; für B = E redu-ziert sich das verallgemeinerte Eigenwert-problem auf die Standardeigenwertaufgabe.Verallgemeinerte Eigenwertprobleme tre-ten zum Beispiel in mechanischen Schwin-gungssystemen auf; dort ist A die Stei�g-keitsmatrix und B die Massenmatrix.

Ist A oder B eine reguläre Matrix, dannkann man das verallgemeinerte Problem aufein gewöhnliches reduzieren, entweder so

(B−1A)x = λx.

oder so

(A−1B)x =1λ

x.

In Matlab kann auch dieses verallgemei-nerte Problem mit der Funktion eig ange-gangen werden. Die Funktion eigs berech-net ein paar Eigenwerte und Eigenvektoren,wenn gewünscht.

Aufgabe 76 (Eigensysteme)Bestimmen Sie eine orthogonale Eigenvek-torenmatrix Q, die die Matrix

A =[

3 11 3

]diagonalisiert.Lösung:

Die Matrix

Q =[−1/

√2 1/

√2

1/√

2 1/√

2

]

diagonalisiert A. Man erhält sie mit derFunktion eig.

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

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

Q =

-0.7071 0.7071

0.7071 0.7071

D =

2 0

0 4

Probe:

>> inv(Q)*A*Q

ans =

2.0000 0

0 4.0000

Die symbolische eig-Funktion liefert (nur)eine orthogonale Basis aus Eigenvektoren.© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

42.7. Lineare Abbildungen undMatrizen

Wir visualisieren lineare Abbildungen imR2. Diese können durch (2, 2)-Matrizen be-schrieben werden. Wir zeichnen ein Hausund betrachten das �neue� Haus nach linea-ren Abbildungen. Die folgende Matlab-Funktion zeichnet ein Haus in der Ebene,indem sie Datenpunkte, die in der MatrixH angegeben werden müssen, miteinanderverbindet.

84 Copyright c© G. Gramlich

Page 85: EinfMATLAB

function plotHaus(H)

%-Zeichnet ein Haus.

x = H(1,:)'; y = H(2,:)';

plot(x,y,'o',x,y,'r-')

axis([-10 10 -10 10]); axis square;

Die beiden Anweisungen

>> H = [-6,-6,-7,0,7,6,6,-3,-3,...

0,0,-6; -7,2,1,8,1,2,...

-7,-7,-2,-2,-7,-7]

>> plotHaus(H)

erzeugen das Bild 30.

−10 −5 0 5 10−10

−8

−6

−4

−2

0

2

4

6

8

10

Abbildung 30: Durch die Datenpunkte in H

erzeugte Haus

Um nun lineare Abbildungen zu �sehen� ,müssen wir eine lineare Abbildung als Ma-trix A de�nieren und diese mit Hmultiplizie-ren. Als Beispiel betrachten wir eine Dre-hung um 60◦ und eine Spiegelung an der

x-Achse. Im ersten Fall ist

A =[

cos 60◦ − sin 60◦

sin 60◦ cos 60◦

]und im Zweiten

A =[

1 00 −1

].

Nach zweimaligem Aufruf vonplotHaus(A*H) (zuvor entsprechend A

de�nieren!) erhalten wir die Bilder 31 und

−10 −5 0 5 10−10

−8

−6

−4

−2

0

2

4

6

8

10

Abbildung 31: Nach Drehung

32.

42.8. Matlab-Funktionen für dieLineare Algebra im Überblick

Zusammenfassend habe ich in den Tabel-len 18, 19 und 20 die wichtigsten Funk-tionen aus Matlab zur Linearen Alge-bra zusammengestellt. Beachten Sie, dasszum Beispiel die Funktionen eig, inv usw.

85 Copyright c© G. Gramlich

Page 86: EinfMATLAB

−10 −5 0 5 10−10

−8

−6

−4

−2

0

2

4

6

8

10

Abbildung 32: Nach Spiegelung

vom Overloading Gebrauch machen. Over-loading ist ein Mechanismus, der es er-laubt verschiedene Typen von Funktionsar-gumenten zu verwenden. So kann A beimAufruf von eig(A) eine symbolische odereine numerische Matrix sein.

42.9. Lineare Gleichungssysteme (2)

In vielen Anwendungen muss man lineareGleichungen lösen. Daher ist es inMatlabbesonders einfach, solche zu lösen. Hierzudient der \-Operator (Backslash-Operator),siehe doc slash (help slash). Auch dieFunktion linsolve löst lineare Gleichungs-systeme. Unter Verwendung dieser Funkti-on ist es möglich, lineare Systeme e�zienterzu lösen, wenn die Struktur der Koe�zien-tenmatrix (Systemmatrix) bekannt ist, sie-he doc linsolve (help linsolve).

Symbolische Funktionen

colspace Basis für Spaltenraumdet Determinantediag Diagonalmatrixeig Eigenwerte und -vektorenexpm Exponentialfunktioninv Inversejordan Jordan-Formnull Basis für Nullraumpoly Charakteristisches Polynomrank Rangrref Reduzierte Zeilenstufenformsvd Singulärwertzerlegungtril Untere Dreiecksmatrixtriu Obere Dreiecksmatrix

Tabelle 18: Lineare Algebra

Numerische Funktionen

det Determinantediag Diagonalmatrixeig Eigenwerte und -vektorenexpm Exponentialfunktioninv Inversenull Orth. Basis für Nullraumorth Orth. Basis für Spaltenraumpoly Charakteristisches Polynomrank Rangrref Reduzierte Zeilenstufenformsvd Singulärwertzerlegungtril Untere Dreiecksmatrixtriu Obere Dreiecksmatrix

Tabelle 19: Lineare Algebra

86 Copyright c© G. Gramlich

Page 87: EinfMATLAB

Weitere Funktionen

cross Kreuzproduktdot Skalarpordukteye Einheitsmatrixlu LU-Faktorisierungqr QR-Faktorisierungzeros Nullmatrix

Tabelle 20: Linearen Algebra

42.9.1. Quadratische Systeme

Ist A eine reguläre (quadratische) Matrix,so gibt es genau eine Lösung des linearenSystems Ax = b und zwar für jede rechteSeite b. Zum Beispiel ist die Matrix

A =[

1 −23 2

]regulär und daher gibt es für b = (1, 11)genau eine Lösung; diese ist x = (3, 1). InMatlab löst man dies in einem Einzeiler,nachdem man A und b eingegeben hat.

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

>> b = [1; 11];

>> x = A\b

x =

3

1

Ist die Koe�zientenmatrix A singulär, soerhält man eine Fehlermeldung, auch dannwenn b im Spaltenraum von A liegt undes nicht nur eine, sondern unendlich vieleLösungen gibt.

Aufgabe 77 (Lineare Systeme)Berechnen Sie die allgemeine Lösung des li-nearen Gleichungssystems 2 4 −2

4 9 −3−2 −3 7

x1

x2

x3

=

2810

.

A x b

Lösung: Die allgemeine Lösung ist die ein-deutige Lösung x = (−1, 2, 2). Dies zeigendie nachfolgenden Matlab-Zeilen.

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

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

>> x = A\b

x =

-1.0000

2.0000

2.0000

Die Lösung ist eindeutig, sonst wäre dieMatrix A singulär und Matlab hätte miteiner Fehlermeldung geantwortet. Hier nochalternativ die symbolische Lösung.

>> x = sym(A)\b

x =

[ -1]

[ 2]

[ 2]

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

42.9.2. Überbestimmte Systeme

Gibt es mehr Gleichungen als Unbekann-te, so nennt man Ax = b überbestimmt.

87 Copyright c© G. Gramlich

Page 88: EinfMATLAB

Das System Ax = b hat in der Regel kei-ne Lösung, aber das Ersatzproblem Ax ∼= b(die lineare Ausgleichsaufgabe) ist stets lös-bar. Entweder hat das Ersatzproblem ge-nau eine oder aber unendlich viele Lösun-gen, je nachdem ob die Spalten von A li-near unabhängig sind oder nicht. Im Fall,dass es unendlich viele Lösungen gibt er-hält man durch A\b eine Basislösung. Mitpinv(A)*b erhält man den Lösungsvektorkleinster Länge.

Aufgabe 78 (Ausgleich)Berechnen Sie die Lösung des linearen Aus-gleichsproblems Ax ∼= b mit

A =

1 01 11 2

und b =

600

.

Lösung: Die eindeutige Lösung ist x =(5,−3). Diese kann auf die folgenden dreiArten berechnet werden.

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

>> b = [6; 0; 0];

>> x = A\b

x =

5.0000

-3.0000

>> x = pinv(A)*b

x =

5

-3

>> x = inv(A'*A)*A'*b

x =

5

-3

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 79 (Lineare Systeme)Berechnen Sie in Matlab x = A\b und x

= pinv(A)*b mit

A =

1 22 4

−1 −2

und b =

321

.

Interpretieren Sie die Ergebnisse.Lösung: Es ist

>> x = A\b

x =

0

0.5000

und

>> x = pinv(A)*b

x =

0.2000

0.4000

Beides sind spezielle Lösungen der allge-meine Lösung x = (x1, x2) = (1 − 2t, 2),t ∈ R der linearen Ausgleichsaufgabe. x =

A\b berechnet eine Basislösung (t = 0.5)und x = pinv(A)*b die Lösung kleinsterLänge (t = 0.4). Da inv(A'*A) nicht exis-tiert, kann über diesen Weg keine Lösungberechnet werden. © . . . . . . . . . . . . . . . . . . . . .©

42.9.3. Unterbestimmte Systeme

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

88 Copyright c© G. Gramlich

Page 89: EinfMATLAB

b dann unendlich viele Lösungen. In diesemFall wird durch A\b die Lösung kleinsterLänge berechnet, das heiÿt von allen Lö-sungen x wird diejenige ermittelt, wo dieLänge von x am kleinsten ist. Hat das Sys-tem Ax = b keine Lösung, so wird eine Ba-sislösung des Ersatzproblems Ax ∼= b be-rechnet.

Aufgabe 80 (Lineare Systeme)Berechnen Sie in Matlab x = A\b x =

pinv(A)*b und x = A'*inv(A*A')*b

A =[

1 1]

und b =[

6].

Interpretieren Sie die Ergebnisse.Lösung: Es ist

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

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

x =

6

0

x =

3.0000

3.0000

und

>> x = A'*inv(A*A')*b

x =

3

3

Dies sind spezielle Lösungen der allgemeineLösung x = (x1, x2) = (6− t, t), t ∈ R deslinearen Gleichungssystems x1+x2 = 6. x =

A\b berechnet eine Basislösung (t = 0) undx = pinv(A)*b bzw. x = A'*inv(A*A')*b

die Lösung kleinster Länge (t = 3). © . . . .©

42.10. Lineare Gleichungssysteme (3)

Lineare Gleichungssysteme lassen sich sym-bolisch in Matlab mit den Funktio-nen solve und \ lösen. Darüberhin-aus gibt es noch die Maple-Funktionengausselim und gaussjord, die mit dermaple-Funktion angesprochen werden kön-nen. Für das maple-Kommando verweiseich sie auf Abschnitt 60.2.

Der Prozess einer Matrix auf reduzier-te Zeilenstufenform zu transformieren wirdals Gauÿ-Jordan-Verfahren bezeichnet.Daher haben auch die beiden Funktionengaussjord und rref die gleiche Wirkung.Das folgende Beispiel zeigt dies:

>> maple('gaussjord',...

sym([1 1 2 9; 2 4 -3 1; 3 6 -5 0]))

ans =

[ 1, 0, 0, 1]

[ 0, 1, 0, 2]

[ 0, 0, 1, 3]

Die gausselim-Funktion transformiert dieerweiterte Matrix auf Zeilenstufenform, wo-bei die führenden Elemente nicht notwendiggleich 1 sind.

>> maple('gausselim',...

sym([1 1 2 9; 2 4 -3 1; 3 6 -5 0]))

ans =

[ 1, 1, 2, 9]

[ 0, 2, -7, -17]

[ 0, 0, -1/2, -3/2]

Die backsub-Funktion erlaubt es dann die

89 Copyright c© G. Gramlich

Page 90: EinfMATLAB

Lösung durch Rückwärtseinsetzen zu ge-winnen:

>> maple('backsub',ans)

ans =

[ 1, 2, 3]

Wir betrachten das folgende unterbestimm-te lineare Gleichungssystem

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

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

mit der erweierten Matrix

[A b

]=

0 0 −2 0 7 122 4 −10 6 12 282 4 −5 6 −5 −1

.

Dieses lineare Gleichungssystem hat unend-lich viele Lösungen. Mit den Parameternt ∈ R und s ∈ R können die Lösungenwie folgt parametrisiert angegeben werden:

x1 = 7− 2x2 − 3x4

x2 = t

x3 = 1x4 = s

x5 = 2

Mit rref können wir die Lösungen bestäti-gen:

>> Ab = sym([0 0 -2 0 7 12;...

2 4 -10 6 12 28; 2 4 -5 6 -5 -1])

Ab =

[ 0, 0, -2, 0, 7, 12]

[ 2, 4, -10, 6, 12, 28]

[ 2, 4, -5, 6, -5, -1]

>> rref(Ab)

ans =

[ 1, 2, 0, 3, 0, 7]

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

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

Die Lösungen erhalten wir auch wie folgt

>> maple('gausselim',Ab)

ans =

[ 2, 4, -10, 6, 12, 28]

[ 0, 0, -2, 0, 7, 12]

[ 0, 0, 0, 0, 1/2, 1]

>> maple('backsub',ans)

ans =

[ 7-2*_t2-3*_t1,_t2,1,_t1,2]

Dagegen liefern die Anweisungen

>> A = Ab(:,1:5)

A =

[ 0, 0, -2, 0, 7]

[ 2, 4, -10, 6, 12]

[ 2, 4, -5, 6, -5]

>> b = Ab(:,6)

b =

[ 12]

[ 28]

[ -1]

>> A\b

ans =

[ 7]

[ 0]

[ 1]

[ 0]

90 Copyright c© G. Gramlich

Page 91: EinfMATLAB

[ 2]

nur die Lösung x = (7, 0, 1, 0, 2). Die Para-meter t und s sind hier gleich Null gewählt.

Lösen wir das Beispiel numerisch, so er-halten wir die spezielle Lösung x =(0, 0, 1, 7/3, 2), wie die folgende Zeile zeigt:

>> double(A)\double(b)

ans =

0

0

1.0000

2.3333

2.0000

Aufgabe 81 (Lineare Systeme)Berechnen Sie die allgemeine Lösung des li-nearen Gleichungssystems

4x1 − 8x2 = 123x1 − 6x2 = 9

−2x1 + 4x2 = − 6.

mit Hilfe der Funktionen gausselim undbacksub, siehe Aufgabe 60.Lösung: Die allgemeine Lösung erhaltenwir durch

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

>> b = sym([12; 9; -6]);

>> maple('gausselim',[A b])

ans =

[ 4, -8, 12]

[ 0, 0, 0]

[ 0, 0, 0]

>> maple('backsub',ans)

ans =

[ 3+2*_t1, _t1]

Demnach ist: x = (3, 0) + t(2, 1), t ∈ R dieallgemeine Lösung. Mit

>> A\b

ans =

3

0

erhalten wir die spezielle Lösung (3, 0). Hierist t = 0. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

Wir betrachten nun ein lineares Gleichungs-system, das keine Lösung hat. Das nach-folgende System ist überbestimmt. Überbe-stimmte System haben mehr Gleichungenals Variablen und daher in der Regel (ge-nerisch) keine Lösung. Tatsächlich ist dasSystem

2x1 − 3x2 = −22x1 + x2 = 1

3x1 + 2x2 = 1

inkonsistent. Dies können wir mit der rref-Funktion sofort überprüfen:

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

Ab =

[ 2, -3, -2]

[ 2, 1, 1]

[ 3, 2, 1]

>> rref(Ab)

ans =

[ 1, 0, 0]

91 Copyright c© G. Gramlich

Page 92: EinfMATLAB

[ 0, 1, 0]

[ 0, 0, 1]

Die letzte Zeile der erweiterten Matrix be-sagt

0x1 + 0x2 = 1.

Wir testen die anderen Funktionen, die unszur Lösung linearer Gleichung symbolischoder numerisch in Matlab zur Verfügungstehen. Das Gauÿ-Verfahren liefert

>> maple('gausselim',Ab)

ans =

[ 2, -3, -2]

[ 0, 4, 3]

[ 0, 0, -7/8]

Auch hier erkennt man an der letzten Zei-le der Matrix die Unlösbarkeit des linearenSystems, denn die Gleichung 0x1 + 0x2 =−7/8 hat keine Lösung. Das Rückwärts-einsetzen bestätigt die Beobachtung

>> maple('backsub',ans)

??? Error using ==> sym/maple

Error, (in backsub) inconsistent

system

Was liefert A\b?

>> A\b

Warning: System is inconsistent.

Solution does not exist.

> In C:\MATLAB6p1\toolbox\symbolic\

@sym\mldivide.m at line 29

ans =

Inf

Wie zu erwarten: das System ist inkonsis-tent. Auch die Funktion solve sagt, dassdie Lösungsmenge leer ist:

>> solve('2*x1-3*x2=-2',...

'2*x1+x2=1','3*x1+2*x2=1')

Warning: 3 equations in 2 variables.

> In C:\MATLAB6p1\toolbox\symbolic

\solve.m at line 110

Warning: Explicit solution could

not be found.

> In C:\MATLAB6p1\toolbox\symbolic

\solve.m at line 136

ans =

[ empty sym ]

Numerisch dagegen erhalten wir die Lösung0.6429:

>> double(A)\double(b)

ans =

0.6429

Dies ist die eindeutige Lösung des dazu-gehörigen linearen Ausgleichsproblems. Fürweitere Einzelheiten hierzu verweisen wirauf [7].

Die Tabelle 21 zeigt zusammenfassend dieFunktionen, die man einsetzen kann, um li-neare Gleichungen symbolisch zu lösen. Be-achten Sie, dass es das Gleiche bedeutet, ei-ne Matrix in reduzierte Zeilenstufenform zubringen wie das Gauss-Jordan-Verfahrendurchzuführen. Die Funktion rref bzw. dasKommando \ stehen auch für numerischeBerechnungen zur Verfügung.

92 Copyright c© G. Gramlich

Page 93: EinfMATLAB

Matlab-Syntax Bedeutung\ Löst Ax = brref Red. Zeilenstufenformsolve Löst Gleichungengausselim Gauÿ-Verfahrengaussjord Gauÿ-Jordan-Verf.

Tabelle 21: Lineare Gleichungssystemesymbolisch lösen

43. Lineare Algebra (2)

Matlab wurde ursprünglich entwickelt,um numerische Berechnungen in der Linea-ren Algebra durchzuführen. Daher ist esnicht überraschend, dass viele Funktionenzum Lösen linearer Gleichungssysteme undEigenwertaufgaben zur Verfügung stehen.Sehr viele dieser Funktionen basieren aufder Fortran-Bibliothek Lapack [1].

Lange Zeit waren reelle und komplexe Ma-trizen der einzige Datentyp inMatlab unddie meisten Funktionen können auch mit re-ellen und komplexen Matrizen aufgerufenund bearbeitet werden. Das Teilgebiet, dassich mit numerischen Methoden in der Li-nearen Algebra befasst, heiÿt NumerischeLineare Algebra. Jedes Buch über Nume-rische Mathematik behandelt auch diesesThema, siehe zum Beispiel [7], [12] und derdarin zitierten Literatur.

43.1. Normen

Eine Norm ist ein skalares Maÿ für die Grö-ÿe eines Vektors oder einer Matrix. Die p-

Norm eines n-Vektors x ist de�niert durch

‖x‖p =( n∑

i=1

|xi|p)1/p

, 1 ≤ p < ∞.

Für p = ∞ ist

‖x‖∞ = max1≤i≤n

|xi|.

Die Funktion norm kann verwendet werden,um jede p-Norm auszurechnen. Der Aufrufist norm(x,p), wobei p = 2 standardmäÿigeingestellt ist. Im Fall p=-inf wird mini |xi|berechnet.

>> x = 1:4;

>> [norm(x,1) norm(x,2) norm(x,inf)...

norm(x,-inf)]

ans =

10.0000 5.4772 4.0000

1.0000

Die Tabelle 22 zeigt die Vektornormen

Matlab Bedeutungnorm(x)=norm(x,2) x2

norm(x,1) x1

norm(x,inf) x∞norm(x,-inf) x−∞norm(x,p) xp für p ≥ 1

Tabelle 22: Vektornormen

übersichtlich.

Aufgabe 82 (Vektornormen)Berechnen Sie für den Vektor x = (1,−2, 3)die Normen ‖x‖p für p = 1, 1.5, 2, . . . 9.5und für p = ∞.Lösung: Der Aufruf Vektornormen

93 Copyright c© G. Gramlich

Page 94: EinfMATLAB

p norm(x,p)

-------------------

1.0 6.0000

1.5 4.3346

2.0 3.7417

2.5 3.4586

3.0 3.3019

3.5 3.2072

4.0 3.1463

4.5 3.1056

5.0 3.0774

5.5 3.0574

6.0 3.0430

6.5 3.0325

7.0 3.0247

7.5 3.0188

8.0 3.0144

8.5 3.0111

9.0 3.0086

9.5 3.0067

Inf 3.0000

berechnet die Normen. Die FunktionVektornormen ist wie folgt realisiert.

function Vektornormen

%-Vektor x

x = [1 -2 3];

%

disp(' p norm(x,p)');

disp('-------------------');

for p = [1:0.5:9.5 inf]

disp(sprintf('%2.1f %15.4f ',...

p,norm(x,p)))

end

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 83 (Vektornormen)Berechnen Sie die 1, 2 und ∞-Norm derVektoren v1 = (2, 1), v2 = (1, 0) undv3 = (1,−1).Lösung: Wir erhalten:

>> v1= [2,1];

[norm(v1,1) norm(v1,2) norm(v1,inf)]

ans =

3.0000 2.2361 2.0000

>> v2= [1,0];

[norm(v2,1) norm(v2,2) norm(v2,inf)]

ans =

1 1 1

>> v3= [1,-1];

[norm(v3,1) norm(v3,2) norm(v3,inf)]

ans =

2.0000 1.4142 1.0000

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Die p-Norm einer Matrix ist de�niert durch

‖A‖p = maxx6=o

‖Ax‖p

‖x‖p.

Die 1- und ∞-Norm einer (m,n)-Matrix Asind (Maximale Spaltensumme)

‖A‖1 = max1≤j≤n

m∑i=1

|aij |

und (Maximale Zeilensumme)

‖A‖∞ = max1≤i≤m

n∑j=1

|aij |.

Die 2-Norm von A kann berechnet werdenals der gröÿte singuläre Wert von A, al-so max(svd(A)). Matrizennormen werden

94 Copyright c© G. Gramlich

Page 95: EinfMATLAB

ebenfalls mit der Funktion norm berech-net. Für Matrizen funktioniert der Aufrufnorm(A,p) mit p=1,2,inf und p='fro',wobei

‖A‖F =( m∑

i=1

n∑j=1

|aij |2)1/2

die Frobenuis-Norm ist. Beachten Sie: DieFunktion norm ist ein Beispiel einer Funk-tion mit einem Argument, das einen un-terschiedlichen Datentyp haben kann; hierdouble und char (String). Hier noch einBeispiel:

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

>> [norm(A,1) norm(A,2) ...

norm(A,inf) norm(A,'fro')]

ans =

6.0000 5.4650 7.0000

5.4772

Ist das Berechnen der Matrixnorm für p = 2zu aufwendig, so kann mit der Funktionnormest ein Näherungswert berechnet wer-den. Die Tabelle 23 zeigt die Matrizennor-

Matlab Bedeutungnorm(A)=norm(A,2) A2

norm(A,1) A1

norm(A,inf) A∞norm(x,'fro') AF

Tabelle 23: Matrizennormen

men übersichtlich.

Aufgabe 84 (Matrizennormen)Berechnen Sie die 1-, 2-,∞- und Frobeni-us-Norm für die Matrizen

A =[

0 1−1 0

], B =

[1 22 2

]und

C =[

1 41 2

].

Lösung: Es ist

>> A = [0 1; -1 0];

>> [norm(A,1) norm(A,2) ...

norm(A,inf) norm(A,'fro')]

ans =

1.0000 1.0000 1.0000

1.4142

>> B = [1 2; 2 2];

>> [norm(B,1) norm(B,2) ...

norm(B,inf) norm(B,'fro')]

ans =

4.0000 3.5616 4.0000

3.6056

>> C = [1 4; 1 2];

>> [norm(C,1) norm(C,2) ...

norm(C,inf) norm(C,'fro')]

ans =

6.0000 4.6708 5.0000

4.6904

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

43.2. Konditionszahlen

Für eine reguläre Matrix A ist

κ(A) =‖A‖‖A−1‖

≥ 1

95 Copyright c© G. Gramlich

Page 96: EinfMATLAB

die Konditionszahl bezüglich der Inversion.Die Zahl misst die Sensitivität der Lösungeines linearen Gleichungssystems Ax =b bezüglich Störungen in A und b. Mansagt, dass A gut oder schlecht konditioniertist, wenn κ(A) klein bzw. groÿ ist, wobei�klein� und �groÿ� vom Kontext abhängigsind. Die Kondition kann mit der Funktioncond berechnet werden, wobei die Normenp=1,2,inf,'fro' unterstützt werden. Fürp=2 sind auch rechteckige Matrizen erlaubt,wobei dann die Konditionszahl durch

κ2(A) =‖A‖2

‖A+‖2

de�niert ist, wobei A+ die Pseudoinversevon A ist.

Die Konditionszahl auszurechnen ist aus-wendig. Daher gibt es in Matlab zweiFunktionen, die die Konditionszahl nähe-rungsweise berechnen: rcond und condest,siehe doc rcond und doc condest.

43.3. Lineare Gleichungssysteme (4)

Über lineare Gleichungssysteme haben wirin den vorhergehenden Abschnitten schonviel gesagt. Hier soll noch ergänzt werden,dass der \-Operator (Backslash-Operator)auch verwendet werden kann, um Matrizen-gleichungen AX = B zu lösen. Hier ist dieRechte Seite B eine Matrix mit p Spalten.In diesem Fall löst Matlab AX(:, j) =B(:, j) für j = 1 : p.

43.4. Inverse

Die Inverse einer (n, n)-Matrix ist die Ma-trix X, die den Gleichungen AX = XA =En genügt. Hierbei ist En die (n, n)-Einheitsmatrix, die inMatlab mit eye(n)erzeugt werden kann. Eine Matrix, die kei-ne Inverse hat, heiÿt singulär. Eine singu-läre Matrix kann auf mehrere Arten cha-rakterisiert werden: Die Determinante istNull oder es gibt einen Vektor v 6= o mitAv = o.

Die Inverse einer quadratischen Matrixkann mit der Funktion inv (auch symbo-lisch) berechnet werden. Zum Beispiel

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

A =

1 1 1

1 2 3

1 3 6

X =

3 -3 1

-3 5 -2

1 -2 1

>> norm(A*X-eye(3))

ans =

0

Die Inverse wird mit Hilfe der LU-Faktorisierung mit partieller Pivotisierungberechnet. Gleichzeit wird mit rcond derKehrwert der Konditionszahl berechnet.Wird festgestellt, dass A (exakt) singuläroder die rcond kleiner als eps ist, so wirdeine Warnung ausgegeben.

Beachten Sie: Die Inverse einer Matrix muss

96 Copyright c© G. Gramlich

Page 97: EinfMATLAB

explizit in der Praxis nur sehr selten be-rechnet werden. Zum Beispiel ist das Be-rechnen eines quadratischen lineare Glei-chungssystems Ax = b mit A\b zwei bisdreimal schneller als durch inv(A)*b. Ge-wüöhnlich ist es möglich, das Berechnen derInversen einer Matrix in Termen eines li-nearen Gleichungssystems auszudrücken, sodass die explizite Inversion vermieden wer-den kann.

43.5. Determinante

Die Determinante einer quadratischen Ma-trix wird mit der Funktion det (auch sym-bolisch) berechnet. Ihre Berechnung ge-schieht über die LU-Faktoren. Für Beispielesiehe Abschnitt 42.5.

43.6. Pseudoinverse

Die Pseudoinverse ist die Verallgemeine-rung der Inversen für Matrizen A, die sin-gulär und nicht quadratisch sind ([5]). Diemathematische Notation ist A+. Sie wirdin Matlab mit pinv berechnet. Die Pseu-doinverse wird mit Hilfe der Singulärwert-zerlegung berechnet. Beispiele ([5]):

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

>> pinv(A)

ans =

0.5000 0

0 0

>> B = [2; 4];

>> pinv(B)

ans =

0.1000 0.2000

>> C = [2 0; 0 3; 0 0];

>> pinv(C)

ans =

0.5000 0 0

0 0.3333 0

43.7. LU-Faktorisierung

Eine LU-Faktorisierung einer quadrati-schen Matrix A ist eine Faktorisierungder Form A = LU , wobei L eine unte-re Dreicksmatrix mit Einsdiagonale und Ueine obere Dreicksmatrix sind. Nicht jedeMatrix kann in dieser Form faktorisiert wer-den, lässt man aber Zeilenvertauschungenzu, so ist dies immer möglich und solch eineFaktorisierung existiert immer. Die Funk-tion lu berechnet eine LU-Faktorisierungmit teilweiser Pivotisierung PA = LU ,wobei P eine Permutationsmatrix ist. DerAufruf [L,U,P] = lu(A) gibt die Dreiecks-matrizen und die Permutationsmatrix zu-rück. Mit zwei Ausgabeargumenten, [L,U]= lu(A) wird U und L = PTL zurück-gegeben, das heiÿt L ist eine Dreiecksma-trix bis auf Zeilenvertauschungen. Wir ge-ben ein Beispiel.

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

[L,U,P] = lu(A)

L =

1.0000 0 0

-0.5000 1.0000 0

0.5000 1.0000 1.0000

U =

-2.0000 -5.0000 3.0000

97 Copyright c© G. Gramlich

Page 98: EinfMATLAB

0 -0.5000 0.5000

0 0 -2.0000

P =

0 1 0

1 0 0

0 0 1

>> [L,U] = lu(A)

L =

-0.5000 1.0000 0

1.0000 0 0

0.5000 1.0000 1.0000

U =

-2.0000 -5.0000 3.0000

0 -0.5000 0.5000

0 0 -2.0000

Die lu Funktion arbeitet auch für rechtecki-ge Matrizen. Ist A eine (m,n)-Matrix, dannist L eine (m,n)- und U eine (n, n)-Matrix,falls m ≥ n ist und L eine (n, n)- und Ueine (m,n)-Matrix, wenn m < n gilt.

Das Lösen eines quadratischen linearenGleichungssystems Ax = b durch x=A

ist

gleichbedeutend damit, von A eine LU-Faktorisierung zu bilden, und dann mit denFaktoren zu lösen:

[L,U] = lu(A);

x = U\(L\b);

Hier ist ein Beispiel.

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

>> b = [9;1;0];

>> x = A\b

x =

1.0000

2.0000

3.0000

>> [L,U] = lu(A);

>> x = U\(L\b)

x =

1.0000

2.0000

3.0000

Der Vorteil dieser Vorgehensweise ist, dassman sich Rechnungen einspart, wenn einGleichungssystem mit mehreren rechtenSeiten oder eine Matrix gleichung vorliegt,weil dann die Faktorisierung nut einmal ge-macht werden muss.

43.8. Cholseky-Faktorisierung

Jede positiv de�nite Hermitesche Matrixhat eine Cholesky-Zerlegung A = R∗R,wobei R eine obere Dreiecksmatrix mit re-eller positiver Diagonale ist. Die Chol-seky-Faktorisierung wird mit chol berech-net: R=chol(A). Hier ein Beispiel.

>> A = pascal(3)

A =

1 1 1

1 2 3

1 3 6

>> R = chol(A)

R =

1 1 1

0 1 2

0 0 1

Und die Probe:

98 Copyright c© G. Gramlich

Page 99: EinfMATLAB

>> R'*R

ans =

1 1 1

1 2 3

1 3 6

Beachten Sie, dass chol nur die obereDreiecksmatrix einschlieÿlich der Diagona-len von A zur Faktorisierung verwendet. Istdie Matrix A nicht positiv de�nit, so erhältman eine Fehlermeldung. Tatsächlich ist dieFunktion chol gegeignet um zu überprüfen,ob eine Matrix positiv de�nit ist. Ist nachdem Aufruf [R,p]=chol(A) p gleich Null,so ist A positiv de�nit. Siehe doc chol fürweitere Detail zum Ausgabeargument p.

43.9. QR-Faktorisierung

Eine QR-Faktorisierung einer (m,n)-Matrix A ist eine Faktorisierung der FormA = QR, wobei Q eine (m,m)-unitäreund R eine (m,n)- obere Dreicksmatrixist. Diese Faktorisierung wird zum Lösenlinearer Ausgleichsaufgaben und zur Kon-struktion einer orthonormalen Basisfürden Spaltenraum von A eingesetzt. DieAnweisung [Q,R] = qr(A) berechnet dieFaktorisierung. Ist m > n, so gibt dieAnweisung [Q,R] = qr(A,0) �wirtschaftli-chere� Matrizen zurück. Man spricht auchvon reduzierter QR-Zerlegung. Die MatrixQ hat nur n Spalten und die Matrix Rhat n Zeilen und n Spalten. Wir geben einBeispiel:

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

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

Q =

-0.5774 0.8165 -0.0000

-0.5774 -0.4082 -0.7071

-0.5774 -0.4082 0.7071

R =

-1.7321 -1.1547 -0.5774

0 -0.8165 -0.4082

0 0 0.7071

Hier noch die Probe:

>> Q*R

ans =

1.0000 0.0000 -0.0000

1.0000 1.0000 0.0000

1.0000 1.0000 1.0000

Aufgabe 85 (QR-Faktorisierung)Berechnen Sie von der Matrix

A =

1 −1 11 0 01 1 11 2 4

die QR- und die reduzierte QR-Faktorisierung.Lösung: Es ist

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

Q =

-0.5000 0.6708 0.5000

-0.5000 0.2236 -0.5000

-0.5000 -0.2236 -0.5000

-0.5000 -0.6708 0.5000

99 Copyright c© G. Gramlich

Page 100: EinfMATLAB

0.2236

-0.6708

0.6708

-0.2236

R =

-2.0000 -1.0000 -3.0000

0 -2.2361 -2.2361

0 0 2.0000

0 0 0

und

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

Q =

-0.5000 0.6708 0.5000

-0.5000 0.2236 -0.5000

-0.5000 -0.2236 -0.5000

-0.5000 -0.6708 0.5000

R =

-2.0000 -1.0000 -3.0000

0 -2.2361 -2.2361

0 0 2.0000

In der orthogonalen Matrix Q fehlt nun dieletzte Spalte und in der Dreiecksmatrix Rdie letzte Nullzeile. © . . . . . . . . . . . . . . . . . . . .©

43.10. Singulärwertzerlegung

Die Singulärwertzerlegung (Singular ValueDecomposition, kurz: SVD) einer (m,n)-Matrix A hat die Form A = USV ∗, wobeiU eine unitäre (m,m)-Matrix, S eine reel-le (m,n)-Diagonalmatrix und V eine uni-täre (n, n)-Matrix ist. Die Diagonalelemen-te von S sind die singulären Werte si mit

s1 ≥ s2 ≥ · · · ≥ smin{m,n} ≥ 0. Die An-weisung [U,S,V] = svd(A) berechnet eineSingulärwertzerlegung. Gibt man nur eineAusgabevariable an, so ist dies der Vektor,der aus den singulären Wert besteht. DieAnweisung [U,S,V] = svd(A,0) liefert ei-ne reduzierte Singulärwertzerlegung (eco-nomy size), wenn m > n ist. Dann ist U ei-ne (m,n)-Matrix mit orthonormalen Spal-ten und S hat die Gröÿe (n, n). Die Anwei-sung [U,S,V] = svd(A,'econ') liefert dasgleiche Ergebnis wie [U,S,V] = svd(A,0),wenn m ≥ n ist, ist aber m < n, so hat Vdie Gröÿe (n, m) mit orthonormalen Spal-ten, und S ist quadratisch mit Ordnung m.Hier ist ein Beispiel [7]:

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

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

U =

-0.3583 -0.9336

-0.9336 0.3583

S =

5.7839 0

0 2.5586

V =

-0.7076 0.1952

-0.4467 -0.4497

-0.5462 0.0552

-0.0375 0.8698

Die Funktionen rank, null und orth be-rechnen den Rang, eine orthonormale Ba-sis für den Nullraum und eine orthonormaleBasis für den Spaltenraum der Argument-matrix. Alle drei Funktionen basieren aufder Singulärwertzerlegung, wobei Ein To-leranzwert proportional zu eps verwendet

100 Copyright c© G. Gramlich

Page 101: EinfMATLAB

wird, um zu entscheiden, wann ein singulä-rer Wert als Null betrachtet werden kann.Wir geben ein Beispiel:

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

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

U =

-0.1517 0.8959 -0.3525

-0.0612 0.4013 0.6207

-0.3215 0.0406 0.6671

-0.9327 -0.1861 -0.2134

0.2236

-0.6708

0.6708

-0.2236

S =

4.8956 0 0

0 1.6942 0

0 0 1.0784

0 0 0

V =

-0.2997 0.6798 0.6693

-0.4157 -0.7245 0.5498

-0.8587 0.1135 -0.4997

>> rank(A)

ans =

3

>> null(A)

ans =

Empty matrix: 3-by-0

>> orth(A)

ans =

-0.1517 0.8959 -0.3525

-0.0612 0.4013 0.6207

-0.3215 0.0406 0.6671

-0.9327 -0.1861 -0.2134

Aufgabe 86 (SVD [5])Berechnen Sie eine Singulärwertzerlegungder Matrix

A =

1 11 10 0

.

Lösung: Es ist

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

U =

-0.7071 -0.7071 0

-0.7071 0.7071 0

0 0 1.0000

S =

2.0000 0

0 0.0000

0 0

V =

-0.7071 0.7071

-0.7071 -0.7071

Man erkennt, dass die Matrix A den Rang1 hat; die singulären Werte sind s11 = 2und s22 = 0. © . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Die verallgemeinerte Singulärwertzerlegung(Generalized Singular Value Decompositi-on, kurz: GSVD) einer (m, p)-Matrix A undeiner (n, p)-Matrix B hat die Form A =UCX∗, B = V SX∗, C∗C + S∗S = E,wobei U und V unitär sind, X regulär,und C und D sind reelle Diagonalmatri-zen mit nichtnegativen Diagonalelementen.Die Zahlen cii/sii sind die verallgemeiner-ten singulären Werte. Diese Zerlegung wirdinMatlab wie folgt erreicht: [U,V,X,C.S]= gsvd(A,B). Siehe doc gsvd (help gsvd)für weitere Details.

101 Copyright c© G. Gramlich

Page 102: EinfMATLAB

43.11. Eigensysteme

Die e�ziente numerische Berechnung vonEigensystemen (Eigenwerte und Eigenvek-toren) ist ein komplexer Akt. DieMatlab-Funktion eig vereinfacht diesen Lösungs-prozess, indem sie die Anzahl der Einga-bematrizen, sowie deren Struktur und dieAusgabe berücksichtigt. Sie unterscheidetintern zwischen 16 verschiedenen Algorith-men:

• Standardproblem (eig(A)) oder verallge-meinertes Problem (eig(A,B)),

• reelle oder komplexe Matrizen A und B,

• symmetrische/Hermitesche Matrizen A

und B mit B positiv de�nit oder nicht,

• sind Eigenvektoren gewünscht odernicht.

Beispiele �ndet man in Abschnitt 42.6.

43.12. Iterative Methoden

In diesem Abschnitt besprechen wir itera-tive Methoden. Solche Verfahren werdenhauptsächlich bei groÿen und möglicherwei-se dünn besetzten (sparse) Problem einge-setzt; also immer dann, wenn direkte Ver-fahren zu ine�zient oder gar unmöglich an-wendbar sind. Dünn besetzte Matrizen be-handeln wir in Abschnitt . Es gibt in Mat-lab iterative Methoden für lineare Glei-chungssysteme und iterative Verfahren fürEigensysteme.

43.12.1. Iterative Methoden für lineareGleichungssysteme

Es stehen mehrere Funktionen zur Verfü-gung, um quadratische lineare Gleichungs-systeme Ax = b iterativ zu lösen, siehe Ta-belle 24.

Funktion Methodebicg BiCGbicgstab BiCG stabilizedcgs CG squaredgmres GMRESlsqr CG für Normalleichungenminres Residuienm.pcg CG mit Vorkonditionierungqmr quasi-minimale Residuienm.symmlq Symmetrische LQ

Tabelle 24: Iterative Methoden

Bis auf die Funktion minres, symmlq undpcg sind alle Funktionen auf beliebigeMatrizen A anwendbar. Für minres undsymmlq muss A Hermitesch und für pcg

muss A Hermitesch und positiv de�nitsein. Alle Methoden verwenden Matrix-Vektor Produkte Ax bzw. A∗x und be-nötigen die Matrixelemente von A nichtexplizit. Bis auf gemres (siehe unten) ha-ben alle Funktionen den gleichen Funk-tionsaufruf. Die einfachste Form ist x =

solver(B,b), wobei solver eine Funkti-on aus Tabelle 24 ist. Alternativ kann manauf x = solver(B,b,tol) mit einem Kon-vergenztoleranzwert tol, der standardmä-ÿig auf 10−6 gesetzt ist. Konvergenz trittein, wenn norm(b-A*x) <= tol*norm(b)

erfüllt ist. Das Argument A kann eine voll

102 Copyright c© G. Gramlich

Page 103: EinfMATLAB

oder dünn besetzt (sparse) Matrix sein,oder eine Funktion, die x als Eingabe undA*x als Ausgabe hat.

Iterative Methoden benötigen gewöhnlicheine Vorkonditionierung, wenn sie e�zi-ent sein sollen. Einen guten Vorkonditionie-rer auszuwählen, ist im Allgemeinen nichtleicht und erfordert meist Kenntnisse vonder Anwendung, die dahinter steckt. DieFunktionen luinc und cholinc berech-nen unvollständige Faktorisierungen, die ei-ne Möglichkeit darstellen, Vorkonditionie-rer zu konstruieren; siehe doc luinc, doccholinc und doc bicg. Für Hintergrund-informationen zu iterativen Methoden derLinearen Algebra siehe [8], [10], [11], [18]und [22].

Um den Umgang mit iterativen Problem-lösern zu zeigen, betrachten wir ein Bei-spiel, wo die Funktion pcg Verwendung �n-det. Die Funktion pcg realisiert eine kon-jugierte Gradientenmethode mit Vorkondi-tionierung. Für A verwenden wir eine posi-tiv de�nite symmetrische Matrix, die Wa-then-Matrix aus der Highamschen Ma-trizensammlung doc gallery. Es handeltsich um eine zufällige dünn besetzte �niteElementematrix, siehe doc gallery.

>> A = gallery('wathen',12,12);

>> n = length(A)

n =

481

>> b = ones(n,1);

>> x = pcg(A,b);

pcg stopped at iteration 20 without

converging to the desired tolerance

1e-006 because the maximum number

of iterations was reached.

The iterate returned (number 19)

has relative residual 0.12

>> x = pcg(A,b,1e-6,100);

pcg converged at iteration 92 to a

solution with relative residual

9.8e-007

Im ersten Aufruf haben wir nur die System-matrix A und die rechte Seite b eingegebenund gesehen, dass die konjugierte Gradien-tenmethode nicht konvergiert mit standard-mäÿig eingestellten 20 Iterationen und demstandard Abbruchkriterium von 10−6. Einerneuerte Versuch führt nach 92 Iterationenzum Erfolg, wobei wir die Iterationsgren-ze auf 100 gesetzt haben. Der Toleanzwert10−6 wurde erfüllt. Für diese Matrix kannman zeigen, dass M = diag(diag(A)) einguter Vorkonditionierer ist. Übergeben wirder Funktion pcg diese Matrix als fünftesArgument, so erreichen wir eine e�zienteReduktion in der Anzahl der Iterationen:

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

b,1e-6,100,diag(diag(A)));

>> flag, relres, iter

flag =

0

relres =

8.2661e-007

iter =

28

Beachten Sie, dass keine Bildschirmausga-be ausgegeben wird, wenn wenn man mehr

103 Copyright c© G. Gramlich

Page 104: EinfMATLAB

als ein Ausgabeargument im Funktionsauf-ruf angibt. Der Wert 0 der Variablen flag

gibt an, dass das Verfahren konvergiert istmit einem relativen Residuum relres =

norm(b-A*x)/nomrm(b) nach iter Itera-tionen.

Die anderen Funktionen der Tabelle 24 wer-den (bis auf gmres) genauso aufgerufen undgehandelt.

Mit help sparfun bekommen Sie einekomplette Liste über alle Funktionen,die bezüglich Sparserechnungen interessantsind, so auch die Funktionen für iterati-ve Methoden von linearen Gleichungssyste-men.

43.12.2. Iterative Methoden fürEigensysteme

Die Funktion eigs berechnet auswählba-re Eigenwerte und Eigenvektoren des Stan-dardeigenwertproblems Ax = λx oder derverallgemeinerten Eigenwertaufgabe Ax =λBx, wobei B eine reelle symmetrischepositiv de�nite MAtrix ist. Im Gegensatzdazu berechnet die Funktion eig immerdas gesamte Eigensystem, also alle Eigen-werte und Eigenvektoren. Wie die itera-tiven Löser von linearen Gleichungssyste-men, so benötigt eigs nur Matrix-VektorProdukte, das heiÿt A kann explizit oderals eine Funktion, die Matrix-Vektor aus-führt, angegeben werden. In der einfachstenForm kann eigs wie eig aufgerufen wer-den: [V,D] = eigs(A). Dann werden diesechs gröÿten Eigenwerte und dazugehörigeEigenvektoren berechnet. Siehe doc eigs

für weitere Details. Diese Funktion ist ei-ne Schnittstelle zum ARPACK Paket, sie-he [13]. Als Beispiel berechnen wir nun diefünf gröÿten Eigenwerte einer dünn besetz-ten symmetrischen Matrix. Zum Vergleichverwenden wir die Funktion eig, welche er-wartet, dass die Matrix im Speichermodusfull vorliegt.

>> A = delsq(numgrid('N',40));

>> n = length(A)

n =

1444

>> nnz(A)/n^2 %Anteil nicht Null.

ans =

0.0034

>> tic, e_alle = eig(full(A)); toc

Elapsed time is 10.600102 seconds.

>> e_alle(n:-1:n-4)

ans =

7.9870

7.9676

7.9676

7.9482

7.9354

>> options.disp = 0; %Keine Ausgabe.

>> tic, e = eigs(A,5,'LA',options);

>> toc %LA = Largest Algebraic

Elapsed time is 1.676173 seconds.

>> e

e =

7.9870

7.9676

7.9676

7.9482

7.9354

104 Copyright c© G. Gramlich

Page 105: EinfMATLAB

Mit den Funktion tic und toc kann manZeitmessungen durchführen. Es ist klar,dass eigs viel schneller ist als eig und auchweniger Speicherplatz benötigt.

43.12.3. Iterative Methoden fürSingulärwertsysteme

Die Funktion, um ein paar singuläre Werteund singuläre Vektoren einer Matrix A ∈Cm×n iterativ zu berechnen, heiÿt: sdvs.Die Funktion svds verwendet dabei dieFunktion eigs, indem eigs auf die Her-mitesche Matrix[

Om AA∗ On

]angewendet wird.

43.13. Funktionen einer Matrix

Mit der Funktion expm kann man für einequadratische Matrix A die Matrixexponen-tialfunktion eA, die durch

eA = E + A +12!

A2 +13!

A3 + · · ·

de�niert ist, berechnen. Wir geben ein Bei-spiel, siehe Beispiel 3.5 in [5].

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

>> expm(A)

ans =

-5.3074 12.6965

-25.3930 32.7820

Weitere Funktionen für Matrixfunktionen�nden Sie mit help matfun.

44. Mehr zu Funktionen

Funktionen spielen in Matlab eine sehrgroÿe Rolle. Seit Matlab 7 ergaben sichdiesbezüglich einige Neuerungen. Wir wol-len deshalb in diesem Abschnitt mehr zuMatlab-Funktionen sagen. Eine erste Ein-führung �ndet man in Abschnitt 39.

44.1. Function-Handles

In viele Anwendungen muss man ei-ner Funktion als Argument eine ande-re Funktion übergeben. In Abschnitt 33haben wir Beispiele betrachtet. Gewöhn-lich macht man dies mit einem Function-Handle. Ein Function-Handle ist ein Mat-lab-Datentyp, der alle notwendigen Infor-mationen enthält, um eine Funktion auszu-werten. Ein Function-Handle wird erzeugt,indem man das @-Zeichen vor einen Funk-tionsnamen stellt.

Wir zeigen die Funktionsweise mit derFunktion ezplot, die den Graph einer Ma-thematischen Funktion f standardmäÿigüber dem Intervall [−2π, 2π] zeichnet. Istnun zum Beispiel fun eine m-Function, sogeschrieben wie es die Funktion ezplot ver-langt, dann funktioniert

ezplot(@fun)

fun kann aber auch eineMatlab-Funktionsein, wie zum Beispiel sin, cos oder exp.Der Aufruf

ezplot(@cos)

105 Copyright c© G. Gramlich

Page 106: EinfMATLAB

zeichnet die Kosinusfunktion im Intervall[−2π, 2π].

Function-Handles wurden in Matlab 6eingeführt und ersetzen die frühere Syntax,nach der ein Funktionsname als eine Zei-chenkette (String) übergeben werden sollte,also zum Beispiel ezplot('cos').

Die Idee des nächsten Beispiels ist es, denDi�erenzenquotient

f(x + h)− f(x)h

in einer Matlab-Funktion zu realisieren,um diesen dann für �kleines� h als Nähe-rung für den Di�erenzialquotient f ′(x) zuberechnen. Die m-Function

function y = Differenzenq(f,x,h)

if nargin < 3

h = sqrt(eps);

end

y = (f(x+h) - f(x))/h;

ist eine Implementierung des Di�erenzen-quotienten von f an der Stelle x. Gebenwir nun

>> Differenzenq(@sqrt,0.3)

ans =

0.9129

ein, so erhalten wir 0.9129 als Näherung fürf ′(0.3). Standardmäÿig haben wir für h ≈1.5 · 10−8 gewählt. Soll h gröÿer oder klei-ner sein, so kann dies im dritten Argumenteingestellt werden. Dieses Beispiel zeigt,die Funktionsweise eines Function-Handles.

Wir übergeben den Function-Handle alsArgument und diese wird an den entspre-chenden Stellen ausgewertet. Diese direkteAuswertung ist neu inMatlab 7. In frühe-ren Versionen musste hier mit der Funktionfeval gearbeitet werden.

Weitere Informationen �nden Sie mit doc

function_handle.

44.2. Anonymous Functions

Anonymous Functions wurde in Matlab7 eingeführt. Anonymous Functions stelleneinen Weg dar, eine �one line�-Funktion zuerzeugen, ohne einen m-File schreiben zumüssen. In Abschnitt 33 haben wir dies be-reits zum ersten Mal gezeigt.

>> f = @(x) exp(x)-2

>> f(1)

ans =

0.7183

Hier ist f ein Function-Handle zu der An-onymous Function. Dem @-Zeichen, welchesein Function-Handle konstruiert, folgt inrunden Klammern eine Liste von Einga-beargumenten und dannach folgt eine ein-fache Matlab-Anweisung. Als Function-Handle kann die Anonymous Function danneiner anderen Funktion übergeben werden.

Der Ausdruck einer Anonymous Functionkann auch Variable haben, die nicht in derArgumentenliste vorkommen. So de�niertdie Anweisung

106 Copyright c© G. Gramlich

Page 107: EinfMATLAB

>> a = 2; b = 3;

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

den Mathematischen Funktionstermg(x, y) = ax2 + bex mit a = 2 und b = 3.

Die Anweisungen und Ausgaben

>> g(3,4)

ans =

78.2566

>> a = 10;

>> g(3,4)

ans =

78.2566

zeigen, dass die Variablenwerte so lange gül-tig bleiben, bis man die Anonymous Func-tion neu konstruiert.

Aufgabe 87 (Anonymous Functions)Die Dichtefunktion f einer normalverteiltenZufallsvariablen ist die parameterabhängigeFunktion

f(x, µ, σ) =1

σ√

2πe−

(x−µ)2

2σ2 , x ∈ R

wobei µ und σ > 0 reelle Parameter(Erwartungwert und Standardabweichung)sind. Diese Funktion ist in der Statistics-Toolbox unter dem Namen normpdf im-plementiert. Zeichnen Sie die Graphen derFunktionen f(·, 0, 1) und f(·, 0, 2) im Inter-vall [−4, 4].Lösung: Die Anweisungen

mu = 0; sigma = 1;

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

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

sigma = 2;

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

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

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

−4 −2 0 2 40

0.1

0.2

0.3

0.4

µ = 0σ = 2

µ = 0σ = 1

Abbildung 33: Normalverteilungen

44.3. Subfunctions

Eine Function m-File kann weitere Funktio-nen beinhalten, die man subfunctions (Un-terfunktionen) nennt. Diese können in ei-nem m-File in irgendeiner Reihenfolge nachder Hauptfunktion (main function, primaryfunction) stehen. Subfunctions sind nur derHauptfunktion und den anderen im m-Filebe�ndlichen Subfunctions sichtbar.

Wie Subfunctions verwendet werden kön-nen, zeigen wir in den nachfolgenden Ab-schnitten, siehe zum Beispiel 55.2.

107 Copyright c© G. Gramlich

Page 108: EinfMATLAB

44.4. Nested Functions

Man kann eine und mehr Funktionen in ei-ner Funktion schachteln. Es muss darauf ge-achtet werden, dass die end-Anweisung amEnde der eingebauten und der Hauptfunk-tion steht. Es gehört zum guten Stil, dieeingebaute Funktion einzurücken.

Nested Functions haben zwei Haupteigen-schaften:

• Eine Nested Function hat Zugri� zumWorkspace aller Funktionen in welche sieeingebaut ist.

• Ein Function-Handle einer Nested Func-tion speichert alle Informationen, um zudieser Zugang zu haben, und darüberhin-aus alle Variablen der Funktionen, die dieNested Funktion beinhalten.

Ein Beispiel einer Nested Function zeigt dasfolgende Listing:

function RationalBsp(x)

a = 1; b = 2; c = 1; d = -1;

Differenzenq(@Rational,x)

function r = Rational(x)

r = (a+b*x)/(c+d*x);

end

end

Das Beispiel zeigt, wie eine parameterab-hängige Funktion einer anderen Funkti-on übergeben werden kann. Die FunktionRational ist parameterabhängig und wirdder Funktion Differenzenq übergeben. Die

Variablen a, b, c und d des Workspace derHauptfunktion RationalBsp sind der Funk-tion Rational bekannt und die Werte wer-den der Funktion Differenzenq ordungs-gemäÿ weitergereicht:

>> RationalBsp(2)

ans =

3.0000

Das Ergebnis ist korrekt, denn für den ge-brochen rationalen Funktionsterm f(x) =(1 + 2x)/(1 − x) gilt f ′(x) = 3/(1 − x)2,also f ′(2) = 3.

Nested Functions sind neu seit Matlab 7.

44.5. Beispielhafte Funktionen

Der wahrscheinlich beste Weg gute Mat-lab-Funktionen zu schreiben, besteht dar-in, sich Beispiele von vorbildlich geschrie-benen Funktionen anzusehen und sich dar-an zu orientieren. Solche Funktionen wer-den natürlich mit Matlab mitgeliefert.Schauen Sie sich diese an! Mit type

<Funktionsname> bekommen Sie ein Lis-ting und mit edit <Funktionsname> kön-nen Sie die Funktion in den Matlab-Editorladen. Hier sind ein paar Beispiele:

• cov: Verwendung von varargin

• var: Überprüfung der Argumente

• hadamard: Aufbau einer Matrix

• why: Subfunctions

• fminbnd: Schleifenkonstruktionen

108 Copyright c© G. Gramlich

Page 109: EinfMATLAB

• quad, quadl: Rekursive Funktionen

• gsvd: Subfunctions

• ode45: Verwendung von varargin undvarargout

45. Lineare Ausgleichsaufgaben

Lineare Ausgleichsaufgaben können mitMatlab auf mehrere Arten gelöst wer-den. Zum Einem ist da der \-Operator(Backslash-Operator), siehe Abschnitt 42.4und Abschnitt 42.9.2.

Lineare Ausgleichsprobleme mit polyno-mialer Modellfunktion können alternativmit der Funktion polyfit und interaktivaus jeder Figure unter Tools Basic Fittinggelöst werden. Siehe auch Abschnitt 48.

Nichtlineare Ausgleichsaufgaben werden inAbschnitt 62 besprochen.

46. Polynome

Polynome haben in der Mathematik ei-ne groÿe Bedeutung. Im wissenschaftlichenRechnen benutzt man sie, um komplizier-tere Funktionen durch einfachere anzunä-hern. Polynome lassen sich einfach di�eren-zieren und integrieren, und man weiÿ, wieman numerische Näherungen für die Null-stellen �ndet. Numerische Schwierigkeitenkönnen auftreten, wenn man mit Polyno-men höherer Ordnung arbeitet.

InMatlab gibt es eine Reihe von Funktio-nen, die es ermöglichen, e�zient mit Po-

lynomen zu arbeiten. Zum symbolischenRechnen mit Polynomen siehe Abschnitt60.13.

46.1. Darstellung von Polynomen

Polynome werden in Matlab durch einenZeilenvektor repräsentiert, wobei die Ko-ordinaten die Koe�zienten des Polynomsdarstellen. Die Reihenfolge ist absteigendfestgelegt, das heiÿt die erste Koordinatedes Vektors ist der Koe�zient des Monomshöchster Ordnung und die letzte Kooor-dinate ist der Koe�zient des konstantenTerms des Polynoms. Zum Beispiel reprä-sentiert der Zeilenvektor [1 -8 2 1 12]

das Polynom p1(x) = x4−8x3+2x2+x−12;[2 0 1] stellt das Polynom p2(x) = 2x2+1dar. Beachten Sie, dass Nullkoe�zientenmitgeführt werden müssen.

>> p1 = [1 -8 2 1 -12]

p1 =

1 -8 2 1 -12

>> p2 = [2 0 1]

p2 =

2 0 1

46.2. Nullstellen von Polynomen

Ist ein Polynom als Zeilenvektor dargestellt,so erlaubt die Funktion roots, die Null-stellen des Polynoms zu berechnen, dasheiÿt diejenigen Werte zu bestimmen, fürdie das Polynom den Wert Null annimmt.roots(p2) berechnet die Nullstellen des

109 Copyright c© G. Gramlich

Page 110: EinfMATLAB

Polynoms 2x2+1, gibt sie als Spaltenvektorzurück und weist diese der Variablen r zu.

>> r = roots(p2)

r =

0 + 0.7071i

0 - 0.7071i

Kennt man die Nullstellen eines Polynoms,nicht aber das Polynom selbst, so kann manmit der Funktion poly das Polynom kon-struieren. Da ein Polynom aber durch seineNullstellen nur bis auf ein Vielfaches ein-deutig bestimmt ist, wähltMatlab das Po-lynom mit Koe�zient 1 im höchsten Mo-nom.poly(r) berechnet aus den Nullstellen in r

das Polynom x2 + 1/2.

>> poly(r)

ans =

1.0000 0 0.5000

Aufgabe 88 (Polynomfunktionen)Bestimmen Sie die reellen Nullstellen nach-folgender Polynome. Zeichnen Sie diese Po-lynome dann in einem geeigneten Intervall,um diese Nullstellen geometrisch überprü-fen zu können (x ∈ R).

(a) g1(x) = x3 − 5x2 + 2x + 8

(b) g2(x) = x2 + 4x + 4

(c) g3(x) = x5 − 3x4 + 4x3 − 4x + 4

Lösung:

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

ans =

4.0000

2.0000

-1.0000

>> roots([1 4 4])

ans =

-2

-2

>> roots([1 -3 4 0 -4 4])

ans =

-1.0000

1.0000 + 1.0000i

1.0000 - 1.0000i

1.0000 + 1.0000i

1.0000 - 1.0000i

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

46.3. Multiplikation von Polynomen

Mit der Funktion conv kann man Polyno-me miteinander multiplizieren. Das Poly-nom p1(x) = x2 + 2x − 3 multipliziert mitdem Polynom p2(x) = 2x3 − x2 + 3x − 4ergibt das Polynom p3(x) = p1(x) · p2(x) =2x5 + 3x4 − 5x3 + 5x2 − 17x + 12

>> p1 = [1 2 -3];

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

>> p3 = conv(p1,p2)

p3 =

2 3 -5 5 -17 12

110 Copyright c© G. Gramlich

Page 111: EinfMATLAB

46.4. Addition und Subtraktion vonPolynomen

In Matlab gibt es keine Funktion zur Ad-dition zweier Polynome. Haben die Polyno-me den gleichen Grad, werden die entspre-chenden Zeilenvektoren addiert. Das Poly-nom p1(x) = x2 + 2x − 3 addiert mit demPolynom p4(x) = −x2 + 3x − 4 ergibt dasPolynom p5(x) = p1(x) + p4(x) = 5x− 7

>> p1 = [1 2 -3];

>> p4 = [-1 3 -4];

>> p5 = p1+p4

p5 =

0 5 -7

Dies setzt jedoch Vektoren gleicher Län-ge, das heiÿt Polynome gleichen Grades,voraus. Will man Polynome unterschiedli-chen Grades addieren, so muss man denZeilenvektor zum Polynom kleineren Gra-des durch Nullen au�üllen. Das Polynomp1(x) = x2 + 2x − 3 addiert zu dem Po-lynom p2(x) = 2x3 − x2 + 3x − 4 ergibtp6(x) = p(1) + p2(x) = 2x3 + 5x− 7

>> p1 = [1 2 -3];

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

>> p6 = [0 p1]+p2

p6 =

2 0 5 -7

Die folgende Matlab-Funktion automati-siert diesen Prozess.

function p1undp2 = addpoly(p1,p2)

%-----------------------------

%-Addiert zwei Polynome

%-----------------------------

if nargin < 2

error('Zu wenig Argumente.')

end

%-Stellt sicher, dass p1 und p2

%-Zeilenvektoren sind.

p1 = p1(:)';

p2 = p2(:)';

lp1 = length(p1); %Länge von p1.

lp2 = length(p2); %Länge von p2.

p1undp2 = [zeros(1,lp2-lp1) p1]+

[zeros(1,lp1-lp2) p2];

Um die Funktion addpoly zu verstehen, be-trachte man die nachfolgenden Zeilen:

>> addpoly(p1,p2)

ans =

2 0 5 -7

Das Ergebnis ist das gleiche wie oben. Die-se Matlab-Funktion addpoly kann auchdazu verwendet werden, um Polynome zusubtrahieren. Dies zeigen die nachfolgendenMatlab-Zeilen:

>> p7 = addpoly(p1,-p2)

p7 =

-2 2 -1 1

p1(x) = x2 + 2x − 3 minus p2(x) = 2x3 −x2 + 3x − 4 ergibt das Polynom p7(x) =−2x3 + 2x2 − x + 1.

111 Copyright c© G. Gramlich

Page 112: EinfMATLAB

46.5. Division von Polynomen

Mit der Funktion deconv kann man Po-lynome dividieren. Das Polynom p2(x) =2x3− x2 + 3x− 4 dividiert durch das Poly-nom p1(x) = x2 + 2x − 3 ergibt das Poly-nom q(x) = 2x − 5 mit dem Restpolynomr(x) = 19x− 19.

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

>> p1 = [1 2 -3];

>> [q,r] = deconv(p2,p1)

q =

2 -5

r =

0 0 19 -19

46.6. Ableiten von Polynomen

Die Matlab-Funktion polyder di�eren-ziert ein Polynom. Die Ableitung des Po-lynoms p2(x) = 2x3 − x2 + 3x − 4 ist dasPolynom p′2(x) = 6x2 − 2x + 3.

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

>> dp2 = polyder(p2)

dp2 =

6 -2 3

46.7. Auswerten von Polynomen

Polynome können mit der Funktionpolyval ausgewertet werden. Die nachfol-genden Kommandos berechnen p(2.5) fürdas Polynom p(x) = 4x3 − 2x2 + x− 7.

>> p = [4 -2 1 -7];

>> px = polyval(p,2.5)

px =

45.5000

Die nachfolgenden Befehle berechnen 100Polynomwerte für das Polynom p(x) =4x3−2x2+x−7 zu 100 verschiedenen äqui-distanten Werten im Intervall von −1 bis 4.

>> p = [4 -2 1 -7];

>> x = linspace(-1,4);

>> px = polyval(p,x);

Aufgabe 89 (Polynomfunktionen)Gegeben seien die folgenden Polynomfunk-tionsterme

f1(x) = x3 − 3x2 − x + 3

f2(x) = x3 − 6x2 + 12x− 8

f3(x) = x3 − 8x2 + 20x− 16

f4(x) = x3 − 5x2 + 7x− 3f5(x) = x− 2

Zeichnen Sie die Polynome im Intervall[0, 4]. Benutzen Sie eingebaute Matlab-Funktionen, um nachfolgende Polynome inden Punkten 0 und 1 auswerten zu können.

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

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

(c) f1(x)f3(x)

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

112 Copyright c© G. Gramlich

Page 113: EinfMATLAB

Lösung: Das folgende Script löst die Auf-gabe.

p1 = [1 -3 -1 3];

p2 = [1 -6 12 -8];

p3 = [1 -8 20 -16];

p4 = [1 -5 7 -3];

p5 = [0 0 1 -2];

pa = p2-2*p4;

pb = 3*p5+p2-2*p3;

pc = conv(p1,p3);

pd = deconv(p4,[1 -1]);

x = linspace(0,4);

ypa = polyval(pa,x);

ypb = polyval(pb,x);

ypc = polyval(pc,x);

ypd = polyval(pd,x);

plot(x,ypa,x,ypb,x,ypc,x,ypd)

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

46.8. Zusammenfassung

In Matlab gibt es eine Reihe von nütz-lichen Funktionen, die dem Anwender dasArbeiten mit Polynomen erleichtern. Dieskommt vor allem dann zum Tragen, wennInterpolations- und Approximationsaufga-ben behandelt werden. Die Tabelle 30 fasstdie Funktionen nochmals zusammen, siehedoc polyfun (help polyfun).

47. Polynominterpolation

Gegeben sind n Punkte in der Ebene R2,�nde ein Polynom minimalen Grades, das

Funktion Beschreibungconv Multipliziert Polynomedeconv Dividiert Polynomepoly Polynom aus Nullstellenpolyder Berechnet Ableitungpolyval Berechnet Polynomwerteroots Berechnet Nullstellen

Tabelle 25: Polynome in Matlab

durch alle Punkte geht. Ein solches Poly-nom hat höchstens den Grad n − 1 undist eindeutig bestimmt; wir nennen es dasInterpolationspolynom. Mit der Matlab-Funktion polyfit ist es bequem möglich,dieses Polynom zu berechnen. Als Beispielbetrachten wir die drei Punkte (−2,−27),(0,−1) und (1, 0). Gesucht ist also ein qua-dratisches Polynom p2(t, x) = x1 + x2t +x3t

2, das die drei gegebene Punkte inter-poliert. Die nachfolgenden Matlab-Zeilenberechnen das Poylnom und stellen dasProblem gra�sch dar.

t = [-2 0 1];

y = [-27 -1 0];

x = polyfit(t,y,length(t)-1);

ti = linspace(min(t),max(t));

yi = polyval(x,ti);

plot(ti,yi,t,y,'ro'), grid on

Lässt man sich den Zeilenvektor x ausge-ben, so �ndet man darin die gewünschtenKoe�zienten des quadratischen Polynom;man erhält p2(t) = −1 + 5t− 4t2.

113 Copyright c© G. Gramlich

Page 114: EinfMATLAB

−2 −1.5 −1 −0.5 0 0.5 1−30

−25

−20

−15

−10

−5

0

5

Abbildung 34: Polynominterpolation

48. Polynomapproximation

Die Funktion polyfit kann auch verwen-det werden, um Daten durch Polynomezu approximieren. Gegeben sind m Punkte(ti, yi), i = 1, 2, . . . ,m und gesucht ist einParametervektor x ∈ Rn, sodass die poly-nomiale Modellfunktion p(t, x) = x1+x2t+x3t

2 + · · · + xntn−1 die gegebenen Punkte�bestmöglichst� approximiert, wobei best-möglichst im Sinne kleinster Fehlerquadra-te zu verstehen ist:

Minimiere∑m

i=1(yi − p(ti,x))2.x ∈ Rn

Da die gesuchten Parameter xi in der Mo-dellfunktion linear vorkommen, liegt eine li-neare Ausgleichsaufgabe vor. Als Beispielbetrachten wir folgende Aufgabe. Ange-nommen es liegen die folgenden Messdatenvor

Da diese Daten nahezu auf einer paraboli-schen Kurve liegen, entscheiden wir uns da-für, ein quadratisches Polynom durch diese

ti yi

0.0 2.90.5 2.71.0 4.81.5 5.32.0 7.12.5 7.63.0 7.73.5 7.64.0 9.44.5 9.05.0 9.65.5 10.06.0 10.26.5 9.77.0 8.37.5 8.48.0 9.08.5 8.39.0 6.69.5 6.7

10.0 4.1

114 Copyright c© G. Gramlich

Page 115: EinfMATLAB

Punkte zu legen. Die folgenden Matlab-Zeilen zeigen, wie man das Polynom zwei-ten Grades �ndet und wie man die Ergeb-nisse gra�sch darstellen kann.

t = [0.0:0.5:10];

y = [2.9 2.7 4.8 5.3 7.1 7.6 7.7...

7.6 9.4 9.0 9.6 10.0 10.2 9.7...

8.3 8.4 9.0 8.3 6.6 6.7 4.1];

x = polyfit(t,y,2);

ti = linspace(min(t),max(t));

yi = polyval(x,ti);

plot(ti,yi,t,y,'ro'), grid on

0 2 4 6 8 10−20

0

20

40

60

80

100

120

data 1 linear quadratic cubic 4th degree

Abbildung 35: Polynomapproximation

Lässt man sich den Zeilenvektor x ausge-ben, so �ndet man darin die gewünsch-ten Koe�zienten des quadratischen Poly-nom; man erhält p2(t) = 2.1757+2.6704t−0.2384t2. Diese Polynom ist das beste Poly-nom zweiten Grades in dem Sinne, dass esdie Summe der Fehlerquadrate minimiert.

Die Polynomapproximation bzw. Aus-gleichsaufgabe ist in der Statistik vonbesonderer Bedeutung und wird dort

unter dem Namen Regressionsrechnung(Engl.:data �tting) studiert.

49. Kubische Splineinterpolation

Für viele Anwendungen ist die Polynomin-terpolation ungeeignet, insbesondere dann,wenn der Grad des Interpolationspoly-noms �groÿ� gewählt werden muss. Abhilfescha�t in diesem Fall eine stückweise po-lynomiale Interpolation, insbesondere einekubische Splineinterpolation. In Matlabkann man ein kubisches Splineinterpolati-onspolynom mithilfe der Funktion spline

berechnen. Ein kubischer Spline ist einstückweises kubisches Polynom, das zwei-mal stetig di�erenzierbar ist. Das nachfol-gende Beispiel zeigt eine kubische Splin-einterpolation im Vergleich zu einer unge-eigneten Polynominterpolation anhand vonneun Datenpunkte, die zur Quadratwurzel-funktion gehören. Während das Interpolati-onspolynom achten Grades zu Ozillationenführt, ist eine kubische Splineinterpolationgut geignet die gegebenen Punkte zu inter-polieren.

%-Daten.

t = [0 1 4 9 16 25 36 49 64];

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

%-Polynominterpolation.

x = polyfit(t,y,length(t)-1);

ti = linspace(min(t),max(t));

yi = polyval(x,ti);

%-Kubische Splineinterpolation.

ys = spline(t,y,ti);

plot(ti,yi,t,y,'ro',ti,ys),

115 Copyright c© G. Gramlich

Page 116: EinfMATLAB

grid on, axis([0,64,0,10]),

legend('Polynom','Daten','Spline')

0 10 20 30 40 50 600

1

2

3

4

5

6

7

8

9

10

PolynomDatenSpline

Abbildung 36: Kubische Splineinterpolati-on

50. Stückweise lineareInterpolation

Angenommen es sind m Punkte (ti, yi) ge-geben. Setzt man t = (t1, t2, . . . , tm) undy = (y1, y2, . . . , ym) und führt plot(t,y)

aus, so werden diese m Punkte geradli-nig verbunden, das heiÿt man sieht denGraph einer stückweisen (a�n) linearen In-terpolationsfunktion. Mithilfe der Funktioninterp1 kann man stückweise lineare In-terpolationsfunktionen berechnen. Wir zei-gen dies an einen Beispiel. Angenommenes soll die stückweise lineare Interpolati-onsfunktion zu den Punkten (ti, yi) mitt = linspace(0,3,10) und y = humps(t)

berechnet werden, so kann man das mitden folgenden Zeilen erreichen. Beachten

Sie, dass humps eine eingebaute Matlab-Funktion ist, deren Funktionsterm gegebenist durch hums(t) = 1/

((t− 0.3)2 + 0.01

)+

1/((t− 0.9)2 + 0.04

)− 6.

t = linspace(0,3,10);

y = humps(t);

tt = linspace(min(t),max(t));

yi = interp1(t,y,tt);

plot(tt,yi,t,y,'ro',tt,humps(tt)),

grid on,

legend('Interpolationsfunktion',...

'Punkte','humps'),

0 0.5 1 1.5 2 2.5 3−20

0

20

40

60

80

100

InterpolationsfunktionPunktehumps

Abbildung 37: Lineare Interpolation

51. Nichtlineare Gleichungen

In Matlab gibt es die eingebaute Funk-tion fzero zur Lösung einer nichtlinearenGleichung in einer Variablen. Der Algorith-mus ist eine Kombination aus dem Inter-vallhalbierungsverfahren, der Sekantenme-thode und der inversen quadratischen In-terpolation. Dieses hybride Verfahren hat

116 Copyright c© G. Gramlich

Page 117: EinfMATLAB

eine lange und interessante Geschichte, sie-he [7]. Es ist ein guter Algorithmus, aberleider nur für skalarwertige Funktionen miteiner skalaren Variablen einsetzbar. Denm-File fzero �ndet man im VerzeichnisToolbox/MATLAB/funfun.

Die Buckelfunktion humps hat zwei Null-stellen, siehe Abbildung 5. Wir berechnendiese mit fzero.

>> fzero(@humps,1)

ans =

1.2995

>> fzero(@humps,0)

ans =

-0.1316

Wir wollen fzero noch an der nichtlinearenGleichung x2−4 sin(x) = 0 illustrieren. DieGleichung hat die beiden Nullstellen: x1 =0 und x2 ≈ 1.9. Man erhält diese durch zumBeispiel durch

>> f = @(x)x^2-4*sin(x);

>> x1 = fzero(f,1)

x1 =

-1.2470e-026

bzw.

>> x2 = fzero(f,3)

x2 =

1.9338

Das zweite Argument des Funktionsaufru-fes gibt jeweils den Startpunkt des itera-tiven Verfahren an, x0 = 1 bzw. x0 = 3.

Sie können sich die einzelnen Iterations-schritte auch ausgeben lassen, indem Sie dieentsprechende Option mit der optimset-Funktion setzen. Dies geht wie folgt:

>> options = optimset('Display',...

'iter');

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

Mit der Matlab-Funktion optimset kön-nen Sie verschiedene Parameter (zumBeispiel Genauigkeitswerte) von Optimie-rungsfunktionen setzen. Da das Lösennichtlinearer Gleichungen eng verwandt istmit dem Lösen von Optimierungsproble-men wird auch der Name optimset ver-ständlich.

Parameterabhängige nichtlineare Gleichun-gen können Sie ebenfalls mit fzero lösen.Gleichungen mit Polynomfunktionen kön-nen Sie e�zient mit der Funktion roots

lösen. Nichtlineare Gleichungen mit mehrals zwei Variablen sind mit der Funktionfsolve anzugehen. Diese Funktion gehörtaber zur Optimization Toolbox und deshalbnur dann verwendbar, wenn diese installiertist.

Aufgabe 90 (Nichtlineare Gleichungen)Berechnen Sie mit fzero die Lösung dernichtlinearen Gleichung

e−x = x

Lösung: Die Lösung �ndet man wie folgt:

>> f = @(x)exp(-x)-x;

>> x = fzero(f,2)

117 Copyright c© G. Gramlich

Page 118: EinfMATLAB

x =

0.5671

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 91 (Nichtlineare Gleichungen)Berechnen Sie mit fzero die Lösung dernichtlinearen Gleichung

ex + 2x = 0

Die Abbildung 38 zeigt die Geometrie.

−2 −1 0 1 2−5

0

5

10

x

exp(x)+2 x

Abbildung 38: Graph von f(x) = ex + 2x,x ∈ R

Lösung: Die Lösung �ndet man wie folgt:

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

>> x = fzero(f,3)

x =

-0.3517

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 92 (Nichtlineare Gleichungen)Finden Sie die positiven Nullstellen der fol-genden Funktionen:

(a) f1(x) = 1/2ex/3 − sin(x)

(b) f2(x) = log(x + 1)− x2

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

Lösung:

(a) Man zeichnet zunächst den Graphender Funktion (s. Abbildung 39) mit

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

>> fplot(f,[0 10])

>> xlabel('x'),ylabel('f(x)')

>> grid on

0 2 4 6 8 10−5

0

5

10

15

x

f(x)

Abbildung 39: Graph der Funktion f1 imIntervall [0,10]

Die Nullstelle liegt o�ensichtlich im In-tervall [0,1]. Mit

>> fzero(f,[0,1])

ans =

0.6772

sieht man, dass die Nullstelle im Punktx = 0.6772 liegt.

118 Copyright c© G. Gramlich

Page 119: EinfMATLAB

(b) Man zeichnet zunächst den Graphender Funktion (s. Abbildung 40) mit

>> f = @(x) log10(x+1)-x^2;

>> fplot(f,[0 1])

>> xlabel('x'),ylabel('f(x)')

>> grid on

0 0.2 0.4 0.6 0.8 1−0.8

−0.6

−0.4

−0.2

0

0.2

x

f(x)

Abbildung 40: Graph der Funktion f2 imIntervall [0,1]

Die Nullstelle liegt o�ensichtlich im In-tervall [0.3,0.5]. Mit

>> fzero(f,[0.3,0.5])

ans =

0.3696

sieht man, dass die Nullstelle im Punktx = 0.3696 liegt.

(c) Statt des @-Befehls kann man auch einm-File verwenden, das die entsprechen-de Funktion enthält. Dazu legt man einm-File unter dem Namen f3.m an, dassfolgenden Inhalt hat:

function y = f3(x)

y = exp(x)-5*x.^2;

Mit Hilfe des Graphen der Funktion,der durch

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

>> xlabel('x'),ylabel('f(x)')

>> grid on

erzeugt werden kann (s. Abbildung 41),erkennt man, dass die beiden Nullstel-

0 1 2 3 4 5 6−50

0

50

100

150

200

250

x

f(x)

Abbildung 41: Graph der Funktion f3 imIntervall [0,6]

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

>> fzero(@f3,[0,1])

ans =

0.6053

und

>> fzero(@f3,[4,5])

ans =

119 Copyright c© G. Gramlich

Page 120: EinfMATLAB

4.7079

erkennt man, dass sie bei x1 = 0.6053und x2 = 4.7079 liegen.

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 93 (Exponentialgleichung)Berechnen Sie in Matlab die Lösung von

(0.5)x = x

Lösung: Erste Möglichkeit

>> solve('0.5^x=x')

ans =

.64118574450498598448620048211482

Die Funktion solve ist eine symbolischeFunktion, das heiÿt es wird versucht, einesymbolische Lösung zu �nden. Dies ist abernicht möglich, daher schaltet solve auf einnumerisches Verfahren um und liefert einenumerische Lösung.

Zweite Möglichkeit:

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

>> fzero(f,[0,1])

ans =

0.6412

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 94 (Logarithmusgleichung)Berechnen Sie in Matlab die Lösung von

log0.5 x = x

Lösung: Erste Möglichkeit:

>> solve('log(x)/log(0.5)-x')

ans =

.64118574450498598448620048211482

oder

>> solve('ln(x)/ln(0.5)-x')

ans =

.64118574450498598448620048211482

Die Funktion solve ist eine symbolischeFunktion, das heiÿt es wird versucht, einesymbolische Lösung zu �nden. Dies ist abernicht möglich, daher schaltet solve auf einnumerisches Verfahren um und liefert einenumerische Lösung.

Zweite Möglichkeit:

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

>> fzero(f,[0.1,1])

ans =

0.6412

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 95 (Polynomgleichungen)Berechnen Sie mit roots die Lösung der Po-lynomgleichung

x3 + 6x2 − 11x− 6 = 0

Lösung: Die drei Lösungen �ndet man wiefolgt:

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

ans =

120 Copyright c© G. Gramlich

Page 121: EinfMATLAB

-7.3803

1.8256

-0.4453

©. . . . . . . . . .© Alle drei Lösungen sind reell.

52. Optimierung (Teil 1)

Matlab besitzt zwei Funktionen, um zuoptimieren: fminbnd und fminsearch. Mitfminbnd kann man ein lokales Minimumeiner reellwertigen Funktion einer reel-len Variablen aus�ndig machen und mitfminsearch kann man eine reellwertigeFunktion mehrerer Variablen minimieren.

Das Kommando x = fminbnd(fun, x1,

x2) versucht von der Funktion fun überdem Intervall [x1, x2] ein lokales Minimumzu �nden. Im Allgemeinen hat eine Funkti-on mehrere Minima. In Matlab gibt es je-doch keine Funktion, dieses schwierige Pro-blem zu lösen, nämlich ein globales Mini-mum zu �nden.

Wollen Sie eine Funktion f maximierenstatt minimieren, dann können Sie −f mi-nimieren, da Maxxf(x) = −Minx(−f(x))ist.

Als Beispiel betrachten wir das eindimen-sionale (univariate) Optimierungsproblem:

Minimiere sinx− cos xx ∈ [−π, π]

Die Lösung erhalten wie folgt:

>> f = @(x)sin(x)-cos(x);

>> [x,fWert] = fminbnd(f,-pi,pi)

x =

-0.7854

fWert =

-1.4142

Wie bei der Funktion fzero können Sie Op-tionen in einer Strukturvariablen durch dieoptimset-Funktion spezi�zieren. Der vonfminbnd verwendete Algorithmus ist eineKombination des goldenen Schnittes undparabolischer Interpolation.

Mit der Funktion fminsearch ist esmöglich, ein lokales Minimum einerreellwertigen Funktion von n ≥ 1Variablen zu berechnen. Die Syntaxist ähnlich wie die von fminbnd: x =

fminsearch(fun,x0,options), auÿer dassdas zweite Argument x0 ein Startvektor istanstatt eines Intervalls. Die quadratischeFunktion f(x1, x2) = x2

1 + x22 − x1x2,

(x1, x2) ∈ R2 hat in x∗ = (0, 0) eineMinimalstelle, denn es ist:

>> f = @(x)x(1)^2+x(2)^2-x(1)*x(2);

>> x = fminsearch(f,ones(2,1))

x =

1.0e-004 *

-0.4582

-0.4717

Das Verfahren hinter der Funktionfminsearch basiert auf dem Nelder-Mead Simplexverfahren, eine direkteSuchmethode, die ohne Ableitungsinforma-tionen auskommt.

Es ist möglich, dass das Verfahren zu kei-nem lokalen Minimum gelangt oder sehr

121 Copyright c© G. Gramlich

Page 122: EinfMATLAB

langsam konvergiert. Dagegen hat es denVorteil, robust gegenüber Funktionsunste-tigkeiten zu sein.

Weitere verfeinerte Algorithmen �nden Siein der Optimization Toolbox, siehe doc

optim (help optim).

Aufgabe 96 (Optimierung)Lösen Sie das Problem

Minimiere ex1−x2 + x21 + x2

2.x ∈ R2

Geben Sie die Lösung auf vier Nachkom-mastellen an.Lösung: Die Lösung ist x∗ = (x∗1, x

22) ≈

(−0.2836, 0.2836) mit f(x1, x2) ≈ 0.7281.Mit der Matlab-Funktion fminsearch ge-winnt man die Lösungen wie folgt. Manschreibe eine m-File, in dem man die Ziel-funktion de�niert

function f = myf(x)

f = exp(x(1)-x(2))+x(1).^2+...

x(2).^2;

und ruft dann die fminsearch Funktionauf.

>> fminsearch(@myf,[1;1])

ans =

-0.2836

0.2835

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

53. FFT

Die diskrete Fourier-Transformation isteine unitäre lineare Abbildung von Cn nachCn, wobei einem Vektor x ∈ Cn der Vektory = F nx zugeordnet wird. Hierbei ist F n

die unitäre Matrix aus Cn×n, die die uni-täre Abbildung beschreibt. Für n = 4 hatdiese die Form

F n =

1 1 1 11 ω ω2 ω3

1 ω2 ω4 ω6

1 ω3 ω6 ω9

, ω = e−2πi/4.

Die schnelle Fourier-Transformation(Fast Fourier Transform = FFT) ist eine�zientes Verfahren um den Bildvektor yanstatt der obigen Matrix-Vektor Multi-plikation zu berechnen. Die Funktion fft

realisiert diese Methode und wird mit y =

fft(x) aufgerufen. Die E�zienz von fft

hängt vom Wert n ab; Primzahlen sindschlecht, zerlegbare Zahlen sind besserund Vielfache von 2 sind am Besten. Dieinverse FFT, x = n−1F ny, wird durch dieFunktion ifft ausgeführt: x = ifft(y).Wir geben ein Beispiel:

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

y =

0

2.0000 - 2.0000i

0

2.0000 + 2.0000i

>> x = ifft(y)

x =

1

1

122 Copyright c© G. Gramlich

Page 123: EinfMATLAB

-1

-1

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-aurauskommen sollte.Lösung: Es ist

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

y =

4 0 0 0

Die Abbildung 42 zeigt die Vektoren x =

1 2 3 40

0.5

1

1.5x

1 2 3 40

0.5

1

1.5

2

2.5

3

3.5

4

4.5y

Abbildung 42: Zu Aufgabe 97

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

Aufgabe 98 (FFT, �Kosinus�)Berechnen Sie die diskrete Fou-rier-Transformation des Vektorsx = (1, 0,−1, 0). Überlegen Sie jedochzuerst, was herauskommen sollte.Lösung: Es ist

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

y =

0 2 0 2

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Es existieren in Matlab auch Funktionenfür mehrdimensionale diskrete Fourier-Transformationen und ihre Inversen: sie-he doc fft2 (help fft2), doc fftn (helpfftn), doc ifft2 (help ifft2) und doc

ifftn (help ifftn).

Die FFT-Algorithmen in Matlab werdendurch das Softwarepaket FFTW (the "Fas-test Fourier Transform in the West") rea-lisiert. Dieses Paket ist ein Beispiel eineradaptiven Software in dem Sinne, dass die-se dafür sorgt, dass die Ausführungszeit amschnellsten ist, unabhängig davon auf wel-cher Computerumgebung man sich geradebe�ndet. Die Funktion fftw stellt Parame-ter zur Verfügung um diesen Prozess zu tu-nen, siehe doc fftw (help fftw).

54. Integration

Unter numerischer Integration verstehtman die Berechnung einer Approxima-tion an bestimmte Integrale der Form∫ ba f(x)dx. Matlab stellt die beiden Funk-tionen quad und quadl als adaptive Inte-grationsfunktionen zur Verfügung. Sie be-rechnen eine Näherung an das bestimmtesIntegral

∫ ba f(x)dx. Hierbei müssen die In-

tegrationsgrenzen a und b endlich sein und

123 Copyright c© G. Gramlich

Page 124: EinfMATLAB

der Integrand f(x) darf im Intervall [a, b]keine Singularitäten besitzen.

Wir diskutieren die Funktion quad; quadlfunktioniert analog. Ein Aufruf der Form

quad(fun,a,b)

berechnet das bestimmte Integral. Der Inte-grand fun kann sowohl in einem m-File alsauch als @-Funktion de�niert werden. Ermuss jedoch in vektorisierter Form vorlie-gen, so dass ein Vektor zurückgegeben wer-den kann, wenn das Argument x von f einVektor ist.

Wegen

>> quad(@humps,0,1)

ans =

29.8583

ist der Flächeninhalt unter dem Graph vonhumps im Intervall [0, 1] ungefähr gleich 30.Die Abbildung 43 zeigt die Geometrie in

0 0.2 0.4 0.6 0.8 10

20

40

60

80

100

Abbildung 43: Fläche unter humps in [0, 1]

Form von Graph und Flächeninhalt. Die

Abbildung wurde dabei mit folgenden An-weisungen erstellt:

>> x = linspace(0,1);

>> y = humps(x);

>> area(x,y,'FaceColor','r',...

'LineWidth',2,'EdgeColor','b');

Das bestimmte Integral∫ 1

0xxdx

kann vonMatlab nicht exakt (symbolisch)berechnet werden.

>> syms x

>> f = x^x;

>> int(f,0,1)

Warning: Explicit integral could

not be found.

> In sym.int at 58

ans =

int(x^x,x = 0 .. 1)

Das Integral wird unverändert als nichtbe-rechenbar ausgegeben. Wir können das In-tegral aber numerisch berechnen. Es ist:

>> quad(@(x)x.^x,0,1)

ans =

0.7834

Die Abbildung 44 zeigt die dazugehörigeGeometrie.

Aufgabe 99 (Numerische Integration)Berechnen Sie die Länge der Zykloide

f : R → R2

t 7→ (t− sin t, 1− cos t)

124 Copyright c© G. Gramlich

Page 125: EinfMATLAB

0 0.2 0.4 0.6 0.8 10

0.2

0.4

0.6

0.8

1

Abbildung 44: Fläche unter xx in [0, 1]

von t = 0 bis t = 2π.Lösung: Es ist f ′(t) = (1− cos t, sin t) undsomit gilt

Lf =∫ 2π

0|f ′(t)|dt

=∫ 2π

0

√(1− cos t)2 + sin2 t dt

und damit in Matlab

>> f = @(t)sqrt((1-cos(t)).^2+...

sin(t).^2);

>> quad(f,0,2*pi)

ans =

8.0000

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 100 (Numerische Integration)Berechnen Sie ∫ 4

2x ln(x)dx.

Lösung: Ist die Funktion

function f = fxlog(x)

f = x.*log(x);

de�niert, so erhält man nach Eingabe von

>> quad(@fxlog,2,4)

ans =

6.7041

eine Approximation an das zu berechnendeIntegral.

Beachten Sie die Array-Multiplikation .* inobiger Funktion fxlog, damit die Funktionfür vektorwertige Eingabeargumente kor-rekt funktioniert. © . . . . . . . . . . . . . . . . . . . . . ©

Die Funktion quad basiert auf der Simp-son-Regel, welche eine Newton-Cotes 3-Punkt Regel ist, das heiÿt sie ist für Po-lynome bis zum Grad 3 exakt. Die Funk-tion quadl setzt eine genauere Gauÿ-Lobatto 4-Punkt Regel mit einer 7-PunktKronrod Erweiterung ein. Somit ist diesefür Polynome bis zum Grad 5 bzw. 9 genau.Beide Funktionen arbeiten adaptiv. Sie un-terteilen das Integrationsintervall in Teil-intervalle und verwenden über jedem Teil-intervall die zugrundeliegende Integrations-regel. Die Teilintervalle werden aufgrunddes lokalen Verhaltens des Integranden ge-wählt, wobei das kleinste Intervall dort aus-gesucht wird, wo der Integrand sich ammeisten ändert. Eine Warnung wird ausge-geben, wenn die Teilintervalle zu klein wer-den oder falls zu viele Funktionsauswertun-gen gemacht werden müssen, worauf oft ge-

125 Copyright c© G. Gramlich

Page 126: EinfMATLAB

schlossen werden kann, dass der Integrandeine Singularität besitzt.

54.1. Mehrfachintegrale

Man spricht von einem zweifachen Integral(Doppelintegral) wenn es die Form∫ ∫

Df(x, y)dxdy

hat. Hierbei ist D ein beschränktes Gebietim zweidimensionalen Raum R2. Ein drei-faches Integral (Dreifachintegral) liegt vor,wenn die Gestalt∫ ∫ ∫

Gf(x, y, z)dxdydz

hat, wobei G ein beschränktes Gebiet imdreidimensionalen Raum R3 ist. Analogsind vier- und mehrfache Integrale de�niert.Die Berechnung mehrfacher Integrale lässtsich auf die Berechnung mehrerer einfacherIntegrale zurückführen.

Doppelintegrale können mit dblquad nume-risch berechnet werden. Angenommen wirwollen das Integral∫ 6

y=4

∫ 1

x=0(y2ex + x cos y)dxdy

approximieren, dann können wir wie folgtverfahren. Zunächst de�nieren wir den In-tegranden, der nun ein Funktionsterm vonzwei unabhängigen Variablen ist.

function out = fxy(x,y)

out = y^2*exp(x)+x*cos(y);

Dann geben wir ein:

>> dblquad(@fxy,0,1,4,6)

ans =

87.2983

Die Funktion, die dblquad im ersten Ar-gument übergeben wird, muss einen Vek-tor x und einen Skalar y vertragen kön-nen. Zurückgegeben wird ein Vektor. Zu-sätzliche Argumente für dblquad sind mög-lich, um die Toleranz und die Integrations-methode zu bestimmen. Standardmäÿig istdies quad.

Aufgabe 101 (Doppelintegral)Berechnen Sie das Integral∫ 2

y=0

∫ 1

x=0(x2)dxdy

Lösung: Es ist

>> dblquad(@(x,y) x.^2,0,1,0,2)

ans =

0.6667

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Dreifachintegrale können mit triplequad

berechnet werden.

>> triplequad(@(x,y,z)...

(y*sin(x)+z*cos(x)),0,pi,0,1,-1,1)

ans =

2.0000

126 Copyright c© G. Gramlich

Page 127: EinfMATLAB

Aufgabe 102 (Dreifachintegral)Berechnen Sie das Integral∫ 1

z=−1

∫ 1

y=0

∫ π

x=0(x3)dxdydz

Lösung: Es ist

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

0, pi, 0, 1, -1, 1)

ans =

48.7045

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

54.2. Tabellarische Daten

Eine weitere Integrationsroutine ist trapz,welche wiederholt die Trapezregel anwen-det. Sie unterscheidet sich von quad undquadl dadurch, dass die Eingabeargumen-te Vektoren xi, f(xi) und nicht der analyti-sche Funktionsterm f(x) ist. Deshalb kanndie Funktion auch nicht adaptiv arbeiten.Wir zeigen die Funktionsweise an einemBeispiel. Der exakte Wert von

∫ π0 sinx dx

ist 2. Wir bestätigen dies mit der Funkti-on trapz. Hierzu diskretisieren wir das In-tervall [0, π] gleichmäÿig und berechnen diedazugehörigen Sinusfunktionswerte, damitdie Eingabeargumente tabellarisch vorlie-gen.

>> x = 0:pi/50:pi;

>> y = sin(x);

Als Näherung erhalten wir somit

>> trapz(x,y)

ans =

1.9993

Wir zeigen noch ein Beispiel für eine nichtgleichmäÿige Diskretisierung des Intervalls[0, π]

>> x = sort(rand(1,101)*pi);

>> y = sin(x);

>> trapz(x,y)

ans =

1.9983

Im allgemeinen sind jedoch die Funktionenquad und quadl vorzuziehen, wenn der In-tegrand analytisch verfügbar ist.

Steht der Integrand f in tabellarischerForm (ti, f(ti)), i = 1, 2, . . . ,m zur Ver-fügung und ist man an der tabellarischenForm der Integralfunktion Jt1 mit

Jt1(x) =∫ x

t1

f(t)dt

interessiert, so kann man die Matlab-Funktion cumtrapz verwenden. Das be-stimmte Integral von t1 bis zu irgendeinemPunkt x = ti wird dann durch die Trapez-regel berechnet. Der Aufruf

z = cumtrapz(t,f)

liefert einen Vektor z zurück, der die glei-che Länge wie t hat und in dem die Wer-te Jt1(x = ti) für i = 1, 2, . . . ,m stehen.

127 Copyright c© G. Gramlich

Page 128: EinfMATLAB

Das folgende Beispiel zeigt die Funktions-weise der Funktion cumtrapz an der humps-Funktion.

>> t = linspace(-1,2);

>> f = humps(t);

>> z = cumtrapz(t,f);

Die Abbildung 45 zeigt den Graph der

−1 −0.5 0 0.5 1 1.5 2−20

0

20

40

60

80

100fF

−1

Abbildung 45: humps-Funktion und Inte-gralfunktion im Intervall[−1, 2]

humps-Funktion und den Graph der dazuge-hörigen Integralfunktion, die mit cumtrapzberechnet wurde. Die Abbildung wurde ein-fach mit

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

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

erzeugt.

Aufgabe 103 (Integration)Zeichnen Sie den Graph der Integralfunkti-

on F−3 von f(t) = 1/√

2πe−t2/2, t ∈ R im

Intervall von −3 bis 3, und in dieselbe Fi-gur auch den Graph von f . Kennen Sie dieBedeutung der Funktionen f und F−∞.Lösung: Die Abbildung 46 zeigt die Gra-

−3 −2 −1 0 1 2 30

0.2

0.4

0.6

0.8

1

fF

−∞

Abbildung 46: Die Graphen zu Aufgabe103

phen. f ist die Dichtefunktion und F−∞ist die Verteilungsfunktion der Standard-normalverteilung aus der Statistik. Der da-zugehörige Matlab-Code ist

>> t = linspace(-3,3,500);

>> f = 1/sqrt(2*pi)*exp(-t.^2/2);

>> z = cumtrapz(t,f);

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

>> legend('f','F_{-\infty}')

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

54.3. Zusammenfassung

Zusammenfassend können wir sagen: Mat-lab stellt zur numerischen Berechnung vonIntegralen mehrere Funktionen zur Verfü-

128 Copyright c© G. Gramlich

Page 129: EinfMATLAB

gung. Liegt die zu integrierende mathe-matische Funktion f in analytischer Formvor, so kann der Funktionsterm in ei-nem m-File oder als anonyme Funktionde�niert werden. Die Matlab-Funktionenquad, quadl, quadv, dblquad, triplequadund alle Funktionen zur numerischen Lö-sung von Di�erenzialgleichungen, siehe Ab-schnitt 55, können dann eingesetzt wer-den. Die Funktion quadv ist eine vektorri-elle Form der Funktion quad. Liegt der In-tegrand tabellarisch vor, so sind die Funk-tionen trapz und cumtrapz zu verwenden.Zur symbolischen Berechnung von Integra-len stehen die Funktionen int und dsolve

zur Verfügung, siehe Abschnitt 60.12 und60.19.

55. Di�erenzialgleichungen

Eine Gleichung zur Bestimmung einerFunktion heiÿt Di�erenzialgleichung, wennsie mindestens eine Ableitung der gesuch-ten Funktion enthält. Die Ordnung derin der Di�erenzialgleichung vorkommendenhöchsten Ableitung der gesuchten Funkti-on heiÿt Ordnung der Di�erenzialgleichung.Hängt die in der Di�erenzialgleichung ge-suchte Funktion nur von einer Variablen ab,so nennt man die Di�erenzialgleichung ge-wöhnlich. Enthält die Di�erenzialgleichungpartielle Ableitungen, so heiÿt sie partiell.Zum Beispiel ist die Bestimmungsgleichungfür die reellwertige Funktion y einer Varia-blen t

y′(t) = ay(t)

eine gewöhnliche Di�erenzialgleichung.Hierbei ist a 6= 0 eine reelle Konstante. DieGleichung

utt(x, t) = c2uxx(x, t)

ist eine partielle Di�erenzialgleichung. Ge-sucht ist die reellwertige Funktion u mitden beiden unabhängigen Variablen x undt, wobei c 6= 0 eine reelle Konstante ist. Sie-he Abschnitt 60.19 für symbolisches Lösenvon Di�erenzialgleichungen.

55.1. Anfangswertaufgaben

In Matlab gibt es mehrere Funktionen,um Anfangswertaufgaben von gewöhnli-chen Di�erenzialgleichungen numerisch zulösen. Anfangswertaufgaben haben folgen-de Form

AWA :

{ddty(t) = f(t, y(t))y(t0) = y0

t0 ≤ t ≤ tf

wobei t eine reelle Variable, y eine unbe-kannte vektorwertige Funktion und die ge-gebene Funktion f ebensfalls vektorwertigist. Konkret kann man sich t als die Zeitvorstellen. Die Funktion f bestimmt die ge-wöhnliche Di�erenzialgleichung und zusam-men mit der Anfangsbedingung y(t0) = y0

wird die Anfangswertaufgabe de�niert. Dereinfachste Weg solch ein Problem in Mat-lab zu lösen, besteht darin, eine Funkti-on zu schreiben, die f auswertet und danneinen der Matlab-Löser aufzurufen. Diegeringste Information, die man dem Lösermitteilen muss, ist der entsprechende Funk-tionsname, das Intervall [t0, tf ] wo man die

129 Copyright c© G. Gramlich

Page 130: EinfMATLAB

Lösung sucht und die Anfangsbedingungy0. Zusätzlich können weitere extra Ein-und Ausgabeargumente optional angegebenwerden, die mehr über das mathematischeProblem aussagen und wie es gelöst wer-den soll. Jeder einzelne Löser ist in speziel-len Situationen besonders e�zient, jedochkönnen sie prinzipiell gegeneinander ausge-tauscht werden. Im nächsten Anschnitt zei-gen wir Beispiele, die den Löser ode45 illus-trieren. Diese Funktion realisiert ein adap-tives Runge-Kutta Verfahren und ist fürdie meisten Probleme e�zient.

Um das skalare (m = 1) Anfangswertpro-blem (0 ≤ t ≤ 3)

AWA :

{ddty(t) = −y(t)− 5e−t sin(5t)y(0) = 1

mit ode45 zu lösen, kreieren wir als erstesden m-File rSeite.m, der die rechte Seiteder Di�erenzialgleichung de�niert.

function dy = rSeite(t,y)

dy = -y-5*exp(-t)*sin(5*t);

Danach machen wir folgende Eingabe

tspan = [0,3]; y0 = 1;

[t,y] = ode45(@rSeite,tspan,y0);

plot(t,y,'-'), grid,

xlabel t, ylabel y(t)

Dies erzeugt die Abbildung 47 (BeachtenSie, dass wir beim Setzen der x- und y-Labels die Kommando/Funktionsdualitätausgenutzt haben). Die Eingabeargumente

0 0.5 1 1.5 2 2.5 3−1

−0.5

0

0.5

1

t

y(t)

Abbildung 47: Skalares Anfangswertpro-blem

von ode45 sind die Funktion rSeite, der 2-Vektor tspan, der die Zeitspanne der Simu-lation spezi�ziert und der Anfangswert y0.Zwei Argumente t und y werden zurück-gegeben. Die t-Werte liegen alle im Inter-vall [0, 3] und y(i) approximiert die Lösungzur Zeit t(i). Die Werte t(2:end-1) wer-den von der Funktion ode45 automatischgewählt. In den Bereichen, wo sich die Lö-sungsfunktion rapid ändert, werden mehrPunkte ausgewählt. Für weitere Informa-tionen siehe doc funfun (help funfun).

Mit der Funktion ode15i kann man An-fangswertaufgaben, deren Di�erenzialglei-chung in impliziter Form vorliegt, nu-merisch lösen. Wir betrachten ein ska-lares Problem. Die Eingabe ist ent-sprechend den anderen ODE-Funktionen:ode15i(odefun,tspan,y0,yp0). Das ers-te Argument spezi�ziert die Funktionf(t, y, y′), das Zweite und Dritte den Simu-lationsbereich (Integrationsintervall) [t0, tf ]bzw. den Anfangswert y(t0) und das vierte

130 Copyright c© G. Gramlich

Page 131: EinfMATLAB

Argument den Anfangswert der Ableitung,das heiÿt y′(t0). Als Beispiel betrachten wirdas Anfangswertproblem

AWA :

{y′(t)y(t) + t = 0y(0) = 1

im Intervall [t0, tf ] = [0, 0.9]. In die-sem Problem liegt die Di�erenzialgleichungy′(t)y(t) + t = 0 in impliziter Form vor; sieist von erster Ordnung. Ich habe diese Dif-ferenzialgleichung gewählt, weil deren ana-lytische Lösung bekannt ist und man dieseso mit dem numerischen Ergebnis verglei-chen kann. Die allgemeine implizite Lösungvon y′(t)y(t) + t = 0 ist die Kreisgleichungt2 + y2 = c, c ≥ 0. Wir bestätigen die-ses Ergebnis symbolisch mit der Funktiondsolve, siehe Abschnitt 60.19.

>> dsolve('Dy*y+t=0','t')

ans =

(-t^2+C1)^(1/2)

-(-t^2+C1)^(1/2)

Mit der Anfangsbedingung y(0) = 1 ergibtsich die Konstante zu 1 und die Lösung ist

y(t) =√

1− t2.

Hier die Bestätigung:

ytrue = dsolve('Dy*y+t=0',...

'y(0)=1','t')

ytrue =

(-t^2+1)^(1/2)

Wir lösen die Anfangswertaufgabe nun nu-merisch mit ode15i. Die Funktion f de�-nieren wir im m-File fuerode15i wie folgt:

function res = fuerode15i(t,y,yp)

res = yp*y+t;

Dann ergibt sich die numerische Lösungdurch die Anweisungen:

y0 = 1; yp0 = 0;

t0 = 0; tf = 0.9;

[t,y] = ode15i(@fuerode15i,[t0 tf],...

y0,yp0);

Die Abbildung 48 zeigt die numerische

0 0.2 0.4 0.6 0.80.4

0.5

0.6

0.7

0.8

0.9

1

t

y

symbolischnumerisch

Abbildung 48: Implizites Anfangswertpro-blem

und symbolische (analytische) Lösung derimpliziten Anfangswertaufgabe. Die Abbil-dung wurde mit den Anweisungen

ezplot(ytrue,[0,0.9])

hold on

plot(t,y,'ro')

erzeugt. Für weitere Informationen siehedoc ode15i (help ode15i).

131 Copyright c© G. Gramlich

Page 132: EinfMATLAB

Die nachfolgende Aufzählung gibt einekomplette Übersicht über alle AWA-Löserin Matlab. Dazu wird angegeben für wel-chen Problemtyp der Löser geeignet ist undwelches Verfahren dahinter steht.

• ode45 für nicht steife Di�erenzial-gleichungen. Verfahren: Runge-Kutte-Verfahren der Ordnungen 4 und 5

• ode23 für nicht steife Di�erenzial-gleichungen. Verfahren: Runge-Kutte-Verfahren der Ordnungen 2 und 3

• ode113 für nicht steife Di�erenzialglei-chungen. Verfahren: Explizites linearesMehrschrittverfahren der Ordnungen 1bis 13

• ode15s für steife Di�erenzialgleichun-gen. Verfahren: Implizites lineares Mehr-schrittverfahren der Ordnungen 1 bis 5

• ode15i für implizite Di�erenzialgleichun-gen. Verfahren: Implizites lineares Mehr-schrittverfahren der Ordnungen 1 bis 5

• ode23s für steife Di�erenzialgleichungen.Verfahren: Modi�ziertes Rosenbrock-Verfahren der Ordnungen 2 und 3

• ode23t für mäÿig steife Di�erenzialglei-chungen. Verfahren: Implizite Trapezre-gel der Ordnungen 2 und 3

• ode23tb für steife Di�erenzialgleichun-gen. Verfahren: Implizites Runge-Kutta-Verfahren der Ordnungen 2 und3

Nicht alle schwierigen Probleme sind steif,aber alle steifen Probleme sind schwierig fürODE-Löser, die nicht für steife Problemeausgelegt sind.

Die Entwickler dieser Algorithmen, Sham-pine undReichelt haben Ergebnisse ihrerArbeit in [24] dargestellt. Die Funktionensind so konstruiert, dass man sie gegenein-ander leicht austauschen kann. So ist es zumBeispiel leicht möglich den ode45-Löser ausden obigen Beispielen durch einen anderenLöser auszutauschen. Aus [24] entnehmenwir:

The experiments reported hereand others we have made suggestthat except in special circumstan-ces, ode45 should be the code tried�rst. If there is reason to believethe problem to be sti�, or if theproblem turns out to be unexpec-tedly di�cult for ode45, the codeode15s code should be tried.

55.2. Randwertaufgaben

Treten in den Bedingungsgleichungen zureindeutigen Charakterisierung der Lösungeiner Di�erenzialgleichung die Funktions-und Ableitungswerte der gesuchten Funk-tion nicht nur �wie bei Anfangswertproble-men (AWP)� an einer einzigen, sondern anzwei Stellen auf, und ist man nur an ei-ner Lösung auf dem Intervall zwischen die-sen beiden Stellen interessiert, so sprichtman von einer Randwertaufgabe (RWA)(Randwertproblem (RWP); englich: Boun-dary Value Problem (BVP)).

132 Copyright c© G. Gramlich

Page 133: EinfMATLAB

Die Funktion bvp4c realisiert eineKollokationsmethode, um Zweipunkt-Randwertaufgaben zu lösen. Diese Systemekönnen in folgender Form geschriebenwerden:

RWA :

{ddxy(x) = f(x,y(x))g(y(x0),y(xf )) = 0

x0 ≤ x ≤ xf

Hier ist, wie auch bei Anfansgwertauf-gaben, y eine unbekannte vektorwertigeFunktion und f eine gegebene vektorwer-tige Funktion von x und y. Die Lösungwird auf dem Intervall [x0, xf ] erwartet unddie gegebene Funktion g spezi�ziert die Ne-benbedingungen. Bei Randwertaufgaben istes üblich, die unabhängige Variable mitx statt mit t zu bezeichnen, weil sie beiAnwendungen meist eine Ortsvariable ist.Dies ist auch konsistent mit der Matlab-Dokumentation. Das Lösen von Randwert-aufgaben ist im Allgemeinen anspruchsvol-ler als das Lösen von Anfangswertaufga-ben. Insbesondere ist es nicht ungewöhn-lich, dass eine Randwertaufgabe mehrereLösungen hat. Daher ist es beim Aufrufvon bvp4c notwendig, eine Schätzung fürdie Lösungsfunktion mitanzugeben.

Als Beispiel betrachten wir die Zweipunkt-Randwertaufgabe:

RWA :

{u′′ = 6x

u(0) = 0 u(1) = 10 ≤ x ≤ 1.

Diese ist analytisch lösbar und hat die ein-deutige Lösung

u(x) = x3.

Dies sieht man so. Die allgemeine Lösungder Di�erenzialgleichung u′′ = 6x ist

u(x) = x3 + c1x + c2.

Die Randbedingungen bestimmen dann dieKonstanten c1 und c2

0 = u(0) = c2 : c2 = 01 = u(1) = 1 + c1 : c1 = 0

Wir verwenden nun bvp4c, um diese Lö-sung zu bestätigen. Im einfachsten Fallhat bvp4c drei Funktionsargumente: Ei-ne Funktion, in der das Di�erenzialglei-chungssystem de�niert ist, eine Funktionmit den Randbedingungen und eine drit-te Funktion, die ein Startgitter sowie eineAnfangsvermutung für die Lösungsfunktionauf diesem Gitter beinhaltet. Das Di�eren-zialgleichungssystem wird genauso gehand-habt wie bei den Anfangswertproblemen,nämlich als System erster Ordnung. Es istdaher als erstes notwendig, die Di�eren-zialgleichung zweiter Ordnung in ein Sys-tem erster Ordnung umzuschreiben. Wirschreiben gleich das ganze Randwertpro-blem zweiter Ordnung in ein System ers-ter Ordnung. Mit den De�nitionen y1(x) =u(x) und y2(x) = u′(x) erhalten wir dieRandwertaufgabe erster Ordnung:

RWA :

y′1(x) = y2(x)y′2(x) = 6x

y1(0) = 0, y1(1) = 1

0 ≤ x ≤ 1

Das Di�erenzialgleichungssystem wird nunin der Funktion odes de�niert

133 Copyright c© G. Gramlich

Page 134: EinfMATLAB

function dydx = odes(x,y)

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

Die Randbedingungen werden durch eineResiduenfunktion ausgedrückt. Die beidenRandbedingungen y1(0) = 0, y1(1) = 1werden dann wie folgt (zum Beispiel in derFunktion bcs) programmiert:

function res = bcs(yx0,yxf)

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

Als Startlösungsfunktionen wählen wir dieNullfunktion.

function yinit = guess(x)

yinit = [0;0];

Die nachfolgenden Matlab-Zeilen berech-net die Lösung und stellt sie gra�sch dar.

solinit = bvpinit(linspace(0,1,5),...

@guess);

sol = bvp4c(@odes,@bcs,solinit);

xint = linspace(0,1);

sxint = deval(sol,xint);

plot(xint,sxint(1,:))

Der Aufruf der Funktion bvpinit kreiertdie Struktur solinit, welche die Datenbeinhaltet, die durch Auswerten von guess

an fünf äquidistanten Punkten von 0 bis 1berechnet werden; in diesem Fall alle Null.

Im Allgemeinen hat ein Aufruf von bvp4c

die Form:

sol = bvp4c(@odefun,@bcfun,solinit,

options,p1,p2,...)

In odefun wird das Di�erenzialgleichungs-system ausgewertet, in bcfun werden dieRandbedingungen ausgewertet, solinit

beschreibt den Anfangszustand, in options

können Optionen übergeben werden unddie Eingabeargumente p1, p2 erlauben zu-sätzliche Parameter.

Zusammenfassend sind für die Durchfüh-rung folgende Schritte empfehlenswert:

1. Schreiben Sie das Problem als Rand-wertproblem erster Ordnung.

2. Schreiben Sie eine Matlab-Funktion,in der das System erster Ordnung de-�niert ist.

3. Schreiben Sie eine Funktion für dieRandbedingungen.

4. Schreiben Sie eine Funktion für dieStartnäherung.

5. Rufen Sie den RWA-Löser bvp4c auf.

6. Zeigen Sie die Resultate.

Aufgabe 104 (Randwertaufgaben)Wir betrachten die Randwertaufgabe

RWA :

{y′′ = −y

y(0) = 3, y(π/2) = 70 ≤ x ≤ π/2.

(a) Zeigen Sie, dass

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

die eindeutige Lösung ist.

134 Copyright c© G. Gramlich

Page 135: EinfMATLAB

(b) Bestätigen sie (a), indem Sie die Lö-sung mit der Funktion bvp4c nume-risch berechnen.

Lösung:

(a) Die allgemeine Lösung der Di�erenzial-gleichung ist

y(x) = c1 sin(x) + c2 cos(x).

Die unbekannten Konstanten c1 und c2

können dann aus den Randbedingun-gen bestimmt werden:

3 = y(0) = c1 sin(0) + c2 cos(0) = c2

und

7 = y(π/2) = c1 sin(π/2)+c2 cos(π/2)= c1.

Die Lösung der Randwertaufgabe istsomit

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

(b) Die numerische Lösung mit der Mat-lab-Funktion bvp4c erledigt der fol-gende Function-File:

function RWA

solinit = bvpinit(linspace(0,...

pi/2,5),@guess);

sol = bvp4c(@odes,@bcs,solinit);

xint = linspace(0,pi/2);

sxint = deval(sol,xint);

plot(xint,sxint(1,:),'r')

%--------------------------------

% Subfunctions.

%--------------------------------

function dydx = odes(x,y)

dydx = [y(2);-y(1)];

%--------------------------------

function res = bcs(ya,yb)

res = [ya(1)-3;yb(1)-7];

%--------------------------------

function yinit = guess(x)

yinit = [0;0];

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

55.3. Partielle Di�erenzialgleichungen

Mit der Funktion pdepe kann man partiel-le Di�erenzialgleichungen lösen. Matlabspdepe löst eine Klasse von parabolischenbzw. elliptischen partiellen Di�erenzialglei-chungssysteme (PDE: Partial Di�erentialEquation). Die allgemeine Klasse hat dieForm:

c(x, t, u,ux)ut =x−m(xmf(x, t, u,ux))x + s(x, t, u,ux),

wobei u die gesuchte Funktion ist. Sie hängtvon den Variablen x (Raumvariable) undt (Zeitvariable) ab und kann vektorwertigsein. Für die unabhängigen Variablen x undt gilt: x0 ≤ x ≤ xf und t0 ≤ t ≤ tf . DieZahl m kann die Werte 0, 1 oder 2 haben,je nachdem, ob keine, Zylinder- oder Ku-gelsymmetrie vorliegt. Die Funktion c istmatrixwertig und die Fluÿ- bzw. Quellen-funktionen f , s sind vektorwertig. Anfangs-und Randbedingungen müssen in folgender

135 Copyright c© G. Gramlich

Page 136: EinfMATLAB

Form zur Verfügung gestellt werden. Fürx0 ≤ x ≤ xf und t = t0 muss die Lösunggleich u0(x) sein, wobei die Funktion u0 ge-geben ist. Für x = x0 und t0 ≤ t ≤ tf mussdie Lösung dem Gleichungssystem

px0(x, t, u) + qx0(x, t)f(x, t, u,ux) = 0

genügen, wobei die Funktionen px0 und qx0

gegeben sind. Ähnlich muss für x = xf undt0 ≤ t ≤ tf

pxf(x, t, u) + qxf

(x, t)f(x, t, u,ux) = 0

gelten, wobei die Funktionen pxfund qxf

gegeben sind. Für weitere Details siehe docpdepe (help pdepe).

Ein Aufruf von pdepe hat die allgemeineForm

sol = pdepe(m,@pdefun,@pdeic,...

@pdebc,xmesh,tspan,...

options,p1,p2,...);

was der Syntax von bvp4c gleicht.

Als Beispiel betrachten wir die eindimen-sionale Wärmeleitungsgleichung

ut(x, t) = uxx(x, t)

für 0 ≤ x ≤ 1 und 0 ≤ t ≤ 0.5 mit derAnfangsbedingung

u(x, 0) = sin(πx)

und den Randbedingungen

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

Dieses Problem ist mit pdepe lösbar, da esdie von pdepe erlaubte Form besitzt. Es ist

m = 0, c(x, t, u) = 1, f(x, t, u, ux) = ux

und s(x, t, u, ux) = 0. Für x = x0 sindp(x, t, u) = u und q(x, t, u) = 0 die Rand-bedingungen, und für x = xf haben wirp(x, t, u) = u und q(x, t, u) = 0. Die Functi-on pdeWaerme realisiert die Lösung des Pro-blems.

function pdeWaerme

%Löst die eindimensionale Wärme-

%leitungungsgleichung mit den

%angegebenen Anfangs- und Rand-

%bedingungen.

m = 0;

t0 = 0;

tf = 0.5;

x0 = 0;

xf = 1;

xmesh = linspace(x0,xf,40);

tspan = linspace(t0,tf,20);

sol = pdepe(m,@pdefun,...

@pdeic,@pdebc,xmesh,tspan);

u = sol(:,:,1);

mesh(xmesh,tspan,u)

xlabel('x'), ylabel('t'),

zlabel('u')

%-----------------------------

%Subfunctions.

%-----------------------------

function [c,f,s] =

pdefun(x,t,u,DuDx)

%Differenzialgleichung.

c = 1;

f = DuDx;

s = 0;

%-----------------------------

function u0 = pdeic(x)

%Anfangsbedingungen.

136 Copyright c© G. Gramlich

Page 137: EinfMATLAB

u0 = sin(pi*x);

%-----------------------------

function [px0,qx0,pxf,qxf] =

pdebc(x0,u0,xf,uf,t)

%Randbedingungen.

px0 = u0;

qx0 = 0;

pxf = uf;

qxf = 0;

Hierbei haben wir die Funktion linspace

verwendet, um ein Gitter zwischen x0 undxf , sowie eines zwischen t0 und tf zu erzeu-gen. Um die Lösung zu plotten, haben wirmesh verwendet. Die Abbildung 49 zeigt das

0

0.5

1

0

0.50

0.5

1

xt

u

Abbildung 49: Lösung der PDE

Ergebnis.

Aufgabe 105 (Partielle DGL)Bestätigen Sie, dass

u(x, t) = e−π2t sin(πx)

eine Lösung des Wärmeleitungsproblemsut(x, t) = uxx(x, t)u(x, 0) = sin(πx)u(0, t) = u(1, t) = 0

0 ≤ x ≤ 1, t ≥ 0

ist.Lösung: Leiten wir u(x, t) = e−π2t sin(πx)nach t ab, so erhalten wir die linke Seite derDi�erenzialgleichung

ut(x, t) = −π2 sin(πx)e−π2t.

Leiten wir u(x, t) = e−π2t sin(πx) zweimalnach x ab, so erhalten wir die rechten Seiteder Di�erentialgleichung

uxx(x, t) = −π2 sin(πx)e−π2t.

Da beide Seiten für alle x und t gleich sind,ist alles gezeigt. © . . . . . . . . . . . . . . . . . . . . . . .©

56. Statistik

Vorhersagen sind schwierig �vor allem über die ZuknnftNiels Bohr.

Mit der Statistics Toolbox stehen Ihnen Sta-tistikfunktionen zur Verfügung. Die Tabelle26 zeigt ein paar grundlegende Funktionenfür die beschreibende Statistik.

Mit help stats (doc stats) erhalten Sieeinen Überblick über alle Funktionen derStatistics Toolbox. Ein paar Dichtefunktio-nen sind in Tabelle 27 zu sehen.

57. Kombinatorik

Mit der Funktion nchoosek kann man Bi-nomialzahlen berechnen.

137 Copyright c© G. Gramlich

Page 138: EinfMATLAB

Beschreibende Statistik

corrcoef Korrelationsmatrixcov Kovarianzmatrixgeomean Geometrischer Mittelwertmad Mittlere absolute Abw.mean Arithmetischer Mittelwertmedian Zentralwert (Median)mode Häu�gster Wertrange Spannweitestd Standardabweichungtabulate Häu�gkeitstabellevar Varianz

Tabelle 26: Grundlegende Funktionen

Dichtefunktionen

binopdf Binomialdichtegeopdf Geometrische Dichtenormpdf Normaldichteunidpdf Diskrete gleichmäÿige Dichteunifpdf Stetige gleichmäÿige Dichte

Tabelle 27: Dichtefunktionen

Aufgabe 106 (Binomialzahlen)Wie viele Möglichkeiten gibt es aus n = 49verschiedenen Objekten k = 6 verschiedeneObjekte auszuwählen?Lösung: Es ist gibt

(nk

)Möglichkeiten. Al-

so ist

>> nchoosek(49,6)

ans =

13983816

Demnach beträgt die Wahrscheinlich-keit beim Lotto sechs richtige zu ha-ben 1/13983816 ≈ 7.1511 · 10−8 =0.000000071511. © . . . . . . . . . . . . . . . . . . . . . . ©

Mit der Anweisung nchoosek(1:n,k) er-halten Sie alle Anordnungsmöglichkeitenfür k Objekte ohne Wiederholung und ohneBerücksichtigung der Reihenfolge aus n ver-schiedenen Objekten. Zum Beispiel ist diesfür n = 5 und k = 3:

>> nchoosek(1:5,3)

ans =

1 2 3

1 2 4

1 2 5

1 3 4

1 3 5

1 4 5

2 3 4

2 3 5

2 4 5

3 4 5

Aufgabe 107 (Binomialzahlen)Geben Sie alle Teilmengen der Menge{1, 2, 3, 4, 5, 6} mit genau vier Elementen

138 Copyright c© G. Gramlich

Page 139: EinfMATLAB

an. Wieviel gibt es?Lösung: Es ist:

>> nchoosek(1:6,4)

ans =

1 2 3 4

1 2 3 5

1 2 3 6

1 2 4 5

1 2 4 6

1 2 5 6

1 3 4 5

1 3 4 6

1 3 5 6

1 4 5 6

2 3 4 5

2 3 4 6

2 3 5 6

2 4 5 6

3 4 5 6

Demnach gibt es

>> nchoosek(6,4)

ans =

15

Möglichkeiten. © . . . . . . . . . . . . . . . . . . . . . . . . ©

Mit Hilfe der Funktion factorial kannman die Fakultät berechnen.

Aufgabe 108 (Fakultät)Gegeben sind n = 4 verschiedene Objek-te. Wie viele Anordnungsmöglichkeiten oh-ne Wiederholung gibt es?Lösung: Es gibt genau

>> factorial(4)

ans =

24

Möglichkeiten. Alternativ zur Funktionfactorial können Sie die Funktion prod

verwenden.

>> prod(1:4)

ans =

24

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Die Funktion perms gibt alle Anordungs-möglichkeiten an.

Aufgabe 109 (Fakultät)Gegeben sind n = 3 verschiedene Objek-te. Geben Sie alle Anordnungsmöglichkei-ten ohne Wiederholung an.Lösung: Davon gibt es genau 3! = 6 Mög-lichkeiten; diese sind:

>> perms(1:3)

ans =

3 2 1

3 1 2

2 3 1

2 1 3

1 2 3

1 3 2

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Siehe auch doc specfun (help specfun)für weitere Funktionen.

139 Copyright c© G. Gramlich

Page 140: EinfMATLAB

58. Zufallszahlen

Zufallszahlen sind im wissenschaftlichenRechnen ein nützliches Hilfsmittel. In vie-len Fällen werden Zufallszahlen in einerrechnergestützten Simulation eines komple-xen Problems eingesetzt, zum Beispiel beider Planung von Produktionssystemen odervon Groÿprojekten. Diese Simulation kanndann auf dem Rechner immer und immerwieder ausgeführt werden, und die Resul-tate können analysiert werden. Oft werdenZufallszahlen auch als Testdaten benutzt.Hat man zum Beispiel einen Algorithmusentwickelt, der ein beliebiges Gleichungs-system lösen soll, so kann man eine Matrixals auch eine rechte Seite des Systems zumTesten des Algorithmus mit Zufallszahlengenerieren.

Zufallszahlen werden am Computer mitHilfe spezieller Algorithmen berechnet. Sol-che Algorithmen nennt man Zufallsgenera-toren. Grundlegend ist dabei die Erzeugungvon Zufallszahlen x1, x2, . . ., xn, derenWer-te sich in sehr guter Näherung wie Realisie-rungen von unabhängigen auf [0, 1] gleich-verteilten Zufallsvariablen X1, X2, . . ., Xn

verhalten. Da die Werte x1, x2, . . ., xn

tatsächlich jedoch berechnet werden, sindsie nicht echt zufällig. Man spricht des-halb auch von Pseudo-Zufallszahlen, diesich (fast) wie echte verhalten. Mit Hil-fe von gleichverteilten Zufallszahlen lassensich Zufallszahlen für andere Verteilungendurch geeignete Transformationen erzeu-gen. Je nach Verteilung kann dies sehr ein-fach oder aber auch kompliziert sein. In der

Statistik Toolbox wird Ihnen diese Arbeitabgenommen, siehe Abschnitt 58.4.

In Matlab gibt es zwei eingebaute Funk-tionen rand und randn, mit denen manZufallszahlen erzeugen kann. Wir wollenim folgenden diese beiden Funktionen vor-stellen und miteinander vergleichen. Dabeiwerden uns ihre statistischen Eigenschaf-ten durch gra�sche Darstellungen verdeut-lichen.

58.1. Gleichverteilte Zufallszahlen

Zufallszahlen sind durch die Verteilung ih-rer Werte charakterisiert. Zum Beispielsind gleichverteilte Zufallszahlen dadurchgekennzeichnet, dass alle Werte der Zahlen-folge in einem bestimmten Intervall gleich-verteilt liegen. So erzeugt die Funktionrand(10,1) einen Spaltenvektor mit 10gleichmäÿig über das Intervall ]0, 1[ ver-teilten Zufallszahlen (Genaugenommen er-zeugt rand eine Gleitpunktzahl im abge-schlossenen Intervall [eps/2, (1− eps/2)]):

>> rand(10,1)

ans =

0.9501

0.2311

0.6068

0.4860

0.8913

0.7621

0.4565

0.0185

0.8214

0.4447

140 Copyright c© G. Gramlich

Page 141: EinfMATLAB

Der Aufruf rand(50,2) erzeugt eine Ma-trix mit 50 Zeilen und 2 Spalten mit Wer-ten zwischen 0 und 1. Testen Sie dies! All-gemein erzeugt der Aufruf rand(m,n) eine(m,n)-Matrix mit gleichverteilten Zufalls-zahlen zwischen 0 und 1.

In den Anwendungen werden oft auch Zu-fallszahlen gesucht, die in einem anderenIntervall als ]0, 1[ liegen. Mit der Matlab-Funktion rand ist auch dies leicht möglich.Zum Beispiel erzeugt die Anweisung

5 + 3*rand(n,1)

einen Spaltenvektor mit n gleichverteiltenWerten im Intervall ]5, 8[.

Mit rand und der eingebauten Matlab-Funktion floor lassen sich auch leichtganzzahlige Zufallszahllen generieren. DieRundungsfunktion floor(A) rundet alleElemente von A auf die nächstkleinere gan-ze Zahl (nächste ganze Zahl in Richtung−∞). Der folgende Function-File realisiertdas Erzeugen von ganzzahligen Zufallszah-len. Auÿer der Gröÿe der gewünschten Ma-trix läÿt sich auÿerdem mit k ein Intervall[-k:k] angeben, aus dem die Zahlen zufäl-lig erzeugt werden. Wird k nicht angegeben,so wird k=9 gewählt.

function A = randganz(m,n,k)

if nargin == 1, n=m; end;

if nargin < 3, k=9; end;

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

Aufgabe 110 (Zufallszahlen)Die Matlab-Funktion rand(n) erzeugt ei-

ne n × n-Matrix, deren Einträge gleichver-teilte Zufallszahlen aus dem Intervall ]0, 1[sind. Schreiben Sie einen Function-File, dern×n-Matrizen erzeugt, deren Einträge Zah-len aus {1, 2, 3, 4, 5, 6} sind.Lösung: Dies erreicht man zum Beispielmit folgender Funktion. Die Funktion ceil

rundet zur nächsten ganzen Zahl auf(nächste ganze Zahl in Richtung +∞).

function A = randganz1bisk(m,n,k)

if nargin == 1, n=m; end;

if nargin < 3, k=9; end;

A = ceil( k*rand(m,n) );

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

58.2. Normalverteilte Zufallszahlen

Erzeugen wir Zufallszahlen mit der Funkti-on rand, so treten alle Werte in einem be-stimmten Intervall gleichmäÿig häu�g auf.In den Anwendungen sucht man oft auchZufallszahlen, deren Werte nicht gleich-mäÿig auftreten, sondern wo bestimm-te Werte häu�ger vorkommen als andere,man nennt sie normalverteilte Zufallszahlen(auch Gauÿsche Zufallszahlen genannt).

In Matlab erzeugt man normalverteilteZufallszahlen mit Mittelwert 0 und Vari-anz 1 mit der Funktion randn. Der Befehlrandn(10,1) erzeugt zum Beispiel folgendenormalverteilte Zufallszahlen:

ans =

-0.4326

-1.6656

141 Copyright c© G. Gramlich

Page 142: EinfMATLAB

0.1253

0.2877

-1.1465

1.1909

1.1892

-0.0376

0.3273

0.1746

Will man eine normalverteilte n-wertigeZufallsfolge mit Mittelwert 10 und Stan-dardabweichung 5 erzeugen, so erreicht mandies durch:

10+5*randn(n,1)

58.3. Im Vergleich: Gleich- undnormalverteilte Zufallszahlen

Histogramme bieten eine geeignete Mög-lichkeit, um Zufallszahlen gra�sch darzu-stellen. Der Script-File

subplot(2,1,1)

yg = rand(10000,1);

hist(yg,25)

h = findobj(gca,'Type','patch');

set(h,'FaceColor','b',...

'EdgeColor','w')

axis([-1 2 0 600])

title('Gleichmä{\ss}igverteilte

Zufallszahlen')

yn = randn(10000,1);

x = min(yn):0.2:max(yn);

subplot(2,1,2)

hist(yn,x)

h = findobj(gca,'Type','patch');

set(h,'FaceColor','b',...

'EdgeColor','w')

title('Normalverteilte

Zufallszahlen')

illustriert die beiden Matlab-Funktionenrand und randn gra�sch, siehe Abbildung50. Das obere Histogramm zeigt, wie sichdie 10000 Zufallszahlen gleichmäÿig überdas Intervall ]0, 1[ verteilen. Mit dem Be-fehl rand(10000,1) wird ein Spaltenvek-tor mit 10000 Werten erzeugt und yg zuge-ordnet. DieMatlab-Funktion hist erstelltnun das Histogramm. Mit dieser Funkti-on kann man verschiedene Ziele erreichen.Ein Aufruf wie hist(yg,25) erzeugt einHistogramm, das angibt, wie oft ein Wertin einem Subintervall von ]0, 1[ vorkommt.Die Zahl 25 schreibt vor, das Intervall ]0, 1[in 25 gleichgroÿe Subintervalle einzuteilenund 25 Rechtecks�ächen zu zeichnen, de-ren Breite die Subintervallänge und derenHöhe die Anzahl der Zufallswerte in demjeweiligen Subintervall angeben. Das unte-re Histogramm in Abbildung 50 zeigt, wiesich 10000 Zufallszahlen mit Mittelwert 0und Varianz 1 ähnlich einer Gauÿschen Glo-ckenkurve verteilen.

Der Skript-File

Punkte = rand(10000,2);

subplot(1,2,1)

plot(Punkte(:,1),Punkte(:,2),'.')

title('Gleichmä{\ss}igverteilte

Zufallszahlen')

142 Copyright c© G. Gramlich

Page 143: EinfMATLAB

−1 −0.5 0 0.5 1 1.5 20

200

400

600Gleichmäßigverteilte Zufallszahlen

−4 −3 −2 −1 0 1 2 3 40

500

1000Normalverteilte Zufallszahlen

Abbildung 50: Zufallszahlen

axis([0 1 0 1])

axis('square')

Punkte = randn(10000,2);

subplot(1,2,2)

plot(Punkte(:,1),Punkte(:,2),'.')

title('Normalverteilte

Zufallszahlen')

axis([-3 3 -3 3])

axis('square')

erzeugt die Abbildung 51, um Unterschiede

0 0.5 10

0.2

0.4

0.6

0.8

1Gleichmäßigverteilte Zufallszahlen

−2 0 2−3

−2

−1

0

1

2

3Normalverteilte Zufallszahlen

Abbildung 51: Zufallszahlen

zwischen rand und randn klar zu machen.

Aufgabe 111 (Zufallszahlen)Erzeugen Sie zehn gleichverteilte Zufalls-zahlen im jeweils angegebenen Intervall

(a) zwischen 0 und 10.

(b) zwischen -1 und 1.

(c) zwischen -20 und 10.

(d) zwischen −π und π.

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

(a) 10*rand(10,1).

(b) -1+2*rand(1,10).

(c) -20+30*rand(1,10).

(d) -pi+2*pi*rand(1,10).

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 112 (Zufallszahlen)Erzeugen Sie tausend gleichverteilte Zu-fallszahlen

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

(b) mit Mittelwert 0 und Varianz 1/12

(c) mit Mittelwert 0 und Varianz 1

(d) mit Mittelwert 0 und Varianz 3

Lösung: Dies kann man wie folgt erreichen:

(a) rand(1000,1)

(b) rand(1000,1)-0.5

143 Copyright c© G. Gramlich

Page 144: EinfMATLAB

(c) sqrt(12)*(rand(1000,1)-0.5)

(d) sqrt(3*12)*(rand(1000,1)-0.5)

mit den Funktionen mean und var könnenSie das überprüfen; am Besten mit nochmehr Zahlen. © . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 113 (Zufallszahlen)Erzeugen Sie tausend normalverteilte Zu-fallszahlen

(a) mit Mittelwert 1.0 und Varianz 0.5.

(b) mit Mittelwert -5.5 und Standardab-weichung 0.25.

(c) mit Mittelwert -5.5 und Standardab-weichung 1.25.

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

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

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

(c) 1.25*randn(1000,1)-5.5;.

Dies gilt wegen den Transformationsfor-meln für den arithmetischen Mittelwertbzw. für die Varianz: Ist yi = axi + b, sogilt y = ax + b und s2

Y = a2s2X . Hier gilt,

dass die Zahlen xi den Mittelwert null unddie Standardabweichung (Varianz) eins ha-ben. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

58.4. Andere Verteilungen

Wenn Sie über die Statistik Toolbox verfü-gen, so können Sie Zufallszahlen konforta-bel und interaktiv mit randtool erzeugen;für ingesamt 20 verschiedene Verteilungenzum Beispiel für die Exponential- oder Bi-nomialverteilungen. Die Abbildung 52 zeigt

0 2 4 6 80

10

20

30

40

50

Counts

Values

Samples

Abbildung 52: Exponentialverteilung

eine Exponentialverteilung mit Erwartung-wert 1.

59. Stochastische Simulationen

Eine stochastische Simulation liegt vor,wenn es um die Lösung von Problemengeht, bei denen Zufallsein�üsse auftreten.Stochastische Simulationsmethoden werdenauch Monte Carlo Methoden genannt.Solche Methoden sind nützlich bei:

• Nichtdeterministischen (stochastischen)Prozessen.

• Deterministischen Systemen, die zu kom-pliziert sind, um sie analytisch zu behan-deln.

144 Copyright c© G. Gramlich

Page 145: EinfMATLAB

• Deterministischen Problemen, die sohoch dimensional sind, dass Standard-diskretisierungsverfahren ungeignet sind(zum Beispiel Monte Carlo Integra-tionen).

Die beiden grundsätzlichen Voraussetzun-gen stochastischer Simulationsmethodensind:

• Kenntnis über relevante Wahrscheinlich-keitsverteilungen.

• Unterstützung bei der Erzeugung vonZufallszahlen.

Mit gleichverteilten Zufallszahlen könnenwir zum Beispiel Spiele mit dem Glücks-rad am Rechner simulieren. Wenn wir et-wa die relative Häu�gkeit von Werten be-rechnen, die im Intervall [0.2, 0.6] liegen,und mit der Wahrscheinlichkeit P (0.2 ≤X ≤ 0.6) = 0.4 vergleichen, dann solltefür gröÿeres n die relative Häu�gkeit nachdem Gesetz groÿer Zahlen mit hoher Wahr-scheinlichkeit bei 0.4 liegen. Auch sollte dieempirische Verteilungsfunktion der gezoge-nen Zahlen x1, x2, . . ., xn sich der [0, 1]-Gleichverteilung annähern.

Wir �spielen� nun Glücksrad am Computer,indem wir wiederholt auf [0, 1] gleichverteil-ter Zufallszahlen ziehen. Das Intervall [0, 1]wird wie in Abbildung 53 in zehn Teilin-tervalle der Länge 0.1 zerlegt und zu jedem�Spiel� wird festgelegt, in welches Teilint-zervall die gezogene Zufallszahl fällt. Abbil-dung 53 zeigt links das resultierende Histo-gramm mit den relativen Häu�gkeiten für

0 0.5 10

0.02

0.04

0.06

0.08

0.10

0.12

0.14n=100

0 0.5 10

0.02

0.04

0.06

0.08

0.10

0.12

0.14n=1000

Abbildung 53: Empirische Verteilungen

die zehn Teilklassen nach n = 100 Spielen.Man sieht, dass die relativen Häu�gkeitenzum Teil noch deutlich von dem zu erwar-tenden Wert 0.10 abweichen. Für n = 1000haben sich diese Häu�gkeiten bereits we-sentlich besser an den Wert 0.10 stabilisiert.Anders ausgedrückt: Die empirische Vertei-lung der gezogenen Zahlen approximiert diewahre Gleichverteilung besser.

59.1. Näherung für π

Mit stochastischen Simulationen ist esmöglich, Antworten auch auf nicht-stochastische Fragestellungen zu geben.Mit einer stochastischen Simulation werdenwir nun eine Näherung für die Kreiszahlπ = 3.14159 . . . berechnen.

Wir denken uns zunächst folgendes Experi-ment, wozu man eine Zielscheibe und Dart-pfeile benötigt. Die Zielscheibe besteht auseinem Quadrat und einem einbeschriebenenKreis. Dann werfen wir nach dem Zufalls-prinzip mit Dartpfeilen auf diese Scheibe

145 Copyright c© G. Gramlich

Page 146: EinfMATLAB

und bestimmen die relative Häu�gkeit derKreistre�er, das heiÿt

h =Anzahl der Tre�erAnzahl der Würfe

.

Hierbei werden nur Würfe gezählt, bei de-nen mindestens das Quadrat getro�en wur-de. Schreibt man die relativen Häu�gkeitender Kreistre�er auf, so stellt man fest, dasssie sich mit zunehmender Wurfzahl demWert π/4 nähert, denn die relative Häu-�gkeit h der Kreistre�er wird mit zuneh-mender Wurfzahl etwa dem Verhältnis (Flä-cheninhalt des Kreises) zu (Flächeninhaltdes Quadrates) entsprechen. Ist also r derKreisradius, so gilt: h ≈ r2π

4r2 = π4 und somit

π ≈ 4h.

Wir führen dieses Experiment nicht realaus (selbstverständlich können Sie dies tun,wenn Sie wollen), sondern simulieren es aufdem Computer. Wie ist das möglich? DieWahrscheinlichkeit eines zufälligen Ereig-nisses ist die idealisierte relative Häu�gkeit,mit welcher dieses vorkommt, wenn das zu-gehörige Zufallsexperiment sehr oft wieder-holt wird. Der nachfolgende Script-File rea-lisiert die Simulation.

%--------------------------------

% Script-File: Pfeilwurf.

%

% Simulation von 50 000 Pfeil-

% würfen zur Näherungsberechnung

% von Pi.

%--------------------------------

AnzahlimKreis = 0;

PiNaeherung = zeros(500,1);

for k=1:500

x = -1+2*rand(100,1);

y = -1+2*rand(100,1);

AnzahlimKreis = AnzahlimKreis

+ sum(x.^2+y.^2<=1);

PiNaeherung(k) =

4*AnzahlimKreis/(k*100);

end

plot(PiNaeherung)

title(sprintf('Näherung von Pi =

%5.3f',PiNaeherung(end)));

xlabel('mal Hundert')

Die Abbildung 54 zeigt das Ergebnis der

0 100 200 300 400 5003.05

3.1

3.15

3.2

3.25

3.3Näherung von Pi = 3.144

mal Hundert

Abbildung 54: Näherung für π

Simulation. Siehe auch Aufgabe 150.

59.2. Zum Ziegenproblem

In einer Spielshow ist als Hauptpreis einAuto ausgesetzt. Hierzu sind auf der Bühnedrei verschlossene Türen aufgebaut. Hintereiner rein zufällig ausgewählten Tür be�n-det sich der Hauptpreis, hinter den beiden

146 Copyright c© G. Gramlich

Page 147: EinfMATLAB

anderen jeweils eine Ziege. Der Kandidatwählt eine der Türen, beispielsweise Tür1 aus; diese bleibt aber vorerst verschlos-sen. Der Spielleiter, der weiÿ, hinter welcherTür das Auto steht, ö�net daraufhin mitden Worten: �Soll ich Ihnen mal etwas zei-gen?�eine der beiden anderen Türen, zumBeispiel Tür 3, und eine Ziege schaut insPublikum. Der Kandidat hat nun die Mög-lichkeit, bei seiner ursprünglichen Wahl zubleiben oder die andere verschlossene Tür(in unserem Beispiel Nr.2) zu wählen. Ererhält dann den Preis hinter der von ihmzuletzt gewählten Tür. In dem nachfolgen-den Skript �nden Sie die Antwort auf dieseFrage.

%--------------------------------

% Script-File: Ziegen

%

% Simulation des Ziegenproblems.

% Es werden zehn Versuche mit

% jeweils zehntausend

% Durchgängen simuliert.

%--------------------------------

%Zehn Versuche.

for i=1:10

%Zehntausend Durchgänge.

%Zufall wird vorbereitet.

%Es wird eine (10000,3)-Zu-

%fallsmatrix mit den Werten

% 1,2 und 3 erzeugt.

a = ceil(3*rand(10000,3));

%Zufallswahl der Autotür A.

A = a(:,1);

%Zufällige Erstwahl W1.

W1 = a(:,2);

%Moderator will Tür M öffnen.

M = a(:,3);

%M darf keine Autotür (A) sein

%und auch nicht die gewählte

%Tür (W1).

for j=1:10000

while ( (M(j)==A(j)) |...

(M(j)==W1(j)) )

M(j) = ceil(3*rand(1,1));

end

end

%W2 wäre die Tür, zu der nun

%gewechselt werden kann. Es

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

W2 = 6-M-W1;

%Wenn W2 die Autotür ist, ein

%Punkt für 'Wechseln ist richtig'.

%Sonst ein Punkt für 'Wechseln

%ist falsch', da W1 gleich A ist.

%Die Variablen R und F zählen das

%richtige bzw. falsche Wechseln.

R = sum(W2==A);

F = 10000-R;

sprintf('Wechseln ist richtig:

%3.0f\t Wechseln ist falsch:

%3.0f',R,F)

subplot(2,5,i); pie([R,F]);

end

%Grafische Ausgabe als Kreisdiagramm.

legend('Wechseln ist richtig',

'Wechseln ist falsch');

59.3. Das Geburtstagsparadox

Stellen wir uns vor, dass sich in einemRaum eine gewisse Anzahl von Personenbe�ndet. Wir interessieren uns dafür, obzwei am gleichen Tag Geburtstag haben.

147 Copyright c© G. Gramlich

Page 148: EinfMATLAB

Wie viele Personen müssen vorhanden sein,damit garantiert zwei am gleichen Tag Ge-burtstag haben? Das ist eine einfache Fra-ge: Da das Jahr 365 Tage hat, haben von366 Personen bestimmt zwei am gleichenTag Geburtstag (Wir gehen auf Schaltjah-re nicht ein). Eine wesentlich interessantereFrage ist: Wie viele Personen müssen vor-handen sein, damit es wahrscheinlich ist,dass zwei am gleichen Tag Geburtstag ha-ben? Genauer: Wie viele Personen brauchtman, dass mit einer Wahrscheinlichkeit vonüber 50% zwei am gleichen Tag Geburtstaghaben? Die Antwort ist überraschend: Be-reits 23 Personen reichen aus, um die Wahr-scheinlichkeit für einen gleichen Geburtstagauf über 50% zu bringen. Achtung: Es istweder danach gefragt, dass zwei am 1. Ja-nuar Geburtstag haben oder dass jemandam gleichen Tag wie Sie Geburtstag hat,sondern danach, ob zwei Leute am 1. Janu-ar oder am 2. Januar oder usw. Geburtstaghaben.

In einem Raum sind n Personen versam-melt. Unter der Voraussetzung, dass jedesJahr 365 Tage hat (es gibt keine Schaltjah-re) und dass die Geburtstage übers Jahrgleichverteilt sind, ist die Wahrscheinlich-keit dafür, dass mindestens zwei Personenam gleichen Tag Geburtstag haben gegebendurch die Formel:

P = 1− 364 · 363 · · · (365− n + 1)365n−1

Für n = 23 ergibt sich 0.5073 = 50.73%und für n = 50 bereits 0.9704 = 97.04%.

Diese Resultate der Wahrscheinlichkeitsre-chung lassen sich simulationsmäÿig bestäti-

gen. Dazu dient der folgende Script-File.

%--------------------------------

% Script-File: Geburtstag

%

% Das Geburtstagsparadox.

%--------------------------------

clear all

%kmax: Anzahl der Simulationen.

kmax = 5000;

%n: Anzahl der Personen im Raum.

for n = [5,10,15,20,22,23,25,...

30,35,40,45,50,55]

r = 0;

for k=1:kmax

%Zufallszahlen zwischen 1

%und 365.

g = ceil(365*rand(n,1));

for i=1:n

a = g-g(i)*ones(n,1);

if( sum(~a)>=2 )

%Zwei Zahlen sind

%gleich.

r = r+1;

break

end

end

end

%Wahrscheinlichkeit.

p = r/kmax;

[n,p]

end

Die Ergebnisse der theoretischen Berech-nungen und der Simulation sind in Tabelle28 gegenübergestellt.

148 Copyright c© G. Gramlich

Page 149: EinfMATLAB

n Theorie Simulation5 0.0271 0.024810 0.1169 0.111815 0.2529 0.252620 0.4114 0.421622 0.4757 0.484623 0.5073 0.515625 0.5687 0.564230 0.7063 0.698035 0.8144 0.806440 0.8912 0.891045 0.9410 0.942450 0.9410 0.970055 0.9863 0.9880

Tabelle 28: Zum Geburtstagsparadox

59.4. Bestimmte Integrale

Das bestimmte Integral∫ 1

0xxdx

kann vonMatlab nicht exakt (symbolisch)berechnet werden, siehe Abschnitt 54. Wirkönnen aber mit Hilfe der Näherung∫ 1

0f(x)dx ≈ 1

n

n∑i=1

f(xi)

einen geschätzten Wert erhalten. Hierbeisind xi gleichmäÿig verteilte Zufallszahlenaus dem Intervall ]0, 1[.

>> n = 1000;

>> x = rand(n,1);

>> y = x.^x;

>> sum(y)/n

ans =

0.7850

Somit ist also∫ 1

0xxdx ≈ 0.7850

60. Symbolisches Rechnen

Symbolisches Rechnen ist der Versuch, dieMethoden, die man beim Rechnen mit Pa-pier und Bleistift kennt, auf Computern ab-zubilden und dort schlieÿlich durchzufüh-ren.

Um mit Matlab symbolisch rechnen zukönnen, muss die Symbolic Math Toolboxinstalliert sein.

Symbolische Rechnungen basieren auf Va-riablen, denen nicht unbedingt Zahlen zu-gewiesen sind. Man rechnet mit Symbo-len und Termen, wie man es vom Rech-nen mit Papier und Bleistift kennt. Arith-metische Operationen können exakt durch-geführt werden. Auÿerdem kann man Nä-herungen bis auf eine beliebig vorgegebe-ne gewünschte Anzahl von Stellen �nden.

149 Copyright c© G. Gramlich

Page 150: EinfMATLAB

Man kann Polynome oder rationale Aus-drücke symbolisch addieren, subtrahierenund dividieren. Ausdrücke können di�eren-ziert werden und man erhält die gleichenErgebnisse, die bisher nur mit Bleistift undPapier zu erzielen waren. Ausdrücke könnensogar unbestimmt integriert werden, sofernsie Integrale in geschlossener Form besit-zen. Diese Möglichkeiten erleichtern das er-müdende und fehlerbedrohte Manipulierenkomplizierter Ausdrücke, das auch häu�gdas Vorspiel numerischer Behandlung bil-det. Mit symbolischem Rechnen lassen sichauch kleinere lineare Gleichungssysteme oh-ne Rundungsfehler lösen. Auf jeden Fall istsymbolisches Rechnen ein sich ständig ent-wickelndes Gebiet, dessen Bedeutung fürdas wissenschaftliche Rechnen zunehmenwird.

60.1. Erste Schritte

Durch

>> syms x t

werden die beiden symbolischen Variablenx und t erzeugt, mit denen man durch

>> 3*x^2+x*t-1

ans =

3*x^2+x*t-1

den Ausdruck 3x2 + xt− 1 kreiert.

Bekanntlich ist

a2 − b2

a− b= a + b.

>> syms a b

>> simplify((a^2-b^2)/(a-b))

ans =

a+b

Es ist

(a + b + c)2 = a2 + b2 + c2 + 2(ab + ac + bc)

>> syms a b c

>> expand((a+b+c)^2)

ans =

a^2+2*a*b+2*a*c+b^2+2*b*c+c^2

Mit dem pretty-Befehl kann man Formelnin etwas lesbarerer Form ausgeben.

Mit der Funktion simplify können sym-bolische Terme vereinfacht werden. In derMathematik lernt man die Gültigkeit vonsin(x)2 + cos(x)2 = 1. Mit der Funktionsimplify kann man dies bestätigen:

>> syms x

>> simplify( sin(x)^2+cos(x)^2 )

ans =

1

Substitutionen können mit der Funktionsubs durchgeführt werden. Die folgendenAnweisungen substituieren cos(x) anstellevon x.

>> syms x

>> subs( sqrt(1-x^2),x,cos(x) )

ans =

(1-cos(x)^2)^(1/2)

150 Copyright c© G. Gramlich

Page 151: EinfMATLAB

Matlab verfügt über viele eingebaute ma-thematische Funktionen mit denen mansymbolisch rechnen kann. Mit diesen vorde-�nierten Funktionen ist es uns dann mög-lich, weitere Funktionen zu konstruieren,indem man die entsprechenden Funktions-terme f(x) miteinander verküpft.

Funktionsterme sind Ausdrücke, das heiÿt,sie können wie gewöhnliche Terme erzeugtwerden. Angenommen wir wollen mit demFunktionsterm f(x) = 2x2+3x+4 arbeiten,zum Beispiel di�erenzieren oder integrieren,so de�niert man diesen wie folgt.

>> syms x

>> f = 2*x^2+3*x+4;

Danach kann man zum Beispiel f ′(x) =4x + 3 bilden.

>> diff(f)

ans =

4*x+3

Aufgabe 114 (Rangordnung)Berechnen Sie symbolisch:

(a) 2�10/10

(b) 2+3*4

(c) 1+2/3*4.

Lösung: Es ist

a) >> sym(2^10/10)

ans =

512/5

b) >> sym(2+3*4)

ans =

14

c) >> sym(1+2/3*4)

ans =

11/3

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 115 (Potenzregeln)Bestätigen Sie die folgenden Rechenregeln:

(a) am · an = am+n

(b) am

an = am−n

Verwenden Sie die Matlab-Funktionsimplify.Lösung: � syms a n m

(a) >> simplify(a^m*a^n)

ans =

a^(m+n)

(b) >> simplify(a^m/a^n)

ans =

a^(m-n)

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 116 (Rechnen)Berechnen Sie den Ausdruck

√16 + cos(π/3)

3√

8 + 4

151 Copyright c© G. Gramlich

Page 152: EinfMATLAB

symbolisch und numerisch.Lösung: Symbolische Rechnung:Sowohl

>> sym((sqrt(16)+cos(pi/3))...

/(8^(1/3)+4))

also auch

>> (sym(sqrt(16)) + sym(cos(pi/...

3)))/sym(8^(1/3)+4)

liefert

ans =

3/4

Numerische Rechnung:

>> (sqrt(16)+cos(pi/3))/(8^(1/3)+4)

ans =

0.7500

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 117 (Vereinfachen)Vereinfachen Sie den Ausdruck

x2 + 2xy + y2

x2 − y2

Lösung: Mit

>> syms x y

>> simplify((x^2-2*x*y+y^2)/...

(x^2-y^2))

erhält man

ans =

(-y+x)/(x+y)

Somit ist die Vereinfachung dann also

x2 + 2xy + y2

x2 − y2=

x− y

x + y.

Anmerkung: Man kann statt simplify

auch den Befehl simple verwenden. © . . . ©

Aufgabe 118 (Multiplikation)Multiplizieren Sie

(x2 + x + 1) · (x3 − x2 + 1).

Lösung: Mit

>> syms x

>> collect( (x^2+x+1)*(x^3-x^2+1))

ans =

x^5+x+1

sieht man, dass

(x2 + x + 1) · (x3 − x2 + 1) = x5 + x + 1

ist. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 119 (Potenzieren)Berechnen Sie

(1 + x)4.

Lösung: Mit

152 Copyright c© G. Gramlich

Page 153: EinfMATLAB

>> syms x

>> expand((1+x)^4)

ans =

1+4*x+6*x^2+4*x^3+x^4

sieht man, dass

(1 + x)4 = x4 + 4x3 + 6x2 + 4x + 1

ist. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 120 (Faktorisieren)Faktorisieren Sie das Polynom

x6 + x4 − x2 − 1.

Lösung: Mit

>> syms x

>> factor(x^6+x^4-x^2-1)

ans =

(x-1)*(1+x)*(1+x^2)^2

sieht man, dass

(x6+x4−x2−1) = (x−1)·(x+1)·(x2+1)2

ist. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

60.2. Wie man Maple-Funktionenverwendet

Die Funktion maple erlaubt es, jedeMaple-Funktion direkt zu verwenden.Kennt man den Namen der gewünschtenMaple-Funktion, so kann man mit

mhelp <Name>

Maple-Online-Informationen erhalten.Mit dem Aufruf

>> mhelp index[function]

erhält man eine Liste aller Maple-Funktionen.

Als Beispiel betrachten wir den Befehl

>> mhelp gcd

Da man auf diese Art die Syntax derMaple-Funktion gcd erfahren hat, kannman nun die Funktion maple benutzen, umgcd zu verwenden. Die nachfolgenden Zei-len zeigen, wie man den gröÿten gemeinsa-men Teiler der Polynome x2−y2 und x3−y3

berechnet:

>> syms x y

p1 = x^2-y^2;

p2 = x^3-y^3;

maple('gcd',p1,p2)

ans =

-y+x

Die Anweisungen

>> maple('gcd',225,725)

ans =

25

bestimmen den gröÿten gemeinsamen Teilervon 225 und 725.

153 Copyright c© G. Gramlich

Page 154: EinfMATLAB

60.3. Mathematische Funktionen

Matlab verfügt über viele eingebaute Ma-thematische Funktionen mit denen mansymbolisch rechnen kann. Mit diesen vorde-�nierten Funktionen ist es uns dann auchmöglich, weitere Funktionen zu konstruie-ren, indem man die entsprechenden Funk-tionsterme f(x) miteinander verküpft.

Funktionsterme sind Ausdrücke, das heiÿt,sie können wie gewöhnliche Terme erzeugtwerden. Angenommen wir wollen mit demFunktionsterm f(x) = 2x2+3x+4 arbeiten,zum Beispiel di�erenzieren oder integrieren,so de�niert man diesen wie folgt.

>> syms x

>> f = 2*x^2+3*x+4;

Danach kann man zum Beispiel f ′(x) =4x + 3 bilden.

>> diff(f)

ans =

4*x+3

Will man einen abstrakten Funktionstermf(x) erzeugen, das heiÿt einen Term, der ir-gendein spezieller Funktionsterm sein kann,so ist das durch die die Anweisung

>> f = sym('f(x)')

möglich. Hierdurch wird das symbolischesObjekt f erzeugt, das wie f(x) agiert, dasheiÿt, dem Objekt f ist bekannt, dass eineunabhängige Variable x existiert. Das demso ist, zeigen die nachfolgenden Zeilen.

>> diff(f)

ans =

diff(f(x),x)

>> diff(f,'t')

ans =

0

Der Funktionsterm f(x) nach x abgeleitet,ergibt f ′(x) bzw. in Matlab-Terminologiediff(f(x),x); nach t abgeleitet ist er aber0, denn f(x) hängt nciht von t ab.

Damit können wir nun den Di�erenzenquo-tient der Funktion f im Punkt x bilden

>> syms xbar h

>> ( subs(f,xbar+h)-subs(f,xbar) )/h

ans =

(f(xbar+h)-f(xbar))/h

und dann auch die Ableitung (Di�erenzial-quotient) f ′(x) im Punkt x.

>> limit(ans,h,0)

ans =

D(f)(xbar)

Als weiteres Beispiel bestätigen wir die Pro-duktregel.

>> diff(f*g)

ans =

diff(f(x),x)*g(x)+f(x)*diff(g(x),x)

154 Copyright c© G. Gramlich

Page 155: EinfMATLAB

Aufgabe 121 (Funktionsterme)Bestätigen Sie die Quotientenregel(f(x)

g(x)

)′=

f ′(x)g(x)− f(x)g′(x)2g(x)

Lösung: Hier die Bestätigung:

f = sym('f(x)'); g = sym('g(x)');

diff(f/g)

ans =

diff(f(x),x)/g(x)-f(x)/g(x)^2*

diff(g(x),x)

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Häu�g hat man einen symbolischen Funkti-onsterm de�niert und möchte dann symbo-lische oder numerische Funktionswerte be-rechnen. Als Beispiel betrachten wir densymbolischen Funktionsterm f(x) =

√x.

Es soll f(2) zunächst symbolisch ausgewer-tet werden; hierbei hilft die subs-Funktion.

>> syms x

>> f = sqrt(x);

>> pretty(subs(f,sym(2)))

1/2

2

Auch die numerische Funktionsberechnungkann mit der subs-Funktion erfolgen.

>> subs(f,2)

ans =

1.4142

Wir können f(x) aber auch für mehrere x-Werte auswerten. Numerisch:

>> subs(f,[1, 2, 3, 4])

ans =

1.0000 1.4142 1.7321 2.0000

und symbolisch:

>> subs(f,sym([1, 2, 3, 4]))

ans =

[ 1, 2^(1/2), 3^(1/2), 4^(1/2)]

Mit zwei gegebenen Funktionen f und gund den Operationen Addition, Subtrakti-on, Multiplikation und Division kann mandie Summe f + g, die Di�erenz f − g, dasProdukt fg und den Quotienten f/g bil-den. Zusätzlich kann man die Kompositionvon f und g, in Zeichen f ◦ g, de�nieren.

Die Sinusfunktion f = sin und die Expo-nentialfunktion g = exp sind eingebauteFunktionen. Wir können damit die Sum-menfunktion f + g = sin+ exp oder dieVerkettung f ◦ g = esin dieser beiden Funk-tionen bilden. Die folgenden Anweisungenzeigen die Umsetzung:

>> syms x

>> sin(x) + exp(x)

ans =

sin(x)+exp(x)

>> exp(sin(x))

ans =

exp(sin(x))

oder alternativ mit der Funktion compose

für die Komposition.

155 Copyright c© G. Gramlich

Page 156: EinfMATLAB

>> syms x

>> compose(exp(x),sin(x))

ans =

exp(sin(x))

Wir können auch (symbolische) Funktions-werte berechnen.

>> sin(sym(1.5))

ans =

sin(3/2)

Den dazugehörigen numerischen Werte er-halten wir durch die Anweisung

>> double(ans)

ans =

0.9975

>> sin(sym(pi/4))

ans =

1/2*2^(1/2)

Wir können auch die Funktion subs ver-wenden, um Funktionswerte zu berechnen.

>> syms x

>> exp(sin(x));

>> subs(ans,sym(2))

ans =

exp(sin(2))

Der numerische Wert ist

>> double(ans)

ans =

2.4826

oder direkt

>> exp(sin(x));

>> subs(ans,2)

ans =

2.4826

Mit dem Befehl type ist die Überprüfungmöglich, ob eine vorliegende Funktion f ge-rade oder ungerade ist. Eine reellwertigeFunktion f mit symmetrischem De�nitions-bereich Df ⊆ R wird als gerade bezeichnet,wenn f(x) = f(−x) für alle x ∈ Df gilt.Demnach ist die Kosinusfunktion cos einegerade Funktion. Wir überprüfen diese Be-hauptung.

>> syms x

>> f = cos(x);

>> maple('type',f,'evenfunc(x)')

ans =

true

Die Exponentialfunktion exp ist dagegenweder gerade noch ungerade.

>> g = exp(x);

>> maple('type',g,'evenfunc(x)')

ans =

false

>> maple('type',g,'oddfunc(x)')

ans =

false

156 Copyright c© G. Gramlich

Page 157: EinfMATLAB

Mit der Funktion finverse kann man vonder Funktion f die Umkehrfunktion f−1

�nden, genauer: man kann den Funktions-term von f−1 berechnen. Das folgende Bei-spiel zeigt dies für die Exponentialfunktionf(x) = ex, x ∈ R.

>> syms x

>> f = exp(x);

>> finverse(f)

ans =

log(x)

Die Umkehrfunktion ist somit f−1(x) =ln(x), x > 0, wobei der De�nitionsbereichvon Matlab nicht angegeben wird, son-dern in Eigenverantwortung hingeschriebenwerden muss.

Ist bei der Umkehrfunktion besonders aufden De�nitionsbereich zu achten, so gibtMatlab eine Warnung heraus, wie folgen-des Beispiel zeigt:

>> g = x^2;

>> finverse(g)

Warning: finverse(x^2) is not unique.

> In C:\MATLAB6p1\toolbox\symbolic\

@sym\finverse.m at line 43

ans =

x^(1/2)

Die Umkehrfunktion von der quadratischenFunktion f(x) = x2, x ∈ R ist die Wurzel-funktion, der De�nitionsbereich dieser istaber nicht ganz R, sondern R≥0.

Der Stetigkeitsbegri� ist ein zentraler Be-gri� der Analysis bzw. der Di�erenzial-

und Integralrechung. Die Maple-Funktioniscount überprüft, ob eine vorliegendeFunktion f auf einem anzugebendem Inter-vall stetig ist. Die Funktion f(x) = 1/x istauf [1, 3] stetig, nicht aber auf [−1, 3]. Hierdie Bestätigung:

>> syms x

>> maple('iscont',1/x,'x=1..3')

ans =

true

>> maple('iscont',1/x,'x=-1..3')

ans =

false

Stückweise de�nierte Funktionen lassensich mit der Funktion piecewise de�nie-ren. Hier ein Beispiel.

>> f = maple('piecewise','x<=0',...

'x','0<x','1/x')

f =

PIECEWISE([x, x <= 0],[1/x, 0 < x])

>> diff(f)

ans =

PIECEWISE([1, x < 0],[NaN, x = 0],

[-1/x^2, 0 < x])

>> int(f)

ans =

PIECEWISE([1/2*x^2, x < 0],

[NaN, x = 0],[log(x), 0 < x])

60.4. Algebraische Gleichungen

Mit der Funktion solve kann man Glei-chungen lösen. Das nachfolgende Beispiellöst x2 − x = 0.

157 Copyright c© G. Gramlich

Page 158: EinfMATLAB

>> solve('x^2-x = 0')

ans =

[0]

[1]

Findet man keine exakte symbolische Lö-sung, so wird die Lösung in variabler Ge-nauigkeit ausgegeben.

>> solve('cos(x) = x')

ans =

.739...87

60.5. Grenzwerte

Die Folge

an =2n + 1

4n, n ≥ 1

hat den Grenzwert 1/2. Der nachfolgendeMatlab-Code bestätigt dies:

>> limit((2*n+1)/(4*n),inf)

ans =

1/2

Die Eulersche Zahl e = 2.7183 . . . ist derGrenzwert der Folge mit der Bildungsvor-schrift (1 + 1/n)n, n ≥ 1 für n → ∞. Dienachfolgenden Anweisungen zeigen dies:

>> syms n

>> limit((1+1/n)^n,inf)

ans =

exp(1)

Mit der Funktion limit lassen sich auchGrenzwerte von Funktionen berechnen. DieTabelle 29 Möglichkeiten mit limit.

Mathematik Matlab

limx→0

f(x) limit(f)

limx→a

f(x) limit(f,x,a)

oder limit(f,a)limx→ax<0

f(x) limit(f,x,a,'left')

limx→ax>0

f(x) limit(f,x,a,'right')

Tabelle 29: Grenzwerte berechnen

Besitzt der Di�erenzenquotient (f(x) −f(x))/(x − x) der Funktion f für x → xeinen Grenzwert, so heiÿt f an der Stellex di�erenzierbar. Der Grenzwert wird mitf ′(x) bezeichnet und man schreibt

f ′(x) = limx→x

f(x)− f(x)x− x

.

Man nennt den Grenzwert auch Di�eren-zialquotient und die Berechnungsmethodevon f ′(x) die x-Methode.

Wir können limit einsetzen, um die Ablei-tung einer Funktion f an der Stelle x zuberechnen. Als Beispiel berechnen wir fürdie Funktion f(x) = 3/x, x > 0 die Ablei-tung f ′(2).

>> syms x

>> limit( (3/x-3/2)/(x-2) ,x,2 )

ans =

-3/4

158 Copyright c© G. Gramlich

Page 159: EinfMATLAB

Somit ist f ′(2) = −3/4 oder

limx→2

3/x− 3/2x− 2

= −34

Anstatt die Ableitung von f an der Stelle xmit Hilfe der x-Methode zu berechnen, istes manchmal zweckmäÿiger die sogenannteh-Methode einzusetzen. In diesem Fall wirdf ′(x) wie folgt berechnet:

f ′(x) = limh→0

f(x + h)− f(x)h

.

Für obiges Besipiel mit f(x) = 3/x, x > 0und x = 2 erhält man:

>> syms h

>> limit( (3/(2+h)-3/2)/h, h, 0)

ans =

-3/4

Bekanntlich hat der Di�erenzenquotient(f(x)− f(x))/(x− x) für die Betragsfunk-tion f(x) = abs(x) = |x|, x ∈ R und x = 0keinen Grenzwert. InMatlab erhalten wir:

>> syms x

>> limit( (abs(x)-abs(0))/(x-0),x,0)

ans =

NaN

Zwar ist die Betragsfunktion abs im Punkt0 nicht di�erenzierbar, hat aber dort einenrechten und linken Grenzwert, das heiÿt esgilt

limx→0x>0

abs(x)− abs(0)x− 0

= 1

und

limx→0x<0

abs(x)− abs(0)x− 0

= −1

Wir bestätigen dies:

>> limit( (abs(x)-abs(0))/(x-0),...

x,0,'right')

ans =

1

>> limit( (abs(x)-abs(0))/(x-0),...

x,0,'left')

ans =

-1

Die Ableitung einer Funktion basiert be-kanntermaÿen auf dem Prozeÿ der Grenz-wertbildung. Zum Beispiel ist die Ab-leitungsfunktion der Kosinusfunktion cosdie Funktion − sin. Mathematisch bedeutetdies:

d

dxcos(x) = lim

h→0

cos(x + h)− cos(x)h

= − sin(x)

Dies können wir mit der limit-Funktionbestätigen.

>> syms x h

>> limit( (cos(x+h)-cos(x))/h, h, 0)

ans =

-sin(x)

Die folgenden Matlab-Anweisungen be-rechnen den Grenzwert

limx→0

cos(x) = 1

159 Copyright c© G. Gramlich

Page 160: EinfMATLAB

>> syms x

>> limit(cos(x))

ans = 1

Aufgabe 122 (Grenzwerte)Berechnen Sie den Grenzwert

limx→0

sinx

x

Lösung: Man berechnet den Grenzwertmit

>> syms x

>> limit( sin(x)/x )

ans =

1

Somit ist der Grenzwert

limx→0

sin(x)x

= 1 .

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 123 (Grenzwerte)Berechnen Sie den Grenzwert

limh→0

cos(h)− 1h

Lösung: Man berechnet den Grenzwertmit

>> syms h

>> limit( (cos(h)-1)/h )

ans =

0

Somit ist der Grenzwert

limh→0

cos(h)− 1x

= 0.

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 124 (Grenzwerte)Bestimmen Sie den Grenzwert

limx→∞

xe−x

und interpretieren Sie ihn.Lösung: Der Grenzwert ist Null, denn esist:

>> syms x

>> limit(x*exp(-x),inf)

ans =

0

Die Exponentialfunktion f(x) = e−x, x ∈R fällt für x → ∞ schneller als die linea-re Funktion g(x) = x, x ∈ R für x → ∞steigt. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 125 (Grenzwerte)Bestimmen Sie den Grenzwert

limh→0

(x + h)3 − x3

h.

Was bedeutet dieser Grenzwert?Lösung: Es ist:

>> syms x h

>> limit(((x+h)^3-x^3)/h,h,0)

ans =

3*x^2

Der Grenzwert ist der Ableitungsterm derFunktion f(x) = x3, x ∈ R. © . . . . . . . . . . .©

160 Copyright c© G. Gramlich

Page 161: EinfMATLAB

60.6. Endliche und unendliche Summen

Endliche oder unendliche Reihen lassen sichmit der Matlab-Funktion symsum berech-nen, die symbolisches Summieren erlaubt.Die Summe der endlichen Reihe

10∑k=1

2k = 2 + 4 + 8 + · · ·+ 1024

ist 2046, was man durch folgende Zeilen be-stätigen kann:

>> symsum(2^k,1,10)

ans =

2046

Ob die Summe einer unendlichen Reiheexistiert und welchen Wert sie gegebenen-falls hat, läÿt sich ebenfalls mit der Mat-lab-Funktion symsum beantworten. In derAnalysis beweist man3:

∞∑n=1

1n2

=π2

6.

Mit dem Kommando symsum kann man diesüberprüfen:

>> syms n

>> symsum(1/n^2,1,inf)

ans =

1/6*pi^2

3Zum Beispiel mit Hilfe der Theorie der Fourier-

Reihen.

Aufgabe 126 (Endliche Summen)Berechnen Sie

10∑k=1

1k.

Lösung: Mit

>> syms k

>> symsum(1/k,1,10)

erhält man

ans =

7381/2520

Es ist somit also

10∑k=1

1k

=73812520

.

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 127 (Endliche Summen)Bestätigen Sie die folgenden Ergebnisse

(a)∑n

k=1 k = n(n+1)2

(b)∑n

k=1 k2 = n(n+1)(2n+1)6

(c)∑n

k=1 k3 = n2(n+1)2

4 .

Lösung: De�niert man zunächst

>> syms k n

so erhält man

161 Copyright c© G. Gramlich

Page 162: EinfMATLAB

a) >> simple(symsum(k,1,n))

ans =

1/2*n*(n+1)

b) >> simple(symsum(k^2,1,n))

ans =

1/6*n*(n+1)*(2*n+1)

c) >> simple(symsum(k^3,1,n))

ans =

1/4*n^2*(n+1)^2

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 128 (Unendliche Summen)Berechnen Sie die Summe der Reihe

∞∑k=1

14k2 − 1

.

Lösung: Mit

>> syms k

>> symsum( 1/(4*k^2-1),1,inf)

erhält man

ans =

1/2

Also ist die Summe der Reihe

∞∑k=1

14k2 − 1

=12

.

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 129 (Unendliche Summen)Bestätigen Sie, dass für die harmonischeReihe gilt

∞∑k=1

(−1)k−1 1k

= ln(2).

Lösung: Mit

>> syms k

>> symsum( (-1)^(k-1)/k,1,inf)

erhält man

ans =

log(2)

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 130 (Unendliche Summen)Berechnen Sie die Leibnizsche Reihe

∞∑k=1

(−1)k 12k + 1

Lösung: Mit

>> syms k

>> symsum( (-1)^k/(2*k+1),1,inf)

erhält man

ans =

-1+1/4*pi

Also ist die Leibnizsche Reihe∞∑

k=1

(−1)k 12k + 1

4− 1 .

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

162 Copyright c© G. Gramlich

Page 163: EinfMATLAB

60.7. Di�erenziation

Die Funktion diff berechnet die symboli-sche Ableitung eines Funktionsterms. Umeinen symbolischen Ausdruck zu erzeugen,muss man zuerst die verwendeten symbo-lischen Variablen de�nieren, und dann dengewünschten Ausdruck bilden, und zwar ge-nauso, wie man es mathematisch tun wür-de. Die folgenden Anweisungen

>> syms x

>> f = x^2*exp(x);

>> diff(f)

erzeugen eine symbolische Variable x, bil-den den symbolischen Ausdruck x2 exp(x)und berechnen die Ableitung von f nach x.Das Ergebnis ist:

ans =

2*x*exp(x)+x^2*exp(x)

Aufgabe 131 (Ableitungen)Berechnen Sie

d

dx(x2ex)

Lösung: Mit

>> syms x

>> diff(x^2*exp(x))

ans =

2*x*exp(x)+x^2*exp(x)

sieht man, dass

d

dx(x2ex) = 2xex + x2ex

ist. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 132 (Ableitungen)Berechnen Sie

d

dxarctan(x)

Lösung: Mit den Anweisungen

>> syms x

>> diff(atan(x))

ans =

1/(1+x^2)

erkennt man, dass

d

dxarctan(x) =

11 + x2

ist. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 133 (Ableitungen)Berechnen Sie

d

dx(xxx

)

Lösung: Mit den Anweisungen

>> syms x

>> diff(x^(x^x))

ans =

x^(x^x)*(x^x*(log(x)+1)*log(x)+x^x/x)

erkennt man, dass

d

dx

(xxx)

= xxx

(xx (ln (x) + 1) ln (x) +

xx

x

)ist. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

163 Copyright c© G. Gramlich

Page 164: EinfMATLAB

60.8. Partielle Di�erenziation

Es können auch partielle Ableitungen be-rechnet werden:

>> syms w x y

>> diff(sin(w*x*y))

berechnet die Ableitung von sin(wxy) nachx. Das Ergebnis ist cos(wxy)wy. Das Er-gebnis von

>> diff(sin(w*y))

ist cos(wy)w. Selbstverständlich kann manauch steuern, nach welcher Variablen di�e-renziert werden soll.

>> diff(sin(w*y),w)

liefert das Ergebnis

ans =

cos(w*y)*y

Es ist auch möglich, Ableitungen höhererOrdnung zu berechnen.

60.9. Der Gradient

Mit der Funktion jacobian ist es mög-lich, den Gradient einer reellwertigen Funk-tion zu berechnen. Für f : R3 → R mitf(x, y, z) = ex+2y + 2x sin(z) + z2xy ist

∇f(x) =

ex+2y + 2 sin(z) + z2y2ex+2y + z2x

2x cos(z) + 2xyz

.

Wir bestätigen dies in Matlab.

>> syms x y z real

>> jacobian(exp(x+2*y)+...

2*x*sin(z)+z^2*x*y)'

ans =

[ exp(x+2*y)+2*sin(z)+z^2*y]

[ 2*exp(x+2*y)+z^2*x]

[ 2*x*cos(z)+2*z*x*y]

60.10. Die Hesse-Matrix

Der Gradient der Funktion f(x, y) = 2x4 +3x2y + 2xy3 + 4y2, (x, y) ∈ R2 ist

∇f(x) =[

8x3 + 6xy + 2y3

3x2 + 6xy2 + 8y

]und die Hesse-Matrix ergibt sich zu

Hf (x) =[

24x2 + 6y 6x + 6y2

6x + 6y2 12xy + 8

].

Wir bestätigen dies in Matlab; hilfreichist wieder die jacobian-Funktion.

>> syms x y real

>> f = 2*x^4+3*x^2*y+2*x*y^3+4*y^2;

>> gradf = jacobian(f)'

gradf =

[ 8*x^3+6*x*y+2*y^3]

[ 3*x^2+6*x*y^2+8*y]

>> hessf = jacobian(gradf)

hessf =

[ 24*x^2+6*y, 6*x+6*y^2]

[ 6*x+6*y^2, 12*x*y+8]

Im Punkt (x, y) = (−2, 3) gilt

∇f(−2, 3) =[−46−72

]

164 Copyright c© G. Gramlich

Page 165: EinfMATLAB

und

Hf (−2, 3) =[

114 4242 −64

].

In Matlab:

>> subs(gradf,{x,y},{-2,3})

ans =

-46

-72

>> subs(hessf,{x,y},{-2,3})

ans =

114 42

42 -64

60.11. Die Jacobi-Matrix

Bei Funktionen mehrerer Veränderlicherberechnet man die Funktionalmatrix oderJacobi-Matrix mittels jacobian. Will mandie Jacobi-Matrix der Funktion

f : R3 → R3

(x, y, z) 7→ (xy, x, z)

berechnen, so geht das wie folgt:

>> syms x y z

>> J = jacobian([x*y,x,z],[x,y,z])

J =

[ y, x, 0]

[ 1, 0, 0]

[ 0, 0, 1]

Im ersten Argument der Function jacobiansteht der Funktionsterm und im Zweitenstehen die unabhängigen Variablen.

Aufgabe 134 (Jacobi-Matrizen)Berechnen Sie die Jacobi-Matrix der Funk-tion f : R2 → R3, (x, y) 7→ (x +y, x2 sin y, exy) in einem beliebigen Punkt(x, y) ∈ R2. Wie lautet die Jacobi-Matrixim Punkt (1, 0)?Lösung: Es ist

>> syms x y

>> J = jacobian([x+y,x^2*sin(y),...

exp(x*y)],[x,y])

J =

[ 1, 1]

[ 2*x*sin(y), x^2*cos(y)]

[ y*exp(x*y), x*exp(x*y)]

Die Jacobi-Matrix im Punkt (1, 0) ist:

>> subs(J,[x,y],[1,0])

ans =

1 1

0 1

0 1

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

60.12. Integration

Die Funktion int erlaubt symbolische Inte-gration.

Als erstes Beispiel wollen wir die Gleichung∫sin(x)dx = − cos(x) + c bestätigen.

>> syms x

>> f = sin(x);

>> int(f)

165 Copyright c© G. Gramlich

Page 166: EinfMATLAB

ans =

-cos(x)

Bei parameterabhängigen unbestimmtenIntegralen der Form

Ft(x) =∫

f(x, t)dx

(t ist der Parameter) emp�elt es sich x undt als symbolische Variablen zu de�nieren.Als Beispiel betrachten wir

∫(x − t)2dx =

1/3(x− t)3 + c

>> syms x t

>> pretty(int((x-t)^2))

3

1/3 (x - t)

Sie können die Symbolic Math Toolbox her-anziehen, um bestimmte Integrale∫ b

af(x)dx

symbolisch zu lösen. Auch parameterab-hängige bestimmte Integrale

φt =∫ b

af(x, t)dx

können gelöst werden. Es ist∫ π

0sin(x)dx = 2.

Wir bestätigen dies mit der Funktion int

aus der Symbolic Math Toolbox.

>> int('sin(x)',0,pi)

ans =

2

Aufgabe 135 (Integration)Berechnen Sie das unbestimmte Integral∫

x sin(x)dx.

Lösung: Mit

>> syms x

>> int(x*sin(x))

ans =

sin(x)-x*cos(x)

sieht man, dass∫x sin(x)dx = sin(x)− x cos(x) + c

ist. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 136 (Integration)Berechnen Sie das bestimmte Integral∫ π

0x sin(x)dx

symbolisch.Lösung: Mit

>> syms x

>> int(x*sin(x),0,pi)

ans =

pi

166 Copyright c© G. Gramlich

Page 167: EinfMATLAB

folgt also, dass∫ π

0x sin(x)dx = π

ist. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 137 (Integration)Berechnen Sie das uneigentliche Integral∫ ∞

1

1x5

dx.

Lösung: Mit

>> syms x

>> int(x^(-5),1,inf)

ans =

1/4

folgt also, dass∫ ∞

1

1x5

dx =14

ist. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 138 (Integration)Berechnen Sie das uneigentliche Integral∫ ∞

0sin(2t)e−stdt

symbolisch.Lösung: Mit

>> syms t; syms s positive;

>> int(sin(2*t)*exp(-s*t),t,0,inf);

>> F = simple(ans)

F =

2/(s^2+4)

folgt also, dass∫ ∞

0sin(2t)e−stdt =

2s2 + 4

ist. Es handelt sich hier um die La-place-Transformierte der Funktion f(t) =sin(2t), t ∈ R. Mit der eingebauten Funk-tion laplace kann man die Laplace-Transformierte auch unmiitelbar berech-nen:

>> syms t;

>> laplace(sin(2*t))

ans =

2/(s^2+4)

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 139 (Ableitungen, Integrale)Berechnen Sie symbolisch mit den Mat-lab-Funktionen diff und int die Ablei-tungen bzw. Integrale folgender Exponen-tialfunktionen:

(a) ex

(b) 2x

(c) 10x

(d) ax

Lösung: � syms x a

(a) >> diff(exp(x))

ans =

exp(x)

>> int(exp(x))

ans =

exp(x)

167 Copyright c© G. Gramlich

Page 168: EinfMATLAB

(b) >> diff(2^x)

ans =

2^x*log(2)

>> int(2^x)

ans =

1/log(2)*2^x

(c) >> diff(10^x)

ans =

10^x*log(10)

>> int(10^x)

ans =

1/log(10)*10^x

(d) >> diff(a^x)

ans =

a^x*log(a)

>> int(a^x)

ans =

1/log(a)*a^x

Damit gilt:

f(x) f ′(x)∫

f(x)dx

ex ex ex

2x ln(2)2x 2x/ ln(2)10x ln(10)10x 10x/ ln(10)ax ln(a)ax ax/ ln(a)

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

60.13. Polynome

Wir zeigen nun Beispiele für den Umgangmit �symbolischen Polynomen�, siehe Ab-schnitt 46 für Rechnungen mit �numeri-schen Polynomen � .

Die Funktion horner erlaubt die Darstel-lung eines Polynoms in Horner-Form.

>> syms x

>> p = -3*x^3+3*x^2+10*x+5;

>> ph = horner(p)

ph =

5+(10+(3-3*x)*x)*x

Will man dieses zum Beispiel an der Stellex = 3 auswerten, so geht das wie folgt:

>> subs(ph,x,3)

ans =

-19

Will man den Grad eines Polynoms bestim-men, so hilft die Maple-Funktion degree.

>> maple('degree',p)

ans =

3

Weitere Matlab bzw. Maple Funktio-nen zum Rechnen mit Polynomen �n-den Sie in der Tabelle 30. Hilfe zu denMaple-Funktionen erhalten Sie mit mhelp<Funktionsname>.

60.14. Taylor-Polynome

Die Funktion taylor erlaubt das symboli-sche Berechnen des Taylor-Polynoms ei-ner Funktion. Zum Beispiel liefert

>> syms x

>> taylor(sin(x))

168 Copyright c© G. Gramlich

Page 169: EinfMATLAB

Funktion Bedeutungcoeff Koe�zient (Maple)convert Konvertiert (Maple)degree Grad des Polynoms (Maple)factor Linearfaktoren (Maple)horner Horner-Darstellungsolve Nullstellensubs Ersetzen

Tabelle 30: Zum symbolischen Rechnen mitPolynomen

das Taylor-Polynom bis zur fünften Ord-nung:

ans =

x-1/6*x^3+1/120*x^5

Aufgabe 140 (Taylor-Polynome)Berechnen Sie das Taylor-Polynom derKosinus-Funktion

f(x) = cos(x)

vom Grad vier im Entwicklungspunkt 0.Lösung: Es ist

>> syms x

>> taylor(cos(x),5,x,0)

ans =

1-1/2*x^2+1/24*x^4

d.h. das Taylor-Polynom der Kosinus-Funktion vom Grad vier im Entwicklungs-punkt 0 ist

f(x) = 1− x2

2+

x4

24.

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

60.15. Die Funktionen funtool undtaylortool

Die Funktionen funtool und taylortool

stellen pädagogische Hilfsmittel zur Ver-fügung. Die Funktion funtool ist eineArt gra�scher Taschenrechner, der wich-tige Operationen und einfache Visualisie-rungen bei Funktionen einer Veränder-lichen ermöglicht. Mit Hilfe des Kom-mandos taylortool können Sie Taylor-Approximationen studieren.

60.16. MehrdimensionaleTaylor-Polynome

Zur Berechnung des Taylor-Polynoms ei-ner reellwertigen Funktion mehrerer Varia-blen kann man die Funktion mtaylor ausMaple verwenden.

Das Taylor-Polynom zweiten Grades derFunktion f(x, y) = ex+y, (x, y) ∈ R2 mitEntwicklungspunkt (0, 0) ist gegeben durchT2(x, y) = 1 + x + y + 1/2(x2 + y2) + xy.Hier die Bestätigung in Matlab:

>> syms x y

>> T2 = maple('mtaylor',exp(x+y),...

'[x,y]',3)

T2 =

1+x+y+1/2*x^2+x*y+1/2*y^2

Aufgabe 141 (Taylor)Berechnen Sie das Taylor-Polynom zwei-ter Ordnung mit dem Entwicklungspunkt(−1/2,−1/2) der quadratischen Funktionq(x, y) = x2 + y2 + x + y, (x, y) ∈ R2.

169 Copyright c© G. Gramlich

Page 170: EinfMATLAB

Lösung: Die folgendenMatlab-Zeilen be-rechnen die Lösung:

>> syms x y

>> T2 = maple('mtaylor',...

x^2+y^2+x+y,'[x=-1/2,y=-1/2]',3)

T2 =

-1/2+(x+1/2)^2+(y+1/2)^2

Wir bestätigen das Ergebnis:

>> simplify(T2)

ans =

x^2+y^2+x+y

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 142 (Taylor)Approximieren Sie die Funktion f(x, y) =xey − x3y, (x, y) ∈ R2 in der Nähe desNullpunktes durch ihrTaylor-Polynom T2

zweiten Grades. Vergleichen Sie dann dieFunktionswerte von f und T2 an der Stel-le (0.5, 0.5), indem Sie den relativen Fehler|T2(0.5, 0.5) − f(0.5, 0.5)|/|f(0.5, 0.5)| be-rechnen.Lösung: Es ist

>> syms x y

>> f = x*exp(y)-x^3*y;

>> T2 = maple('mtaylor',f,'[x,y]',3)

T2 =

x+x*y

>> subs(T2,[x,y],[0.5,0.5]),...

subs(f,[x,y],[0.5,0.5])

ans =

0.7500

ans =

0.7619

>> abs(subs(T2,[x,y],[0.5,0.5])...

-subs(f,[x,y],[0.5,0.5]))...

/abs(subs(f,[x,y],[0.5,0.5]))

ans =

0.0156

Der relative Fehler ist demnach zirka 1.5%.© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

60.17. Lineare Algebra

Siehe Abschnitt 42

60.18. Di�erenzengleichungen

Maple kann Di�erenzengleichungen lösen.Die Funktion rsolve kann lineare Di�eren-zengleichungen mit konstanten Koe�zien-ten, Systeme linearer Di�erenzengleichun-gen mit konstanten Koe�zienten und man-che nichtlineare Gleichungen erster Ord-nung. Implementiert sind Standardtechni-ken wie erzeugende Funktionen und z-Transformationen, sowie Methoden basie-rend auf Substitutionen und charakteristi-schen Gleichungen.

Die lineare Di�erenzengleichung erster Ord-nung

yt = −0.9yt−1

hat die Lösung

yt = (−1)t(0.9)ty0.

Hier die Bestätigung in Matlab.

170 Copyright c© G. Gramlich

Page 171: EinfMATLAB

>> maple('rsolve',...

'y(t)=-0.9*y(t-1)','y(t)')

ans =

y(0)*(-9/10)^t

Die Komplexität der Gauÿschen Elimina-tion ist

>> maple('rsolve','{T(n)=T(n-1)

+n^2','T(1)=0}','T(n)')

ans =

-3*(n+1)*(1/2*n+1)+n+2*(n+1)*

(1/2*n+1)*(1/3*n+1)

>> factor(sym(maple('rsolve',...

'{T(n)=T(n-1)+n^2','T(1)=0}',...

'T(n)')))

ans =

1/6*(n-1)*(2*n^2+5*n+6)

Aufgabe 143 (Di�erenzengleichungen)Bestätigen Sie die Lösung yt = (0.5)t(y0 −12) + 12 der Di�erenzengleichung

yt = 0.5yt−1 + 6

Lösung: Es ist

>> maple('rsolve',...

'y(t)=0.5*y(t-1)+6','y(t)')

ans =

y(0)*(1/2)^t-12*(1/2)^t+12

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

60.19. Di�erenzialgleichungen

Mit Hilfe derMatlab-Funktion dsolve istes möglich, allgemeine Lösungen von Di�e-renzialgleichungen zu berechnen, Anfangs-wertaufgaben und Randwertaufgaben zu lö-sen. Hierbei kann eine einzelne Di�eren-zialgleichung oder aber auch ein Systemvon Gleichungen vorliegen. Mit der Funkti-on pdsolve können sogar einfache partielleDi�erenzialgleichungen bzw. partielle Di�e-renzialgleichungssysteme gelöst werden.

Die gewöhnliche Di�erenzialgleichung y′ =ay hat die allgemeine Lösung y(t) = ceat.In Matlab bestätigt man das wie folgt:

>> dsolve('Dy = a*y')

ans =

exp(a*t)*C1

Aufgabe 144 (Di�erenzialgleichung)Berechnen Sie die allgemeine Lösung dergewöhnlichen Di�erenzialgleichung

y′(t) = −y(t)− 5e−t sin(5t)

siehe Abschnitt 55.Lösung: Die allgemeine Lösung ist

>> y = dsolve('Dy=-y-5*...

exp(-t)*sin(5*t)')

y =

exp(-t)*cos(5*t)+exp(-t)*C1

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

171 Copyright c© G. Gramlich

Page 172: EinfMATLAB

Aufgabe 145 (Anfangswertaufgabe)Berechnen Sie die Lösung der Anfangswert-aufgabe

AWA :

{y′(t) = −y(t)− 5e−t sin(5t)y(0) = 1

t ≥ 0

aus Abschnitt 55.Lösung: Die Lösung ist

>> y = dsolve('Dy=-y-5*...

exp(-t)*sin(5*t)','y(0)=1')

y =

exp(-t)*cos(5*t)

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 146 (Anfangswertaufgabe)Berechnen Sie die Lösung der Anfangswert-aufgabe

AWA :

{y′′(t) + 144y(t) = cos(11t)y(0) =, y′(0) = 0

t ≥ 0

und stellen Sie die Lösung im Intervall[0, 6π] dar.Lösung: Die Lösung ist

>> y = dsolve('D2y+144*y=cos(11*t)',

'y(0)=0','Dy(0)=0')

y =

-1/23*cos(12*t)+1/23*cos(11*t)

Eine Di�erenzialgleichung dieses Typesnennt man die Gleichung des (ungedämpf-ten) harmonischen Oszillators mit äuÿererharmonischer Anregung, hier cos(11t). Die

Lösung y(t) = 1/23 cos(11t)−1/23 cos(12t)ist eine Überlagerung von zwei Schwingun-gen mit unterschiedlichen Frequenzen. Manspricht von einer Schwebung (amplituden-modulierte Schwingung), eine Bewegungs-form, die für die Akustik und Funktechnikvon groÿer Bedeutung ist. Die Abbildung55 zeigt die Lösung. © . . . . . . . . . . . . . . . . . . .©

0 5 10 15−0.1

−0.05

0

0.05

t

−1/23 cos(12 t)+1/23 cos(11 t)

Abbildung 55: Lösung der AWA

Wir berechnen die Lösung der Randwert-aufgabe

RWA :

{u′′ = 6x

u(0) = 0, u(1) = 10 ≤ x ≤ 1.

aus Abschnitt 55.2.

>> u = dsolve('D2u-6*x=0',

'u(0)=0','u(1)=1','x')

u =

x^3

Aufgabe 147 (Randwertaufgabe)Berechnen Sie die Lösung der Randwertauf-

172 Copyright c© G. Gramlich

Page 173: EinfMATLAB

gabe

RWA :

{y′′ = −y

y(0) = 3, y(π/2) = 70 ≤ x ≤ π/2.

aus Abschnitt 55.2.Lösung: Es ist

>> y = dsolve('D2y=-y','y(0)=3',

'y(pi/2)=7','x')

y =

7*sin(x)+3*cos(x)

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Mit der Maple-Funktion pdsolve kannman einfache partielle Di�erenzialgleichun-gen lösen. Als Beispiel betrachten wir dieeindimensionale homogene Wellengleichung

utt − c2uxx = 0 (c 6= 0).

Dies ist eine lineare partielle hyperbolischeDi�erenzialgleichung zweiter Ordnung. Umdiese symbolisch zu lösen, de�nieren wir zu-nächst die symbolischen Variablen x, t, cund die Funktion u(x, t):

>> syms x t c

>> u = sym('u(x,t)');

Danach berechnen wir die Ableitungenzweiter Ordnung

>> uxx = diff(u,x,2);

>> utt = diff(u,t,2);

und schlieÿlich die allgemeine Lösung

>> maple('pdsolve',utt-c^2*uxx)

u(x,t) = _F1(t*c+x)+_F2(t*c-x)

Hierbei sind _F1 und _F2 zwei beliebigezweimal stetig di�erenzierbare Funktionen.Wählt man für diese beiden Funktionen dieFunktion e−z2

, z ∈ R und für den Para-meter c den Wert 1, so erhält man die Lö-sungsfunktion u(x, t) = e−(t+x)2 + e−(t−x)2 .Die Abbildung 56 zeigt den Graph der Lö-

−6−4

−20

24

6

−5

0

5

0

0.5

1

1.5

t

exp(−(t+x)2)+exp(−(t−x)2)

x

Abbildung 56: Lösung der eindimensiona-len Wellengleichung

sungsfunktion, der mit

>> ezsurf('exp(-(t+x)^2)+

exp(-(t-x)^2)')

erzeugt wurde. Man erkennt, dass die all-gemeine Lösung der homogenen Wellenglei-chung eine Überlagerung zweier gegenläu�-ger Wellen darstellt.

173 Copyright c© G. Gramlich

Page 174: EinfMATLAB

Aufgabe 148 (Di�erenzialgleichung)Berechnen Sie mit pdsolve eine Lösung derpartiellen Di�erenzialgleichung

axux + btut = 0.

Lösung: Es ist

>> syms x t a b

u = sym('u(x,t)');

ux = diff(u,x);

ut = diff(u,t);

maple('pdsolve',a*x*ux+b*t*ut)

ans =

u(x,t) = _F1(t/(x^(b/a)))

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

60.20. Die kontinuierlicheFourier-Transformation

Die kontinuierliche Fourier-Transformati-on (CFT) untersucht, welche Frequenzenmit welchen Amplituden in einem Zeitsi-gnal f(t) enthalten sind, wenn das Zeit-signal nicht periodisch ist. Man nenntdieses Vorgehen �wie bei den Fourier-Reihen� die Frequenzanalyse des Zeitsi-gnals f(t). Man kann sagt auch, die konti-nuierliche Fourier-Transformation (CFT)zerlegt ein Signal in sinusförmige Wellenunterschiedlicher Frequenzen.

Die kontinuierliche Fourier-Transformati-on (CFT) drückt ein Signal f(t) als eine�stetige Linearkombination� von Sinus- und

Cosinusfunktionen aus

f(ω) =∫R

f(t)e−iωtdt.

Die Abbildung f → f heiÿt kontinu-ierliche Fourier-Transformation (CFT).Stellt die unabhängige Variable t die Zeitdar, so hat die Variable ω die Bedeutungder Frequenz. Somit ist die Frequenz ωeine kontinuierliche Gröÿe, das heiÿt al-le möglichen Frequenzen sind darstellbar.Die kontinuierliche Fourier-Transformati-on (CFT) bildet die Funktion f vom Zeitbe-reich oder Originalbereich in den Frequenz-bereich oder Bildbereich ab. Die inverseFourier-Transformation (ICFT) transfor-miert umgekehrt.

Für den Rechteckimpuls

f(t) =

{1, falls |t| < T

0, sonst

soll die Fourier-Transformation f(ω) be-rechnet werden. Es ergibt sich

f(ω) =∫ ∞

−∞f(t)e−iωtdt =

∫ T

−Te−iωtdt

=[e−iωt

−iω

]T

−T

=1−iω

(e−iTω − eiTω)

=2ω

12i

(eiTω − e−iTω

)=

2 sin(ωT )ω

.

Die nachfolgenden Anweisungen bestätigendie Rechnung.

>> syms t T

>> Rechteck = heaviside(t+T)-...

174 Copyright c© G. Gramlich

Page 175: EinfMATLAB

heaviside(t-T);

>> fourier(Rechteck)

ans =

2/w*sin(T*w)

Die nachfolgenden Anweisungen geben einezweite Möglichkeit, obiges Resultat zu be-stätigen. Es ist T = 1.

>> maple('T:=1');

>> maple('Rechteck(t/T):=

Heaviside(t+T)-Heaviside(t-T):');

>> maple('simplify(fourier(Rechteck

(t/T),t,w))')

ans =

2/w*sin(w)

Das nachfolgende Beispiel zeigt, dass dieFourier-Transformierte f(·) einer Funkti-on f(·) im allgmeinen eine komplexwerti-ge Funktion ist. Der Graph einer komplex-wertigen Funktion liegt im R4 und ist so-mit nicht direkt darstellbar. Entweder manzeichnet den Real- und Imaginärteil ge-trennt oder man zerlegt die komplexe Funk-tion in Betrag und Phase.

Für die von den Parametern a > 0 und b >0 abhängige Funktion

f(t) =

{ae−bt, falls t > 00, sonst

soll die Fourier-Transformation f(ω) be-

rechnet werden. Es ergibt sich

f(ω) =∫ ∞

−∞f(t)e−iωtdt

=∫ ∞

0ae−bte−iωtdt = a

∫ ∞

0e−(b+iω)dt

= a

[e−(b+iω)t

−(b + iω)

]t=∞

t=0

=a

b + iω.

Die nachfolgenden Anweisungen bestätigendas Ergebnis symbolisch in Matlab.

>> maple('assume(a>0,b>0)');

>> maple('fourier(a*exp(-b*t)

*Heaviside(t),t,w)')

ans =

a/(b+i*w)

Beachten Sie, dass die Konstanten a undb so wie es die Theorie erfordert gröÿer alsNull de�niert werden müssen, weil sonst ge-gebenenfalls das Integral bzw. die Fouri-er-Transformation nicht existiert.

Die Fourier-Transformierte von

f(x) = e−x2

istf(ξ) =

√πe−ξ2/4.

Wir bestätigen dies symbolisch mit derfourier Funktion

>> syms x

>> f = exp(-x^2);

>> fhat = fourier(f)

fhat =

pi^(1/2)*exp(-1/4*w^2).

175 Copyright c© G. Gramlich

Page 176: EinfMATLAB

Aufgabe 149 (Fourier-Transformation)Berechnen Sie zunächst per Hand und dannmit Matlab die Fourier-Transformiertevon

f(x) = e−|x|.

Lösung: Die Fourier-Transformierte von

f(x) = e−|x|

ist

f(ξ) =2

1 + ξ2,

denn

f(ξ) =∫R

e−|x|e−ixξdx

=∫ ∞

0e−|x|e−ixξdx +

∫ 0

−∞e−|x|e−ixξdx

=∫ ∞

0e−xe−ixξdx +

∫ ∞

0e−xeixξdx

=∫ ∞

0ex(−1−iξ)dx +

∫ ∞

0ex(−1+iξ)dx

= limr→∞

[e−x(1+iξ)

−1− iξ+

e−x(1−iξ)

−1 + iξ

]x=r

x=0

= − 1−1− iξ

− 1−1 + iξ

=2

1 + ξ2.

Wir bestätigen dies symbolisch

>> syms x

>> f = exp(-abs(x));

>> fhat = fourier(f)

fhat =

2/(1+w^2)

Beachten Sie, dass die unabhängige Varia-ble der Fourier-Transformierten w ist. DieAbbildung 57 ©© zeigt die Funktion f und

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

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

exp(−abs(x))

−6 −4 −2 0 2 4 6

0

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

2

2/(1+w2)

Abbildung 57: Zur stetigen Fourier-Transformation

ihre Fourier-Transformierte f .

60.21. Laplace-Transformation

Die Laplace-Transformation kann symbo-lisch mit der Funktion laplace berechnetwerden. Siehe Aufgabe 138 für ein Beispiel.

60.22. Spezielle mathematischeFunktionen

Über 50 spezielle mathematische Funktio-nen stehen mit der Symbolic Math Tool-box zur Verfügung. Diese Funktionen wer-den mit mfun angesprochen und werten dieentsprechende Funktion an der gewünsch-ten Stelle numerisch aus. Dies stellt so-mit auch eine Erweiterung zum Standard-Matlab dar, denn diese klassischen Funk-tionen stehen dort nicht zur Verfügung. Sie-he doc mfunlist (help mfunlist).

176 Copyright c© G. Gramlich

Page 177: EinfMATLAB

60.23. Variable Rechengenauigkeit

Zusätzlich zu Matlab's doppelt genau-er Gleitpunktarithmetik und der symbo-lischen Rechenmöglichkeit wird durch dieSymbolic Toolbox eine variable Rechenge-nauigkeitsarithmetik unterstützt, die durchden Maple-Kern durchgeführt wird. DieseArt von Arithmetik zu verwenden, ist dannsinnvoll, wenn eine genaue Lösung verlangtwird, aber eine exakte unmöglich oder aberzu zeitaufwendig zu berechnen ist.

Mit der Funktion digits ist es möglich, dieAnzahl der genauen dezimalen Stellen ein-zustellen, mit der die Rechnungen durchge-führt werden sollen. Standardmäÿig sind 32Stellen eingestellt, was Sie durch den Auf-ruf von digits überprüfen können. Wol-len Sie diese Zahl zu n abändern, so gehtdas mit digits(n). Die variable Rechenge-nauigkeitsarithmetik basiert auf dem vpa-Kommando. Der einfachste Gebrauch be-steht zum Beispiel darin, die Kreiszahl πauf 32 Stellen zu berechnen:

>> digits

Digits = 32

>> vpa(pi)

ans =

3.1415926535897932384626433832795

Wie der Aufruf vpa(pi,40) zeigt, könnenSie mit dem zweiten Argument von vpa diezur Zeit aktuelle Anzahl von gültigen Dezi-malen überschreiben.

Das nächste Beispiel berechnet die Eu-lersche Zahl e auf 50 Nachkommastellengenau, gibt sie aus und überprüft, ob derLogarithmus davon wieder 1 ergibt:

>> digits(50);

>> x = vpa(sym('exp(1)'))

x =

2.71828182845904523536028747135266

24977572470937000

>> vpa(log(x))

ans =

1.00000000000000000000000000000000

00000000000000000

Vorsicht Falle:

>> x = vpa(sym(exp(1)))

x =

2.71828182845904553488480814849026

50117874145507813

>> vpa(log(x))

ans =

1.00000000000000011018891328384949

58218182413442295

Wir haben auf die Hochkomma in exp(1)

verzichtet. Das Resultat ist, dass Matlabexp(1) mit doppelter Genauigkeit berech-net, diese 16-stellige Dezimalzahl in eine 50-stellige Dezimalzahl transformiert (34 Stel-len sind somit bedeutungslos) und dann denLogarithmus anwendet, was zu einem unge-nauen Ergebnis führt. Erst die Hochkommasorgen dafür, dass der Matlab-Interpreterübergangen wird, damit Maple den Aus-druck auswerten kann.

177 Copyright c© G. Gramlich

Page 178: EinfMATLAB

Aufgabe 150 (Symbolisches Rechnen)Berechnen Sie π auf 50 Stellen genau!Lösung: Sowohl

>> digits(50)

>> vpa(pi)

als auch

>> vpa pi 50

liefern

ans =

3.14159265358979323846264338327

95028841971693993751

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

60.24. Überblick über allesymbolischen Funktionen

Mit help symbolic (doc symbolic) erhal-ten Sie einen Überblick über alle Funktio-nen der Symbolic Math Toolbox.

60.25. Weitere Bemerkungen undHinweise

Es gibt zwei Levels der Symbolic Math Tool-box.

• Die Standard Symbolic Math Toolbox ver-fügt über annähernd 50 eingebauteMat-lab-Funktionen und Kommmandos, die

die entsprechenden Maple-Befehle auf-rufen. Eine Liste dieser Funktionen er-halten Sie mit help symbolic. Darüberhinaus besteht die Möglichkeit, andereMaple-Kommandos anzusprechen, diezur Standardbibliothek von Maple ge-hören. Hierzu verwendet man die maple-Funktion.

• Die Extended Symbolic Math Toolbox be-sitzt alle Funktionalitäten der StandardSymbolic Math Toolbox, und darüber hin-aus besteht die Möglichkeit, die Maple-Programmierstrukturen, die Ein- undAusgabe Möglichkeiten als auch Funktio-nen und Kommandos spezieller Maple-Pakete zu nutzen.

Mit dem Aufruf

>> mhelp index[packages]

erhalten Sie eine Liste über die Maple-Pakete.

Wenn Sie sich nun näher für ein Paket in-teressieren, zum Beispiel für das Paket mitden kombinatorischen Funktionen, so hilftder Aufruf mhelp combinat weiter. Dieserlistet dann alle relevanten Funktionen auf.Mit maple('with(combinat)') laden Siedas Paket und mit mhelp binomial erhal-ten Sie zum Beispiel weitere Informationenüber die Funktion binomial, etwa wie mansie aufzurufen hat.

Das Paket LinearAlgebra enthält dieFunktion Basis. Mit mhelp Basis erhaltenSie die Meldung

178 Copyright c© G. Gramlich

Page 179: EinfMATLAB

Multiple matches found:

SolveTools,Basis

Modular,Basis

LinearAlgebra,Basis

Dann hilft mhelp('LinearAlgebra,Basis')oder mhelp LinearAlgebra[Basis] wei-ter.

Eine Online-Einführung in die SymbolicMath Toolbox erhalten Sie mit dem Be-fehl demos. Geben Sie hierzu demos nachdem Matlab-Prompt ein. Es wird danndas Matlab-Demo-Fenster geö�net

61. Optimierung (Teil 2)

Mit der Optimization Toolbox kann manOptimierungsaufgaben lösen, insbesonderesolche, wo Nebenbedingungen (Restriktio-nen) auftreten. Diese sind in der Praxisauch meist vorhanden. Sie treten linear alsauch nichtlinear auf. Für folgende Optimie-rungsmodelle stehen Matlab-Funktionenzur Verfügung: Lineare Optimierung, Qua-dratische Optimierung, Minmax Optimie-rung, Mehrzielige Optimierung, Semiin�ni-

te Optimierung und Nichtlineare Optimie-rung. Siehe doc optim (help optim) für ei-ne komplette Übersicht über alle in Mat-lab lösbaren Optimierungsmodelle.

Zu beachten ist, dass jedes Optimierungs-problem als Minimierungsproblem formu-liert werden muss.

61.1. Lineare Optimierung

An einem einfachen Beispiel zur Linea-ren Optimierung zeigen wir, wie man un-ter Matlab solche Probleme löst. Als Bei-spiel betrachten wir die Optimierungsauf-gabe (u.d.N. steht als Abkürzung für unterden Nebenbedingungen)

Minimiere(x1, x2) ∈ R2 −2x1 − 3x2

u.d.N.x1 + 2x2 ≤ 10x1 + x2 ≤ 6

x1 ≥ 0, x2 ≥ 0

Mit den Anweisungen

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

b = [10;6]; u = [0;0];

und dem Funktionsaufruf

[x,fWert] = linprog(c,A,b,[],[],u)

erhalten wir die Ausgabe

Optimization terminated successfully.

x =

2.0000

179 Copyright c© G. Gramlich

Page 180: EinfMATLAB

4.0000

fWert =

-16.0000

Das bedeutet, dass x∗ = (x∗1, x∗2) = (2, 4)

die Minimalstelle des linearen Optimie-rungsproblems ist, und −(2)(2) − (3)(4) =−16 der Zielfunktionswert, das heiÿt dasMinimum ist.

Das erste Argument c der Funktionlinprog beinhaltet die Koe�zienten derZielfunktion. Die Matrix A beinhaltet dieKoe�zienten der linearen Ungleichungen,wobei die Koe�zienten der rechten Sei-ten der Ungleichungen im Vektor b stehen.Schlieÿlich werden die unteren Grenzen derVariablen im Vektor u gespeichert und alssechstes Argument in linprog übergeben.Das vierte und fünfte Argument der Funk-tion linprog ist für eventuell vorkommendelineare Gleichungen vorgesehen.

Allgemein gilt: Mit der Funktion linprog

können lineare Optimierungsaufgaben derForm

Minimierex ∈ Rn cT x

u.d.N.Ax ≤ bBx = d

l ≤ x ≤ u

gelöst werden. Die Vektoren l und u dürfenauch Koordinaten −∞ bzw.∞ haben. Fallsder Aufruf

[x,fWert] = linprog(c,A,b,B,d,l,u)

erfolgreich war, �ndet man in der Variablenx den berechneten Lösungsvektor und in

der Variablen fWert den zugehörigen Wertder Zielfunktion cT x =: f(x). Wie bei al-len anderen Matlab-Funktionen entspre-chenden Typs können Argumente weggelas-sen werden, wenn nicht alle Formen der Ne-benbedingungen auftreten. Damit aber dieReihenfolge erhalten bleibt, müssen gege-benenfalls eckige Klammern [] hierfür ge-schrieben werden. Ferner können Optionengesetzt werden und weitere Ausgabeargu-mente angegeben werden. Für weitere Hin-weise verweisen wir auf die Online-Hilfe,siehe doc linprog (help linprog).

Aufgabe 151 (Lineare Optimierung)Die lineare Optimierungsaufgabe

Minimierex ∈ R2 −x1 − x2

u.d.N.

x1 + 3x2 ≤ 133x1 + x2 ≤ 15−x1 + x2 ≤ 3x1 ≥ 0, x2 ≥ 0

hat die Minimalstelle x∗ = (4, 3) mit demMinimum−7, wie die Abbildung 58 gra�sch

0 2 4 6 80

2

4

6

8Lineare Optimierungsaufgabe

Zulässige Menge

−7

−7

−7

−7

Abbildung 58: Lineare Optimierung

180 Copyright c© G. Gramlich

Page 181: EinfMATLAB

zeigt. Bestätigen Sie die Lösung inMatlabmit der Funktion linprog.Lösung: Die Lösung erhält man in Mat-lab wie folgt:

>> c = [-1 -1];

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

b = [13; 15; 3];

lb = [0; 0];

[x,fx] = linprog(c,A,b,[],[],lb)

Optimization terminated.

x =

4.0000

3.0000

fx =

-7.0000

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

61.2. Quadratische Optimierung

Die Quadratische Optimierung gehört be-reits in die Klasse der Nichtlinearen Opti-mierungsaufgaben, stellt aber bereits einenwichtigen Spezialfall dieser Problemklassedar, sowohl aus theoretischen als auch ausalgorithmisch numerischen Gründen. Qua-dratische Programme treten im Bereich derRegelungstechnik häu�g bei der Online-Optimierung von Stellgröÿen linearer Sys-teme mit quadratischen Gütefunktionalenund linearen Nebenbedingungen auf. Li-neare Regressionsprobleme sind wiederumwichtige Spezialfälle Quadratischer Opti-mierungsaufgaben.

Eine Quadratische Optimierungsaufgabeliegt vor, wenn die Zielfunktion quadratisch

und die Nebenbedingungen wie bei der Li-nearen Optimierung linear sind. Die allge-meine Problemstellung ist:

Minimierex ∈ Rn

12xTHx + cT x

u.d.N.Ax ≤ bBx = d

l ≤ x ≤ u

Die Matrix H in der Zielfunktion ist ausRn×n und symmetrisch. Ansonsten giltanaloges wie bei Linearen Optimierungs-aufgaben. Falls der Aufruf

[x,qWert] = quadprog(c,A,b,B,d,l,u)

erfolgreich war, �ndet man in der Va-riablen x den berechneten Lösungsvektorund in der Variablen qWert den zugehö-rigen Wert der Zielfunktion 1/2xTHx +cT x =: q(x). Wie bei allen anderen Mat-lab-Funktionen entsprechenden Typs kön-nen Argumente weggelassen werden, wennnicht alle Formen der Nebenbedingungenauftreten. Damit aber die Reihenfolge er-halten bleibt, müssen gegebenenfalls ecki-ge Klammern [] hierfür geschrieben wer-den. Ferner können Optionen gesetzt wer-den und weitere Ausgabeargumente ange-geben werden. Für weitere Hinweise ver-weisen wir auf die Online-Hilfe, siehe doc

quadprod (help quadprog).

181 Copyright c© G. Gramlich

Page 182: EinfMATLAB

Als Beispiel betrachten wir die Aufgabe

Minimierex ∈ R2 q(x1, x2)

u.d.N.

x1 + x2 ≤ 2001.25x1 + 0.75x2 ≤ 200

x2 ≤ 150x1 ≥ 0, x2 ≥ 0.

mit der quadratischen Zielfunktionq(x1, x2) = −(4 + 2x1)x1 − (5 + 4x2)x2 −8x1x2, x = (x1, x2) ∈ R2.

Es ist dann

H =[−4 −8−8 −8

], c =

[−4−5

],

A =

1 11.25 0.75

0 1

, b =

200200150

und l = (0, 0). Nach den Zuweisungen

H = [-4 -8; -8 -8]; c = [-4;-5];

A = [1 1; 1.25 0.75; 0 1];

b = [200;200;150];

l = [0;0];

und dem Aufruf

[x,qWert] = quadprog(H,c,A,b,[],[],l)

erhält man die Ausgabe

Warning: Large-scale method does

not currently solve this problem

formulation,

switching to medium-scale method.

> In quadprog at 236

Optimization terminated.

x =

50.0000

150.0000

qWert =

-155950

61.3. Überblick über alle Funktionenzur Optimierung

Mit doc optim (help optim) erhalten Sieeinen Überblick über alle Funktionen derOptimization Toolbox.

62. NichtlineareAusgleichsaufgaben

Zu der Optimization Toolbox gehörenauch die Funktionen lsqnonlin undlsqcurvefit, siehe doc lsqnonlin (helplsqnonlin) und doc lsqcurvefit (helplsqcurvefit). Mit diesen Funktionen kannman nichtlineare Ausgleichsaufgaben lösen.Nichtlineare Ausgleichsaufgaben treten beiParameteridenti�kationsproblemen auf undspielen in den Anwendungen eine groÿeRolle. Wenn Sie sich für diesen Problem-kreis näher interessieren, sehen Sie auchunter den Worten Inverse Probleme nach([21]). Wir zeigen das Lösen einer nichtli-nearen Ausgleichsaufgabe an einem Beispielin nachfolgender Aufgabe.

Aufgabe 152 (lsqcurvefit)Gegeben sind die vier Datenpunkte

182 Copyright c© G. Gramlich

Page 183: EinfMATLAB

t 0.0 1.0 2.0 3.0y 2.0 0.7 0.3 0.1

und die nichtlineare Modellfunktion

φ(t, x) = x1ex2t.

Bestimmen Sie x = (x1, x2), sodassdie Funktion f die Datenpunkte im Sin-ne kleinster Quadrate bestmöglichst aus-gleicht.Lösung: Das Problem kann in Matlabmit der Funktion lsqcurvefit gelöst wer-den.

t = [0:3];

y = [2 0.7 0.3 0.1];

fxt = @(x,t) x(1)*exp(x(2)*t);

x0 = [1,0];

[x,resnorm] = lsqcurvefit(fxt,x0,t,y)

Optimization terminated successfully:

Relative function value changing by

less than OPTIONS.TolFun

x =

1.9950 -1.0095

resnorm =

0.0020

Die Lösungsstelle ist somit x∗ ≈(1.995,−1.0095). Die Abbildung 59zeigt die dazugehörige Geometrie undwurde wie folgt erzeugt:

tt = linspace(0,3);

ff = x(1)*exp(x(2).*tt);

plot(tt,ff,t,y,'ro'), grid,

© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

0 0.5 1 1.5 2 2.5 30

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

2

Abbildung 59: Zu Aufgabe 152

Für lineare Ausgleichsaufgaben siehe Ab-schnitt 45.

63. Simulink

Simulink ist ein blockorientiertes, interak-tives System zur Simulation linearer undnichtlinearer dynamischer Systeme. Es han-delt sich um ein mausgesteuertes Gra�k-programm, das ein Modell eines techni-schen oder physikalischen Systems, das alsBlockdiagramm auf dem Bildschirm darzu-stellen ist, unter dynamischen Einwirkun-gen nachbildet. Es kann für lineare, nicht-lineare, zeitkontinuierliche oder zeitdiskreteProzesse eingesetzt werden. Grundlage sindMatlab-Funktionen zur Lösung gewöhn-licher Di�erenzialgleichungen (DGL) bzw.Anfangswertaufgaben (AWA).

Wir zeigen nun, wie man Anfangswertauf-gaben mit Simulink löst. Als Beispiel wäh-

183 Copyright c© G. Gramlich

Page 184: EinfMATLAB

len wir die Anfangswertaufgabe

AWA :

{y′(t) = −y(t)− 5e−t sin(5t)y(0) = 1

die wir bereits in Abschnitt 55.1 numerischund in Abschnitt 60 symbolisch behandelthaben. Die Lösung ist

y(t) = e−t cos(5t).

Als ersten Schritt löst man die gegebe-ne Di�erenzialgleichung nach der höchstenAbleitung auf. In diesem Fall ist diese einsund die Gleichung braucht nicht umgeformtzur werden

y′(t) = −y(t)− 5e−t sin(5t).

Zur Integration wird der Block Integratorverwendet. Er sorgt für die numerische In-tegration der Di�erenzialgleichung. Danachwird die rechte Seite der Di�erenzialglei-chung mit Hilfe von Integrieren, Additi-onsstellen, usw. aufgebaut. Im vorliegendenFall wird mit dem Bock fcn der Ausdruck5e−t sin(5t) gebildet und durch die Summa-tionsstelle mit dem Ausgang des Integrie-rers zusammengefasst. Da die rechte Seitenun komplett ist und diese gleich der ers-ten Ableitung ist, wird der Ausgang mitdem Integrierereingang verbunden (Rück-kopplung). Zur gra�schen Darstellung desSignals (Lösung y der Di�erezialgleichung)während der Simulation wird der Block Sco-pe verwendet. Das Simulink-Modell zurLösung der Di�erenzialgleichung ist in Ab-bildung 60 dargestellt.

Nun setzen wir beim Integrierer die An-fangsbedingungen. Dies geschieht durch

Scope

1s

Integrator

f(u)

FcnClock

Abbildung 60: Simulink-Modell

Doppelklicken auf das Symbol und demEintrag des Anfangwertes, hier 1. Der letz-te Schritt besteht in der Wahl der Simu-lationsparameter. Unter mehreren Integra-tionsverfahren (das sind gerade die DGL-Löser (ODE-Löser) ode45, usw. von Mat-lab) muss ein geeignetes aufgewählt wer-den. Voreingestellt ist ode45. Auÿerdem istdie Simulationszeit einzustellen. Ich habeich das Intervall [t0 = 0, tf = 3] gewählt.Die gra�sche Darstellung der Simulation,das heiÿt die Lösung der Di�erenzialglei-chung ist in Abbildung 47 zu sehen.

64. Dünn besetzte Matrizen

Rechnet man mit einer Matrix, so gehtMatlab davon aus, dass diese dicht be-setzt ist, das heiÿt, nur wenige Matrixele-mente sind Null. Sind in einer Matrix je-doch viele Elemente Null (zum Beispiel 95%oder mehr) so spricht man von einer Sparse-matrix oder von einer dünn besetzten Ma-trix. Liegt solch eine Sparsematrix vor und

184 Copyright c© G. Gramlich

Page 185: EinfMATLAB

möchte man Matrixoperationen mit dieserdurchführen, so kann man meistens Gleit-punktoperationen auf den Nullelementeneinsparen. Darüber hinaus muss man nichtdie ganze Matrix abspeichern, sondern esgenügt, nur die von Null verschiedenen Ele-mente abzulegen. Trägt man diesen Sach-verhalten Rechnung, so läÿt sich die E�zi-enz von Algorithmen in bezug auf Speicher-und Zeitaufwand reduzieren. Damit ist esmöglich, gröÿere Probleme zu lösen, diesonst nicht lösbar wären.Matlab kann diedünne Besetztheit einer Matrix ausnutzen.

Matlab verfügt über zwei Speichermodi:full und sparse, wobei full standardmä-ÿig eingestellt ist. Die Funktionen full undsparse erlauben es, zwischen beiden Modihin und her zu schalten.

Im Sparsemodus werden die von Null ver-schiedenen Matrixelemente als eindimensio-nales (lineares) Feld mit ihren Zeilen- undSpaltenindizes abgespeichert. Die Anwei-sung

>> F = -triu(tril(ones(6),1),-1)

+3*eye(6)

erzeugt die (6, 6)-Matrix

F =

2 -1 0 0 0 0

-1 2 -1 0 0 0

0 -1 2 -1 0 0

0 0 -1 2 -1 0

0 0 0 -1 2 -1

0 0 0 0 -1 2

Mit S = sparse(F) wird F im Sparsemodusabgespeichert:

S =

(1,1) 2

(2,1) -1

(1,2) -1

(2,2) 2

(3,2) -1

(2,3) -1

(3,3) 2

(4,3) -1

(3,4) -1

(4,4) 2

(5,4) -1

(4,5) -1

(5,5) 2

(6,5) -1

(5,6) -1

(6,6) 2

Die von Null verschiedenen Elemente wer-den zusammen mit ihren Indizes spalten-weise angeordnet. Mit

>> F = full(S)

lässt sich dies rückgängig machen. DerFunktionsaufruf nnz(F) zeigt Ihnen die An-zahl der von Null verschiedenen Elementeder Matrix F.

64.1. Sparsematrizen erzeugen

Sparsematrizen können auch direkt erzeugtwerden. Mit Hilfe der Funktion spdiags

185 Copyright c© G. Gramlich

Page 186: EinfMATLAB

lässt sich zum Beispiel eine dünn besetz-te Bandmatrix erzeugen. Obige Bandma-trix F kann somit direkt wie folgt erstelltwerden:

>> m = 6; n = 6;

>> e = ones(n,1); d = 2*e;

>> A = spdiags([-e,d,-e],...

[-1,0,1],m,n);

Der Vektor [-1,0,1] gibt an, in welcherDiagonalen die Spalten von [-e,d,-e] ste-hen. Führen Sie die Anweisungen aus undsehen Sie sich die volle Matrix mit full(A)an. Alternativ dazu können Sie sich mitspy(A) die Struktur der Matrix A gra-�sch betrachten. Die zu eye, zeros, ones,rand und randn analogen Sparsefunktionensind: speye, sparse, spones, sprand, undsprandn.

64.2. Mit Sparsematrizen rechnen

Unabhängig vom Speichermodus könnenSie die arithmetischen Operationen undviele Funktionen verwenden. Welchen Spei-chermodus haben dann die Ergebnismatri-zen? Operationen mit vollen Matrizen erge-ben volle Matrixresultate. Ist S eine Spar-sematrix und F eine vollbesetzte Matrix, soist:

Sparse: S+S, S*S, S.*S, S.*F,

S^n, S.^n, S\S

Sparse: inv(S),chol(S), lu(S),

diag(S), max(S), sum(S)

Full: S+F, S*F, S\F, F\S

Ist a ein Skalar, so sind die Ergebnisse vona*S und a\S vom Sparsemodus.

Um Eigenwerte oder singuläre Werte einerSparsematrix S zu berechnen, muss man S

in den vollen Speichermodus konvertierenund die Funktionen eig bzw. svd verwen-den: eig(full(S)) bzw. svd(full(S)).Will man nur einige Eigenwerte oder sin-guläre Werte berechnen, so kann man dieFunktionen eigs und svds benutzen. Dieseakzeptieren Sparsematrizen als Eingabear-gument: eigs(S) bzw. svds(S) .

Bildet man eine Blockmatrix und ist eineUntermatrix eine Sparsematrix, so ist auchdie Blockmatrix vom Speichermodus spar-se.

Weitere Informationen erhalten Sie mit docsparfun (help sparfun).

65. Mehrdimensionale Arrays

Arrays der Datentypen (Abschnitt 66)double, char, cell und struct könnenmehr als zwei Dimensionen haben. Solchemehrdimensionale Arrays werden in natür-licher Verallgemeinerung zu Techniken, wieman sie für Matrizen kennt, de�niert undmanipuliert.

Mit den Funktionen zeros, rand und randn

können mehrdimensionale Arrays erzeugtwerden. Zum Beispiel wird durch

randn(3,4,5)

ein (3, 4, 5)-Array mit insgesamt 3·4·5 = 60normalverteilten Zufallszahlen erzeugt.

186 Copyright c© G. Gramlich

Page 187: EinfMATLAB

Ein dreidimensionales Array könnte zumBeispiel dreidimensionale physikalische Da-ten darstellen, etwa die Temperatur in ei-nem Raum über den Punkten eines recht-eckigen Gitters. Es könnte auch eine Folgevon Matrizen Ak repräsentieren bzw. Ab-tastwerte einer zeitabhängigen Matrix A(t)bezeichnen. Das (i, j)-te Element der k-tenMatrix ist dann A(i, j, k) = aijk.

Mit Hilfe der cat-Funktion kann man einmehrdimensionales Array durch Angabeder Elemente in einer Anweisung de�nieren.Das erste Argument gibt die Dimension desArrays. Die folgende Anweisung erzeugt eindreidimensionales Array der Gröÿe 3×2×2.

>> A = cat(3,[1 2;3 4;5 6],...

[7 8;9 10;11 12])

A(:,:,1) =

1 2

3 4

5 6

A(:,:,2) =

7 8

9 10

11 12

Funktionen, die elementweise arbeiten, kön-nen auch auf mehrdimensionale Arrays an-gewendet werden, zum Beispiel arithme-tische, logische und relationale Operato-ren. zum Beispiel geben die AusdrückeA.*A, exp(A), 3.�A und A>0 die erwartetenErgebnisse. Der (konjugiert) tranponierteOperator und die Funktionen diag, inv,eig und \ aus der Linearen Algebra sindfür Arrays der Dimension gröÿer als zwei

nicht de�niert, also nur für Matrizen (zwei-dimensionale Arrays).

Die Tabelle 31 gibt weitere Matlab-Funktionen an, die speziell zum Manipulie-ren von mehrdimensionalen Arrays geeignetsind.

Funktion Bedeutungcat Verkettet Arraysndims Gröÿe, Ordnungndgrid Erzeugt Arrayspermute Permutiert Dimensionipermute Inverse Permutationshiftdim Verschiebt Dimensionsqueeze Verschiebt Dimension

Tabelle 31: Array-Funktionen

66. Datentypen (Klassen)

Bei der Realisierung numerischer undhauptsächlich nichtnumerischer Algorith-men sind Datentypen von besonderer Be-deutung. Spricht man von einfachen Daten-typen, so meint man ganze Zahlen, Gleit-punktzahlen, Zeichenketten usw. Unter ei-nem zusammengesetzten Datentyp oder ei-ner Datenstruktur versteht man ein Array(Feld) oder einen Verbund. Datenstruktu-ren können statisch und dynamisch sein.Ein statischer Datentyp ist zum Beispiel einArray und eine verkettete Liste ist ein dy-namischer Datentyp. Durch die De�nitionvon Datentypen werden die möglichen Ope-rationen mit denen Daten und die Gröÿedes Speicherplatzes festgelegt. In Matlab

187 Copyright c© G. Gramlich

Page 188: EinfMATLAB

wird stets der Begri� Datentyp oder Klasseverwendet und man meint damit zum Bei-spiel einen der folgenden Datentypen:

• double (numerische Arrays)

• sym (Symbolisches Objekt)

• function_handle (Function Handle)

• char (Zeichenketten)

• cell (Zellenarrays)

• struct (Strukturarrays)

Bisher haben wir hauptsächlich mit demDatentyp double und sym (aus der Sym-bolic Toolbox ) gearbeitet; gelegentlich auchmit der Klasse function_handle.

Um festzustellen von welchem Datentyp einObjekt ist, kann man die Funktion class

verwenden:

>> class(pi)

ans =

double

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

>> class(f)

ans =

function_handle

Auch mit der Funktion isa kann man denDatentyp einer Variablen heraus�nden.

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

>> isa(f,'double')

ans =

0

>> isa(f,'function_handle')

ans =

1

Mit den folgenden Anweisungen werden dieVariablen A bis N de�niert, die alle einenanderen Datentyp besitzen. Den Datentypkönnen Sie aus dem Matlab-Workspaceablesen.

>> A = 'Z';

>> B = magic(3);

>> C = @(x) x^2;

>> D = cell(3,2);

>> E.field = 1;

>> F = int8(123);

>> G = uint8(123);

>> H = int16(123);

>> I = uint16(123);

>> J = int32(123);

>> K = uint32(123);

>> L = single(123);

>> M = sym(123);

>> N = ss(1,1,1,1);

Die vorletzte Anweisung M = sym(123) istmit der Symbolic Math Toolbox und dieletzte Anweisung N = ss(1,1,1,1) mitControl Toolbox möglich. Erstere erzeugteine symbolische Variable und Letztere einZustandsraummodell. Weitere Matlab-Datentypen werden von Toolboxen erzeugt.Für weitere Informationen siehe auch doc

datatypes (help datatypes). Die drei Da-tentypen char, cell und struct wollen wiretwas genauer anschauen.

188 Copyright c© G. Gramlich

Page 189: EinfMATLAB

66.1. Zeichenketten (char)

Zeichenketten (Strings) werden durchHochkommata begrenzt

>> s = 'Ich bin eine Zeichenkette'

s =

Ich bin eine Zeichenkette

Die Variable s ist ein Array der Gröÿe(1, 25) vom Typ char. Mit dieser Varia-blen können Sie nun mit allen erlaubtenArrayoperationen manipulieren. Sie kön-nen zum Beispiel Zeichenketten zusammen-fügen oder trennen. Mit den Funktionenstr2num oder num2str können Sie Zeichenin Zahlen konvertieren oder umgekehrt.

Für weitere Informationen siehe doc

strfun (help strfun).

66.2. Zellen- und Strukturenarrays

Die Datentypen cell und struct erlau-ben es, unterschiedliche aber logisch zusam-mengehörige Daten (Felder) zu einer Varia-blen zusammenzufassen. Zum Beispiel kön-nen Zeichenketten und numerische Felderunterschiedlicher Gröÿe in einer Zelle ge-speichert werden. Mathematische Operatio-nen sind darauf aber nicht de�niert. Hierzumuss man gegebenenfalls auf den Inhalt zu-greifen. Strukturen und Zellen sind ähnlich.Ein Unterschied besteht jedoch darin, dassStrukturen durch Namen und nicht durchZahlen identi�ziert werden.

Strukturenarrays werden innerhalb vonMatlab an verschiedenen Stellen ver-

wendet, zum Beispiel von den Funktio-nen spline, solve und von Optimierungs-und Di�erenzialgleichungslösern. Auÿer-dem spielen sie beim objektorientiertenProgrammieren inMatlab eine groÿe Rol-le (Darauf sind wir bisher nicht eingegan-gen). Zellenarrays �nden zum Beispiel inden Funktionen varargin und varargout

Verwendung, sowie in Gra�kkommandos,um Text zu spezi�zieren.

Eine Struktur ist ein Datentyp, welcher ver-schiedene Werte von möglicherweise ver-schiedenen Datentypen beinhaltet. EineMatlab-Struktur ist mit dem DatentypRecord in der Sprache Pascal vergleich-bar. Im einfachsten Fall lässt sich eineStruktur durch einfache Anweisungen er-zeugen. Die nachfolgenden Anweisungenerzeugen die Variable M vom Datentypstruct. M ist ein (1, 1)-Array.

n = 2;

M.Name = 'Hilbert';

M.Matrix = hilb(n);

M.Eigenwerte = eig(sym(hilb(n)));

Gibt man M ein, so erhält man die Feldna-men, aber nicht deren Inhalt:

>> M

M =

Name: 'Hilbert'

Matrix: [2x2 double]

Eigenwerte: [2x1 sym]

Das erste Feld M.Name ist vom Typ char,das zweite vom Typ double und das dritte

189 Copyright c© G. Gramlich

Page 190: EinfMATLAB

vom Typ sym. Den Inhalt des zweiten Feldeserhält man zum Beispiel durch

>> M.Matrix

ans =

1.0000 0.5000

0.5000 0.3333

Ein Zellenarray ist ein Matlab-Array, dasals Elemente Matlab-Arrays haben kann.Ein Element heiÿt Zelle oder Zellenelement.Im Gegensatz zu Strukturenarrays werdenZellenarrays nicht durch Namen, sonderndurch Zahlen identi�ziert. Ein Weg, umein Zellenarray zu de�nieren besteht dar-in, geschweifte Klammern zu verwenden.Die folgende Anweisung erzeugt das (2, 2)-Zellenarray Z und gibt Informationen überdie einzelnen Zellen am Bildschirm aus.

>> Z = {sym(2), pi; pascal(3), 'ABC'}

Z =

[1x1 sym ] [3.1416]

[3x3 double] 'ABC'

Ein Zellenarray erlaubt es somit, Arraysverschiedener Datentypen zu einem Objektzusammenzufassen. Im obigen Beispiel be-steht das Zellenarray Z aus Arrays des Typsdouble und char. Sind die Zellen nicht zugroÿ, so werden sie am Bildschirm ange-zeigt. Lässt es der Raum aber nicht zu, soerscheint nur die Gröÿe der jeweiligen Zelle.Eine Zelle kann auch eine mehrdimensiona-le Struktur sein. Die Inhalte von einzelnenZellen sind zur Ausgabe mit Indizes in ge-schweiften Klammern anzugeben. Beispiel:

>> Z{2,1}

ans =

1 1 1

1 2 3

1 3 6

Mit der Funktion cellplot kann man sichdie gra�sche Struktur eines Zellenarrays ineinem Gra�kfenster anschauen. Der Aufruf

cellplot(A)

erzeugt die Abbildung 61.

3.1416

ABC

Abbildung 61: Die cellplot-Funktion

67. WWW-Seiten

Die Firma MathWorks kann über dasWorld Wide Web (WWW) erreicht werden.Die URL-Adresse4 lautet: http://www.

mathworks.com Der Deutsche Web Mir-ror (Spiegel) ist http://www.mathworks.

4URL: Uniform Resource Locator.

190 Copyright c© G. Gramlich

Page 191: EinfMATLAB

de Von hier aus �ndet man verschiedene In-formationen über Matlab und Simulinksowie deren Toolboxen. Auÿerdem gibt esHinweise über Blocksets, eine Liste von Bü-chern über Matlab sowie m-Files von an-deren Benutzern. Auch Informationen zurStudentenversion sind dort zu haben. Esemp�ehlt sich, hin und wieder die Home-page aufzusuchen, da dort die aktuellen In-formationen über Matlab zu �nden sind.

Um sich m-Files von der User Communityzu besorgen, steht die Adresse http://www.mathworks.de/matlabcentral zur Verfü-gung.

Programmiertipps stehen unterhttp://www.mathworks.de/access/

helpdesk/help/techdoc/matlab_prog.In dieser Beschreibung �ndet Sie auf derletzten Seite weitere Adressen, um weitereInfos über Realease Notes, Function Refe-rence, Newsgroup-Adressen, Suchadressennach Online-Quellen, Digest-Infos, News& Notes, Dokumentationen (Handbücher),Beispielsammlung, usw. Übrigens, dieseProgrammiertips (mit den Adressen auf derletzten Seite) werden auch als PDF-Filemit Matlab mitgeliefert. Über das Menühelp in Matlab help unter PrintableDokumentation (PDF) kommen Sie an dasPDF-Dokument.

Ein FAQ-Text (FAQ = Frequently AskedQuestions) zu Matlab �nden Sie unterhttp://www.mit.edu/~pwb/cssm.

68. Das Matlab-Logo

Zur Geschichte des Matlab-Logos (Ab-bildung 62) siehe http://www.mathworks.

com/company/newsletters/news_notes/

clevescorner/win03_cleve.html.

Abbildung 62: Das Matlab-Logo

69. Studentenversion

Eine Studentenversion von Mat-lab erhalten Sie unter https://www.

academic-center.de/cgi-bin/home.

70. Cleve's Corner

Besonders interessant �nde ich Cleve'sCorner. Darin be�nden sich interessanteArtikel rund umMatlab von Cleve Mo-ler, siehe www.mathworks.com/company/

newsletters/news_notes/clevescorner/

index.html.

191 Copyright c© G. Gramlich

Page 192: EinfMATLAB

71. Handbücher

Die Handbücher [14], [15], [16]und [17] sind als PDF-Files unterhttp://www.mathworks.de/access/

helpdesk/help/helpdesk.html erhältlich.

72. Progammierungstips

Tips zur e�zienten Programmierung inMatlab �nden Sie unter http://www.

mathworks.de/access/helpdesk/help/

pdf_doc/matlab/programming_tips.pdf.

73. Literatur

Bücher zu und über Matlab �ndetman unter http://www.mathworks.de/

support/books. Darunter auch das sehrempfehlenswerte Buch von C. Moler, sie-he [19].

74. Ähnliche Systeme

Diejenige, die sich Matlab nichtleisten können, sei auf die PublicDomain Software Scilab (http://www-rocq.inria.fr/scilab/), Octave(http://www.che.wisc.edu/octave),RLaB (http://rlab.sourceforge.net)und Euler (http://mathsrv.ku-eichstaett.de/MGF/homes/

grothmann/euler/german/index.html)verwiesen. Diese Systeme sind bezüglichSyntax und Kapazität dem Matlab-

System ähnlich. Andere kommerzielleSysteme sind zum Beispiel Gauss, HiQ,IDL, Mathcad und PV-WAVE.

Andere interaktive Systeme, die ihre Stär-ken hauptsächlich im Bereich symbolischerRechnungen haben, sind: Axiom, De-rive,Macsyma,Maple,Mathematica,MuPAD und Reduce. Man nennt die-se Systeme Computeralgebra-Systeme (CA-Systeme).

192 Copyright c© G. Gramlich

Page 193: EinfMATLAB

A. Glossar

Array (Feld). Unter einem Array (Feld)versteht man eine Reihe (Ansamm-lung) von Daten eines bestimmtenTyps. Vektoren und Matrizen sind diebekanntesten Beispiele.

Array Editor. Ein Tool, das es erlaubt, denInhalt von Arrays anzuzeigen und zuverändern.

Class (Klasse oder Datentyp). Ein Da-tentyp in Matlab.

Command History (Kommando-Historie).Ein Tool, das früher eingebaute Mat-lab Kommandos anzeigt, sowohl fürdie gegenwärtige als auch für frühereSitzungen.

Command Window (Kommando-Fenster).Das Fenster, in dem Matlab denPrompt � anzeigt und man Komman-dos eingeben kann. Es ist Teil derMatlab Arbeitsober�äche.

Current Directory Browser. AktuellerVerzeichnis-Browser. Ein Browser,in dem m-Files und andere Filesangezeigt werden. Es können auchOperationen angewendet werden.

Editor/Debugger. Ein Tool zum Erzeu-gen, Editieren und zur Fehlersuche vonFiles.

FIG-�le. Ein File mit der Endung .fig,der eine Matlab-Figur speichert undin Matlab eingeladen werden kann.

Figure. Ein Matlab-Fenster zur Anzeigevon Gra�k.

Function M-File. Ein Typ von m-File, derEin- und Ausgabeargumente akzep-tiert. Variablen sind dort lokal de�-niert.

Handle Graphics. Ein objekt-orientiertesGra�ksystem, dem die Gra�k vonMatlab unterliegt. Objekte sind hier-achisch organisiert und werden durchHandles manipuliert.

Help Browser. Ein Browser, mit dem mandie Dokumentation von Matlab undanderen MathWorks Produkten an-schauen und suchen kann.

IEEE arithmetic (IEEE-Arithmetik). EinStandard-Gleitpunktsystem, das inMatlab realisiert ist.

LAPACK. Eine Bibliothek von FORTRAN77 Programmen zur Lösung linea-rer Gleichungen, Ausgleichsaufgaben,Eigenwert- und Singulärwertberech-nnungen. Viele Matlab-Funktionenzur linearen Algebra basieren auf LA-PACK.

Launchpad. Ein Fenster für den Zugangzu Tools, Demos und Dokumentatio-nen von MathWorks Produkten.

M-File. Ein File mit der Endung .m, derMatlab Kommandos beinhaltet. Einm-File ist entweder ein Function oderScript-File.

193 Copyright c© G. Gramlich

Page 194: EinfMATLAB

MAT-File. Ein File mit der Endung .mat,der Matlab Variablen beinhaltet. Eswird mit den Kommandos save undload erzeugt bzw. eingeladen.

Matlab desktop (Arbeitsober�äche).Eine Benutzer-Arbeitsober�äche, umFiles, Tools und Anwendungen mitMatlab zu bearbeiten.

MEX-File. Ein Unterprogramm mit Coder FORTRAN-Code, das plattform-abgängige Endungen hat. Es verhältsich wie ein m-File oder eine eingebau-te Funktion.

Script M-File. Ein Typ von m-File, daskein Ein- und Ausgabeargument hatund auf Daten im Workspace (Ar-beitsspeicher) operiert.

Toolbox. Eine Sammlung von m-Files, dieden Funktionsumfang vonMatlab er-weitert, gewöhnlich im Hinblick auf einspezielles Anwendungsfeld.

Workspace. Arbeitsspeicher, der über dieMatlab-Befehlszeilen erreichbar ist.Beim Beenden werden die Variablengelöscht.

Workspace Browser. Ein Browser, der alleVariablen im Workspace au�istet undOperationen auf diesen erlaubt.

194 Copyright c© G. Gramlich

Page 195: EinfMATLAB

B. Die Top Matlab-Funktionen

In diesem Anhang liste ich Matlab-Funktionen auf, von denen ich glaube, dasssie vom typischen Matlab-User am Häu-�gsten eingesetzt werden. Informationenüber diese Funktionen erhalten Sie mit denOnline-Hilfen von Matlab insbesonderemit doc und help.

Vektoren/Matrizen

zeros Nullmatrixones Einsmatrixeye Einheitsmatrixrand Zufallsmatrixrandn Zufallsmatrixlinspace Gleicher Abstand

Spezielle Variablen/Konstanten

ans Nullarrayeps Maschinengenauigkeiti Imaginäre Einheitj Imaginäre Einheitinf ∞NaN Not a Numberpi Kreiszahl π

Logische Operatoren

all Test auf Nichtnullenany Test für ein Nichtnullelementfind Findet Indizesisempty Test auf leeres Arrayisequal Test auf Gleichheit

Arrays

size Arraygröÿelength Vektorlängereshape Ändert Form: Doppelpunktend Letzter Indexdiag Diagonalmatrizentril Dreiecksmatrizentriu Dreiecksmatrizenrepmat Blockmatrix

Kontrollstrukturen

error Fehlermeldungfor For-Schleifeif If-Abfrageswitch, case Fallunterscheidungwhile Wiederholungen

Datenanalysis

max Maximummin Minimummean arithm. Mittelwertstd Standardabweichungsum Summeprod Produktsort Sortieren

Lineare Algebra

norm Normcond Kondition\ Löst LGSeig Eigensystemelu LU-Faktorisierungqr QR-Faktorisierungsvd Singulärwertzerlegung

195 Copyright c© G. Gramlich

Page 196: EinfMATLAB

m-Files

edit Editorlookfor Suchenargin Anzahl Input-Argumentenargout Anzahl Output-Argumentetype Listet Filewhich Pfadname

Gemischtes

clc Löschtdemo Demonstrationendiary Aufzeichnungendir Verzeichnisdoc Hilfehelp Hilfetic, toc Zeitmessungwhat Listet Files

Datentypen

double Double Precisionchar Zeichencell Zellenum2str Zahl2Zeichensparse Sparsematrixstruct Struktur

Workspace

clear Löschtwho Listet Variablenload Läd Variablensave Speichertexit, quit Beendet

Ein- und Ausgabe

disp Zeigt Text oder Arrayfprintf Schreibt Datensprintf Schreibt Dateninput Prompt für Eingabe

Numerische Methoden

bvp4c Randwertaufgabefft FFTfminbnd Minimierunginterp1 Interpolationode45 Löst ODEpolyfit Polynom�tquadl Numerische Integrationroots Nullstellenspline Splines

Gra�k

plot x, y-Plotfplot Funktionsplotezplot Funktionsplotsemilog Halblogarithmischbar Barplothist Histogrammaxis Axenxlim x-Achseylim y-Achsegrid Gitterxlabel x-Labelylabel y-Labeltitle Titellegend Legendetext Textsubplot Subplothold Einfrierencontour Höhenlinienmesh 3D-Netzsurf 3D-Flächengrafspy Sparsestrukturprint Druckenclf Löscht Figurclose Schlieÿt Figur

196 Copyright c© G. Gramlich

Page 197: EinfMATLAB

Literatur

Die Literaturangaben sind alphabetischnach den Namen der Autoren sortiert.

[1] Anderson, E., Bai, Z., Bischof,C., Demmel, J., Dongarra, J.,Croz, J. D., Greenbaum, A.,Hammarling, S., McKenney, A.,Ostrouchov, S., Sorensen, D.:LAPACK User's Guide. Society forIndustrial and Applied Mathematics,Philadelphia, PA, USA, 3. Auflage,1999.

[2] Dongarra, J., Bunch, J., Moler,C., Stewart, G.: LINPACK Users'Guide. Society for Industrial and Ap-plied Mathematics, Philadelphia, PA,USA, 1979.

[3] Golub, G., van Loan, C.: MatrixComputations. The Johns HopkinsUniversity Press, 3. Auflage, 1996.

[4] Gramlich, G.: Lineare Algebra.Mathematik-Studienhilfen. Fachbuch-verlag Leipzig im Carl Hanser Verlag,2003.

[5] Gramlich, G.: Anwendungen derLinearen Algebra. Mathematik-Studienhilfen. Fachbuchverlag Leipzigim Carl Hanser Verlag, 2004.

[6] Gramlich, G.: Über (2, 2)-Eigensysteme. Skript, FHUlm, Februar 2005. http:

//www.rz.fh-ulm.de/~gramlich.

[7] Gramlich, G., Werner, W.: Nu-merische Mathematik mit Matlab.dpunkt.verlag, 2000.

[8] Greenbaum, A.: Iterative Methodsfor Solving Linear Systems. Societyfor Industrial and Applied Mathema-tics, Philadelphia, PA, USA, 1997.

[9] Higham, D., Higham, N.: MatlabGuide. Society for Industrial and Ap-plied Mathematics, Philadelphia, PA,USA, 2000.

[10] Kanzow, C.: Numerik linearer Glei-chungssysteme. Springer Verlag, 2005.

[11] Kelley, C.: Iterative Methods for Li-near ans Nonlinear Equations. Societyfor Industrial and Applied Mathema-tics, Philadelphia, PA, USA, 1995.

[12] Knorrenschild, M.: Numeri-sche Mathematik . Mathematik-Studienhilfen. Fachbuchverlag Leipzigim Carl Hanser Verlag, 2003.

[13] Lehoucq, R., Sorensen, D., Yang,C.: ARPACK User's Guide: Soluti-on of Large-Scale Eigenvalue Problemswith Implicitly Restarted Arnoldi Me-thods. Society for Industrial and Ap-plied Mathematics, Philadelphia, PA,USA, 1998.

[14] Matlab: Data Analysis. The Ma-thWorks, Natick, MA, USA, 2005.http://www.mathworks.de.

197 Copyright c© G. Gramlich

Page 198: EinfMATLAB

[15] Matlab: Graphics. The MathWorks,Natick, MA, USA, 2005. http://www.mathworks.de.

[16] Matlab: Mathematics. The Ma-thWorks, Natick, MA, USA, 2005.http://www.mathworks.de.

[17] Matlab: Programming . The Ma-thWorks, Natick, MA, USA, 2005.http://www.mathworks.de.

[18] Meister, A.: Numerik linearer Glei-chungssysteme. Vieweg-Verlag, 1999.

[19] Moler, C.: Numerical Computingwith Matlab. Society for Industri-al and Applied Mathematics, Philadel-phia, PA, USA, 2004.

[20] Nitschke, M.: Geometrie.Mathematik-Studienhilfen. Fach-buchverlag Leipzig im Carl HanserVerlag, 2005.

[21] Rieder, A.: Keine Probleme mit In-versen Problemen. Vieweg Verlag,2003.

[22] Saad, Y.: Iterative Methods for SparseLinear Systems. Society for Industri-al and Applied Mathematics, Philadel-phia, PA, USA, 2. Auflage, 2003.

[23] Shampine, L., Gladwell, I.,Thompson, S.: ODEs with Matlab.Cambridge, 2003.

[24] Shampine, L. F., Reichelt, M. W.:The MATLAB ODE suite. SIAM J.SCI. Computing , (18):1�22, 1997.

[25] Smith, B., Boyle, J., Dongarra,J., Garbow, B., Ikebe, Y., Kleme,V., Moler, C.: Matrix EigensystemRoutines-Eispack Guide. Springer-Verlag, 1976.

198 Copyright c© G. Gramlich

Page 199: EinfMATLAB

Stichwortverzeichnis

', 25*, 14, 18, 28+, 14, 18, 26, 28-, 14, 18, 26, 28-all, 14-realmin, 19.*, 28.+, 30./, 29.�, 29.\, 29/, 14, 18:, 24, 195�, 14, 28\, 70, 78, 86, 89, 92, 93, 96, 109, 187, 195

abs, 18all, 195all(any(B)), 32angle, 18ans, 14, 15, 17, 195any, 195any(all(B)), 32any(B(1:2,1:3)), 32any(B), 32Axiom, 192axis, 51, 196axis equal, 51axis square, 51

backsub, 89, 91bar, 53, 196bar3, 53bar3h, 53barh, 53Basis, 178

bench, 37bicg, 102bicgstab, 102binomial, 178binopdf, 138blkdiag, 33, 35box off, 43box on, 43bvp4c, 133�136, 196bvpinit, 134

C, 38C. Moler, 192C/C++, 9, 10, 57, 62cart2pol, 53cart2sph, 53cat, 33, 35, 187cd, 37ceil, 141ceil(x), 31cell, 186, 188, 196cellplot, 190cgs, 102char, 95, 186, 188�190, 196chol, 98, 99Cholesky, 98cholinc, 103Cholseky, 98circshift, 33class, 188clc, 14, 196clear, 196clear global, 66Cleve Moler, 2, 191clf, 196

199

Page 200: EinfMATLAB

close, 196coeff, 169colorbar, 46colormap, 46colspace, 76, 86compose, 155computer, 17, 20, 37cond, 96, 195condest, 96contour, 196conv, 110, 113convert, 169corrcoef, 138cos, 38, 105cosd, 38cov, 108, 138cross, 75, 87cumtrapz, 127�129

dblquad, 126, 129deconv, 112, 113degree, 168, 169delete, 37demo, 196demos, 179Derive, 192det, 80, 86, 97diag, 26, 86, 187, 195diag(rot90(B)), 28diary, 196diary off, 22Dichtefunktionen, 138diff, 163digits, 177dir, 37, 196disp, 196doc, 13, 195, 196doc axis, 51

doc bicg, 103doc chol, 99doc cholinc, 103doc clear, 36doc colon, 23doc condest, 96doc datatypes, 22, 188doc demo, 13doc demos, 13doc eigs, 104doc elfun, 13, 38, 39doc elmat, 17, 26doc fft2, 123doc fftn, 123doc fftw, 123doc format, 17doc function, 40, 63doc function_handle, 40, 45, 106doc funfun, 38, 130doc gallery, 103doc general, 63doc graph2d, 44doc graph3d, 44doc graphics, 56doc gsvd, 101doc ifft2, 123doc ifftn, 123doc imread, 54doc inputname, 63doc iofun, 38doc lang, 17, 60, 63doc linprog, 180doc linsolve, 86doc lsqcurvefit, 182doc lsqnonlin, 182doc luinc, 103doc movie, 56doc nargchk, 63

200 Copyright c© G. Gramlich

Page 201: EinfMATLAB

doc nargin, 63doc nargout, 63doc ode15i, 131doc ops, 23, 26, 29, 58doc optim, 122, 179, 182doc pdepe, 136doc plot, 41doc polyfun, 113doc print, 54doc quadprod, 181doc quiver, 53doc rcond, 96doc sin, 13doc slash, 86doc sparfun, 186doc specfun, 39, 139doc specgraph, 44doc stats, 137doc strfun, 189doc subplot, 43doc symbolic, 178doc uicontrol, 56doc vectorize, 35dot, 74, 87double, 3, 16, 19�22, 95, 186, 188�190,

196dsolve, 129, 131, 171

echo off, 61echo on, 61edit, 63, 196eig, 62, 81, 84�86, 102, 104, 105, 186,

187, 195eigs, 3, 84, 104, 105, 186eigshow, 83Eispack, 8end, 108, 195eps, 17, 19, 96, 100, 195

eps*realmin, 20error, 195Euler, 158, 177, 192exist, 37exit, quit, 196exp, 39, 105expm, 86, 105eye, 26, 71, 87, 186, 195ezmesh, 44, 49ezplot, 45, 47, 50, 105, 196ezplot3, 47ezsurf, 49

factor, 169factorial, 139feval, 106fft, 122, 196fftw, 123find, 195find(B), 32finite(B(:,3)), 32finverse, 157fix(x), 31fliplr, 33fliplr(A), 28flipud, 33floor, 141floor(x), 31fminbnd, 108, 121, 196fminsearch, 121for, 58, 59, 195format, 17format bank, 17format long, 17format short, 17Fortran, 9, 10, 62, 93Fourier, 122, 123, 174�176fourier, 175

201 Copyright c© G. Gramlich

Page 202: EinfMATLAB

fplot, 38, 45, 66, 196fprintf, 37, 38, 196fread, 37, 38Frobenius, 95Frobenuis, 95fscanf, 37, 38fsolve, 117full, 104, 185function, 39, 62, 63function_handle, 188Funktionsgrenzwerte, 158funtool, 169fwrite, 37, 38fzero, 38, 116�118, 121

Gauss, 192gausselim, 89, 91, 93gaussjord, 89, 93Gauÿ, 92, 171Gauÿ-Jordan, 89gcd, 153gemres, 102geomean, 138geopdf, 138get, 56global, 66gmres, 102, 104Grenzwerte

von Funktionen, 158grid, 42, 196gsvd, 109guide, 56

hadamard, 108Heaviside, 64heaviside, 64help, 12�14, 195, 196help clear, 36

help colon, 23help datatypes, 188help demo, 13help demos, 13help elfun, 13, 38, 39help elmat, 17, 26help fft2, 123help fftn, 123help fftw, 123help format, 17help function, 40, 63help function_handle, 40help funfun, 38, 130help graph2d, 44help graph3d, 44help graphics, 56help gsvd, 101help ifft2, 123help ifftn, 123help imread, 54help iofun, 38help lang, 17, 60help linprog, 180help linsolve, 86help lsqcurvefit, 182help lsqnonlin, 182help matfun, 105help movie, 56help ode15i, 131help ops, 23, 26, 29, 58help optim, 122, 179, 182help pdepe, 136help polyfun, 113help quadprog, 181help quiver, 53help slash, 86help sparfun, 104, 186help specfun, 39, 139

202 Copyright c© G. Gramlich

Page 203: EinfMATLAB

help specgraph, 44help stats, 137help strfun, 189help subplot, 43help symbolic, 178help uicontrol, 56help vectorize, 35Hermite, 98, 102, 105Hermitesch, 102Hesse, 164Higham, 103HiQ, 192hist, 53, 196hold, 196horner, 168, 169horzcat, 33, 35hostid, 37humps, 45, 117, 124, 128

i, 17, 195IDL, 192Ieee, 17, 19if, 58, 59, 195ifft, 122imag, 18image, 54, 56imread, 54, 56Inf, 17, 19inf, 17, 195input, 196inputname, 63int, 129, 165, 166int16, 20, 21int32, 20, 21int8, 20, 21interp1, 116, 196interp2, 47intmax, 21

intmin, 21inv, 71, 85, 86, 96, 187inverse, 13ipermute, 187isa, 188iscount, 157isempty, 195isequal, 195

j, 17, 195Jacobi, 165jacobian, 164, 165Java, 10Jordan, 86jordan, 86

kron, 29Kronecker, 29

Lapack, 93Laplace, 167, 176laplace, 167, 176legend, 196length, 195license, 37limit, 158, 159LinearAlgebra, 178Linpack, 8linprog, 180, 181linsolve, 86linspace, 24, 137, 195load, 36, 37, 196log, 39log10, 39log2, 39loglog, 51logspace, 24lookfor, 13, 14, 63, 196lookfor complex, 18

203 Copyright c© G. Gramlich

Page 204: EinfMATLAB

ls, 37lsqcurvefit, 182, 183lsqnonlin, 182lsqr, 102lu, 71, 87, 97, 98, 195luinc, 103

Macsyma, 192mad, 138Maple, 89, 153, 157, 169, 170, 173, 177,

178, 192maple, 89, 153, 178maple('with(combinat)'), 178Mathcad, 192Mathematica, 192Matlab, 120matlabroot, 37max, 195mean, 60, 138, 144, 195median, 60, 138mesh, 44, 137, 196meshgrid, 44mfun, 176mhelp, 168mhelp Basis, 178mhelp binomial, 178mhelp combinat, 178mhelp LinearAlgebra[Basis], 179mhelp('LinearAlgebra,Basis'), 179min, 195minres, 102mode, 138mtaylor, 169MuPAD, 192

NaN, 17, 19, 64, 195nargchk, 63nargin, 62, 196

nargout, 62, 196nchoosek, 137ndgrid, 187ndims, 187norm, 93, 95, 195normest, 95normpdf, 107, 138null, 76, 86, 100num2str, 189, 196

Octave, 192ode113, 132ode15i, 130�132ode15s, 132ode23, 132ode23s, 132ode23t, 132ode23tb, 132ode45, 38, 109, 130, 132, 184, 196ones, 26, 186, 195optimset, 117, 121orth, 76, 86, 100

Pascal, 10, 62, 189path, 36Path Browser, 36pathtool, 36pcg, 102, 103pdepe, 135, 136pdsolve, 171, 173, 174peaks, 46, 47perms, 139permute, 187pi, 17, 195pie, 53piecewise, 157pinv, 97pinv(A)*b, 88

204 Copyright c© G. Gramlich

Page 205: EinfMATLAB

plot, 41�43, 45, 196plot3, 43plotyy, 52pol2cart, 53polar, 53poly, 81, 86, 110, 113polyder, 112, 113polyfit, 109, 113, 114, 196polyval, 112, 113pretty, 150print, 54, 56, 196prod, 139, 195PV-WAVE, 192pwd, 37

qmr, 102qr, 87, 195quad, 38, 40, 123�127, 129quad, quadl, 109quadl, 123�125, 127, 129, 196quadv, 129quit, 12quiver, 53

rand, 28, 140, 141, 143, 186, 195rand(n), 141randn, 140, 141, 143, 186, 195randtool, 144range, 138rank, 77, 86, 100rcond, 96real, 18realmax, 19realmin, 20Record, 189Reduce, 192Reichelt, 132repmat, 33, 35, 195

reshape, 33, 35, 195reshape(A,4,3), 28RLaB, 192roots, 113, 117, 120, 196Rosenbrock, 132rot90(A,3), 28rot90(B), 28round, 31round(x), 31rref, 71, 86, 89�93rsolve, 170Runge-Kutta, 130, 132Runge-Kutte, 132

save, 36, 37, 196saveas, 56Scilab, 192sdvs, 105semilog, 196semilogx, 51semilogy, 51set, 56Shampine, 132shiftdim, 187simplify, 150Simulink, 3, 10, 11, 191sin, 13, 38, 105sind, 38single, 20, 22size, 25, 27, 62, 195solve, 89, 92, 93, 120, 157, 169, 189sort, 60, 195sparse, 185, 186, 196spdiags, 185speye, 186sph2cart, 53spline, 115, 189, 196spones, 186

205 Copyright c© G. Gramlich

Page 206: EinfMATLAB

sprand, 186sprandn, 186sprintf, 196spy, 196sqrt, 12, 18, 23, 39squeeze, 187Stateflow, 11std, 60, 138, 195stem, 53str2num, 189struct, 186, 188, 189, 196subplot, 43, 196subs, 150, 155, 156, 169sum, 195surf, 44, 196svd, 86, 186, 195svds, 105, 186switch, 58, 59switch, case, 195sym, 188, 190symmlq, 102symsum, 161

tabulate, 138tan, 38tand, 38Taylor, 169, 170taylor, 168taylortool, 169text, 196tic, 105tic, toc, 196title, 42, 43, 196toc, 105trapz, 127, 129tril, 86, 195triplequad, 126, 129triu, 86, 195

triu(B), 28type, 37, 156, 196

uint16, 20, 21uint32, 20, 21uint8, 20, 21unidpdf, 138unifpdf, 138

var, 108, 138, 144varargin, 108, 109, 189varargout, 109, 189vectorize, 35, 68ver, 37version, 37vertcat, 33, 35vpa, 177

Wathen, 103what, 37, 196whatsnew, 37which, 37, 196while, 58, 59, 195who, 36, 196whos, 36whos global, 66why, 108workspace, 36

xlabel, 43, 196xlim, 196

ylabel, 43, 196ylim, 196

zeros, 26, 58, 71, 87, 186, 195zlabel, 43

206 Copyright c© G. Gramlich