246
und ein bisschen mehr aus Sicht eines Mathematikers unter M. Gramlich Professor für Mathematik an der Hochschule Ulm Fakultät Grundlagen http://www.hs-ulm.de/gramlich Ulm, 15. Oktober 2008

und ein bisschen mehr aus Sicht eines Mathematikers G M ... · Vorwort M atlab1 ist ein sehr leistungsfähi- ges Softwaresystem für alle Arten von Berechnungen. Der Numeriker Cleve

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

und ein bisschen mehr aus Sicht eines Mathematikers

GunterM. GramlichProfessor für Mathematik an der

Hochschule UlmFakultät Grundlagen

http://www.hs-ulm.de/gramlichUlm, 15. Oktober 2008

Vorwort

Matlab1 ist ein sehr leistungsfähi-ges Softwaresystem für alle Artenvon Berechnungen. Der NumerikerCleve Moler hat die erste Version

von Matlab in FORTRAN Ende der siebzigerJahre geschrieben. Es wurde in Lehre und For-schung beliebt und mündete in ein kommer-zielles Softwaresystem. Matlab wird nun inHochschulen und Industrie eingesetzt.

Matlab dient im Gegensatz zu Computeralge-brasystemen (CAS) nicht primär der symboli-schen, sondern der numerischen (zahlenmäßi-gen) Lösung von Problemen.

Heutzutage werden viele physikalische, bio-logische, technische, informationstechnischeund ökonomische Produkte am Computer ent-wickelt. Hierbei ist eine Simulation ein we-sentlicher Bestandteil. Mit Hilfe einer Simu-lation kann ein Funktionsnachweis oft schnel-ler erbracht werden. Außerdem ist sie meistschneller als ein Experiment, kann daher einProjekt zeitlich verkürzen und so die Kostenreduzieren. Durch Computeranimationen ent-steht eine Anschaulichkeit und außerdem isteine Simulation völlig ungefährlich. Mit demSoftwaresystem Matlab lassen sich realitäts-nahe Anwendungen rasch und unaufwendigbereits mit wenigen Codezeilen programmie-ren bzw. simulieren.

Diese Einführung soll ein Einstieg in Matlabsein. Ich habe nur die wichtigesten Eigenschaf-ten von Matlab behandelt. Dabei zeige ich, wie

1Matlab R© ist eingetragenes Warenzeichen von TheMathWork Inc.

und wozu man Funktionen aus Matlab nut-zen kann, erkläre aber nicht die MathematischeTheorie und die Algorithmen, die sich dahin-ter verbergen. Auch gehe ich davon aus, dassSie grundlegende Kenntnisse im Programmie-ren und mit dem Umgang wenigstens eines Be-triebssystems haben.

Der Umfang von Matlab ist in den letztenJahren stark angestiegen. An den Dokumen-tationen können Sie dies gut erkennen, siehe[14, 15, 16, 17, 13]. Hier ein kleiner Abrissüber die verschiedenen Versionen:

1978: Klassisches MatlabFORTRAN-Version.

1984: Matlab 1C-Version.

1985: Matlab 230% mehr Funktionen und Kommandos,Dokumentation.

1987: Matlab 3Schnellere Interpreter, Farbgrafik, hochauf-lösende Grafik als Hardkopie.

1992: Matlab 4Sparsematrizen, Animation, Visualisie-rung, User-Interface-Kontrolle, Debugger,Handle-Grafik.

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

2000: Matlab 6 (R12)Matlab-Desktop mit Browser-Hilfe, Matri-zenrechnungen basierend auf LAPACK mitBLAS, Handle-Funktionen, eigs Schnitt-

2 Copyright c© G. Gramlich

stelle zu ARPACK, Randwertproblemlö-ser, partieller Differenzialgleichungssystem-Löser, JAVA Unterstützung.

2002: Matlab 6.5 (R13)Performance-Beschleunigung, schnellereGeschwindigkeit der Kernfunktionen derLinearen Algebra für den Pentium 4, mehrFehler- 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 verbesserte Plot-Möglichkeiten.

2008: Matlab 7.6 (R2008a)Bessere Unterstützung der objekt-orientierten Programmierung innerhalbvon Matlab.

Nicht näher gehe ich auf die Themen: Objekt-orientiertes Programmieren mit Matlab, Java-Schnittstellen, GUI (Graphical User Inter-face) Werkzeuge und die Publikationstools wieHTML, XML, LATEX,usw. ein. Dafür finden Sieaber einen Zugang zum symbolischen Rechnenmit Matlab, zu Optimierungs- und Statistik-funktionen, sowie eine Einführung in Simulink(Symbolic-Toolbox, Optimization Toolbox, Sta-tistics Toolbox, Simulink). Im Anhang findenSie ein kleines Glossar, sowie eine Auflistungwichtiger Matlab-Funktionen.

Den vorliegenden Text habe ich vollständig inLATEX erstellt. Die Literaturhinweise wurdenmit BibTEX und der Index mit MakeIndex er-zeugt. Alle Bilder habe ich mit Matlab ge-macht.

Die Mathematik habe mit den dort üblichenSymbolen und der dort üblichen Schreibwei-se ausgedrückt. Vektoren sind kleine (a, b,c usw.) und Matrizen sind große lateinischeBuchstaben (A, B, C usw.). Funktionen, Kom-mandos, Codes, usw. aus Matlab habe ich indie Schriftart Typwriter gesetzt. Das Endevon Aufgaben habe ich wie folgt gekenntzeich-net: © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Für jede Anregung, nützlichen Hinweis oderVerbesserungsvorschlag bin ich dankbar. Sieerreichen mich am Besten über E-Mail:[email protected]. Dank an MarkusSommereder (Wien) für den ein oder anderenFehlerhinweis.

Nun viel Freude und Erfolg mit Matlab!

Ulm, 15. Oktober 2008 Günter Gramlich

3 Copyright c© G. Gramlich

Inhaltsverzeichnis

1. Einführung 91.1. Erste Schritte . . . . . . . . . . 91.2. Magische Quadrate (magic) . . 101.3. Grafik . . . . . . . . . . . . . . 15

2. Allgemeines 15

3. Was macht den Erfolg von Matlabaus? 18

4. Starten und beenden 19

5. Die Arbeitsoberfläche 195.1. Das Command Window . . . . . 205.2. Command History . . . . . . . . 205.3. Der Workspace Browser . . . . 205.4. Current Directory . . . . . . . . 21

6. Der Help Browser 22

7. Der Array Editor 22

8. Der Editor/Debugger 23

9. Plots 24

10. Der Import Wizard 25

11. Matlab unterbrechen 25

12. Lange Eingabezeilen 25

13. Eine Sitzung aufzeichnen 25

14. Das help-Kommando 25

15. Das doc-Kommando 26

16. Demos 26

17. Das lookfor-Kommando 26

18. Alle Funktionen? 27

19. Wichtige Funktionen? 27

20. Der Path Browser 27

21. Den Datenträger verwalten 28

22. Wie man weitere Systeminforma-tionen erhält 28

23. Neuigkeiten und Versionen 28

24. Voreinstellungen 29

25. Einfaches Rechnen 29

26. Welche arithmetische Operationhat Vorang? 29

27. Zahlen und Formate 30

28. Variablen und Konstanten 31

29. Komplexe Zahlen 32

30. Ieee-Arithmetik und double 33

31. Nicht double-Datentypen 35

32. Merkmale von Matlab 3632.1. Keine Deklaration notwendig . . 3732.2. Variable Argumentenliste . . . . 3732.3. Komplexe Arrays und Arithmetik 38

33. Mathematische Funktionen 3833.1. Rundungsfunktionen . . . . . . 3933.2. Verwendung mathematischer

Funktionen in Matlab . . . . . . 40

4 Copyright c© G. Gramlich

34. Vektoren 41

35. Vektorenoperationen 42

36. Matrizen 4236.1. Matrizen erzeugen . . . . . . . . 4336.2. Der Doppelpunkt . . . . . . . . 4536.3. Matrizen- und Arrayoperationen 4836.4. Matrizenmanipulationen . . . . 5236.5. Datenanalye . . . . . . . . . . . 53

37. Vektorielle Programmierung 55

38. Ein- und Ausgabe 5638.1. Benutzereingabe . . . . . . . . . 5638.2. Bildschirmausgabe . . . . . . . 5638.3. Dateien lesen und schreiben . . . 57

39. Function Functions 58

40. Grafik 5940.1. 2D-Grafik . . . . . . . . . . . . 5940.2. 3D-Grafik . . . . . . . . . . . . 6240.3. Funktionsdarstellungen . . . . . 6340.4. Parametrisierte Kurven . . . . . 6640.5. Parametrisierte Flächen . . . . . 6840.6. Implizite Kurven . . . . . . . . 6940.7. Implizite Flächen . . . . . . . . 6940.8. Koordinatenachsen skalieren . . 6940.9. Zwei y-Achsen . . . . . . . . . 7040.10. Koordinatentransformationen . . 7140.11. Spezielle Grafikfunktionen . . . 7140.12. Vektorfelder visualisieren . . . . 7240.13. Grafiken exportieren und drucken 7340.14. Digitale Bilder . . . . . . . . . . 7440.15. Animationen . . . . . . . . . . . 7540.16. Handle Graphics . . . . . . . . . 7540.17. Graphical User Interface (GUI) . 7540.18. Geometrische Körper . . . . . . 75

40.19. Flächenstücke (Patches) . . . . . 76

41. Vergleichsoperatoren, Vergleichs-funktionen 77

42. Logische Operatoren und logischeFunktionen 77

42.1. Logische Operatoren . . . . . . 7742.2. Logische Funktionen . . . . . . 78

43. Steuerstrukturen 7843.1. for-Schleife . . . . . . . . . . . 7843.2. while-Schleife . . . . . . . . . 7943.3. if-Anweisung . . . . . . . . . . 8043.4. switch-Anweisung . . . . . . . 80

44. m-Files 8044.1. Script-Files . . . . . . . . . . . 8044.2. Function-Files . . . . . . . . . . 8144.3. Namen von m-Files . . . . . . . 8344.4. Editieren von m-Files . . . . . . 8344.5. Zur Struktur eines m-Files . . . 8344.6. Blockkommentare . . . . . . . . 8344.7. Übungsaufgaben . . . . . . . . 83

45. Globale und lokale Variablen 86

46. Namenstest 86

47. Wie man effiziente Programmeschreibt 87

48. Lineare Algebra (Teil 1) 9048.1. Lineare Gleichungssysteme und

Matrizen . . . . . . . . . . . . . 9048.2. Vektoren in der Ebene und im

Raum . . . . . . . . . . . . . . 9448.3. Analytische Geometrie von Ge-

raden und Ebenen . . . . . . . . 95

5 Copyright c© G. Gramlich

48.4. Reelle Vektorräume und Unter-räume . . . . . . . . . . . . . . 95

48.5. Determinanten . . . . . . . . . . 9948.6. Eigenwerte und Eigenvektoren . 10048.7. Lineare Abbildungen und Matrizen10348.8. Matlab-Funktionen für die Li-

neare Algebra im Überblick . . . 104

49. Lineare Algebra (Teil 2) 10549.1. Lineare Gleichungssysteme (2) . 10549.1.1. Quadratische Systeme . . . . . . 10549.1.2. Überbestimmte Systeme . . . . 10649.1.3. Unterbestimmte Systeme . . . . 10749.2. Lineare Gleichungssysteme (3) . 10749.3. Lineare Gleichungssysteme (4) . 11149.4. Inverse . . . . . . . . . . . . . . 111

50. Lineare Algebra (Teil 3) 11250.1. Normen . . . . . . . . . . . . . 11250.2. Konditionszahlen . . . . . . . . 11450.3. LU-Faktorisierung . . . . . . . . 11450.4. Cholesky-Faktorisierung . . . . 11550.5. QR-Faktorisierung . . . . . . . 11650.6. Singulärwertzerlegung . . . . . 11850.7. Pseudoinverse . . . . . . . . . . 11950.8. Eigensysteme . . . . . . . . . . 11950.9. Iterative Methoden . . . . . . . 12050.9.1. Iterative Methoden für lineare

Gleichungssysteme . . . . . . . 12050.9.2. Iterative Methoden für Eigensys-

teme . . . . . . . . . . . . . . . 12150.9.3. Iterative Methoden für Singulär-

wertsysteme . . . . . . . . . . . 12250.10. Funktionen einer Matrix . . . . 122

51. Mehr zu Funktionen 12451.1. Function-Handles . . . . . . . . 12451.2. Anonymous Functions . . . . . 125

51.3. Subfunctions . . . . . . . . . . 12651.4. Nested Functions . . . . . . . . 12651.5. Overloaded Functions . . . . . . 12751.6. Private Functions . . . . . . . . 12751.7. Beispielhafte Funktionen . . . . 127

52. Polynome 12852.1. Darstellung von Polynomen . . . 12852.2. Nullstellen von Polynomen . . . 12852.3. Multiplikation von Polynomen . 12952.4. Addition und Subtraktion von

Polynomen . . . . . . . . . . . 12952.5. Division von Polynomen . . . . 13052.6. Ableiten von Polynomen . . . . 13052.7. Integrieren von Polynomen . . . 13052.8. Auswerten von Polynomen . . . 13152.9. Zusammenfassung . . . . . . . . 131

53. Polynominterpolation 131

54. Polynomapproximation 132

55. Kubische Splineinterpolation 133

56. Stückweise lineare Interpolation 134

57. Nichtlineare Gleichungen (1) 135

58. Optimierung (Teil 1) 138

59. FFT 140

60. Integration 14260.1. Mehrfachintegrale . . . . . . . . 14460.2. Tabellarische Daten . . . . . . . 14560.3. Numerische uneigentliche Inte-

gration . . . . . . . . . . . . . . 14660.4. Zusammenfassung . . . . . . . . 147

6 Copyright c© G. Gramlich

61. Differenzialgleichungen 14761.1. Anfangswertaufgaben . . . . . . 14761.2. Randwertaufgaben . . . . . . . 15061.3. Partielle Differenzialgleichungen 153

62. Statistik 155

63. Kombinatorik 15563.1. Fakultäten, Binomial- und Poly-

nomialzahlen . . . . . . . . . . 15663.2. Permutationen ohne Wiederholung 15763.3. Variationen ohne Wiederholung . 15763.4. Kombinationen ohne Wiederho-

lung . . . . . . . . . . . . . . . 15863.5. Permutationen mit Wiederholung 15863.6. Variationen mit Wiederholung . 15863.7. Kombinationen mit Wiederholung 15863.8. Weitere Funktionen . . . . . . . 158

64. Zufallszahlen 15964.1. Gleichverteilte Zufallszahlen . . 15964.2. Normalverteilte Zufallszahlen . 16064.3. Im Vergleich: Gleich- und nor-

malverteilte Zufallszahlen . . . . 16164.4. Andere Verteilungen . . . . . . 163

65. Stochastische Simulationen 16365.1. Näherung für π . . . . . . . . . 16465.2. Zum Ziegenproblem . . . . . . . 16565.3. Das Geburtstagsparadox . . . . 16665.4. Bestimmte Integrale . . . . . . . 167

66. Symbolisches Rechnen 16866.1. Erste Schritte . . . . . . . . . . 16866.2. Wie man Maple-Funktionen ver-

wendet . . . . . . . . . . . . . . 17166.3. Mathematische Funktionen . . . 17266.4. Algebraische Gleichungen . . . 175

66.5. Grenzwerte . . . . . . . . . . . 17666.6. Endliche und unendliche Summen 18066.7. Differenziation . . . . . . . . . 18266.8. Partielle Differenziation . . . . . 18366.9. Der Gradient . . . . . . . . . . . 18366.10. Die Hesse-Matrix . . . . . . . . 18466.11. Die Jacobi-Matrix . . . . . . . . 18466.12. Integration . . . . . . . . . . . . 18566.13. Polynome . . . . . . . . . . . . 18766.14. Taylor-Polynome . . . . . . . . 18866.15. Die Funktionen funtool und

taylortool . . . . . . . . . . 18866.16. Mehrdimensionale Taylor-

Polynome . . . . . . . . . . . . 18966.17. Lineare Algebra . . . . . . . . . 19066.18. Differenzengleichungen . . . . . 19066.19. Differenzialgleichungen . . . . . 19066.20. Die kontinuierliche Fourier-

Transformation . . . . . . . . . 19366.21. Laplace-Transformation . . . . . 19666.22. Spezielle mathematische Funk-

tionen . . . . . . . . . . . . . . 19666.23. Variable Rechengenauigkeit . . . 19666.24. Überblick über alle symboli-

schen Funktionen . . . . . . . . 19866.25. Weitere Bemerkungen und Hin-

weise . . . . . . . . . . . . . . 198

67. Nichtlineare Gleichungen (2) 199

68. Optimierung (Teil 2) 20068.1. Lineare Optimierung . . . . . . 20068.2. Quadratische Optimierung . . . 20168.3. Lineare Ausgleichsaufgaben mit

linearen Nebenbedingungen . . . 20368.4. Nichtlineare Optimierung . . . . 20368.5. Überblick über alle Funktionen

zur Optimierung . . . . . . . . . 208

7 Copyright c© G. Gramlich

69. Lineare Ausgleichsaufgaben 20969.1. Weitere Aufgaben zur linearen

Ausgleichsrechnung . . . . . . . 209

70. Nichtlineare Ausgleichsaufgaben 213

71. Simulink 21471.1. Erste Schritte . . . . . . . . . . 21471.2. Konstruktion eines Blockdia-

gramms . . . . . . . . . . . . . 21571.3. Weitere Arbeitsschritte . . . . . 21571.4. Ein erstes Beispiel . . . . . . . . 21571.4.1. Konstruktion des Blockdiagramms 21671.4.2. Weitere Arbeitsschritte . . . . . 21671.4.3. Simulation . . . . . . . . . . . . 21771.5. Beispiele . . . . . . . . . . . . . 21771.6. Vereinfachungen . . . . . . . . 22071.7. Kommunikation mit Matlab . . 22071.8. Umgang mit Kennlinien . . . . . 22071.9. Weitere Bemerkungen und Hin-

weise . . . . . . . . . . . . . . 220

72. Dünn besetzte Matrizen 22072.1. Sparsematrizen erzeugen . . . . 22172.2. Mit Sparsematrizen rechnen . . 222

73. Mehrdimensionale Arrays 224

74. Datentypen (Klassen) 22574.1. Zeichenketten (char) . . . . . . 22674.2. Zellen- und Strukturenarrays . . 227

75. Audiosignale (Töne, Musik) 229

76. WWW-Seiten 230

77. Das Matlab-Logo 231

78. Studentenversion 231

79. Cleve’s Corner 231

80. Handbücher 231

81. Progammiertips 231

82. Literatur 232

83. Ähnliche Systeme 232

A. Glossar 233

B. Die Top Matlab-Funktionen 235

Literatur 237

Stichwortverzeichnis 239

8 Copyright c© G. Gramlich

1. Einführung

It is probably fair to say that one of the threeor four most important developments in

numerical computation in the past decade hasbeen the emergence of Matlab as the

preferred language of tens of thousands ofleading scientists and engineers.

Lloyd N. Trefethen, 1997.

„Der Fortschritt der Menschheit ist eng mitder Verwendung von Werkzeugen verbunden.Werkzeuge wie Hammer, Zange oder Baukranverstärken menschliche Fähigkeiten. Werkzeu-ge wie Fernglas, Mikroskop oder Flugzeugverleihen sogar neue Fähigkeiten. Auch Com-puter und Computerprogramme sind Werkzeu-ge. Sie ermöglichen es dem Menschen Berech-nungen schneller durchzuführen, auf Knopf-druck Diagramme zu erzeugen und Datenmit hoher Geschwindigkeit über das Internetzu transportieren. Werkzeuge sind zum einendas Ergebnis menschlichen Erfindungsgeistes,zum anderen sind sie aber auch die Grundla-ge für neue Erkenntnisse und neu Denk- undArbeitsweisen. So ermöglichte erst die Erfin-dung des Rades den einfachen Transport grö-ßerer Güter über weitere Entfernungen, mitdem Fernrohr entdeckte Galiei die Jupitermon-de und mit dem Computer lassen sich Berech-nungen durchführen, die jenseits der Möglich-keiten von Papier und Beistift liegen. Werkzeu-ge haben aber auch eine didaktische Dimen-sion, da ihr Einsatz geplant und der Umgangmit ihnen gelernt und gelehrt werden muss.Darüber hinaus ziehen neue Werkzeuge auchneue Verfahren, Arbeits- und Denkweisen nachsich“. ([28])

1.1. Erste Schritte

Um ihnen ein Gefühl dafür zu geben, wie Mat-lab arbeitet, starten wir gleich mit ein paar Bei-spielen. Nähere Erklärungen und weitere Infor-mationen erhalten Sie dann in den folgendenAbschnitten.

Variablen werden nach dem Prompt erzeugtund müssen mit einem Buchstaben begin-nen. Matlab unterscheidet zwischen Groß- undKleinbuchstaben. Die Anweisung

1 >> x = 3;

erzeugt die Variable x und ordnet ihr den Wert3 zu. Das Semikolon am Ende der Anweisungunterdürckt die Ausgabe im Command Win-dow. Nach Voreinstellung ist x vom Datentypdouble und belegt acht Byte Speicherplatz.Diese Informationen können mit dem Kom-mando whos erfragen:

1 >> whos2 Name Size Bytes Class3

4 x 1x1 8 double array5

6 Grand total is 1 element ...

Außerdem hat die Variable x die Size (Größe,Ordnung) 1x1was bedeutet, dass sie ein Skalarist. Ein Skalar ist ein Array mit einer Zeile undeiner Spalte.

Zeichenketten (Strings) werden in Hochkom-mas erzeugt.

1 >> s = ’Ich bin ein String’;

Ein Zeichen benötigt zwei Byte Speicherplatz.Entsprechend ergeben sich bei 18 Zeichen 36Bytes.

9 Copyright c© G. Gramlich

Matrizen (zweidimensionale Arrays) werdenmit eckigen Klammern erzeugt.

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

Spalten werden durch Leerzeichen oder Kom-mas getrennt, Zeilen durch Semikolons. Gibtman A(1,2) ein, so spricht man das Matrixele-ment 2 an, denn der erste Index bezieht sich aufdie Zeile während der zweite Index sich auf dieSpalte bezieht. Dies entspricht ganz der ma-thematischen Notation. Mit dem Doppelpunktkann man auch ganze Zeilen oder Spalten einerMatrix ansprechen.

1 >> A(1,:), A(:,2)2 ans =3 1 2 34 ans =5 26 5

In diesem Beispiel die erste Zeile und die zwei-te Spalte der Matrix A.

Es gibt in Matlab eingebaute Funktionen, dieIhnen viel Arbeit abnehmen. So gibt es zumBeispiel Funktionen, um Matrizen aufzubau-en, ohne sie mühsam eingeben zu müssen. EinBeispiel ist die Funktion rand. Diese Funktionerzeugt eine Zufallsmatrix mit Elementen zwi-schen 0 und 1. Die Größe der Matrix bestim-men Sie.

1 >> B = rand(3)2 B =3 0.4447 0.9218 0.40574 0.6154 0.7382 0.93555 0.7919 0.1763 0.9169

Mit dem Operator * können Sie die MatrizenA und B nun im Sinne der Matrizenalgebra (Li-neare Algebra) multiplizieren, wenn Sie wol-len, denn die Mulitplikation ist definiert.

Neben Matrizen und mehrdimensionalen Ar-rays (mehr als zwei Indizes) unterstütztMatlab Zellenvariablen und Strukturvariablen(Abschnitt 74). In eine Zellenvariable kannman Variablen mit verschiedenen Datentypenzusammenpacken.

1 >> Z = {x,s}2 Z =3 [3] ’Ich bin ein String’

Die Zellenvariable Z besteht aus einem nume-rischen Skalar und einem String. Zellenvaria-blen können mit geschweiften Klammern er-zeugt werden.

1.2. Magische Quadrate (magic)

Magische Quadrate sind interessante Matrizen.Mit

1 >> help magic

erhalten wir den folgenden Text:

1 MAGIC(N) is an N-by-N matrix2 constructed from the integers3 1 through N^2 with equal row,4 column, and diagonal sums.5 Produces valid magic squares6 for all N > 0 except N = 2.

Wir erzeugen das magische Quadrat der Ord-nung drei.

1 >> A = magic(3)2 A =

10 Copyright c© G. Gramlich

3 8 1 64 3 5 75 4 9 2

Das Kommando sum(A) summiert die Ele-mente jeder Spalte und erzeugt die Ausgabe

1 ans =2 15 15 15

Das Kommando sum(A’) transponiert (Zei-len und Spalten vertauschen) die Matrix Azunächst, berechnet dann die Spaltensummenund bestätigt, dass auch die Zeilensummengleich 15 sind:

1 ans =2 15 15 15

Funktionen dürfen geschachtelt werden! Auchdie Summe der Diagonalelemente ist 15:

1 >> sum(diag(A))2 ans =3 15

Die Gegendiagonale hat auch die Summe 15.Die Gegendiagonale ist für die Lineare Alge-bra weniger interessant, deshalb ist deren Ans-rechbarkeit auch trickreicher.

1 >> sum(diag(flipud(A)))2 ans =3 15

Die Funktion flipud vertauscht die Zeilenvon oben nach unten. Warum ist die Summegleich 15? Die Anwort ist: Die Summe derersten neun ganzen Zahlen ist 45 und da jedeSpaltensumme gleich sein muss, gilt 45/3 =15. Wieviele magische Quadatrate der Ord-nung drei gibt es? Antwort: Acht! Es gibt acht

Drehungen und Spiegelungen der Matrix A.Genauso viele Möglichkeiten, wie eine Folieauf den Overhead Projektor zu legen. Hier sindsie:

1 8 1 6 8 3 42 3 5 7 1 5 93 4 9 2 6 7 24

5 6 7 2 4 9 26 1 5 9 3 5 77 8 3 4 8 1 68

9 2 9 4 2 7 610 7 5 3 9 5 111 6 1 8 4 3 812

13 4 3 8 6 1 814 9 5 1 7 5 315 2 7 6 2 9 4

Man kann sie wie folgt erzeugen.

1 for k=0:32 rot90(A,k)3 rot90(A’,k)4 end

Nun ein etwas Lineare Algebra. Es ist

1 >> det(A)2 ans =3 -360

und die Inverse ist

1 >> X = inv(A)2 X =3 0.1472 -0.1444 0.06394 -0.0611 0.0222 0.10565 -0.0194 0.1889 -0.1028

Diese sieht vertrauter aus, wenn wir die Matri-xelemente als Brüche schreiben:

11 Copyright c© G. Gramlich

1 >> format rat2 >> X3 X =4 53/360 -13/90 23/3605 -11/180 1/45 19/1806 -7/360 17/90 -37/360

Jetzt kann man die Determinante im Nenner er-kennen. Mit format short können wir wie-der auf die Defaultausgabe zurückschalten.

Die Norm einer Matrix, die Eigenwerte unddie singuären Werte sind wichtige Größen ei-ner Matrix. Hier sind sie für das magische Qua-drat der Ordnung drei:

1 >> r = norm(A)2 r =3 15.00004 >> e = eig(A)5 e =6 15.00007 4.89908 -4.89909 >> s = svd(A)

10 s =11 15.000012 6.928213 3.4641

Wir sehen, dass der magische Summenwert 15in allen drei Größen vorkommt.

Bis jetzt haben wir alle unsere Berechnun-gen in Gleitpunktarithmetik durchgeführt. Die-se Arithmetik wird im wissenschaftlichen undingenieurmäßigen Rechnen am meisten ver-wendet, insbesondere für „große“ Matrizen.Für eine (3, 3)-Matrix können wir die Berech-nungen leicht symbolisch wiederholen. Dabeiverwenden wir die Symbolic Toolbox, die auf

Maple basiert, siehe Abschnitt 66. Die Anwei-sung

1 >> A = sym(A)2 A =3 [ 8, 1, 6]4 [ 3, 5, 7]5 [ 4, 9, 2]

konverteiert die Matrix A zu einer symboli-schen Matrix. Die Kommandos

1 sum(A), sum(A’), det(A), inv(A),2 eig(A), svd(A)

produzieren die entsprechenden symbolischenResultate.

Ein Beispiel eines magischen Quadrats derOrdnung vier findet sich in der Renaissancera-dierung Melancholie des deutschen KünstersAlbrecht Durer. Diese Radierung steht unsin Matlab elektronisch zur Vefügung. Die An-weisungen

1 >> load durer2 >> whos

ergeben die Ausgabe

1 Name Size Bytes Class2

3 X 648x509 2638656 double4 caption 2x28 112 char5 map 128x3 3072 double6

7 Grand total is 330272 elements ...

Hierbei ist X die Bildmatrix des Grauwertbil-des und in der Variablen map ist die Graustu-fenskalierung enthalten. Das Bild wird mit denAnweisungen

12 Copyright c© G. Gramlich

1 >> image(X)2 >> colormap(map)3 >> axis image

erzeugt, siehe Abbildung 1. Betrachtet man das

100 200 300 400 500

100

200

300

400

500

600

Abbildung 1: Radierung von A. Durer

Bild genauer, so stellt man fest, dass sich inihm tatsächlich ein magisches Quadrat befin-det. Zoomen Sie mit der Lupe in den rechtenoberen Teil des Bildes und Sie können das ma-gische Quadrat der Ordnung vier gut erkennen.Mit den Anweisungen

1 >> load detail2 >> image(X)3 >> colormap(map)4 >> axis image

erhalten wir in einer höheren Auflösung denrechten oberen Teil des Bildes mit dem magi-schen Quadrat, siehe Abbildung 2. Die Anwei-sung

1 >> A = magic(4)

erzeugt das folgende magische Quadrat derOrdnung vier

100 200 300

50

100

150

200

250

300

350

Abbildung 2: Ausschnitt der Radierung

1 A =2 16 2 3 133 5 11 10 84 9 7 6 125 4 14 15 1

Die Aufrufe sum(A),sum(A’), sum(diag(A)) undsum(diag(flipud(A))) liefern jeweilsden Wert 34 und zeigen somit, dass A einmagisches Quadrat ist.

Dieses magische Quadrat ist aber nicht dasGleiche wie in Durers Radierung. Wir brau-chen aber nur die zweite und dritte Spalte ver-tauschen. Das geht so:

1 >> A = A(:,[1 3 2 4])2 A =3 16 3 2 134 5 10 11 85 9 6 7 126 4 15 14 1

Durer hat wahrscheinlich dieses magischeQuadrat gewählt, weil es in der Mitte der letz-ten Zeile die Zahl 1514 enthält, was das Jahr

13 Copyright c© G. Gramlich

ist, in dem er diese Zeichnung getan hat.

Es stellt sich heraus, dass es 880 magischeQuadrate der Ordnung vier und 275 305 224magische Quadrate der Ordnung fünf gibt. Esist bisher ein ungelöstes mathematische Pro-blem, die Anzahl der verschiedenen magischenQuadrate der Ordnung 6 oder größer anzuge-ben.

Die Determinante von A ist null. Deshalb hatdie Matrix A auch keine Inverse. Das heißt,es gibt magische Quadrate, die singulär sind.Welche? Der Rang einer quadratischen Matrixist die Anzhal der linear unabhängigen Spal-ten (oder Zeilen). Eine (n, n)-Matrix ist genaudann singulär, wenn der Rang kleiner n ist. DieAnweisungen

1 for n=1:242 r(n) = rank(magic(n));3 end4 [(1:24)’ r’]

erzeugen eine Tabelle in der man mit zuneh-mender Ordnung den Rang ablesen kann.

1 1 12 2 23 3 34 4 35 5 56 6 57 7 78 8 39 9 9

10 10 711 11 1112 12 313 13 1314 14 915 15 1516 16 3

17 17 1718 18 1119 19 1920 20 321 21 2122 22 1323 23 2324 24 3

Schauen Sie sorgfältig auf die Tabelle. Ignorie-ren Sie den Fall n = 2, denn dann liegt kein ma-gisches Quadrat vor. Können Sie Strukturen er-kennen? Mit Hilfe eines Säulendiagramms er-kennt man die Strukturen besser. Die Anwei-sungen

1 >> bar(r)2 >> title(’Rang magischer Quadrate’

)

erzeugen das Bild in Abbildung 3. Die Beob-

0 5 10 15 20 250

5

10

15

20

25Rang magischer Quadrate

Abbildung 3: Rang magischer Quadrate

achtungen sind folgende:

• Ist n = 3, 5, 7, . . ., so haben die Matrizenvollen Rang. Sie sind also regulär und be-sitzen jeweils eine Inverse.

• Ist n = 4, 8, 12, . . ., so hat die Matrix den

14 Copyright c© G. Gramlich

Rang drei. Diese Matrizen sind also „stark“singulär.

• Ist n = 6, 10, 14, . . ., so hat die Matrix denRang n/2+2. Auch diese Matrizen sind sin-gulär, nicht aber so stark wie die vorherge-hende Klasse.

Mit edit magic können Sie sich denFunction-File anschauen, der die magischenQuadrate erzeugt. Dort können Sie auch dieobigen drei Fallunterscheidungen wiedererkennen.

1.3. Grafik

Matlab verfügt über mächtige Grafikfähigkei-ten. Dieser Abschnitt zeigt erste Schritte, sieheAbschnitt 40 für weitere Einzelheiten.

Die Funktion plot verfügt über viele grafi-sche Möglichkeiten; sie eine der grundlegen-den Grafikfunktionen in Matlab. Sind x undy zwei Vektoren der gleichen Länge, so öff-net der Befehl plot(x,y) ein Grafikfenster(Figure) und zeichnet die Elemente von x ge-gen die Elemente von y, das heißt er verbindetdie Punkte (x(i),y(i)) durch gerade Linien.Es entsteht ein Polygonzug. Der erste Vektorx bildet die Koordinaten entlang der x-Achseund der zweite Vektor y die Koordinaten ent-lang der y-Achse.

Die Anweisungen

1 >> k = 1; r = 0.6; y0 = 0.01;2 >> x = linspace(0,20);3 >> y = k./(1+(k/y0-1)*exp(-r*x));4 >> plot(x,y), grid,

zeichnen den Graf der logistischen Wachtums-tumsfunktion von 0 bis 20 mit den Parametern

k = 1 (Tragfähigkeit), r = 0.6 (Wachstumsra-te) und der Anfangsbedingung y0 = 0.01 (An-fangsbestand), siehe Abbildung 4. Die darin

0 5 10 15 200

0.2

0.4

0.6

0.8

1

Abbildung 4: Logistisches Wachstum

vorkommenden Rechenoperationen ./, * und/ werden in Abschnitt 36.3 erklärt.

2. Allgemeines

Matlab ist ein sehr leistungsfähiges Software-system für alle Arten von Berechnungen. DerName Matlab kommt von Matrix Laboratoryund verweist auf die zwei Überlegungen, diebei der Entwicklung eine Rolle gespielt ha-ben. Grundelemente sind Matrizen und ihreManipulation, die in numerischen Verfahrenoptimal eingesetzt werden können, gleichzei-tig verfolgt man über Laboratory den Gedan-ken der Entwicklung und Erweiterung. Matlabist ein interaktives Matrix-orientiertes Softwa-resystem, in dem sich Probleme und Lösun-gen in vertrauter mathematischer Schreibweisedarstellen lassen.

Mittlerweile gibt es außer Matrizen bzw. zwei-dimensionalen Feldern (Arrays) weitaus kom-

15 Copyright c© G. Gramlich

plexere Datenstrukturen. Alle Datenstrukturenlassen sich unter dem Oberbegriff des mehrdi-mensionalen Arrays einordnen. Aus Matlab istsozusagen nun ein Arrlab (Array Laboratory)geworden. Das numerische zweidimensionaleArray, also die klassische Matrix, ist in diesemKonzept nur noch ein Spezialfall, aber natür-lich ein sehr wichtiger.

Typische Anwendungen sind:

• Numerische Berechnungen aller Art.

• Entwicklung von Algorithmen.

• Modellierung, Simulation und Entwicklungvon Prototypen technischer und wirtschaft-licher Probleme.

• Analyse, Auswertung und grafische Darstel-lung von Datenmengen; Visualisierungen.

• Wissenschaftliche und technische Darstel-lungen.

• Applikationsentwicklung mit Aufbau einergrafischen 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 Eispack zurLösung algebraischer Eigenwertprobleme vor[27]. Im Jahr 1975 begannen die Arbeiten aneinem effizienten und portablen Softwarepaketzur Lösung linearer Gleichungssysteme. DasErgebnis war das Softwarepaket Linpack [2].Linpack und Eispack gewährleisteten langeZeit die zuverlässige und portable Lösung vonProblemen der Linearen Algebra. Um diesebeiden Pakete leichter handhabbar zu machen,wurde Matlab geschrieben. Damit bestandauch die Möglichkeit, ausgereifte Software

effizient in der Lehre – zunächst in der (Nume-rischen) Linearen Algebra, später und jetzt invielen anderen Bereichen – einzusetzen. ZurGeschichte von Matlab siehe http://www.mathworks.com/company/newsletters/news_notes/clevescorner/dec04.html.

Der Einsatz von Matlab lohnt sich. Nebenden sonst üblichen Lehrbuchbeispielen kön-nen kompliziertere und praxisbezogene Auf-gaben schon im Ausbildungsprozess bearbeitetwerden. Matlab erhöht die Leistungsfähigkeit,Probleme aus Wirtschaft, Technik und Naturzu lösen, und erhöht die Motivation sich mitMathematik zu beschäftigen.

Der Umfang von Matlab ist in den letzten Jah-ren stark angestiegen. Informationen über dieneuste Version und andere Hinweise finden Sieunter http://www.mathworks.de.

Die drei Hauptkomponenten von Matlab sind:

• Berechnung• Visualisierung• ProgrammierungBerechnung. Matlab verfügt über eine nume-rische – qualitativ hochwertige – Programm-sammlung. Dem Benutzer bleibt es dadurcherspart, Standardalgorithmen neu programmie-ren zu müssen. Er kann auf grundlegende,gut ausgetestete Programme zurückgreifen unddarauf aufbauend eigene Algorithmen realisie-ren.Visualisierung. Matlab verfügt über moderneVisualisierungsmöglichkeiten. Dadurch ist derBenutzer in der Lage, Daten auf verschiedeneArt und Weise darzustellen.Programmierung. Matlab verfügt über eineeigene höhere Programmiersprache. Der Be-

16 Copyright c© G. Gramlich

nutzer hat somit die Möglichkeit, die Funktio-nalität von Matlab durch eigene Programmebeliebig zu erweitern. Dies kann dadurch ge-schehen, dass er Matlab-Programme schreibt– sogenannte m-Files – oder C/C++, Fortranbzw. Java-Codes einbindet. Dadurch stellt Mat-lab ein offenes System dar.

Die grundlegenden Datenelemente von Mat-lab sind Matrizen bzw. mehrdimensionale Ar-rays (Felder), die nicht dimensioniert wer-den müssen. Dadurch lassen sich viele techni-sche Aufgabenstellungen, vor allem wenn siemit Matrizen oder Vektoren dargestellt werdenkönnen, mit einem Bruchteil des Zeitaufwan-des lösen, der für die Programmierung in einerskalaren, nicht interaktiven Sprache wie Fort-ran oder C/C++ erforderlich wäre.

Im Verlauf mehrerer Jahre und durch Beiträ-ge vieler Benutzer hat sich Matlab zu sei-nem heutigen Umfang entwickelt. In Hoch-schulen ist Matlab das bevorzugte Lehrmittelfür Grund- und Aufbaukurse in Mathematik,Ingenieurswissenschaften, Naturwissenschaf-ten und Wirtschaftswissenschaften. In der In-dustrie findet Matlab immer mehr Zuwachsin Forschung, Entwicklung, Datenauswertungund Visualisierungen aller Art. Folgende Punk-te tragen außerdem zum Erfolg von Matlabbei:Syntax. Matlab besitzt eine benutzerfreund-liche, intuitive Syntax, die kurz und einfachist. Sie lehnt sich stark an die mathemati-schen Schreibweisen an. Auch einen umge-kehrten Prozess kann man beobachten. Matlabnimmt Einfluß auf mathematische Beschrei-bungen, siehe zum Beispiel [3].Toolboxen. In Form von sogenannten Toolbo-

xen lässt sich der Funktionsumfang von Mat-lab auf vielen Gebieten erweitern. Unter an-derem stehen folgende Toolboxen zur Verfü-gung: Extended Symbolic Math Toolbox, Fi-nancial Toolbox, Image Processing Toolbox,Neural Network Toolbox, Optimization Tool-box, Partial Differential Equation Toolbox, Si-gnal Processing Toolbox, Spline Toolbox, Sta-tistics Toolbox und Wavelet Toolbox. Darüberhinaus stellt Matlab eine Schnittstelle zur nu-merischen Programmbibliothek Nag (http://www.nag.com) bereit.Matrizen. Grundlage von Matlab sind reel-le und komplexe (einschließlich dünn besetz-ter) Matrizen. Die Einführung einer Matrixals grundlegendes Datenelement hat sich nichtnur in der (numerischen) Mathematik, sondernauch in vielen anderen rechnerorientierten Be-reichen als sehr vorteilhaft herausgestellt.Symbolisches Rechnen. Durch die (Exten-ded) Symbolic Math Toolbox ist es innerhalbder Matlab-Umgebung möglich, symbolischzu rechnen. Dadurch kann der Benutzer sym-bolische und numerische Berechnungen mit-einander verknüpfen. In Abschnitt 66 wird die-se Toolbox genauer beschrieben.Prototyprealisierung. In der Praxis kommtes vor, dass man – aus den verschiedenstenGründen heraus – darauf angewiesen ist, Al-gorithmen in anderen Programmiersprachen,wie zum Beispiel C/C++, Fortran, Pascaloder Java, zu implementieren. Aber auch dannist es vorteilhaft, einen Prototyp des Verfah-rens in Matlab zu realisieren, da dies meistsehr schnell möglich ist, bevor man den Al-gorithmus überträgt bzw. automatisch übertra-gen lässt (Zum Beispiel mit Hilfe des MatlabC/C++ Compilers).

17 Copyright c© G. Gramlich

Handle Graphics (Grafiken bearbeiten).Das Matlab-Grafiksystem umfasst Hochspra-chenbefehle für die Darstellung von zwei- unddreidimensionalen Datenstrukturen, für dieBildverarbeitung, für Trickbewegungen undPräsentationsgrafiken. Hierzu gehören aucheinfache Befehle, mit denen sich Grafiken kun-denspezifisch gestalten oder auch vollständiggrafische Benutzerschnittstellen für eigene Ap-plikationen aufbauen lassen.Bibliothek von mathematischen Funktio-nen. Matlab verfügt über eine umfangreicheSammlung von mathematischen Algorithmenund Funktionen. Diese Funktionalität reichtvon elementaren Funktionen über Eigenwert-berechnungen bis hin zur schnellen Fourier-Transformation.Application Program Interface (API). DieseAnwenderschnittstelle ermöglicht die Erstel-lung von Programmen in C/C++ und Fortran,um sie dann in Matlab einzubinden.Simulink. Simulink – ein Partnerprogramm zuMatlab – ist ein blockorientiertes, interakti-ves System zur Simulation linearer und nicht-linearer dynamischer Systeme. Es handelt sichum ein mausgesteuertes Grafikprogramm, dasein Modell eines technischen, natürlichen oderwirtschaftlichen Systems, das als Blockdia-gramm (Blockschaltbild) auf dem Bildschirmdarzustellen ist, unter dynamischen Einwir-kungen nachbildet. Es kann für lineare, nicht-lineare, zeitkontinuierliche oder zeitdiskreteProzesse eingesetzt werden. Grundlage sindMatlab-Funktionen zur Lösung gewöhnlicherDifferenzialgleichungen (DGL-Löser, ODE-Löser).Blocksets sind Ergänzungen zu Simulink, dieweitere Bausteinbibliotheken für Spezialan-

wendungen bereitstellen.Stateflow ist eine Erweiterung von Simulinkzur Simulation ereignisorientierter Model-le (Endliche Zustandsautomaten, Finite StateMachines).Real-time Workshop ist ein Programm, mitdem sich aus den Blockdiagrammen ein C-Code bilden lässt, der von einer Vielzahl vonEchtzeitsystemen abgearbeitet werden kann.

Wir verwenden den Begriff Funkti-on im Folgenden doppeldeutig. ZumEinen sind mathematische Funktio-nen gemeint und zum Anderen han-delt es sich um Matlab-Funktionen,also um Unterprogramme. Aus demZusammenhang sollte aber immerklar sein, um welchen Typ Funktiones sich handelt.

3. Was macht den Erfolg vonMatlab aus?

Matlab hat gegenüber der traditionellen nu-merischen Programmierung (wie zum Beispielmit FORTRAN, C/C++ oder dem Aufruf vonnumerischen Bibliotheken) folgende Vorteile:

• Matlab verfügt über eine benutzerfreundli-che und intuitive Syntax; die Syntax ist kurzund einfach.

• Die numerischen Programme zeichnen sichdurch eine hohe Qualität aus.

• In einer eingebauten höheren Programmier-sprache lassen sich Algorithmen schnell undleicht realisieren.

• Datenstrukturen erfordern minimale Auf-

18 Copyright c© G. Gramlich

merksamkeit; zum Beispiel müssen Arraysnicht deklariert werrden, bevor man sie be-nutzt.

• Ein interaktives Arbeiten erlaubt schnellesexperimentieren und leichte Fehlersuche.

• Matlab verfügt über mächtige, benut-zerfreundliche und qualitativ hochwärtigeGrafik- und Visualisierungsmöglichkeiten.

• Matlab m-Files sind für eine große Klassevon Plattformen kompatibel.

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

• Über das Internet sind viele m-Files von an-deren Benutzern zu bekommen.

Wir geben hier nur eine Einführung in dieMächtigkeit von Matlab. Für ausführliche-re Darstellungen bezüglich Matlab und Ma-thematik (numerisch und symbolisch) ver-weise ich Sie auf unser Buch [6] bzw. auf[8] und [24] und natürlich auf die Matlab-Dokumentationen [14, 15, 16, 17, 18].

4. Starten und beenden

Bei vielen kommandoorientierten Rechnersys-temen wird Matlab durch das Kommandomatlab gestartet. Oder – bei grafischen Ober-flächen – klickt man nach dem Start auf einentsprechendes Matlab-Icon. Bei manchen In-stallationen ist es auch möglich, dass Sie Mat-lab aus einem Menü heraus aufrufen können.In jedem Fall sollten Sie den Matlab-Prompt »sehen (bzw. EDU»). Mit dem Kommando quit(exit) verlassen Sie Matlab. Weitere Hinwei-

se finden Sie in den Matlab-Handbüchern. Ge-gebenenfalls müssen Sie Ihren Systemmanagernach lokalen Installationseigenschaften befra-gen.

5. Die Arbeitsoberfläche

Wir geben eine Übersicht über die Matlab Ar-beitsoberfläche (Desktop) und ihrer einzelnenElemente: den Help Browser, Arrayeditor undEditor/Debugger.

Nach dem Start öffnet sich die Matlab Ar-beitsoberfläche, die auch als Desktop be-zeichnet wird, siehe Abbildung 5. Die Ar-

Abbildung 5: Die Arbeitsoberfläche

beitsoberfläche von Matlab besteht aus demCommand Window zur Befehlseingabe, demCurrent Directory mit dem Inhlatsverzeich-nis, dem Workspace mit den Variablen desSpeicherbereiches des Command Windows,der Command History, verschiedener Menü-zeilen sowie dem Start Button. Die einzel-nen Komponenten können in ihrer Positionie-rung und Größe mit der Maus verändert unddurch Festhalten der Namensliste mit der lin-

19 Copyright c© G. Gramlich

ken Maustaste umgruppiert werden. Mit derDock-Eigenschaft lassen sich die einzelnenKomponenten abkoppeln und in unabhängi-ge Fenster wandeln. Figure Windows, Editor/-Debugger und Arrayeditor lassen sich an dasCommand Window ankoppeln und so ein grö-ßeres Dokument erzeugen. Dabei bestehen un-terschiedliche Möglichkeiten der Anordnung,beispielsweise nebeneinander oder hinterein-ander. Probieren Sie es aus! Für häufig sichwiederholende Aufgaben lassen sich eigeneShortcuts definieren und in die Liste der Short-cuts einfügen.

Der Start Button erlaubt den direkten Zugriffauf unterschiedliche Funktionalitäten, nichtnur unter Matlab, sondern auch auf Funk-tionalitäten von Toolboxen, Simulink, State-flow und Blocksets. Hier befindet sich auchein einfacher Zugang zu den erwähnten Short-cuts oder interessanten Matlab Seiten, Hilfe-seiten und Demos, um nur eine kleine Auswahlzu nennen.

5.1. Das Command Window

Das Command Window dient dem Aufruf vonMatlab Befehlen, Erzeugen von Variablen unddem Anzeigen von Ergebnissen. Die Eingabeerfolgt hinter dem Matlab Prompt

1 >>

Befehle können auch abgekürzt werden undmit der Tab-Taste ergänzt werden. Zu früherenEingaben kann mit den Kursortasten zurückge-blättert werden. Erzeugte Variablen werden imWorkspace Window aufgelistet, Befehle in derKommando History.

5.2. Command History

Im Command History werden die eingegebe-ne Befehle zur Wiederverwendung nach demDatum geordnet abgespeichert. Durch Dop-pelklick können diese Befehle direkt ausge-führt werden und mit der linken Maustaste indas Command Window zur erneuten Bearbei-tung verschoben wrden. Die linke Maustastegeneinsam mit der Sift- oder Steuerungstasteerlaubt die Auswahl von Gruppen der im His-tory Window gespeicherten Kommandos. Mitder rechten Maustaste öffnet sich ein Fenster,das das Kopieren der ausgewählten Befehle,das direkte Erzeugen von m-Files und Short-cuts oder das Löschen aus der Command His-tory erlaubt.

5.3. Der Workspace Browser

Der Workspace Browser zeigt die aktuellen Va-riablen des Base-Speicherbereichs (CommandWindow) oder beim Debuggen die des zugehö-rigen Funktionsspeicheraumes an. Die Varia-blen sind alphabetisch geordnet, können aberauch durch Anklicken der Spaltenüberschrif-ten nach den damit verküpften Eigenschaftenumgeordnet werden.

Die Menüleiste des Workspace Browser bie-tet mit dem Plot-Zeichen einen bequemen Zu-gang zu grafisch gesteuertem Plotten einer odermehrerer Variablen.

Ist der Workspace Browser im Vordergrund,weist die Desktop-Menüleiste zusätzlich dasMenü Graphics auf. Wählt man dort PlotTools, so öffnet sich die Figure-Umgebung mitFigure Palette, Plot Browser, Property Editor

20 Copyright c© G. Gramlich

und Figure Toolbar. Unter der Figure Palettesind alle Variablen des Workspace aufgelistetund können damit auch direkt geplottet wer-den.

Der Workspace Browser stellt eine grafischeDarstellung des whos Kommandos dar. Mitdem Befehl who kann man herausfinden, wel-che Variablen momentan im Workspace ge-speichert sind. Um Daten zu sichern kann mandie Funktion save verwenden. Mit load kannman gespeicherte Daten in den Workspace la-den. Die Tabelle 1 zeigt weitere Funktionenzum Verwalten des Workspace.

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

Tabelle 1: Workspace verwalten

Aufgabe 1 (Workspace verwalten) Angenom-men Sie möchten die Variablen a und b ausdem Workspace löschen. Wie geht das?Lösung: Dies können Sie mit clear a undclear b tun. Falls Sie sich Tipparbeit sparenwollen, geben Sie clear a b ein. Hilfe erha-len Sie mit doc clear (help clear). © . . .©

Aufgabe 2 (Workspace verwalten) SchreibenSie einen Datenfile mit dem Namen data.in,der die folgenden Daten enthält:

1 1.0 5.02 2.1 6.33 3.2 6.9

4 3.9 8.15 5.1 9.1

Erzeugen Sie im Matlab Workspace eine Ma-trix A mit diesen Daten. Ändern Sie die zwei-te Zeile von A zu 2.0 und 6.2 und schreibenSie die modifizierte Matrix A in einen ASCII-Datenfile mit dem Namen data.out.Lösung: Das Einlesen erfolgt mittels

1 >> A = load(’data.in’);

Die Manipulation der Matrix A erfolgt durch

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

und das Schreiben in eine Datei mit Namendata.out erfolgt mit

1 >> fprintf(’data.out’,’%1.1f %1.1f\n’,A’)

oder alternativ mit

1 >> save data.out A -ASCII

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

5.4. Current Directory

Der Current Directory Browser hat gegenüberden Vorgängerversionen an Funktionalität hin-zugewonnen und geht weit über das reine Auf-listen der Dateien des aktuellen Verzeichnisseshinaus. Durch Anwählen kann direkt in Unter-verzeichnisse gesprungen werden.

Unter View kann eine Auswahl der aufgeliste-ten Files nach ihrer Filekennung erfolgen. Fileswerden durch Doppelklicken ausgeführt. Dahheißt beispielsweise zu m-Files oder Textfiles

21 Copyright c© G. Gramlich

öffnet sich der Editor, fig-Files werden darge-stellt, bei mat-Files werden die Daten geladenund HTML-Files im Web Browser dargestellt.

Das Menü Find Files (Fernglassymbol) öffneteine grafische Umgebung zum Suchen anchDateien oder Begriffen in Dateien.

Mit filebrowser wird der Current Directo-ry Browser aus dem Command Window herausaktiviert.

6. Der Help Browser

Matlab verfügt über ein sehr umfangreichesHilfe- und Dokumentationsfenster, den HelpBrowser, siehe Abbildung 6. Der Help Brow-

Abbildung 6: Der Help Browser

ser kann aus dem Desktop entweder unter demMenüpunkt Help oder über das ?-Symbol odermit dem Befehl doc geöffnet werden. Der HelpBrowser besteht aus dem Navigator und auf derrechten Seite aus dem eigentlichen Hilfetext.Im Navigator stehen die Kartenreiter Contents,Index, Search und Demos zur Auswahl. DasDocksymbol erlaubt wieder das Anbinden andas Desktop-Fenster.

Unter Contents verbirgt sich eine vollständigeDokumentation aller installierten Produkte be-stehend aus den User Guides. Zu den User Gui-des gehört auch eine vollständige Funktions-übersicht der einzelnen Matlab Funktionen/-Kommandos, die stets aus einer Übersicht dererlaubte Syntax, aus einer ausführlichen Be-schreibung, gegebenenfalls ergänzenden Hin-weisen, einem Beispielteil und einem Verweisauf verwandte Matlab Funktionen/Komman-dos sowie in einigen Fällen ergänzende Li-teraturangaben besteht. Unter Contens findetsich auch das Kapitel Printable Dokumentati-on, das direkt auf die MathWorks Internetseitemit den pdf-Dokumenten verweist.

Der Kartenreiter Index stellt ein alphabetischgeordnetes Register zur Verfügung und Searchein Suchfenster. Die Treffer werden im Na-vigatorteil aufgelistet und durch anklicken imrechten Textfenster dargestellt. Dabei wirdunter allen installierten Produkten gesucht.Soll die Suche auf betsimmte Toolboxen oderBlocksets eingeschränkt werden, so kann unterden Preferences im Menü File ein Produktfiltergenutzt werden.

Unter Demos werden Beispiele zu verschiede-nen Funktionalitäten bereit gehalten.

7. Der Array Editor

Der Array Editor dient dem Visualisierenund interaktiven Editieren von Workspace-Variablen und wird durch Klicken auf dieVariable im Workspace geöffnet, siehe Ab-bildung 7. Alternativ kann der Array Editormittels openvar(’VarName’) aus dem Com-

22 Copyright c© G. Gramlich

Abbildung 7: Der Array Editor

mand Window geöffnet werden. VarName istder Name der Variablen. Im Gegensatz zu äl-teren Versionen lassen sich ab dem Relea-se 7 auch Zellen- und Strukturvariablen (sie-he Abschnitt 74) im Array Editor bearbeiten.Der Array Editor lässt sich wie bereits er-wähnt am Matlab Desktop andocken. Spaltenim Editor lassen sich kopieren, löschen und tei-len. Excel-Daten lassen sich unter Windows-Betriebssystemen mit Copy und Paste in denArray Editor kopieren. Das Plot-Symbol er-laubt grafisch unterstützt das Plotten von Da-ten, dabei steht ein umfangreicher Auswahlka-talog mit Linienplots, Histogrammen, Höhen-linienplots, 3D-Grafiken usw. zur Verfügung.Neue Variablen lassen sich mausgesteuert ausbestehenden Daten erzeigen.

8. Der Editor/Debugger

Der Matlab Editor und Debugger, siehe Ab-bildung 8 dient dem Schreiben von MatlabScripts und Functions sowie dem grafische De-buggen. Der Editor hebt dabei Matlab Schlüs-

Abbildung 8: Der Editor/Debugger

selwörter oder Kommentare in unterschiedli-chen Farben hervor, erkennt aber auch andereFormate wie beispielsweise HTML. Aufgeru-fen wird der Editor entweder mit

1 >> editor Fname

zum Editieren des Files Fname oder aus demDesktop unter File→ New→m-file oder durchKlicken auf eine Datei im Current DirectoryBrowser.

Unter dem Menüpunkt Edit des Editors befin-det sich ein Search and Replace-Fenster, mitdem Begriffe im lokalen File oder auch außer-halb gesucht und gegebenenfalls durch einenneuen Begriff ersetzt werden können.

Bei der Entwicklung eines Programms tretenprinzipiell zwei Fehlerarten auf: Syntax- undLaufzeitfehler. Syntaxfehler sind meist leichtzu beheben. Laufzeitfehler treten bei einem

23 Copyright c© G. Gramlich

syntaktisch korrekten Programm während derAusführung auf und zeigen sich entweder ineinem Programmabsturz oder in offensichtlichfalschen Resultaten. In solchen Fällen kannes notwendig sein, sich den Ablauf des Pro-gramms während der Ausführung genauer an-zusehen. Diese Aufgabe übernimmt ein soge-nannter Debugger, ein Programm, mit dem an-dere Programme während der Ausführung anbestimmten Stellen, so genannte Breakpoints,unterbrochen und untersucht werden können.Mit Hilfe der Menüeinträge unter Debug oderdurch Klick auf das Icon mit dem roten Punktkönnen Breakpoints gesetzt oder gelöscht wer-den. Der Debugger kennt verschiedene Ar-ten von Berakpoints, von denen wir auf denStandard-Breakpoint kurz eingehen wollen.

Ein Standard-Breakpoint wird durch einen ro-ten Punkt im Quelltext angezeigt. Er wird indie Zeile gesetzt, in der der Cursor steht. Beider Ausführung des Programms erfolgt dannein automatischer Wechsel in den Editor unddas Programm wird an der Stelle des Break-points angehalten. Die bis dahin belegten Va-riablenwerte können anschließend bequem be-trachtet werden, indem man mit dem Mauszei-ger auf die jeweilige Variable zeigt. Die Wer-te werden in einem automatisch ausgeklapp-ten Fenster angezeigt (wenn in den Preferenceseingestellt). Alternativ können die Variablenauch im Command Window oder mit Hilfe desKontext-Menüs der reechten Maustaste im Ar-ray Editor angezeigt werden. Die Variablen-werte können allerdings nicht nur angezeigtwerden. Darüber hinaus ist es möglich, dieWerte zur Programmlaufzeit zu verändern, waszu Testzwecken sehr nützlich ist.

Meine Empfehlung ist es, sich mit dem Debug-ger vetraut zu machen, insbesondere wenn mangrößere Programme entwickeln will.

Neben dem Debugger gibt es noch weitereWerkzeuge, die die Programmentwicklung un-terstützen, den Code-Check mit M-Lint undden Profiler. Mit dem Profiler sind umfang-reiche Laufzeitanalysen möglich, die sicher-lich nur dem fortgeschrittenen Anwender vonNutzen sind. Mit dem M-Lint Programm (imMenü Tools) kann ein Bericht erstellt werden,in dem der Programmierer zum Beispiel übernicht verwendete Variablen, syntaktische Feh-ler oder sonstige Ungereimtheiten im Code in-formiert wird. Dies ist auch für den Anfängernützlich.

9. Plots

Bilder (Images) oder Abbildungen werden imFigure Window dargestellt. Neben seiner Auf-gabe, die Ebene für die grafische Darstellungbereitzustellen, bietet das Figure Window nochweitere Eigenschaften. Unter File besteht dieMöglichkeit mit Generate m-File das grafischeLayout in einem m-File abzuspeichern undso bei zukünftigen vergleichbaren Aufgabenauf ein vorgefertigtes Plotlayout in Form ei-ner Matlab Funktion zuzugreifen. Unter Viewwird als wichtigestes Instrument der Proper-ty Editor aufgerufen, mit dem interaktiv Ei-genschaften der Grafik verändert und sämtli-che Eigenschaften mit dem Property Inspectorangesprochen werden können. Insert erlaubtdas interaktive Einfügen von zum Beispiel Le-gende und Farbbalken. Unter Tools finden sich

24 Copyright c© G. Gramlich

Eigenschaften wie Pan zum interaktiven Ver-schieben von Plotlinien und insbesondere auchdas Basic Fitting und Data Statistic Tool.

10. Der Import Wizard

Der Import Wizard (Zauberer) lässt sich überden Befehl uiimport, durch Doppelklickenauf einen Datenfile im Current Directory Win-dow oder über File → Import Data öffnen.In diesem Fall wird über einen File Browserder entsprechende Datenfile ausgewählt. DerImport Wizard erlaubt das interaktive Einle-sen von Ascii-Files, binären mat-Dateien, Ex-cel-Files, wav-Dateien, Bilddateien oder Hdf-Daten, um nur Einige zu nennen. Bei forma-tierten Daten kann ein geeigneter Spaltensepa-rator angeklickt werden, und, falls dies nichtautomatisch erkannt wird, die Zahl der Kopf-zeilen vorgegeben werden. Numerische Da-ten werden dann als Array, Textdaten wie bei-spielsweise Spaltenüberschriften als Zellenva-riablen abgespeichert.

11. Matlab unterbrechen

Mit ctrl-c können Sie Matlab jederzeit un-terbrechen.

12. Lange Eingabezeilen

Ist Ihre Eingabezeile lang, so können Sie die-se mit drei Punkten beenden ... und in dernächste Zeile fortfahren.

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

2 1/7+1/8+1/9+1/103 s =4 2.9290

13. Eine Sitzung aufzeichnen

Das Kommando

1 >> diary MeineSitzung

sorgt dafür, dass der folgende Bildschirm-text komplett in der Datei MeineSitzungaufgezeichnet wird. Die Aufzeichung könnenSie anhalten, wenn Sie diary off einge-ben. MeineSitzung ist nur eine Beispieldatei;sie können selbstverständlich jeden zulässigenDateinamen angeben.

14. Das help-Kommando

Das help-Kommando ist eine einfache Mög-lichkeit, Hilfe über eine Matlab-Funktion imCommand Window zu erhalten. Hierzu gibtman help und den Funktionsnamen, das Kom-mando oder das Symbol ein.

Das folgende Beispiel zeigt, wie man sichInformationen über die eingebaute Matlab-Funktion sqrt verschafft.

1 >> help sqrt2

3 SQRT Square root.4 SQRT(X) is the square ...

Auffallend ist, dass in der Erklärung der Nameder sqrt-Funktion groß geschrieben ist. Dies

25 Copyright c© G. Gramlich

dient lediglich dazu, diesen Namen vom üb-rigen Text abzusetzen. Der richtige Name istsqrt, klein geschrieben. Matlab unterscheidetzwischen Groß- und Kleinbuchstaben, deshalbliefert die Eingabe help SQRT eine Fehlermel-dung.

1 SQRT.m not found.

Matlab-eigene Funktionsnamen be-stehen stets aus Kleinbuchstaben.Nur im Hilfetext werden sie groß ge-schrieben.

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

Alle Matlab-Funktionen sind in logischeGruppen (Themen) eingeteilt, und die Matlab-Verzeichnisstruktur basiert auf dieser Eintei-lung. Gibt man help alleine ein, so wird dieseGruppierung angezeigt.

1 >> help2 HELP topics3

4 matlab\general - General ...5 matlab\ops - Operators ...6 matlab\lang - Programming ...7 matlab\elmat - Elementary ...8 usw.

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

15. Das doc-Kommando

Eine konfortablere Hilfe erhalten Sie mit demdoc-Kommando. Beispielsweise erhalten Siemit doc sin eine HTML-Dokumentation überdie sin-Funktion. Mit doc elfun bekommenSie eine Liste aller elementaren mathemati-schen Funktionen, die in Matlab realisiertsind.

16. Demos

Durch den Aufruf

1 >> demo

wird das Hilfe-Fenster geöffnet und Sie kön-nen sich Demos über Matlab und seine Tool-boxen anschauen. Dort finden Sie in Form vonVideo-Tutorials die neuen Features der neus-ten Matlab-Version. Weitere Info erhalten Siemit doc demo (help demo) oder doc demos(help demos).

17. Das lookfor-Kommando

Basierend auf einem Schlüsselwort können Siemit dem lookfor-Kommando nach Funktio-nen suchen. Dabei wird die erste Zeile deshelp-Textes jeder Matlab-Funktion zurück-gegeben, die das entsprechende Schlüsselwortenthält. Zum Beispiel gibt es in Matlab keineFunktion mit dem Namen inverse. Somit istdie Antwort auf

1 >> help inverse

folgende:

26 Copyright c© G. Gramlich

1 inverse.m not found.

Aber der Aufruf

1 >> lookfor inverse

liefert – in Abhängigkeit der installierten Tool-boxen – folgendes:

1 INVHILB Inverse Hilbert matrix.2 IPERMUTE Inverse permute array ...3 ACOS Inverse cosine.4 ACOSH Inverse hyperbolic cosine.5 ACOT Inverse cotangent.6 ACOTH Inverse hyperbolic ...7 ACSC Inverse cosecant.8 ACSCH Inverse hyperbolic cosecant.9 ASEC Inverse secant.

10 ASECH Inverse hyperbolic secant.11 ASIN Inverse sine.12 ASINH Inverse hyperbolic sine.13 ATAN Inverse tangent.14 ATAN2 Four quadrant inverse ...15 ATANH Inverse hyperbolic tangent.16 ERFCINV Inverse complementary ...17 ERFINV Inverse error function.18 INV Matrix inverse.19 PINV Pseudoinverse.20 IFFT Inverse discrete Fourier21 transform.22 usw...

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

1 >> lookfor inverse -all

Falls Sie Hilfe zu einem Begriff suchen undden entsprechenden englischen Ausdruck nichtkennen, verwenden Sie ein Wörterbuch. Aufmeiner Homepage finden Sie einen Link zu

einem Mathematischen Wörterbuch, das Ih-nen weiterhelfen kann, siehe http://www.hs-ulm.de/gramlich.

Aufgabe 3 (lookfor-Kommando) Mit wel-chem Befehl wird das Command Window(Kommandofenster) gelöscht?Lösung: Mit dem Aufruf

1 >> lookfor command

finden Sie das Kommando clc. Damit wird dasKommandofenster gelöscht, nicht jedoch derWorkspace. © . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

18. Alle Funktionen?

Alle Matlab-Funktionen finden Sie im HelpBrowser. Geben Sie doc ein, dann findenSie unter Help Navigator Contents Matlab inFunction – Alphabetical List eine alphabeti-sche Auflistung aller Matlab-Funktionen undin Functions – Categorial List alle Funktionenin Gruppen eingeteilt.

19. Wichtige Funktionen?

Wichtige und häufig vorkommende Funktio-nen habe ich Ihnen im Anhang B abgedruckt.

20. Der Path Browser

Matlab ermittelt die Art, in der die aufgerufe-nen Funktionen auszuführen sind, über einenSuchpfad, das ist eine geordnete Liste von Ver-zeichnissen. Mit dem Kommando path erhält

27 Copyright c© G. Gramlich

man die aktuelle Liste von Verzeichnissen, indenen Matlab sucht. Dieser Befehl kann auchdazu verwendet werden, um Verzeichnisse ausdem Suchpfad zu löschen oder anzuhängen.Mit dem Path Browser (siehe Abbildung 9)kann der Pfad bequem geändert oder ausgege-

Abbildung 9: Der PathBrowser

ben werden. Falls Sie ein Windows Betriebs-system verwenden, so können Sie den PathBrowser über die Schaltfläche des CommandWindows, über Set Path im Menü File oderüber das Kommando pathtool öffnen.

21. Den Datenträger verwalten

Die Funktionen aus der Tabelle 2 zeigen Mög-lichkeiten, wie man den Datenträger verwaltenkann.

22. Wie man weitereSysteminformationen erhält

Die Tabelle 3 zeigt Matlab-Funktionen, die

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 2: Den Datenträger verwalten

Funktion Beschreibungcomputer Typ des Rechnershostid Identifikationsnummerlicense Lizenznummer

Tabelle 3: Systeminformationen

man verwenden kann, um Informationen überden eigenen Computer zu erhalten.

23. Neuigkeiten und Versionen

Weitere Informationen und Demonstrationenzu Matlab finden Sie in Tabelle 4.

Funktion Beschreibungbench Benchmarksver Versionenversion Versionsnummerwhatsnew Release Notes

Tabelle 4: Weitere Infos

28 Copyright c© G. Gramlich

24. Voreinstellungen

Es gibt mehrere m-Files, die die Voreinstel-lungen von Matlab festlegen und beim Startausgeführt werden. Diese Files befinden sichim Unterverzeichnis local im Verzeichnistoolbox. Der File Contents enthält eineÜbersicht.

Zur Startzeit führt Matlab automatisch den Fi-le matlabrc aus. Dieser File setzt die MatlabPfade, legt die Default-Größe der Figures festund setzt einige weitere Standardeinstellungen.Veränderungen sollten bei Bedarf nicht in die-ser Datei, sondern im startup File durchge-führt werden. Dieser ist dafür gedacht, dass Siedort eigene Funktionen und Kommandos defi-nieren, die zur Startzeit ausgeführt werden sol-len.

25. Einfaches Rechnen

Addition +, Subtraktion -, Multiplikation *,Division / und Potenzieren ˆ sind grundlegen-de Rechenoperationen. Hier ein paar Beispiele:

1 >> 3+42 ans =3 74 >> 9/35 ans =6 37 >> 2^88 ans =9 256

Matlab nennt das Ergebnis ans (kurz für ans-wer).

Geben Sie dem Ergebnis keinen Va-

riablennamen (siehe Abschnitt 28),so wählt Matlab standardmäßig(default) den Variablennamen ans.

Schließen Sie die Eingabezeile mit einemStrichpunkt (Semikolon) ab, so rechnet Mat-lab zwar, unterdrückt aber die Ausgabe:

1 >> 1+2;

Im Workspace können Sie erkennen, dass Mat-lab die Variable ans angelegt hat, den Wert derVariablen ans jedoch nicht ausgibt.

Ein Semikolon am Ende der Eingabeunterdrückt die Bildschirmausgabe!

Aufgabe 4 (Einfaches Rechnen) Was ist 00 inMatlab?Lösung: Es ist 00 = 1 in Matlab. © . . . . . . . ©

26. Welche arithmetischeOperation hat Vorang?

Die arithmetischen Operationen von Matlabgenügen den gleichen Vorrangsregeln wie invielen Computersprachen und Taschenrech-nern. Grob gesprochen gelten die üblichenRechenregeln „Punktrechnung vor Strichrech-nung“. Die Regeln sind in Tabelle 5 aufge-zeigt (Eine komplette Tabelle für alle Matlab-Operationen zeigt die Tabelle 6). Für Operato-ren, die auf einer Ebene stehen, ist der Vorrangvon links nach rechts geregelt. Klammern kön-nen immer verwendet werden, um den Vorrangentsprechend abzuändern.

1 >> 2^10/102 ans =3 102.4000

29 Copyright c© G. Gramlich

4 >> 2+3*45 ans =6 147 >> -2-3*48 ans =9 -14

10 >> 1+2/3*411 ans =12 3.666713 >> 1+2/(3*4)14 ans =15 1.1667

Aufgabe 5 (Rechnen) Ermitteln Sie das Ergeb-nis von

1 >> 3+4/5*6

zunächst mit Bleistift und Papier und überprü-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:

1 >> 3+4/5*62 ans =3 7.8000

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

Aufgabe 6 (Rechnen) Ermitteln Sie das Ergeb-nis von

1 >> 48/3-3^2

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

1 >> 48/3-3^22 ans =

3 7

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

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

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

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

Subtraktion (-)

Tabelle 5: Vorrang-Tabelle

27. Zahlen und Formate

Matlab verarbeitet Zahlen in der üblichen De-zimalschreibweise, wobei wahlweise ein Dezi-malpunkt und ein positives oder negatives Vor-zeichen verwendet werden können. In der wis-senschaftlichen Notation bezeichnet der Buch-stabe e eine Skalierung um Zehnerpotenzen.Zulässige Zahlen sind zum Beispiel:

1 4 101 0.00012 9.84757 1.5e-12 8.9973 3i -3.4j 4e3i

Alle Zahlen werden intern im double-Format(Langformat) gemäß der Spezifikation durchdie Gleitpunktnorm der Ieee abgespeichert.Matlabs Zahlenausgabe folgt mehreren Re-geln. Ist das Ergebnis ganzzahlig, so wird ei-ne ganze Zahl ausgegeben. Wenn das Ergebniseine reelle Zahl ist, dann gibt Matlab das Re-sultat standardmäßig auf 4 Dezimalen gerun-det aus. Ist das Matrixelement größer als 103

30 Copyright c© G. Gramlich

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 6: Vorrang-Tabelle

oder kleiner als 10−3, so wird es in exponenti-eller Form auf dem Bildschirm dargestellt. Sol-len Zahlen in einem anderen Format ausgege-ben werden, so hilft das Matlab-Kommandoformat, siehe doc format (help format).Die Tabelle 7 gibt mögliche numerische Zah-lenformate an.

Kommando Beispiel: piformat short 3.1416format long 3.14159265358979format bank 3.14

Tabelle 7: Zahlenausgabe in Matlab

28. Variablen und Konstanten

Ein Variablenamen muss mit einem Buch-staben beginnen und darf aus maximal 63Buchstaben, Zahlen und Unterstrichen beste-hen (Bis Release 6.1 lag der Wert noch bei 31).namelengthmax liefert die maximale Länge(63 Zeichen), die zur Unterscheidung einesNamens (Variablen, Dateien, usw.) erlaubt ist,zurück.

1 >> namelengthmax2 ans =3 63

Umlaute sind nicht erlaubt! Erlaubt sind zumBeispiel

1 MeineVariable Anna x1 X32 z23c1 My_Var

Nicht erlaubt sind

1 Meine-Variable 2Var \$2 &x

31 Copyright c© G. Gramlich

Mit der Funktion isvarname können Sie dieGültigkeit eines Variablenamens überprüfen.

1 >> isvarname(’My_Var’)2 ans =3 14 >> isvarname(’2Var’)5 ans =6 0

1 (wahr) wird zurückgegeben, falls ein gültigerVariablenname vorliegt, ansonsten 0 (falsch).Für weitere Infos, siehe auch Abschnitt 46.

Aufgabe 7 (Variablennamen) Wieviel ver-schiedene Matlab Variablenamen stehen infolgender Zeile?

1 anna ANNA anNa aNna_anna

Lösung: Vier verschiedene Variablennamen.© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Achten Sie in Matlab unbedingt aufGroß-und Kleinschreibung!

Darüber hinaus gibt es vordefinierte (vorbeleg-te) Variablen, siehe Tabelle 8. Achtung! Sie

Spezielle Variable Bedeutungans Resultat (Default)computer Identifizierteps Maschinengenauigkeiti Imaginäre EinheitInf, inf Infinityj Imaginäre EinheitNaN Not-a-Numberpi Kreiszahl π ≈ 3.14

Tabelle 8: Spezielle Variablen

können diese spezielle Variablen überschrei-

ben; vermeiden Sie dies aber, wenn immermöglich.

Vermeiden Sie das Überschreibenspezieller Variablen!

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

29. Komplexe Zahlen

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

1 >> z1 = 3+4*j, z2 = 1-3i2 z1 =3 3.0000 + 4.0000i4 z2 =5 1.0000 - 3.0000i

Wie Sie sehen kann die imaginäre Zahl i miti2 = −1 als i oder j eingegeben werden, wobeidas Multiplikationszeichen * wahlweise ver-wendet werden kann. Die Operatoren +, -, *und / sind bei Verwendung komplexer Zahlendie komplexe Addition, komplexe Subtraktion,komplexe Multiplikation und die komplexe Di-vision. Hier zwei Beispiele:

1 >> z1+z22 ans =3 4.0000 + 1.0000i4 >> z1*z25 ans =6 15.0000 - 5.0000i

Die Wurzel der komplexen Zahl 1 + 2i berech-net man mit der Funktion sqrt

1 >> sqrt(1+2i)2 ans =3 1.2720 + 0.7862i

32 Copyright c© G. Gramlich

Die konjugiert komplexe Zahl zu 1 + 3i ist

1 >> conj(1+3i)2 ans =3 1.0000 - 3.0000i

Den Absolutbetrag und Phasenwinkel einerkomplexen Zahl z kann mit abs bzw angle be-rechnet werden. Weitere Funktionen, die beimRechnen mit komplexen Zahlen von Bedeu-tung sein können, siehe doc elfun.

Aufgabe 8 (Komplexe Zahlen) Gegeben ist diekomplexe Zahl z = 4i/(1 + i). Wie lautet diezu z konjugiert komplexe Zahl? Wie groß sindAbsolutbetrag und Phasenwinkel von z?Lösung:

1 >> z = 4i/(1+i);2 >> conj(z)3 ans =4 2.0000 - 2.0000i5 >> phi = angle(z)*180/pi6 phi =7 458 >> a = abs(z)9 a =

10 2.8284

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

Aufgabe 9 (Komplexe Zahlen) Finden Sie her-aus, wie man den Real- und Imaginärteil ei-ner komplexen Zahl berechnet. Berechnen Siedann den Real- und Imaginärteil von z = (3 +2i)/(1 − i).Lösung: Mit lookfor complex findet mandie Funktionen real und imag. Damit gilt

1 >> z = (3+2i)/(1-i);2 >> real(z), imag(z)3 ans =4 0.5000

5 ans =6 2.5000

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

30. Ieee-Arithmetik und double

Standardmäßig ist in Matlab ist der IEEE-Standard 754 mit doppelt genauer Gleitpunkta-rithmetik realisiert. So wird jede Zahl default-mäßig in den Datentyp double konvertiert. Je-de Zahl vom Datentyp double belegt einenSpeicherplatz von 64 Bits. Von Null verschie-dene positive Zahlen liegen daher ungefährzwischen 10−308 und 10+308 und die relativeRechengenauigkeit (unit roundoff) ist 2−53 ≈

1.11 · 10−16. Das wesentliche Merkmal der re-lativen Rechengenauigkeit ist, dass sie eine re-lative Fehlerschranke für das Konvertieren ei-ner reellen Zahl in eine Gleitpunktdarstellungund auch eine Schranke für den relativen Feh-ler darstellt, der entsteht, wenn man zwei Gleit-punktzahlen addiert, subtrahiert, multipliziertoder dividiert, oder die Quadratwurzel aus ei-ner Gleitpunktzahl zieht. Grob gesagt: Matlabspeichert und führt elementare Rechenopera-tionen mit einer Genauigkeit von ungefähr 16Dezimalstellen durch.

Die Funktion eps (machine precision) gibt denAbstand von 1.0 zur nächst größeren Gleit-punktzahl zurück.

1 >> eps2 ans =3 2.2204e-016

Dieser Abstand ist 2−52, also zweimal der re-lativen Rechengenauigkeit. Da Matlab den Ie-

33 Copyright c© G. Gramlich

ee-Standard realisiert, erzeugt jede Rechnungeine Gleitpunktzahl, womöglich aber in einembesonderen Format. Ist das Ergebnis einer Be-rechnung größer als realmax, dann tritt einOverflow ein und das Resultat ist Inf, was fürunendlich (infinity) steht. Ist das Resultat klei-ner als -realmin, so kommt -inf heraus.

1 >> realmax2 ans =3 1.7977e+3084 >> -1.1*realmax5 ans =6 -Inf7 >> 1.2*realmax8 ans =9 Inf

Ist eine Rechnung mathematisch nicht defi-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.

1 >> 0/02 Warning: Divide by zero.3 ans =4 NaN5 >> inf/inf6 ans =7 NaN8 >> 0*inf9 ans =

10 NaN

Hat man einmal ein NaN erzeugt, so pflanzt sichdies im Laufe der Rechnung fort.

1 >> 3+NaN2 ans =3 NaN4 >> NaN-NaN5 ans =

6 NaN7 >> 0*NaN8 ans =9 NaN

Die Funktion realmin gibt die kleinste posi-tive normalisierte Gleitpunktzahl zurück. JedeRechnung, deren Ergebnis kleiner als realminist, erzeugt einen Underflow und wird auf Nullgesetzt, wenn sie kleiner als eps*realmin istoder erzeugt eine nichtnormale Zahl (subnor-mal number) mit führendem Bit 0 in der Man-tisse.

1 >> realmin2 ans =3 2.2251e-3084 >> realmin*eps5 ans =6 4.9407e-3247 >> realmin*eps/28 ans =9 0

Die Funktion computer gibt den Computer-Typ zurück, auf dem Matlab läuft. Der Rech-ner auf dem diese Zeilen und die matlab-Codesgeschrieben werden, produziert folgende Aus-gabe

1 >> computer2 ans =3 PCWIN

Aufgabe 10 (Arithmetik) Berechnen Sie:

(a) e700

(b) e710

Beschreiben Sie die Resultate.Lösung:

34 Copyright c© G. Gramlich

1 >> exp(700)2 ans =3 1.0142e+304

1 >> exp(710)2 ans =3 Inf

In (b) wird Inf ausgegeben, da das Ergebnisdie größte positive Gleitkommazahl in Matlabübersteigt. Diese Zahl ist

1 >> realmax2 ans =3 1.7977e+308

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

31. Nicht double-Datentypen

Außer double werden in Matlab auch nochandere Datentypen zur Verfügung gestellt, umZahlen zu speichern und mit diesen zu rechnen.Diese sind

• single

• int8 und uint8

• int16 und uint16

• int32 und uint32

Diese Datentypen sind insbesondere dann vor-teilhaft, wenn Speicherplatz gespart werdensoll, also zum Beispiel wenn Bilder gespei-chert und verarbeitet werden sollen (Bildver-arbeitung).

Ganzzahlige Datentypen können ganze Zahlenin einem bestimmten Bereich speichern. ZumBeispiel ist uint8 ein ganzzahliger Datentyp

der im Speicher acht Bits benötigt, um Zah-len im Bereich von 0 bis 255 zu spreichern;28 = 256. Die Tabelle 9 zeigt die ganzzahli-gen Datentypen mit Speicherbedarf und Wer-tebereich. Die folgende Anweisung erzeugt die

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 9: Ganzzahlige Datentypen

Variable x vom Datentyp uint8 und ordnet ihrdie Zahl 7 zu.

1 >> x = uint8(7)2 x =3 7

Hier ein paar Rechnungen:

1 >> x+42 ans =3 114 >> x+pi5 ans =6 107 >> x+2538 ans =9 255

10 >> x+25411 ans =12 25513 >> x-814 ans =15 016 >> x-917 ans =

35 Copyright c© G. Gramlich

18 0

Die Rechnungen zeigen mehrere Eigenschaf-ten. Das Ergebnis ist stets vom Datentypuint8 auch dann, wenn eine double-Zahl hin-zuaddiert wird. Diese wird zuvor gerundet.Wird die größte Zahl 255 überschritten, sowird das Ergebnis gleich dieser größten Zahlgesetzt. Analog verhält es sich, wenn das Er-gebnis kleiner als Null ist.

Aufgabe 11 (int8-Rechnungen) Finden Sieheraus, wie eine double-Zahl auf den Daten-typ int8 gerundet wird.Lösung: Die Rechnungen

1 >> int8(3.6)2 ans =3 44 >> int8(3.5)5 ans =6 47 >> int8(3.4)8 ans =9 3

10 >> int8(-3.5)11 ans =12 -4

zeigen die Antwort. Matlab rundet auf dienächste ganze Zahl. Liegt die Zahl in der Mitte,so wird aufgerundet, falls die Zahl positiv undabgerundet, falls die Zahl negativ ist. © . . . . .©

Mit den Funktionen intmax und intmin kön-nen Sie die größte bzw. kleinste Zahl des je-weiligen Datentyps ermitteln.

1 >> intmax(’int32’)2 ans =3 2147483647

Um eine Zahl mit dem Datentyp single zuspeichern, braucht man nur halb so viel Spei-cher wie mit dem Datentyp double. Dies zei-gen die folgenden Zeilen.

1 >> a = single(5);2 >> b = 5;3 >> whos4 Name Size Bytes Class5

6 a 1x1 4 single array7 b 1x1 8 double array

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

1 >> single(4.1)+double(3)2 ans =3 7.10004 >> whos5 Name Size Bytes Class6

7 ans 1x1 4 single array

Ganzahlige und single-Datentypenkönnen nicht verknüpft werden.

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

32. Merkmale von Matlab

Matlab verfügt über drei wesentliche Merk-male, die das System von anderen modernenProgrammierumgebungen unterscheidet. Wirführen sie in diesem Anschnitt ein und erklärensie in den folgenden Abschnitten ausführlicher.

36 Copyright c© G. Gramlich

32.1. Keine Deklaration notwendig

Variablen müssen in Matlab nicht deklariertwerden, bevor sie verwendet werdn. Dies giltsowohl für Arrays als auch für Skalare. Dar-überhinaus werden die Dimensionen der Ar-rays bei Bedarf automatisch vergrößert. Durch

1 >> x(3) = 02 x =3 0 0 0

wird ein Zeilenvektor x mit drei Nullkoordina-ten angelegt und durch

1 >> x(5) = 02 x =3 0 0 0 0 0

zu einem Vektor der Länge 5 erweitert. An jetztgibt es einen Zeilnvektor x der Länge 5.

32.2. Variable Argumentenliste

Matlab verfügt über eine große Sammlungvon Funktionen. Diese können kein Eingabe-argument oder mehrere Eingabeargumente undkein Ausgabeargument oder mehrere Ausgabe-argumente haben. Zwsichen Ein- und Ausga-beargument wird deutlich unterschieden. DieEingabeargumente stehen rechts vom Funkti-onsnamen in runden Klammern und die Aus-gabeargumente stehen links vom Funktionsna-men in eckigen Klammern.

1 [a,b] = Funktionsname(x,y,z)

In diesem Beispiel sind a und b sind Ausgabe-und x, y, z die Eingabeargumente. Sowohl dieEingabe- als auch die Ausgabeargumente sind

variabel, so dass unter Umständen nur ein Teilder Argumente spezifiziert werden muss. Wirzeigen dies an ein paar Beispielen.

Die Funktion norm berechnet die EuklidischeNorm (gewöhnliche Länge, 2-Norm) einesVektors:

1 >> x = [3 4];2 >> norm(x)3 ans =4 5

Eine andere Norm, die sogenannte 1-Norm(Summe der Beträge der Koordinaten), kannebenfalls mit der Funktion norm berechnetwerden, indem 1 als zweites Eingabeargumentangegeben wird.

1 >> norm(x,1)2 ans =3 7

Wir sehen. Wird kein zweites Eingabeargu-ment angegeben, so wird standardmäßig die 2-Norm verwendet. Die Funktion max hat meh-rere Ausgabeargumente. Mit einem Eingabe-und einem Ausgabeargument gibt max diegrößte Koordinate eines Vektors zurück.

1 >> max(x)2 ans =3 4

Gibt man ein zweites Ausgabeargument an,so wird zusätzlich der Koordinatenindex dergrößte Koordinate mit ausgegeben.

1 >> [m,k] = max(x)2 m =3 44 k =5 2

37 Copyright c© G. Gramlich

32.3. Komplexe Arrays und Arithmetik

Der fundamentale Datentyp ist in Matlab einmehrdimensionales Array bestehend aus kom-plexen Zahlen, wobei Real- und Imaginär-teil Gleitpunktzahlen sind, die doppelt genaugespeichert sind. Wichtige Spezialfälle sindMatrizen (zweidimensionale Arrays), Vekto-ren und Skalare. Die meisten Berechnungenwerden in Gleitpunktarithmetik durchgeführtund das in komplexer Arithmetik, wenn Datenkomplex auftreten. Dies steht im Unterschiedzu C/C++ und Java, wo nur reelle Zahlen undreelle Arithmetik unterstützt werden.

Matlab verfügt jedoch auch über ganzzahligeDatentypen (siehe Abschnitte 31 und 74), diejedoch hauptsächlich aus Speicherplatzeffizi-enzgründen anstatt zu Berechnungen verwen-det werden.

33. Mathematische Funktionen

Matlab verfügt über viele mathematischeFunktionen, siehe doc elfun (help elfun)für grundlegende Funktionen und docspecfun (help specfun) für spezielle Funk-tionen. Zu den grundlegenden Funktionengehören die

• trigonometrische Funktionen,

• Exponentialfunktionen,

• Logarithmusfunktionen,

• hyperbolische Funktionen,

• Potenzfunktionen,

• Wurzelfunktionen,

• Restbildungsfunktionen,

• Vorzeichenfunktionen,

• Rundungsfunktionen.

Unter den speziellen Funktionen findet manzum Beispiel die

• Besselfunktionen,

• Hankelfunktionen,

• Fehlerintegrafunktion,

• Exponentialintegralfunktion,

• Gammafunktion.

Die Tabelle 10 zeigt trigonometrische Funk-

Funktion Beschreibungacos Inverser Kosinusasec Inverser Sekansacsc inverser Kosekansasin Inverser Sinusatan Inverser Tangenscos Kosinuscot Kotangenscsc Kosekanssec Sekanssin Sinustan Tangens

Tabelle 10: Trigonometrische Funktionen

tionen. Alle trigonometrische Funktionen (mitder Ausnahme atan2) akzeptieren als Argu-mente komplexe Arrays, die punktweise aus-gewertet werden. Die Arumente werden imBogenmaß (Radiant, rad) erwartet. Für Be-rechnungen in Grad (Gradmaß, ◦) dienen diemit einem d am Ende des Namens ergänztentrigonometrischen Funktionen: acosd, cosd,asind, sind, usw.

38 Copyright c© G. Gramlich

Die folgenden Zeilen bestätigen die Ergebnissecos(π/2) = 0 und cos(90◦) = 0 in Matlab.

1 >> cos(pi/2)2 ans =3 6.1232e-0174 >> cosd(90)5 ans =6 0

Aufgabe 12 (Trigonometrische F.) BestätigenSie die Tabelle

x 1/2π π 3/2π 2πcos x 0 −1 0 1

und die Tabelle

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

Lösung: Hier die Bestätigung:

1 >> x = pi*[1/2 1 3/2 2];2 >> cos(x)3 ans =4 0.0000 -1.0000 -0.0000 1.00005 >> phi = 180*[1/2 1 3/2 2];6 >> cosd(phi)7 ans =8 0 -1 0 1

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

Andere Funktionen sind zum Beispiel sqrt,exp oder log.

1 >> sqrt(4), exp(4), log(x^2+1)2 ans =3 24 ans =5 54.59826 ans =7 2.8332

Aufgabe 13 (Logarithmen) Finden Sie heraus,welche Logarithmusfunktionen Ihnen in Mat-lab zur Verfügung stehen?Lösung: Die Tabelle 11 zeigt die Logarith-musfunktionen. © . . . . . . . . . . . . . . . . . . . . . . . . ©

Mathematisches Symbol Matlabln = loge loglb = log2 log2lg = log10 log10

Tabelle 11: Logarithmusfunktionen

33.1. Rundungsfunktionen

In Matlab gibt es die folgenden Rundungs-funktionen:

ceil(x) Rundet x zur nächsten ganzen Zahlauf (Runden nach Unendlich).

fix(x)Wählt von x den ganzzahligen Anteil(Runden nach Null).

floor(x) Rundet x zur nächsten ganzenZahl ab (Runden nach minus Unendlich).

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

Aufgabe 14 (Rundungsfunktionen) BerechnenSie die folgenden Ausdrücke per Hand undüberprüfen Sie Ihre Ergebnisse mit Matlab.

(a) round(-2.6)

(b) fix(-2.6)

(c) floor(-2.6)

(d) ceil(-2.6)

(e) floor(ceil(-2.6))

Zeichnen Sie die Funktionen im Intervall

39 Copyright c© G. Gramlich

[−3, 3]!Lösung:

1 >> round(-2.6), fix(-2.6),2 ans =3 -34 ans =5 -26 >> floor(-2.6), ceil(-2.6),7 ans =8 -39 ans =

10 -211 >> floor(ceil(-2.6))12 ans =13 -2

Wir zeichnen die Funktion round.

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

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

33.2. Verwendung mathematischerFunktionen in Matlab

Liegt Ihnen der Funktionsterm einer mathe-matischen Funktion vor, so können Sie diesenMatlab auf zwei Arten bekannt machen:

• Sie definieren den Funktionsterm in einerfunction als m-File, siehe Abschnitt 44.Zum Beispiel erklärt man die quadratischeFunktion f (x) = x2, x ∈ R durch folgendenfunction-File f.m:

1 function y = f(x)2 y = x.^2;

• Sie definieren den Funktionsterm in derKommandozeile durch einen String undVorstellung eines @-Zeichens, siehe Ab-schnitt 39. Zum Beispiel definiert man diequadratische Funktion f (x) = x2, x ∈ Rdurch

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

Achten Sie darauf, Funktionsterme gleich invektorieller Form zu definieren, da diese meistvektoriell ausgewertet werden bzw. weil Funk-tionen wie zum Beispiel quad (eine Funk-tion zur numerischen Integration, siehe Ab-schnitt 60) dies auch so verlangen. Funktionenmit mehreren Variablen können ebenso erklärtwerden.

Weitere Informationen finden Sie mit docfunction und doc function_handle(help function bzw. helpfunction_handle). Für symbolischeFunktionen, siehe Abschnitt 66.

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

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

2 >> f(0,0), f(1,1)3 ans =4 05 ans =6 -0.0183

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

40 Copyright c© G. Gramlich

34. Vektoren

Vektoren (Zeilen- oder Spaltenvektoren) sindspezielle Matrizen. Zeilenvektoren sind (1, n)-Matrizen und Spaltenvektoren sind (m, 1)-Matrizen. Aussagen über Matrizen sind dem-nach auch für Vektoren interessant. Wir ver-weisen auf Abschnitt 36; dort werden Matri-zen und somit auch Vektoren ausführlich be-handelt. Matrizen (und somit Vektoren) sindgrundlegende Bausteine von Matlab.

Nehmen wir an, es sollen die Quadratwurzelnder Zahlen 0, 2, 4, 6, 8, 10 berechnet werden.Hier kommt uns Matlab sehr entgegen. Wirfassen die x-Werte zu einem Zeilenvektor (ein-dimesionales Array, Liste) zusammen:

1 >> x = [0 2 4 6 8]2 x =3 0 2 4 6 8

Vektoren werden in eckigen Klammern(brackets) eingegeben. Die einzelenen Ele-mente (Koordinaten) des Vektors sind dabeidurch Leerzeichen oder Kommas zu trennen.Die Funktionswerte für die einzelnen Wertevon x müssen nun nicht einzeln berechnetwerden, sondern können alle auf einmal mit

1 >> y = sqrt(x)2 y =3 0 1.4142 2.0000 2.44954 2.8284

erhalten werden. Die Matlab-Funktion sqrtangewendet auf einen Vektor x gibt nämlichdie Anweisung: Nimm von jedem Element vonx die Wurzel und schreib das Ergebnis als ent-sprechendes Element eines neuen Vektors (hier

y genannt). Man spricht von vektorielle Aus-wertung oder allgemein: In Matlab kann manvektoriell programmieren! Diese einfache Art,einen Befehl (hier das Wurzelziehen) element-weise anzuwenden, ist eine große Stärke vonMatlab. Sie ermöglicht eine rasche Verarbei-tung von großen Datenmengen. Der Vektor xkann kürzer eingegeben werden: x = 0:2:8.Die Schreibweise bedeutet: Beginne mit 0 undzähle 2 dazu, dann zähle wieder 2 dazu, usw.bis die Grenze 8 erreicht ist. Diese Anweisungist bei der Eingabe von Vektoren mit vielenElementen sehr nützlich.

Aufgabe 16 (Vektoren erzeugen) Erzeugen Sieeinen Zeilenvektor mit der ersten Koordinate29 und der letzten 1, wobei sich die Koodinatenabsteigend um 2 unterscheiden sollen.Lösung: Dies kann man wie folgt erreichen:

1 >> x = 29:-2:02 x =3 Columns 1 through 114 29 27 25 usw.5 Columns 12 through 156 7 5 3 1

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

Ist die Schrittweite gleich 1, so kann man dieAngabe der Schrittweite weglassen. Für wei-ter Informationen zu diesem Doppelpunktope-rator, siehe doc colon (help colon). Sieheauch doc ops (help ops).

Aufgabe 17 (Vektoren erzeugen) Geben Siedie Vektoren a und b mit den Elementen−10,−8, . . . , 10 und 10, 9, 8, . . . mit kurzenAnweisungen ein.Lösung: Das geht wie folgt:

41 Copyright c© G. Gramlich

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

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

Aufgabe 18 (Vektoren erzeugen) Erzeugen Sieeinen Vektor y, der die Funktionswerte des na-türlichen Logarithmus an den Stellen 1, 3, 5, 7enthält. Was ist y(1)?Lösung: Das geht wie folgt:

1 >> x = 1:2:7;2 >> y = log(x)3 y =4 0 1.0986 1.6094 1.9459

y(1) ist die erste Koordinate des Vektors y, al-so y(1)=0. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Mit der Funktion linspace können Vekto-ren erzeugt werden, indem man den Wert derersten, letzten, sowie die Anzahl der Kompo-nenten (drittes Argument im Aufruf) vorgibt.Mit dem Doppelpunktoperator : ist es dage-gen möglich, die Schrittweite direkt anzuge-ben, nicht aber die Anzahl der Koordinaten.Sind a und b reelle Zahlen, dann erzeugt x =linspace(a,b,n) einen Zeilenvektor x derLänge n mit den Koordinaten xk = a + (b −a) · k−1

n−1 , wobei k = 1, . . . , n ist.

1 >> x = linspace(1,2,3)2 x =3 1.0000 1.5000 2.00004 >> x = linspace(10,40,4)5 x =6 10 20 30 407 >> x = linspace(1,1.2,3)8 x =9 1.0000 1.1000 1.2000

10 >> x = linspace(0,1,3)11 x =12 0 0.5000 1.0000

Mit der Funktion logspace ist es möglich,einen Vektor zu erzeugen, dessen Komponen-ten logarithmischen Abstand haben. Allgemeinist x = logspace(a,b,n) äquivalent zu xk =

10a+(b−a)· k−1n−1 , wobei k = 1, . . . , n und a, b reelle

Zahlen sind.

1 >> x = logspace(-2,2,4)2 x =3 0.0100 0.2154 4.6416 100.00004 >> x = logspace(1,3,3)5 x =6 10 100 1000

Zusammenfassend gilt: Vektoren können aufdrei Arten erzeugt werden:

• Wir geben die Koordinaten explizit ein.

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

• Wir lesen einen entsprechenden Datenfileein, siehe Abschnitt 38.3.

35. Vektorenoperationen

Vektoren sind spezielle Matrizen. Für Vekto-renoperationen siehe die Abschnitte 36.3 und48.

36. Matrizen

Ein rechteckiges Zahlenschema mit m Zeilenund n Spalten heißt (m, n)-Matrix. Vektorensind spezielle Matrizen. Ist n = 1, so liegt einSpaltenvektor vor und ist m = 1, so handelt essich um einen Zeilenvektor. Skalare sind (1, 1)-Matrizen. Es ist üblich, eine Matrix in eckige

42 Copyright c© G. Gramlich

oder runde Klammern zu setzen; wir wählendie eckige Schreibweise.

Matrizen sind in Matlab (und darüberhinaus)fundamental. In der Version 3 von Matlab undin früheren Versionen war die (komplexe) Ma-trix überhaupt der einzige Datentyp. Nun gibtes in Matlab aber mehrere Datentypen, sie-he Abschnitt 74 und Matrizen sind speziel-le mehrdimensionale numerische Arrays, sie-he Abschnitt 73. Liegt eine Matrix vor undstehen nicht mathematische Operationen imVordergrund, so nennt man eine Matrix einzweidimensionales Array. Dann steht das da-tentechnische, effiziente Arbeiten im Vorder-grund. Steht die Mathematik im Vordergrund,dann siehe auch die Abschnitte zur LinearenAlgebra 48 und 50.

Mit doc elmat (help elmat) erhalten Sieviele Infos rund um Matrizen; unter doc ops(help ops) sind die Operatoren zu finden.

36.1. Matrizen erzeugen

Es gibt mehrere Möglichkeiten, Matrizen inMatlab zu erzeugen.

Ist 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

1 >> A = [1 sqrt(2) -2; 7 -3 pi]2 A =3 1.0000 1.4142 -2.00004 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 aus ei-ner Zeile, so liegt eine Zeilenmatrix bzw. einZeilenvektor vor. Analog spricht man von ei-ner Spaltenmatrix bzw. von einem Spaltenvek-tor, wenn die Matrix nur eine Spalte hat. Ei-ne Zeilenmatrix hat die Größe (1, n) und eineSpaltenmatrix (m, 1).

Will man nun einzelne Elemente der Matrix Aändern, so kann dies auf zwei Arten gesche-hen. Die Anweisung A(1,3) = 5 ändert zumBeispiel das Elemente a13 = −2 der Matrix Azu a13 = 5 ab. Eine zweite Möglichkeit dieszu tun besteht darin, den Workspace Browserzu verwenden und das Symbol für die MatrixA anzuklicken. Der Array-Editor wird geöffnetund Sie können die Elemente interaktiv ändern.

Besteht eine Matrix nur aus einer Zeile, so liegteine Zeilenmatrix bzw. ein Zeilenvektor vor.Einen Zeilenvektor mit Zahlen gleichen Ab-stands kann man zum Beispiel wie folgt erzeu-gen

1 >> x = 2:62 x =3 2 3 4 5 6

Die Schrittweite muss nicht notwendigerweiseEins sein. Im folgenden Beispiel ist die Schritt-weite 0.2:

1 >> x = 1.3:0.2:1.82 x =3 1.3000 1.5000 1.7000

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

43 Copyright c© G. Gramlich

1 >> size(A)2 ans =3 2 3

Macht man bei einer Matrix A aus den Zei-len Spalten und aus den Spalten Zeile, so ent-steht die transponierte Matrix AT. In Matlaberreicht man dies mit dem ’-Operator.

1 >> A = [1 2 3; 4 5 6], A’2 A =3 1 2 34 4 5 65 ans =6 1 47 2 58 3 6

Nützliche und häufig verwendete Matrizenstellt Matlab als eingebaute Funktionen zurVerfügung, siehe Tabelle 12. Um sie zu erzeu-

Funktion Bedeutungzeros Nullmatrixones Einsmatrixeye Einheitsmatrixrand Zufallsmatrixrandn Zufallsmatrix

Tabelle 12: Elementare Matrizen

gen, muss man nur die Größe angeben. DieFunktion ones erzeugt eine Matrix mit lauterEinsen.

1 >> ones(2,3)2 ans =3 1 1 14 1 1 1

Die Nullmatrix wird mit der Funktion zeroserzeugt.

1 >> Z1 = zeros(3,2)2 Z1 =3 0 04 0 05 0 06 >> Z2 = zeros(size(A))7 Z2 =8 0 0 09 0 0 0

Eine (n, n)-Matrix heißt quadratische Matrix;dann genügt ein Argument, um zum Beispieldie (3, 3)-Einheitsmatrix mit der Funktion eyezu erzeugen.

1 >> eye(3)2 ans =3 1 0 04 0 1 05 0 0 1

Aufgabe 19 (Symmetrische Matrizen) Erzeu-gen Sie eine 10 × 10 symmetrische Matrix Smit Zufallswerten zwischen 0 und 8!Lösung:

1 >> A = 4*rand(10);2 >> A+A’;

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

Diagonalmatrizen werden mit der Funktiondiag erzeugt.

1 >> D = diag([1 2 3])2 D =3 1 0 04 0 2 05 0 0 3

44 Copyright c© G. Gramlich

Aufgabe 20 (Diagonalmatrizen) Erzeugen Sieeine Diagonalmatrix mit 1, 2, 3, 4 und 5 auf derDiagonalen!Lösung:

1 >> diag([1 2 3 4 5])2 ans =3 1 0 0 0 04 0 2 0 0 05 0 0 3 0 06 0 0 0 4 07 0 0 0 0 5

Aufgabe 21 (Matrizen) Wir betrachten die fol-gende Matrix A:

A =

5.5 0.4 3.19.4 5.5 3.3−0.3 4.6 −4.3

0.4 −4.6 9.05.0 5.5 7.7

.

Wie kann man in Matlab die Größe von A be-stimmen? Geben Sie die Ordnung (Größe) die-ser Matrix an!Lösung: Die Ordnung der Matrix A ist (5, 3).Mit der Funktion size kann man die Ordnungin Matlab bestimmen. Die Indizes sind: 1, 1,2, 2 und 5, 2. © . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Außer den elementaren Matrizen stellt Mat-lab weitere spezielle Matrizen zur Verfügung,siehe Tabelle 13. Diese Matrizen haben inter-essante Eigenschaften und werden häufig ver-wendet, um Algorithmen zu testen. Eine be-sonders interessante Matrix ist die Hilbert-Matrix, deren (i, j)-tes Element 1/(i+ j−1) ist.Diese Matrix kann durch hilb erzeugt werden;ihre Inverse mit invhilb. Die Funktion magicerzeugt magische Quadrate.

Funktion Bedeutungcompan Begleitmatrixgallery Highams-Testmatrizenhadamard Hadamard-Matrixhankel Hankel-Matrixhilb Hilbert-Matrixinvhilb Inverse Hilbert-Matrixmagic Magische Quadratepascal Pascal-Matrixrosser Symmetrische Testmatrizentoeplitz Toplitz-Matrixvander Vandermonde-Matrixwilkinson Wilkinson-Matrix

Tabelle 13: Spezielle Matrizen

Mit der load Funktion besteht eine weitereMöglichkeit, Matrizen zu erzeugen.

36.2. Der Doppelpunkt

Um effizient mit Matrizen arbeiten zu kön-nen, steht der Doppelpunkt : zur Vefügung.Mit ihm lassen sich Vektoren effizient erzeu-gen. Sind i und j zwei ganze Zahlen, so wirdmit i:j ein Zeilenvektor bestehend aus ganzenZahlen von i nach jmit Schrittweite 1 erzeugt.Soll die Schrittweite s sein, so ist die Syntax:i:s:j. Diese Konstruktion funktioniert auch,wenn die Zahlen nicht notwendig ganz sind.Wir geben Beispiele.

1 >> 1:52 ans =3 1 2 3 4 54 >> 3:-1:-25 ans =6 3 2 1 0 -1 -2

45 Copyright c© G. Gramlich

7 >> 0:0.7:2.58 ans =9 0 0.7000 1.4000 2.1000

Die folgenden Beispiele zeigen, wie man auseiner gegebenen Matrix, einzelne Elemente,ganze Zeilen oder Spalten sowie Untermatri-zen anspricht. Zunächst wird von der Matrix

A =

1 23 45 6

das Element a31 in der dritten Zeile und ers-ten Spalte zurückgegeben, dann die zweite Zei-le, danach die erste Spalte und schließlich eine(2, 2)-Untermatrix.

1 >> A(3,1)2 ans =3 54 >> A(2,:)5 ans =6 3 47 >> A(:,1)8 ans =9 1

10 311 512 >> A([1 2],:)13 ans =14 1 215 3 4

Mit dem Doppelpunkt kann man eine Matrixin einen „langen“ Vektor umwandeln. Die Ele-mente werden spaltenweise aneinandergefügt.

1 >> A(:)’2 ans =3 1 3 5 2 4 6

Aus einem Vektor lässt sich ebenfalls eine Ma-trix mit spezieller Struktur konstruieren.

1 >> x = [1 2 3]2 x =3 1 2 34 >> B = x([1 1 1 1],:)5 B =6 1 2 37 1 2 38 1 2 39 1 2 3

Die folgenden Anweisungen zeigen, wie manaus einer Matrix die zweite Spalte streicht.Hierzu benutzt man die leere Matrix []. Voll-kommen analog kann man Zeilen streichen.

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

Wir fassen zusammen:

• A(z,s): Adressiert eine (Unter-) Matrixvon A, die durch den Indexvektor z für dieZeilen und durch den Indexvektor s für dieSpalten bestimmt ist.

• A(z,:): Adressiert eine (Unter-) Matrixvon A, die durch den Indexvektor z für dieZeilen und durch alle Spalten bestimmt ist.

• A(:,s): Adressiert eine (Unter-) Matrixvon A, die durch alle Zeilen und durch denIndexvektor s für die Spalten bestimmt ist.

• A(:): Adressiert alle Matrixelemente von Aals einen (langen) Spaltenvektor, indem alle

46 Copyright c© G. Gramlich

Spalten aneinandergefügt werden.

• A(i): Adressiert eine (Unter-) Matrix vonA, die durch den einzigen Indexvektor i be-stimmt ist, indem A als (langer) Spaltenvek-tor interpretiert wird.

Aufgabe 22 (Doppelpunkt) Gegeben sei diefolgende Matrix A:

A =

5.5 0.4 3.19.4 5.5 3.3−0.3 4.6 −4.3

0.4 −4.6 9.05.0 5.5 7.7

.

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

−4.6 9.05.5 7.7

].

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

Aufgabe 23 (Doppelpunkt) Gegeben ist dieMatrix

A =

1 2 3 4 56 7 8 9 10

11 12 13 14 1516 17 18 19 2021 22 23 24 25

Welches sind die Werte der folgenden Aus-drücke? Überlegen Sie sich die Resultate, be-vor Sie die Rechnung am Computer durchfüh-ren.

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

Lösung:

1 >> A = [1 2 3 4 5; 6 7 8 9 10; 1112 13 14 15; 16 17 18 19 20; 2122 23 24 25];

2 >> A(2,:)3 ans =4 6 7 8 9 105 >> A(:,1)6 ans =7 18 69 11

10 1611 2112 >> A(:,5)13 ans =14 515 1016 1517 2018 2519 >> A(1,1:2:5)20 ans =21 1 3 522 >> A([1,5])23 ans =24 1 2125 >> A(4:-1:1,5:-1:1)26 ans =27 20 19 18 17 1628 15 14 13 12 1129 10 9 8 7 630 5 4 3 2 1

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

Aufgabe 24 (Zeile löschen) Löschen Sie vonder Matrix

A =

1 2 34 5 67 8 9

47 Copyright c© G. Gramlich

die zweite Zeile.Lösung:

1 >> A = [1 2 3; 4 5 6; 7 8 9];2 >> A(2,:) = []3 A =4 1 2 35 7 8 9

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

36.3. Matrizen- und Arrayoperationen

Die Tabelle 14 zeigt Matrizenoperationen in

Symbol Bedeutung+ Addition- Subtraktion* Multiplikationˆ Potenzieren

Tabelle 14: Matrizenoperationen

Matlab. Es handelt sich hierbei um Opera-tionen der Matrizenalgebra (Lineare Algebra).Die Operatoren + und - können eingesetztwerden, um Matrizen miteinander zu addierenbzw. zu subtrahieren. Der Operator * mulit-pliziert zwei Matrizen miteinander, wenn dieMultiplikation definiert ist, das heißt wenn dieMatrizen die entsprechenden Größen haben.

1 >> A = [1 2 4; 2 6 0];2 B = [4 1 4 3; 0 -1 3 1; 2 7 5 2];3 A*B4 ans =5 12 27 30 136 8 -4 26 12

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

1 >> A = [1 -2; 3 2]; x = [3; 1];2 >> A*x3 ans =4 15 11

Aufgabe 25 (Matrizenoperationen) Es seien A,B, C und D die folgenden definierten Matri-zen.

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 folgendeMatrizenalgebra. Geben Sie die Matrizen dannin Matlab ein und vergleichen Sie die jeweili-gen Resultate.

(a) A + B(b) B + C(c) DA(d) 2A − 3B(e) AT

(f) C2

Lösung:(a)

1 >> A+B2 ans =

48 Copyright c© G. Gramlich

3 0 54 6 25 10 0

(b) B + C ist nicht definiert.(c)

1 >> D*A2 ans =3 4 224 16 85 18 8

1 >> 2*A-3*B2 ans =3 5 04 -8 145 -15 5

(d)(e)1 >> A’2 ans =3 1 2 34 3 4 1

1 >> C^22 ans =3 -24 204 -20 -16

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

Sind a und b Skalare, so ist a+b die gewöhn-liche Addition, a-b die gewöhnliche Subtrak-tion, a*b die gewöhnliche Multiplikation undaˆb die gewöhnliche Potenzierung. a/b ist diegewöhnliche Division: a ÷ b. Sie wird auchals rechte Division bezeichnet, weil es auch ei-ne linke Division a\b gibt mit der Bedeutungb ÷ a. Die Operatoren ˆ und \ haben für Ma-trizen A und B folgende Bedeutung: A\B isteine Lösung X der Matrizengleichung A*X=B

und A/B ist eine Lösung X der Matrizenglei-chung X*B=A. Für weiter Einzelheiten sieheAbschnitt 48.

Matrizenaddition und -subtraktion sind ele-mentweise definiert (im Sinne einer Arrayope-ration). Die Multiplikation (Potenzierung) istjedoch nicht elementweise definiert, also nichtim Sinne einer Arrayoperation. In vielen An-wendungen (siehe zum Beispiel Abschnitt 40)ist es jedoch notwendig, Matrizen elementwei-se zu verknüpfen. Daher sind in Matlab dieOperatoren *, ˆ, \ und / auch elementwei-se definiert. Damit eine Operation elementwei-se durchgeführt werden kann, muss ein Punktdavorgesetzt werden, also .*, .ˆ, .\ und ./.Die Tabelle 15 fasst die Arrayoperationen (ele-

Symbol Bedeutung+ Addition- Subtraktion.* Multiplikation./ rechte Division.\ linke Division.ˆ Potenzieren

Tabelle 15: Elementweise Operationen

mentweise Operationen) zusammen.

(f) Unterscheiden Sie zwischenMatrizen- und Arrayoperatio-nen. Die Matrizenoperationen sindim Sinne der Matrizenalgebra(Lineare Algebra), während dieArrayoperationen elementweise zuverstehen sind.

Das folgende Beispiel zeigt eine Arraymulti-plikation:

49 Copyright c© G. Gramlich

1 >> A = [1 2; 3 4; 5 6];2 >> B = [7 8; 9 10; 11 12];3 >> A.*B4 ans =5 7 166 27 407 55 72

Aufgabe 26 (Operationen) Berechnen Sie Aˆ2und A.ˆ2 von der Matrix

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

Lösung: Es ist

1 >> A^2, A.^22 ans =3 7 104 15 225 ans =6 1 47 9 16

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

Aufgabe 27 (Arrayoperationen) Geben Sie je-weils den Vektor c an, nachdem Sie die folgen-den Operationen ausgeführt haben. ÜberprüfenSie Ihre Ergebnisse in Matlab.

1 a = [2 -1 5 0];2 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;

Analog für die anderen Operationen. Manch-mal ist es notwendig, Matrizen elementweise

zu multiplizieren (Hadamard-Produkt), dannhilft der .*-Operator.

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

Aufgabe 28 (Matrizenoperationen) Warumgibt es in Matlab keinen .+-Operator?Lösung: Die Matrizenaddition ist bereitselementweise definiert. © . . . . . . . . . . . . . . . . . ©

Die konjugiert Transponierte der Matrix A er-hält man durch A’. Ist A eine reelle Matrix, soist A’ einfach die Transponierte. Die Transpo-nierte ohne Konjugation erhält man mit A.’.

Im Spezialfall, wenn x und y Spaltenvektorensind, ist x’*y das Skalarprodukt. Dies lässtsich auch mit dot(x,y) berechnen. Mit derFunktion cross kann man das Kreuzproduktausrechnen. Für weiter Einzelheiten siehe Ab-schnitt 48.

Aufgabe 29 (Matrizenoperationen) Es seienzwei Vektoren a und b wie folgt definiert:

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

Führen Sie die folgenden Matlab-Operationendurch. Welche sind definiert und welche nicht?Erklären Sie! Was sind die Resultate?

1 a + b a’ + b2 a + b’ a’ + b’3 a - b a’ - b4 a - b’ a’ - b’5 a * b a’ * b6 a * b’ a’ * b’7 a \ b a’ \ b

50 Copyright c© G. Gramlich

8 a \ b’ a’ \ b’9 a .* b a’ .* b

10 a .* b’ a’ .* b’11 a .\ b a’ .\ b12 a .\ b’ a’ .\ b’

Die Funktion kron berechnet das Kronecker-Produkt (direktes Produkt) zweier Matrizen,siehe auch [5].

Aufgabe 30 (Direktes Produkt) Berechnen Siein Matlab das direkte Produkt von

A =

1 2 33 1 −25 −1 0

und

B =

1 3−1 5

2 −2

.Lösung: Das direkte Produkt ist auch unterdem Namen Kronecker-Produkt bekannt undkann mit der Funktion kron berechnet werden.

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

10 6 -6 2 -2 -4 411 5 15 -1 -3 0 012 -5 25 1 -5 0 013 10 -10 -2 2 0 0

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

Aufgabe 31 (Vektoren, Signale) Gegeben istdas kontinuierliche Signal (die kontinuierlicheFunktion)

s(t) = sin(2πt)e−0.3t.

Erzeugen Sie für t = 0, 0.1, 0.2, . . . , 10 das da-zugehörige diskrete Signal (Vektor). WievielWerte hat das Signal?Lösung:

1 >> t = 0:0.1:10;2 >> sd = sin(2*pi*t).*exp(-0.3*t);

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

Wird ein Skalar in Matlab zu einer Matrix ad-diert oder Subtrahiert, so wird die Zahl zu je-dem Matrixelement addiert bzw. subtrahiert.Das Gleiche gilt auch bei Mulitplikation undDivision mit einer Zahl. Beispiel:

1 >> [1 2 3; 4 5 6]/22 ans =3 0.5000 1.0000 1.50004 2.0000 2.5000 3.0000

Die meisten mathematischen Funktionen, sie-he Abschnitt 33, akzeptieren als Eingabear-gument eine Matrix. Dann wird diese Funk-tion elementweise ausgeführt. Funktionen ei-ner Matrix im Sinne der Linearen Algebra, wiezum Beispiel die Exponentialfunktion, tragenam Ende des Namens ein m: expm, funm, logm,sqrtm. Für die Matrix A = [2 1; 0 2] gilt:

1 >> sqrt(A)2 ans =3 1.4142 1.00004 0 1.41425 >> sqrtm(A)6 ans =

51 Copyright c© G. Gramlich

7 1.4142 0.35368 0 1.41429 >> ans*ans

10 ans =11 2.0000 1.000012 0 2.0000

36.4. Matrizenmanipulationen

Die Tabelle 16 zeigt Funktionen mit denen man

Funktion Bedeutungreshape Ändert Ordnungdiag Diagonalmatrixblkdiag Blockdiagonalmatrixtril Untere Dreiecksmatrixtriu Obere Dreiecksmatrixfliplr Vertauschtflipud Vertauschtrot90 Drehung um 90◦

Tabelle 16: Matrizenmanipulationen

Matrizen manipulieren kann.

Die Funktion reshape ändert die Ordnungeiner Matrix: reshape(A,m,n) erzeugt eine(m, n)-Matrix aus der Matrix A, wobei die Ele-mente spaltenweise extrahiert werden.

1 >> A = [1 2 3; 4 5 6]2 A =3 1 2 34 4 5 65 >> B = reshape(A,3,2)6 B =7 1 58 4 39 2 6

Die Funktionen tril und triu extrahieren ei-ne Dreiecksmatrix aus einer gegebenen Matrix.

Aufgabe 32 (Dreiecksmatrizen) Erzeugen Sieeine 6 × 6 obere (untere) Dreiecksmatrix mitZufallszahlen zwischen 0 und 1!Lösung:

1 >> triu(rand(6))

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

Aufgabe 33 (Matrizenmanipulationen) Gege-ben 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 über-prü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))

Aufgabe 34 (circshift) Verschieben Sie je-de Zeile der Matrix

A =

1 2 34 5 67 8 9

52 Copyright c© G. Gramlich

um eine Zeile nach unten und die letzte in dieerste Zeile.Lösung:

1 >> A = [1 2 3; 4 5 6; 7 8 9];2 >> circshift(A,1)3 ans =4 7 8 95 1 2 36 4 5 6

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

Aufgabe 35 (fliplr) Spiegeln Sie von derMatrix

A =

1 2 34 5 67 8 9

die Spalten.Lösung:

1 >> A = [1 2 3; 4 5 6; 7 8 9];2 >> fliplr(A)3 ans =4 3 2 15 6 5 46 9 8 7

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

36.5. Datenanalye

Die Tabelle 17. zeigt grundlegende Funktio-nen zur Analyse von Daten. Der einfachste Ge-brauch dieser Funktionen ist, wenn die Datenin Vektoren gegeben sind. Zum Beispiel:

1 >> x = [3 -7 -1 1 0]2 x =3 3 -7 -1 1 04 >> [min(x) max(x)]5 ans =

Funktion Bedeutungmax Maximales Elementmin Minimales Elementmean Arithmetischer Mittelwertmedian Zentralwert (Median)std Standardabweichungvar Varianzsort Sortiertsum Berechnet Summenwertprod Berechnet Produktwertcumsum Summiertcumprod Multipliziertdiff Bildet Differenz

Tabelle 17: Datenanalye

6 -7 37 >> sort(x)8 ans =9 -7 -1 0 1 3

10 >> sum(x)11 ans =12 -4

Die Funktion sort sortiert in aufsteigenderOrdnung; absteigende Ordnung erhält mandurch das Extraargument ’descent’. Sind dieVektoren komplex, so wird nach dem Absolut-wert geordnet. NaNs werden von dem Funktio-nen min und max ignoriert und sort setzt siean das Ende.

Sind die Eingabeargumente Matrizen, so arbei-ten die Funktionen zur Datenanalyse spalten-weise. Ist zum Beispiel

1 A =2 0 -1 23 1 2 -44 5 -3 0

53 Copyright c© G. Gramlich

so ist

1 >> max(A)2 ans =3 5 2 2

Aufgabe 36 (Datenanalye) Gegeben seien dieVektoren

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

und die Matrix

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

Bestimmen Sie folgende Ausdrücke, zunächstmit Bleistift und Papier, danach mit Matlab.

1 max(x); min(A);2 min(x,y); mean(A);3 median(x); cumprod(A);4 sort(2*x+y); sort(A);

Lösung: Es ist

1 >> max(x)2 ans =3 74 >> min(A)5 ans =6 1 -1 -27 >> min(x,y)8 ans =9 0 -1 -2 7

10 >> mean(A)11 ans =12 3.0000 3.3333 3.000013 >> median(x)14 ans =15 1.500016 >> cumprod(A)17 ans =18 1 3 7

19 2 24 2820 12 -24 -5621 >> sort(2*x+y)22 ans =23 1 3 5 2124 >> sort(A)25 ans =26 1 -1 -227 2 3 428 6 8 7

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

Aufgabe 37 (Datenanalye) Bestimmen Sie dieWerte der folgenden Ausdrücke. ÜberprüfenSie Ihre Ergebnisse 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))

Lösung:

1 >> any(B)2 ans =3 1 1 14 >> find(B)5 ans =6 17 38 69 7

10 811 >> all(any(B))12 ans =

54 Copyright c© G. Gramlich

13 114 >> any(all(B))15 ans =16 017 >> finite(B(:,3))18 ans =19 120 121 122 >> any(B(1:2,1:3))23 ans =24 1 0 1

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

Aufgabe 38 (Größtes Element) Bestimmen Sievon der Matrix

A =

1 2 34 5 67 8 9

das größte Element.Lösung: Dies kann man wie folgt erreichen:

1 >> A = [1 2 3; 4 5 6; 7 8 9];2 >> max(max(A))3 ans =4 9

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

37. Vektorielle Programmierung

Eine der großen Vorzüge von Matlab bestehtdarin, dass man Ausdrücke vektoriell program-mieren und so auf Schleifen weitgehend ver-zichten kann. Was ist damit gemeint? Wir zei-gen die Idee am Besten an einem einfachenBeispiel. Will man zum Beispiel den Funkti-onsterm y = x2 im Punkt x = 1.4 auswerten, sogeht das wie folgt

1 >> x = 1.4;2 >> y = x^2;

und in der Variablen y ist der Wert 1.96 ge-speichert. Will man nun aber zum Beispiel inhundert verschiedenen x-Werten die entspre-chenden y-Werte (ein Vektor mit 100 Koor-dinaten) berechnen, so braucht man in Mat-lab keine Schleife, sondern kann gleichzeitigalle hundert y-Werte ausrechnen, indem manden ˆ.-Operator verwendet, der die Potenzie-rung zweier Matrizen (Vektoren) elementweisedurchführt. Hier ein Beispiel mit der gleichenFunktionsgleichung y = x2 wie oben:

1 >> x = linspace(0,3,100);2 >> y = x.^2;

In der ersten Anweisung werden hundert x-Werte (ein Vektor mit hundert Koordinaten)erzeugt (hundert äquidistante Punkte im In-tervall [0, 3]) und in der zweiten Anweisungwird der Vektor y mit hundert Koordina-ten generiert, der die entsprechenden Funk-tionswerte enthält. Diese Vorgehensweise hatden Vorteil, dass man auf Schleifen verzich-ten kann und außerdem einen übersichtliche-ren Programmcode erhält. Eingebaute Matlab-Funktionen erlauben als Eingabeparameter fastimmer Vektoren. Daher gilt:

Programmieren Sie vektoriell, wennimmer dies möglich ist!

Der Befehl vectorize kann in der ein oderanderen Situation hilfreich sein, siehe docvectorize (help vectorize). In Abschnitt47 gehen wir auf diese Thematik nochmalsausführlicher ein.

55 Copyright c© G. Gramlich

Aufgabe 39 (Vektorielle Prog.) Berechnen Siee−x2

in 200 äquidistanten Punkten zwischen -3und 3 und speichern Sie die Werte in der Varia-blen y.Lösung: Hier ein möglicher Lösungsweg:

1 >> x = linspace(-3,3,200);2 >> y = exp(-x.^2);

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

38. Ein- und Ausgabe

In diesem Abschnitt diskutieren wir, wie durcheinen Benutzer Daten eingelesen werden kön-nen, wie man Informationen auf dem Bild-schirm ausgeben und Dateien lesen und schrei-ben kann. Wie man eine ganze Sitzung in ei-ner Datei auszeichnen kann, wissen wir be-reits aus Abschnitt 13. Wie Grafiken gespei-chert und gedruckt werden können, steht inAbschnitt 40.13. Zur Dateneingabe siehe auchAbschnitt 10.

38.1. Benutzereingabe

Mit der Funktion input kann der Benutzer in-teraktiv Daten eingeben.

1 >> x = input(’Startwert: ’)2 Startwert: 1.53 x =4 1.5000

In diesem Beispiel wartet Matlab auf die Ein-gabe eines Wertes durch den Benutzer. Ich ha-be 1.5 eingegeben und dieser Wert wird dannder Variablen x zugewiesen. Die Eingabe wird

als String interpretiert, wenn ein zweites Argu-ment ’s’ angehängt wird:

1 >> MeinTitel = input(’Titel: ’,’s’)

2 Titel: Versuch 53 MeinTitel =4 Versuch 5

38.2. Bildschirmausgabe

Wir wissen bereits, dass Matlab immer danneine Ausgabe am Bildschirm macht, wenn aufdas Semikolon verzichtet wird, siehe Abschnitt25. Außerdem kann mit den Funktion formatdie Ausgabe kontrolliert werden. Eine nochbessere Kontrolle über die Ausgabe erhält manaber durch die Verwendung weiterer Funktio-nen.

Als erste Funktion ist disp zu nennen. OhneNamen und Gleichheitszeichen gibt diese denWert einer Variablen am Bildschirm an. Hierein Beispiel:

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

2 Die (2,2)-Hilbert-Matrix3 >> disp(hilb(2))4 1.0000 0.50005 0.5000 0.3333

Mehr Ausgabemöglichkeiten hat man mit derFunktion fprintf. In dem Beispiel

1 >> fprintf(’%6.3f\n’,pi)2 3.142

ist das Zeichen % der Beginn einer Formatbe-zeichnung. 6.3f bedeutet, dass der Wert derVariablen mit der Feldgröße (zur Verfügung

56 Copyright c© G. Gramlich

gestellte Gesamtbreite) 6, 3 Nachkommastel-len und in Fließpunktdarstellung ausgegebenwird. Das Zeichen \n gibt einen Zeilenvor-schub an, ohne dieses die folgende Ausgabein die aktuelle Zeile geschrieben werden wür-de. Siehe doc fprintf (help fprintf) fürweitere Informationen und Beispiele.

Die Funktion sprintf ist analog zur Funk-tion fprintf, aber die Ausgabe geschiehtals Zeichenkette, siehe doc sprintf (helpsprintf) für weitere Einzelheiten.

Aufgabe 40 (Tabellen) Schreiben Sie einenScript-File ExpTabelle und erzeugen Sie aufdem Bildschirm die folgende Ausgabe der Ex-ponentialfunktion ex. Wählen Sie 21 äquidi-stante Punkte im Intervall [0, 1]. VerwendenSie dazu die Funktionen disp und sprintfoder fprintf.

1 Werte der exp-Funktion2

3 k exp(x(k))4 ----------------------5 1 1.00006 2 1.05137 3 1.10528 4 1.16189 5 1.2214

10 6 1.284011 7 1.349912 8 1.419113 9 1.491814 10 1.568315 11 1.648716 12 1.733317 13 1.822118 14 1.915519 15 2.013820 16 2.117021 17 2.2255

22 18 2.339623 19 2.459624 20 2.585725 21 2.7183

Lösung: Der Inhalt des Script-Files könnte et-wa wie folgt lauten:

1 x = linspace(0,1,21);2 y = [1:21; exp(x)];3 disp(’Werte der exp-Funktion’)4 disp(’ ’)5 disp(’ k exp(x(k))’)6 disp(’ --------------------------’

)7 disp(sprintf(’%6.0f %15.4f\n’,y))

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

38.3. Dateien lesen und schreiben

Eine große Anzahl von Funktionen stehen zurVerfügung, um formatierte Textdateien aus ei-ner Datei zu lesen oder in eine Datei zu schrei-ben. Hierbei können Sie zwischen binärem undlesbarem Ascii-Format wählen. Binärdateienhaben gegenüber Ascii-Dateien die Vorteile,dass sie weniger Speicherplatz benötigen undschneller gelesen und beschrieben werden kön-nen. Ihr Nachteil ist, dass sie nicht einfach miteinem Editor gelesen werden können. Die Ta-belle 18 zeigt vier Funktionen. Eine komplet-te Funktionsliste erhalten Sie mit doc iofun(help iofun).

Wir zeigen nun an einem Beispiel, wie manDaten in einen File schreibt und lesen sie an-schließend wieder heraus. Bevor man mit ei-ner Datei arbeiten kann, muss man sie mit derFunktion fopen öffnen. Das erste Argument ist

57 Copyright c© G. Gramlich

Funktion Ascii binärfscanf ×

fprintf ×

fread ×

fwrite ×

Tabelle 18: Dateien lesen und schreiben

der Dateiname und für das zweite Argumenthat man mehrere Möglichkeiten unter ande-rem die Zeichen ’r’ für Lesen (read) und ’w’für Schreiben (write). Durch den Aufruf vonfopen wird eine Fileidentifizierung zurückge-geben, die in den folgenden Anweisungen ver-wendet werden kann, um den File zu spezi-fizieren. Die Daten werden mit der Funktionfprintf geschrieben, wobei als erstes Argu-ment die Fileidentifizierung anzugeben ist. DasScript

1 >> a = [30 40 50];2 >> fid = fopen(’MeinOutput’,’w’);3 >> fprintf(fid,’%g m/h = %g km/h\n

’,[a;8*a/5]);4 >> fclose(fid);

erzeugt im File MeinOutput die Zeilen

1 30 m/h = 48 km/h2 40 m/h = 64 km/h3 50 m/h = 80 km/h

die für drei Geschwindigkeiten eines Fahr-zeugs in Meilen pro Stunde die entsprechendenWerte in Kilometer pro Stunde angeben.

Der File kann wie folgt zurückgelesen werden.

1 >> fid = fopen(’MeinOutput’,’r’);2 >> x = fscanf(fid,’%g m/h = %g km/

h’)

3 x =4 305 486 407 648 509 80

10 >> fclose(fid);

Hierbei liest die Funktion fscanf die Datenin dem angegebenen Format (hier %g, gene-ral floating point number), wobei die Strings’m/h =’ und ’g km/h’ übergangen werden.Dies wiederholt sich so lange, bis der gesamteFile gelesen wurde und die Zahlen im Vektor xgespeichert wurden.

39. Function Functions

In Matlab hat sich der Begriff function func-tion eingebürgert. Damit ist eine Matlab-Function gemeint, die ihrerseits als Einga-beargument eine Function benötigt. (Matlab-Functions werden wir noch ausfrührlich be-handeln). Ein Beispiel einer Function Functi-on ist fplot, mit der man Graphen von ma-thematischen Funktionen zeichnen kann. DieseFunction benötigt als erstes Eingabeargumenteine Function. Wir zeigen die Arbeitsweise aneinem Beispiel.

Geplottet werden soll die Funktion f (x) = x2,x ∈ R im Intervalle [−2, 2]. Diese kann in Mat-lab durch

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

definiert werden. Der Aufruf

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

58 Copyright c© G. Gramlich

zeichnet dann die Funktion im Intervalle von−2 bis 2. Man sieht, dass das erste Argu-ment von fplot selbst eine Funktion ist, näm-lich in diesem Fall die selbstdefinierte Funkti-on f (x) = x2, x ∈ R. Für eingebaute Funk-tionen entfällt natürlich deren Definition. Hierein Beispiel mit der eingebauten Sinusfunktionsin. Die folgende Zeile plottet die Sinusfunk-tion im Intervall von −3 bis 3:

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

Andere Function Functions sind zum Bei-spiel fzero, quad, ode45, usw. Wir wer-den diese und andere Funktionen in den spä-teren Abschnitten ausführlicher besprechen.Alle Function Functions sind im Verzeich-nis funfun untergebracht, siehe doc funfun(help funfun).

40. Grafik

Twenty years ago, we did not interact withcomputers graphically; now, everything is

graphical. In the next twenty years an equallygreat change will occur as we begin to

communicate with machines by speech.Lloyd N. Trefethen

Matlab verfügt über moderne und mächti-ge Visualisierungsmöglichkeiten. Dies ist ei-ner der Gründe für den Erfolg von Matlab.Das Visualisieren von Daten ist typisch impraktischen Einsatz von Matlab, während dasZeichnen von explizit bekannten Funktionensehr von Nutzen in der Lehre ist. Eine Viel-zahl von Gestaltungsmöglichkeiten statistische

Daten darzustellen stehen bereit. Auf der Ho-mepage von The Mathworks steht ein Online-Grafikhandbuch zur Verfügung, siehe [15].

Wenn wir nun grafische Fähigkeiten von Mat-lab zeigen, so handelt es sich um die Beschrei-bung grafischer Funktionen, die man zur Vi-sualisierung von Daten im Command Windoweingibt. Fast alle hier aufgezeigten Merkma-le können Sie nach Öffnen einer Figur durchMausklick über den Plot Browser, Figure Pa-lette, Property Editor, usw. beeinflussen (sieheMenü-Item Show Plot Tools in der geöffnetenFigur).

40.1. 2D-Grafik

Wir beginnen die grafischen Möglichkeitenvon Matlab mit 2D-Grafiken (zweidimensio-nalen Grafiken). Eine häufig verwendete Funk-tion ist die plot-Funktion (doc plot). Dieserwerden im einfachsten Fall Koordinaten vonPunkten aus der Ebene übergeben, die dannvon plot durch gerade Linien verbunden wer-den. Ein einfaches Beispiel soll dies erläutern.

Hierzu nehmen wir an, dass die Messung deszeitlichen Verlaufs der Abkühlung einer Flüs-sigkeit die Werte aus der Tabelle 19 ergab. Wirwollen dieses Messergebnis nun grafisch dar-stellen. Hierzu speichern wir die Zeitpunkte imVektor x und die Temperaturwerte in y, also

1 x = [0 0.5 1 1.5 2 2.5 3 3.5 4];2 y = [62 55 48 46 42 39 37 36 35];

Der Befehl

1 >> plot(x,y)

59 Copyright c© G. Gramlich

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 19: Abkühlung einer Flüssigkeit

erzeugt ein Grafikfenster und zeichnet die Ele-mente von x gegen die Elemente von y und ver-bindet diese Punkte geradlinig. Die Abbildung10 zeigt das Ergebnis.

0 0.5 1 1.5 2 2.5 3 3.5 435

40

45

50

55

60

65

Abbildung 10: Abkühlung einer Flüssigkeit

Wir zeichnen nun den Graph der explizit gege-benen Funktion f (x) = sin(x) auf dem Intervall[0, 2π]. Dazu müssen drei Dinge getan werden:

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

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

2. Die Funktion muss an jedem Diskretisie-rungspunkt ausgewertet werden:

yk = f (xk) k = 1 : n

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

Das folgende Script zeigt die Realisierung:

1 >> n = 20;2 >> x = linspace(0,2*pi,n);3 >> y = sin(x);4 >> plot(x,y)

Hierzu haben wir das Intervall [0, 2π] in 20äquidistante Punkte eingeteilt und die Wer-te dem Vektor x zugeordnet. Die Sinusfunk-tion ist eine eingebaute Matlab-Funktion, dieVektoren als Argumente verarbeiten kann. Da-durch wird der Vektor y erzeugt. Mit gridzeichnen wir noch ein Gitter und geben mittitle der Abbildung noch eine Überschrift.

1 >> grid2 >> title(’Die Sinusfunktion im

Intervall [0,2\pi]’)

Die Abbildung 11 zeigt das Ergebnis.

Aufgabe 41 (2D-Grafik) Erzeugen Sie mit ei-nem einzigen plot-Befehl die Graphen derFunktionsterme sin(kx) über dem Intervall[0, 2π] für k = 1 : 5.Lösung: Dies kann man zum Beispiel mit denbeiden folgenden Methoden erreichen.

1 %-Methode 1:2 x = linspace(0,2*pi);3 plot(x,sin(x),x,sin(2*x),x,sin(3*x

),x,sin(4*x),x,sin(5*x))4 %-Methode 2:

60 Copyright c© G. Gramlich

0 2 4 6 8−1

−0.5

0

0.5

1Die Sinusfunktion im Intervall [0,2π]

Abbildung 11: Ein einfacher Plot

5 x = linspace(0,2*pi);6 Y = [sin(x);sin(2*x);sin(3*x);sin

(4*x);sin(5*x)];7 plot(x,Y)8 %-Methode 3:9 x = linspace(0,2*pi);

10 plot(x,sin(x)), hold on,11 for k=2:512 plot(x,sin(k*x),’-’)13 end14 hold off

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

Aufgabe 42 (2D-Grafik) Zeichnen Sie denGraph der Funktion

rect(x) =

1 |x| ≤ 0.50 sonst

über dem Intervall [−3, 3].Lösung: Wir definieren zunächst die Funkti-on rect in einem Function-File und zeichnendann mit plot den Graph der Funktion.

1 function y = rect(x)2 n = length(x);3 y = zeros(n,1);

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

Die folgenden Befehle zeichnen den Graph.

1 x = linspace(-3,3,1000);2 y = rect(x);3 plot(x,y)4 axis([-3 3 -0.5 1.5])

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

Aufgabe 43 (2D-Grafik) Geben Sie folgendeBefehle in Matlab ein.

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

Stellen Sie nun den Kreis x2 + y2 = 1 grafischdar ohne dabei zusätzliche Berechnungen an-zustellen.Lösung: Die Eingabe lautete

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

Dabei sei zu bemerken, das x.^2 und nichtx^2 verwendet wurde. Hierbei wird durchden Punkt sichergestellt, dass das QuadrierenKomponentenweise erfolgt und nicht die Vek-toroperation x ·x ausgefürt wird. Man will nunden Kreis in R2 zeichnen.plot(x,y) liefert nur den Graphen im erstenQuadranten. Also kann man durch geeigneteSpiegelung den Graph auch in den anderen dreiQuadranten zeichnen. Der Kreis kann in Mat-lab etwa wie folgt gezeichnet werden:

1 >> plot(x,y)2 >> hold on3 >> plot(-x,y)4 >> plot(x,-y)5 >> plot(-x,-y)

61 Copyright c© G. Gramlich

6 >> axis equal7 >> hold off

Der Befehl hold on sorgt dafür, dass die Re-sultate aller plot-Befehle erhalten bleiben.Um die Bedeutung des Befehls axis equalzu verstehen können Sie help axis verwen-den. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

Mit der Funktion subplot besteht die Mög-lichkeit, mehrere Bilder untereinander und/o-der nebeneinander in einer Figur zusetzen, sie-he doc subplot (help subplot).

40.2. 3D-Grafik

Die zur plot-Funktion analoge Funktion fürdie 3D-Welt ist die plot3-Funktion. Die Ver-wendung von plot3 ist ähnlich wie die vonplot, wobei statt Paare nun Tripel von Dateneinzugeben sind. Das folgende Beispiel zeigtden einfachsten Gebrauch: plot3(x,y,z)zeichnet eine Kurve im Raum, indem die Punk-te x(i),y(i),z(i) in der vorgegebenen Rei-henfolge verbunden werden. Das Ergebnis istin Abbildung 12 zu sehen.

1 t = -5:0.005:5;2 x = (1+t.^2).*sin(20*t);3 y = (1-t.^2).*cos(20*t);4 z = t;5 plot3(x,y,z), grid on6 xlabel(’x(t)’), ylabel(’y(t)’),

zlabel(’z(t)’)7 title(’\it{plot3-Beispiel}’,’

FontSize’,14)

In diesem Beispiel haben wir die Funktio-nen xlabel, ylabel, title und entspre-chend zlabel zur Beschriftung der Abbil-

−50

0

50

−50

0

50−5

0

5

x(t)

plot3−Beispiel

y(t)

z(t)

Abbildung 12: 3D-Plot mit plot3

dung verwendet. Die Notation \it im title-Kommando stammt aus TEX, um Italic-Text zuerzeugen. Farben, Marken und Linienstile kön-nen in der gleichen Weise wie bei der plot-Funktion beeinflusst werden. So erzeugt zumBeispiel plot3(x,y,z,’r�’) eine rot gestri-chelte Linie. Beachten Sie, dass für 3D-Plotsbox off gesetzt ist. Mit box on können SieIhrem Plot eine Box hinzufügen.

Will man den Graph eines Funktionstermsf (x, y) mit den beiden unabhängigen Variablenx, y zeichnen, so muss man die Funktionswer-te auf einem zweidimensionalen Gitter in derx, y-Ebene auswerten. Das Gitter kann mit derFunktion meshgrid erzeugt werden; anschlie-ßend kann man den Graph mit mesh, surfusw. zeichnen.

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

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

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

62 Copyright c© G. Gramlich

4 >> xlabel(’x’), ylabel(’y’),zlabel(’f(x,y)’)

Die Abbildung 13 zeigt das Ergebnis.

−2−1

01

2

−2

0

2−0.1

−0.05

0

0.05

0.1

xy

f(x,

y)

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

Aufgabe 44 (3D-Grafik) Zeichnen Sie denGraph der Funktion

f (x1, x2) ={− 1

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

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

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

2 >> Z = 2*ones(size(X));3 >> Z = -0.5*Y.*(X>=0 & Y>=0)+2;4 >> mesh(X,Y,Z)5 >> axis([-2,2,-2,2,1,3])6 >> xlabel(’x_1’), ylabel(’x_2’)

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

Mehr Informationen über Visualisierungsmög-lichkeiten findet man mit doc graph2d (help

graph2d), doc graph3d (help graph3d)und doc specgraph (help specgraph).

Aufgabe 45 (3D-Grafik) Zeichnen Sie denGraph 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:

1 [X,Y] = meshgrid(-3:0.1:3);2 Z = 1/5*cos(X)+Y.*exp(-X.^2-Y.^2);3 mesh(X,Y,Z)

oder als Einzeiler mit ezmesh.

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

2 >> ezmesh(f,[-3,3])

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

40.3. Funktionsdarstellungen

Kennt man den Funktionsterm einer reellwer-tigen Funktion einer reellen Variablen, so kannman mit den Funktionen fplot und ezplot(easy plotting) den Graph einfacher darstel-len als mit plot. Die Funktion fplot ver-langt den Funktionsterm in einem m-File (Ab-schnitt 44) oder als Function Handle (docfunction_handle). Die Funktion ezplot er-wartet den Funktionsterm in Hochkomma oderals symbolisches Objekt, siehe Abschnitt 66.

Der Aufruf

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

63 Copyright c© G. Gramlich

plottet die Funktion

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

im Intervall [−3, 3]. Mit

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

plottet man im Intervall [−2, 2] die eingebautehumps-Funktion

f (x) =1

(x − 0.3)2 + 0.01

+1

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

Die Abbildung 14 zeigt den Graph von humps

−2 −1 0 1 2−20

0

20

40

60

80

100

Abbildung 14: Graph der humps-Funktion

im Intervall [−2, 2].

Aufgabe 46 (Funktionsdarstellungen) Zeich-nen Sie den Graph des Funktionsterms

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

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

1 x = linspace(0,5);2 f = sin(x.^2)-2*cos(x);3 plot(x,f)4 %-oder:5 fplot(’sin(x^2)-2*cos(x)’,[0,5])6 %-bzw.7 f = @(x) sin(x.^2)-2*cos(x);8 fplot(f,[0,5])9 %-oder:

10 ezplot(’sin(x^2)-2*cos(x)’,[0,5])11 %-bzw.12 f = @(x) sin(x.^2)-2*cos(x);13 ezplot(f,[0,5])

Der Graph ist in Abbildung 15 dargestellt. © ©

0 1 2 3 4 5

−2

−1

0

1

2

3

x

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

Abbildung 15: Graph

Die Abbildung 16 zeigt vier verschiedene Dar-stellungen einer Funktion mit zwei Variablen.Es handelt sich hier um die sogenannte peaks-Funktion, die in Matlab bereits vordefiniert 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

64 Copyright c© G. Gramlich

−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 16: Darstellungen der peaks-Funktion

Die peaks-Funktion geht durch Translationenund Skalierungen aus der Gaussschen Nor-malverteilungsfunktion hervor. Das Bild linksoben in Abbildung 16 zeigt den Graph, rechtsoben Kurven gleicher Höhe (Höhenschittbil-der), links unten ein paar Höhenlinien undrechts daneben farbig ausgefüllte Höhenliniender peaks-Funktion. Die Figur wurde mit denfolgenden Anweisungen erzeugt:

1 [X,Y,Z] = peaks(30);2 subplot(2,2,1), surf(X,Y,Z),3 subplot(2,2,2), contour3(X,Y,Z),4 subplot(2,2,3), contour(X,Y,Z),5 subplot(2,2,4), contourf(X,Y,Z),

Die Abbildung 17 zeigt den Graph der Funkti-on f (x, y) = xex2+y2

, (x, y) ∈ R2, wobei hier dieFunktion colormap zum Einsatz kommt unddafür sorgt, dass der Graph (das Netz) blau ist.Die Funktion colormap erlaubt es, Daten mitFarbtabellen (color map) zu visualisieren. Mitder Funktion colorbar können Sie sich dieaktuelle Farbtabelle in der entsprechenden Fi-gur anzeigen lassen. Die Figur wurde mit Hilfeder Anweisungen erzeugt:

−20

2

−2

0

2

−0.4

−0.2

0

0.2

0.4

x

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

y

Abbildung 17: Graph

1 fh = @(x,y) x.*exp(-x.^2-y.^2);2 ezmesh(fh,40)3 colormap([0 0 1])

Die Abbildung 18 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 18: 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 einen leichtgelblichen Hintergrund mit einem leicht grau-en Rahmen. Die Figure wurde mit Hilfe derAnweisungen erzeugt:

65 Copyright c© G. Gramlich

1 Z = peaks;2 [C,h] = contour(interp2(Z,4));3 text_h = clabel(C,h);4 set(text_h,’BackgroundColor’,[1 1

.6],’Edgecolor’,[.7 .7 .7])

40.4. Parametrisierte Kurven

Mit Hilfe der Funktionen ezplot undezplot3 lassen sich Kurven in Parameter-darstellung in zwei und drei Dimensionendarstellen. Als Beispiel einer ebenen Kurvebetrachten wir eine dreiblättrige Blütenblatt-kurve (Trochoide) Sie hat die Parameterformx = cos(3t) cos(t), y = cos(3t) sin(t),t ∈ [0, 2π]. Mit Hilfe der Anweisung

1 r1 = @(t) cos(3*t).*cos(t);2 r2 = @(t) cos(3*t).*sin(t);3 ezplot(r1,r2,[0,2*pi]), grid;

erzeugt man die Abbildung 19.

−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 19: Blütenblattkurve

Die Anweisungen

1 r1 = @(t) exp(-0.2*t).*cos(t);2 r2 = @(t) exp(-0.2*t).*sin(t);

3 r3 = @(t) t;4 ezplot3(r1,r2,r3,[0,20],’animate’)

erzeugen die räumliche Kurve in Abbildung20. Durch das zusätzlich Argument animate

−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 20: Räumliche Kurve

im Funktionsaufruf erhält man eine Animati-on der räumlichen Kurven in dem Sinn, dassein roter Punkte vom Anfagang- zum Endpuntläuft.

Aufgabe 47 (Räumliche Kurve) Plotten Sie dierä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.

1 t = -5:0.005:5;2 x = (1+t.^2).*sin(20*t);3 y = (1+t.^2).*cos(20*t);4 z = t;5 plot3(x,y,z),6 grid on, xlabel(’x(t)’),

66 Copyright c© G. Gramlich

7 ylabel(’y(t)’), zlabel(’z(t)’)

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

Aufgabe 48 (Ebene Kurve) Plotten Sie die Zy-kloide (Rollkurve)

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.

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

2 grid on, xlabel(’x(t)’),3 ylabel(’y(t)’)

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

Aufgabe 49 (Ebene Kurve) Zeichnen Sie dieKurve

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.

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

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

Aufgabe 50 (Ebene Kurve) Zeichnen Sie dieKurve

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.

1 ezplot(’sin(-t)’,’1-cos(-t)’,[0,pi])

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

Aufgabe 51 (Räumliche Kurve) Zeichnen Siedie Schraubenlinie (Helix, zylindrische Spira-le)

x = cos(t)

y = sin(t)

z = t

im x, y, z-Raum für 0 ≤ t ≤ 20π. AnimierenSie!Lösung: Die Schraubenlinie mit Animationerhält man wie folgt:

1 >> ezplot3(’cos(t)’,’sin(t)’,’t’,[0,20*pi],’animate’)

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

Aufgabe 52 (Räumliche Kurve) Zeichnen Siedie konische Spirale

x = (1 − t) cos(t)

y = (1 − t) sin(t)

z = t

im x, y, z-Raum für 0 ≤ t ≤ 20π. AnimierenSie!Lösung: Die konische Spirale mit Animationerhält man wie folgt:

1 >> ezplot3(’(1-t)*cos(t)’, ’(1-t)*sin(t)’, ’t’, [0,20*pi], ’animate’)

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

67 Copyright c© G. Gramlich

40.5. Parametrisierte Flächen

Mit den Matlab-Funktion ezmesh undezsurf können parametrisierte Flächen im R3

dargestellt werden.

Ein Torus entsteht, wenn ein Kreis um eineAchse rotiert, die in der Ebene des Kreises,aber außerhalb des Kreises verläuft. Eine Pa-rameterdarstellung 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 21.

1 x = @(theta,phi) (10+4*cos(theta)).*cos(phi);

2 y = @(theta,phi) (10+4*cos(theta)).*sin(phi);

3 z = @(theta,phi) 4*sin(theta);4 ezmesh(x,y,z), axis equal5 colormap([0,0,1])

−10

0

10

−10−5

05

10

−202

xy

z

Abbildung 21: Ein Torus

Aufgabe 53 (Parametrisierte Flächen) WelcheFläche entsteht durch den folgenden Aufruf:

1 ezsurf(’2*cos(u)*cos(v)’,’2*sin(u)*cos(v)’,’2*sin(v)’,[-pi/2,pi/2]),

2 axis equal

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

Aufgabe 54 (Parametrisierte Flächen) WelcheFläche entsteht durch den folgenden Aufruf:

1 ezsurf(’u*cos(v)’,’u*sin(v)’,’2*v’,[0,8*pi]), axis equal

Lösung: Es entsteht eine Wendelfläche, sie-he Abbildung 22. Eine Wendelfläche entsteht,

−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 22: Wendelfläche

wenn eine Strecke um eine zu ihr orthogonaleAchse geschraubt wird. Wir nehmen an, dassdiese Achse gleich der z-Achse des Koordi-natensystems ist. Hat die Strecke die Länge lund ist φ der Winkel, den sie mit der positivenx-Achse einschliesst, so ist eine Parameterdar-stellung der Wendelfläche durch

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

2π,

68 Copyright c© G. Gramlich

für 0 ≤ φ ≤ π, 0 ≤ t ≤ 1 gegeben. Der Parame-ter c bezeichnet die Ganghöhe, das heißt denHöhengewinn bei einer vollen Umdrehung. ©©

40.6. Implizite Kurven

Mit der Funktion ezplot lassen sich auch im-plizit definierte Kurven darstellen. Der folgen-de Script gibt einige Beispiele:

1 subplot(2,3,1)2 ezplot(’x^2/15^2+y^2/9^2-1’

,[-15,15])3 hold on; plot([-12,12],[0,0],’ro’)4 hold off; grid; pause;5 subplot(2,3,2)6 ezplot(’-x^2/4+y^2/25-1’,[-15,15])7 grid; pause;8 subplot(2,3,3)9 ezplot(’x^4+y^4-14^4’,[-15,15])

10 grid; pause;11 subplot(2,3,4)12 ezplot(’y^2-x^3/9+6*x+10’

,[-15,15])13 grid; pause;14 subplot(2,3,5)15 f = @(x,y) (x.^2+y.^2).^2-14^2*(x

.^2-y.^2);16 ezplot(f,[-15,15])17 grid; pause;18 subplot(2,3,6)19 ezplot(’abs(x)+abs(y)-14’

,[-15,15]); grid;

40.7. Implizite Flächen

Implizit definierte Flächen können ebenfallsdargestellt werden. Hier ein Beispiel, siehe Ab-bildung 23.

Abbildung 23: Implizite Fläche

1 [x,y,z] = meshgrid(-2:0.1:2);2 v = sin(10*x)/8+sqrt(z.^2+y.^2)

-0.5;3 p = patch(isosurface(x,y,z,v,0));4 view(34,40), grid on,5 set(p,’FaceColor’,’red’),6 set(p,’EdgeColor’,’None’),7 camlight, lighting gouraud,

40.8. Koordinatenachsen skalieren

Beachten Sie, dass Matlab die x- und y-Achse(und natürlich auch die z-Achse im 3D Fall)automatisch skaliert. Wollen Sie diesen Auto-matismus nicht, so können Sie mit axis (docaxis) „per Hand“ die Achsen begrenzen.Zum Beispiel erzeugt axis([-4,4,-2,2])ein Koordinatensystem, dessen x-Achse von -4bis 4 und deren y-Achse von -2 bis 2 begrenztist. Wenn Sie möchten, dass die x- und y-Achsegleich lang, also quadratisch sind, dann müs-sen Sie axis square eingeben (QuadratischeBildfläche). Wollen Sie dagegen, dass die x-und y-Achse die gleiche Skalierung haben, so

69 Copyright c© G. Gramlich

geht das mit dem Befeht axis equal. DieAbbildung 24 zeigt dies anhand des Bereichs

−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 24: Skalierungen

[−4, 4] × [−2, 2].

Um logarithmische Skalierungen zu erhalten,stehen spezielle Funktionen zur Verfügung,siehe Tabelle 20.

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

Tabelle 20: Logarithmische Skalierungen

Aufgabe 55 (Skalierungen) Zeichnen Sie denGraph der Funktion y = 3e−1/2x, x ∈ R ineinem rechtwinkligen Koordinatensystem vonx = 0 bis x = 10, wobei die y-Achse logarith-misch skaliert sein soll.Lösung: Mit

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

erhalten wir die Abbildung 25. Der Graph der

0 2 4 6 8 1010

−2

10−1

100

101

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

Exponentialfunktion ist wie erwartet eine Ge-rade. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 56 (Skalierungen) Zeichnen Sie denGraph der Funktion y =

√x, x ∈ R in einem

rechtwinkligen Koordinatensystem von x = 1bis x = 1000, wobei die x- und y-Achse loga-rithmisch skaliert sein soll.Lösung: Mit

1 >> x = 1:1000;2 >> y = sqrt(x);3 >> loglog(x,y); grid;

erhalten wir die Abbildung 26. Der Graph derQuadratwurzelfunktion ist wie erwartet eineGerade. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

40.9. Zwei y-Achsen

Mit der Funktion plotyy können wir Daten-sätze mit zwei y-Achsen zeichnen; die eineAchse links, die Andere rechts. Als Beispielbetrachten wir die Funktion y = 3e−1/2x, x ∈ R.Zeichnet man die Graph dieser Funktion in ein

70 Copyright c© G. Gramlich

100

101

102

103

100

101

102

Abbildung 26: y =√

x, x ≥ 1

gewöhnliches kartesisches Koordinatensystemmit gleicher Skalierung, so erhält man den ty-pischen Verlauf einer abfallenden Exponential-funktion. Skaliert man die y-Achse jedoch lo-garithmisch, so ist der Graph eine Gerade. Wirplotten diese beiden Kurven mit der Funktionplotyy nun in eine Figur. Nach den Eingaben

1 >> x = linspace(0,10);2 >> y = 3*exp(-0.5*x);3 >> plotyy(x,y,x,y,’plot’,’semilogy

’)

erhalten wir die Abbildung 27. Die linke y-Achse ist gewöhnlich linear skaliert, währenddie rechte y-Achse logarithmisch skaliert ist.

40.10. Koordinatentransformationen

Mit der Funktion cart2pol können karte-sische Koordinaten in Polar- bzw. Zylinder-koodinaten transformiert werden. Die Funkti-on pol2cart transformiert umgekehrt Polar-bzw. Zylinderkoordinaten in kartesische Koor-dinaten. Mit cart2sph bzw. sph2cart kön-nen Transformationen von kartesischen zu Po-

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 27: Zwei Skalierungen

larkoordinaten und umgekehrt durchgeführtwerden.

Zum Zeichnen von Polarkoordinaten ist dieFunktion polar geeignet.

40.11. Spezielle Grafikfunktionen

Weitere Grafikfunktionen findet man in der Ta-belle 21. Insbesondere zur Darstellung statisti-scher Daten sind diese von großer Bedeutung.

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

Tabelle 21: Weitere Grafikfunktionen

71 Copyright c© G. Gramlich

40.12. Vektorfelder visualisieren

Mit der Funktion quiver (doc quiver, helpquiver) können Sie Vektorfelder darstellen.Das Vektorfeld f (x, y) = (−y, x), (x, y) ∈ R2

ist in Abbildung 28 dargestellt. Das Vektorfeld

−3 −2 −1 0 1 2 3

−2

−1

0

1

2

x

y

Abbildung 28: Vektorfeld

wurde mit

1 >> [X,Y] = meshgrid(-2:0.5:2);2 >> quiver(X,Y,-Y,X), grid,3 >> axis equal

erzeugt. Jeder Vektor ist tangential zu einemKreis um den Ursprung. Die Länge des Vek-tors ist durch den Radius des Kreises gegeben.Das Vektorfeld kann als Geschwindigkeitsfeldeines Rades interpretiert werden, das sich ge-gen den Uhrzeigersinn dreht.

Aufgabe 57 (Vektorfeld) Stellen Sie das Vek-torfeld

f : R2 → R2

(x, y) 7→ (x, y)

dar.Lösung: Die Anweisungen

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

2 >> quiver(X,Y,X,Y), grid3 >> axis equal

erzeugen die Abbildung 29. © . . . . . . . . . . . . . ©

−3 −2 −1 0 1 2 3

−2

−1

0

1

2

Abbildung 29: Vektorfeld

Die Funktion quiver3 stellt das dreidimensio-nale Analogon zur Funktion quiver dar. Da-mit lassen sich also dreidimensionale Vektor-felder darstellen.

Aufgabe 58 (Vektorfeld) Stellen Sie mit derFunktion quiver3 das Vektorfeld

f : R3 → R3

(x, y, z) 7→ (2, 0, 1)

dar.Lösung: Die Anweisungen

1 >> [X,Y] = meshgrid(0:2:8,0:2:8);2 >> quiver3(X,Y,zeros(5),2*ones(5)

,0,ones(5),0)3 >> xlabel(’x’), ylabel(’y’)

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

Aufgabe 59 (Vektorfeld) Stellen Sie mit der

72 Copyright c© G. Gramlich

0 2 4 6 8 10−10

0

100

0.5

1

1.5

xy

Abbildung 30: Vektorfeld

Funktion quiver3 das Vektorfeld

f : R3 → R3

(x, y, z) 7→ (x, y, z)

dar.Lösung: Die Anweisungen

1 >> [X,Y,Z] = meshgrid(-2:1:2);2 >> quiver3(X,Y,Z,X,Y,Z,0)3 >> xlabel(’x’), ylabel(’y’),

erzeugen die Abbildung 31. © . . . . . . . . . . . . . ©

−5

0

5

−5

0

5−4

−2

0

2

4

xy

Abbildung 31: Vektorfeld

Weitere Informationen siehe doc vissuite.

40.13. Grafiken exportieren und drucken

Hat man eine Grafik erzeugt, so will man diesehäufig in einem bestimmten Grafikformat ab-speichern und gegebenenfalls in ein Satz- oderTextverarbeitungssystem einbinden. Soll dasGrafikformat Encapsulated PostScript sein(Dateiendung: eps), so geht das zum Beispielwie folgt:

1 %-Erzeuge eine Grafik.2 surf(peaks(30));3 %-Setze den Hintergrund blau.4 set(gcf,’Color’,’blue’);5 set(gcf,’InvertHardCopy’,’off’);6 %-Exportiere in File MyFile.eps7 print -depsc2 MyFile.eps

Alternativ können Sie die Grafik auch überdas Graphical User Interface exportieren. Diesgeht wie folgt:

1. Erzeugen Sie eine Figure, zum Beispiel mitsurf(peaks(30));.

2. Wählen Sie aus dem Edit Menü die FigureProperties. Dies spricht die Property Edi-tor 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 PageSetup. Dies spricht die Page Setup Dialog-box an.

5. Wählen Sie den Axes und Figure tap undklicken Sie auf Keep screen backgroundcolor, damit Matlab nicht auf den weißenHintergrund umschaltet, wenn Sie die Gra-fik expotieren.

6. Klicken Sie auf OK.

73 Copyright c© G. Gramlich

7. Wählen Sie aus dem File Menü den Unter-punkt Export aus, um die Export Dialog-box zu erzeugen.

8. Wählen Sie den Dateityp EPS Level 2 Co-lor, geben Sie den Dateinamen MyFile.epsein und speichern Sie Ihre Figur unter die-sem Namen.

Mit der Funktion print können Grafiken ge-speichert oder gedruckt werden; mit der Funk-tion saveas nur gespiechert werden.

40.14. Digitale Bilder

Matlab bietet zum Einlesen von digitalenBildern (Pixelbild, Pixel-Grafik) die Funktionimread, zum Schreiben imwrite sowie für In-formationen imfinfo. image bzw. imagescgibt die eingelesene Grafik in einer Figure aus.So erzeugen die folgenden Befehlszeilen die

Abbildung 32: Das bin ich

Figure in Abbildung 32, die das im jpg-Formatvorliegende Bild gg.jpg enthält:

1 >> G = imread(’gg.jpg’);2 >> imagesc(G), colormap(gray),3 >> axis image, axis off,

Mögliche Bildformate sind bmp, cur, gif, hdf4,ico, jpeg, usw., siehe doc imread (helpimread).

In Matlabwerden vordefinierte Pixelbilder zurVerfügung gestellt. Mit dem Befehl

1 >> load gatlin

werden die Daten der Datei gatlin.mat gela-den. Die Befehle

1 >> image(X), colormap(map),2 >> axis image

erzeugen die Abbildung 33 eine Fotografie aus

100 200 300 400 500 600

50

100

150

200

250

300

350

400

450

Abbildung 33: Pioniere der Mathematik

dem Jahr 1964 von sechs Pionieren der Nu-merischen Mathematik. Von links nach rechtshandelt es sich um die Wissenschaftler Wilkin-son, Givens, Forsythe, Householder, Henriciund Bauer.

Das Farbbild eines Clowns ist in Abbil-dung 34 zu sehen. Es kann analog der Da-tei gatlin.mat aus der Datei clown.mat er-zeugt werden. In [5] habe ich dieses Bild (alsGrautonbild) für eine Anwendung der Singu-lärwertzerlegung in der Bildverabeitung ver-wendet.

74 Copyright c© G. Gramlich

50 100 150 200 250 300

50

100

150

200

Abbildung 34: Clown

In Tabelle 22 sind wichtige Funktionen fürPixel-Grafiken zusammengefasst.

Name Bedeutungimread Pixel-Grafik einlesenimage Pixel-Grafik in Figure plottenimagesc Pixel-Grafik in Figure plottenimfinfo Infos über Pixel-Grafikimwrite Pixel-Grafik schreiben

Tabelle 22: Pixelbilder

40.15. Animationen

Um Animationen herzustellen und durchzu-führen, gibt es die Funktion movie, siehe docmovie (help movie).

40.16. Handle Graphics

Das Grafiksystem von Matlab stellt sogenann-te Low-Level-Funktionen zur Verfügung, mitdenen alle Aspekte des Grafiksystems kon-trolliert werden können. Damit besteht die

Möglichkeit, detaillierte Grafiken zu generie-ren. Die Kommandos set und get erlaubenes, jedes Grafikobjekt anzusprechen. Mit docgraphics (help graphics) erhalten Sie einekomplette Übersicht über alle zur Verfügungstehenden Kommandos und Funktionen.

40.17. Graphical User Interface (GUI)

Das Matlab-Grafiksystem verfügt außer derHandle-Graphics über eine weitere objektori-entierte Grafikkapazität: Graphical User In-terface (GUI). Damit hat man die Möglich-keit, Sliders, Buttons, Menüs und andere Gra-fikobjekte zu erzeugen, um so interaktive Be-nutzerschnittstellen zu generieren. Hierzu stehteine GUI-Entwicklungsumgebung zur Verfü-gung, siehe guide. Für weitere Einzelheitensiehe doc uicontrol (help uicontrol).

40.18. Geometrische Körper

Zum Zeichnen der geometrischen Körper El-lipsoid, Kugel und Zylinder stehen die Funk-tionen ellipsoid, sphere und cylinder zurVerfügung.

Mit [X,Y,Z]=ellipsoid(xm, ym, zm,xr, yr, zr, n) werden die Koordina-tenwerte eines Ellisoids berechnet, die mit3D-Grafikfunktionen dann geplottet wer-den können. Die ersten drei Argumentexm,ym,zm legen das Zentrum und die Argu-mente xr,yr,zr die Halbachsen fest. Dasoptionale Argument n (Voreinstellung n=20)bestimmt die Auflösung bzw. die Dimensionder 3D-Koordinatenarrays X, Y und Z.

75 Copyright c© G. Gramlich

Die Funktionen sphere und cylinder kön-nen ähnlich eingesetzt werden.

40.19. Flächenstücke (Patches)

patch ist eine Low-Level-Funktion zur Erzeu-gung von Flächenstücken (patches). Ein Patch-Objekt besteht aus Polygonen, die durch Eck-punkte definiert werden. Patches können ver-wendet werden, um reale Objekte geometrischzu modellieren, wie zum Beispiel Flugzeugeoder Automobile.

Ein Beispiel zeigt Abbildung 35. Die gerade

−0.50

0.51

1.5

−0.50

0.51

1.50

0.5

1

B

C

x

S

A

D

y

z

Abbildung 35: Pyramide

Pyramide mit der quadratischen GrundflächeA, B, C, D und der Spitze S wurde mit denfolgenden Anweisungen erzeugt.

1 %-Ecken.2 E = [0 0 0; 1 0 0; 1 1 0; 0 1 0;3 0.5 0.5 1];4 %-Kanten.5 K = [1 2 3 4;6 1 2 5 nan;7 2 3 5 nan;8 3 4 5 nan;9 4 1 5 nan];

10 patch(’Vertices’,E,’Faces’,K,’FaceColor’,[0.9 1 0.9]);

11 text(0,0,0,’A’), text(1,0,0,’B’)12 text(1,1,0,’C’), text(0,1,0,’D’)13 text(0.5,0.5,1,’S’),14 axis([-0.5 1.5 -0.5 1.5 0 1])15 xlabel(’x’), ylabel(’y’),16 zlabel(’z’), grid

Aufgabe 60 (Geometrie) Gegeben ist die drei-seitige Pyramide mit der Grundfläche A =

(−12, 0,−2), B = (12,−12,−2), C =

(0, 12,−2) und der Spitze S = (−4, 4, 6). DieKoordinaten sind bezüglich eines kartesischenKoordinatensystems gegeben. Eine Dreiecks-pyramide besitzt eine Inkugel, das heißt eineKugel, die alle vier Seitenflächen der Dreiecks-pyramide berührt. Diese Dreieckspyramide be-sitzt die Inkugel mit dem Radius r = 3 und demMittelpunkt M = (−3, 3, 1). Stellen Sie die Py-ramide und die Inkugel dar.Lösung: Das folgende Script löst das Pro-blem.

1 %-Pyramide zeichnen.2 %-Ecken.3 E = [-12 0 -2; 12 -12 -2; 0 12 -2;4 -4 4 6];5 %-Kanten.6 K = [1 2 3;7 1 2 4;8 % 2 3 4;9 1 3 4];

10 p = patch(’Vertices’,E,’Faces’,K,’FaceColor’,[0.9 0.9 1]);

11 hold on,12 %-Inkugel zeichnen.13 [x,y,z]=ellipsoid(-3,3,1,3,3,3,30)

;14 surfl(x, y, z), colormap copper,15 axis equal, grid on; xlabel(’x’),

76 Copyright c© G. Gramlich

16 ylabel(’y’), zlabel(’z’),

Die Abbildung 36. zeigt die Situation grafisch.

−100

10−10

010

−5

0

5

10

yx

z

Abbildung 36: Pyramide mit Inkugel

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

41. Vergleichsoperatoren,Vergleichsfunktionen

Vergleichsoperatoren und Vergleichsfunktio-nen dienen dazu, zwei Matrizen elementwei-se hinsichtlich einer bestimmten Eigenschaftzu vergleichen. In Abhängigkeit davon, ob die-se Eigenschaft besteht oder nicht, geben siedann einen entsprechenden Wahrheitswert zu-rück, der in Bedingungen für Schleifen oderVerzweigungen weiterverwendet werden kann.In Matlab gibt es – wie auch in C/C++, aberanders als etwa in Pascal – keinen explizitenDatentyp, der die Wahrheitswerte wahr undfalsch speichern kann. Statt dessen wird einnumerischer Wert ungleich 0 als wahr und derWert 0 als falsch betrachtet. Vergleichsopera-toren haben, hinter den arithmetischen, vor den

logischen Operatoren, die zweithöchste Priori-tät bei der Abarbeitung von Ausdrücken.

42. Logische Operatoren undlogische Funktionen

Logische Operatoren existieren im Prinzip inallen allgemein verwendbaren Programmier-sprachen. Sie dienen dazu, Wahrheitswertemiteinander zu verknüpfen. In den meistenSprachen haben sie Namen wie and, or undnot und sind damit Schlüsselwörter für denCompiler. In Matlab – wie auch in C/C++ –ist dies nicht der Fall; die logischen Operato-ren sind hier aus Sonderzeichen aufgebaut.

42.1. Logische Operatoren

Werden Matrizen mit logischen Operatorenverknüpft, so geschieht dies komponentenwei-se. Die Tabelle 23 zeigt die logischen Operato-ren.

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

Tabelle 23: Logische Operatoren

Verknüpft man zwei Matrizen mit einem logi-schen und, so ist die entsprechende Ergebnis-komponente 1, wenn die beiden Komponentenvon Null verschieden sind.

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

77 Copyright c© G. Gramlich

3 >> x & y4 ans =5 1 0 1 0 0 1

42.2. Logische Funktionen

Verknüpft man zwei Matrizen mit einem ex-klusiven oder, so ist die entsprechende Ergeb-niskomponente 1 (wahr), wenn eine der beidenKomponenten von Null verschieden ist. Ande-rerseits ist die Ergebniskomponente 0 (falsch),wenn beide Komponenten 0 oder beide un-gleich 0 sind.

1 >> x = [1 0 2 3 0 4];2 >> y = [5 6 7 0 0 8];3 >> xor(x,y)4 ans =5 0 1 0 1 0 0

Darüber hinaus gibt es zusätzliche Funktionen,die die Existenz spezieller Werte oder Bedin-gungen testen und ein logisches Resultat zu-rückgeben. Weitere Informationen über logi-sche Operatoren und Funktionen findet manmit doc ops (help ops).

Aufgabe 61 (Logische Operatoren) Gegebenseien die Variablen a=5.5, b=1.5 und k=-3.Bestimmen Sie die Ergebnisse der folgen-den Ausdrücke. Überprüfen Sie Ihre Resultatedann 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

43. Steuerstrukturen

The guts of Matlab are wirtten in C. Much ofMatlab ist also written in Matlab, because

it’s a programming language.CleveMoler, 1999.

Programmiersprachen und programmierbareTaschenrechner erlauben es, den Ablauf einesProgramms zu steuern. Man spricht von Steu-erstruktur. Matlab bietet vier Möglichkeiten,den sequentiellen Ablauf durch Verzweigun-gen und Schleifen zu ändern. Dies sind:

• for-Schleifen

• while-Schleifen

• Verzweigungen mit if

• Verzweigungen mit switch

43.1. for-Schleife

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

1 >> f(1) = 0; f(2) = 1;2 >> for i=3:203 f(i) = f(i-1)+f(i-2);4 end

Der Zeilenvektor f beinhaltet die Zahlenwer-te. Bekannterweise nähern sich die Quoti-enten zweier benachbarter Fibonacci-Zahlender Zahl (

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

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

78 Copyright c© G. Gramlich

Will man innerhalb einer Schleife eine Matrix(Vektor) erzeugen, so wie in dem Beispiel

1 >> for k = 1:112 x(k) = (k-1)*(1/10);3 end

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

1. Durch zeros kann man festlegen, ob maneinen Zeilen- oder Spaltenvektor erzeugenmöchte bzw. welche Größe die Matrix ha-ben soll. Dadurch wird man gezwungen,explizit über die Orientierung und Größedes Vektors bzw. der Matrix nachzuden-ken, und vermeidet so Fehler beim Operie-ren mit diesen.

2. Der Speichermanager hat durch dieseInitialisierung weniger Arbeit. Betrach-ten wir hierzu obige erste for-Schleifeund wie die Variable x zu einem 11-dimensionalen Zeilenvektor wird. Im ers-ten Schleifendurchlauf ist x ein Vektor derLänge 1 (ein Skalar). Im zweiten Durch-lauf weist x(2) den Speichermanager an,x zu einem zweidimensionalen Vektor zumachen. Im dritten Durchlauf wird derSpeichermanager durch x(3) angewiesen,x in einen Vektor der Länge 3 umzufor-men. Dies setzt sich fort, bis das Ende derfor-Schleife erreicht ist und x 11 Koordi-naten hat. Es ist eine Konvention in Mat-lab, dass durch diese Konstruktionsweiseein Zeilenvektor entsteht.

Es ist daher effizienter, obige erste for-Schleife wie folgt zu programmieren:

1 >> x = zeros(1,11);2 >> for k = 1:11

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

Will man eine Matrix in einer Schlei-fe erzeugen, dann sollte man sie zu-vor initialisieren.

43.2. while-Schleife

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

1 >> n = 1; Summe = 0;2 >> while n <= 1003 Summe = Summe+n;4 n = n+1;5 end6 >> Summe7 Summe =8 5050

Der folgende Matlab-Code berechnet die Vek-toren zk+1 = Azk mit Startvektor z0 = (1, 0)und der stochastischen Matrix

A =[

0.8 0.30.2 0.7

].

Anschließend werden die Zustandsvektorengezeichnet. Die Anzahl der Iterationen könnenSie eingeben.

1 A = [0.8 0.3; 0.2 0.7];2 z = [1;0]; x = z; k = 0;3 kend = input(’Iterationen: ’);4 while k < kend5 z = A*z;6 x = [x z];7 k = k+1;8 end9 plot(0:kend,x,’o-’), grid

79 Copyright c© G. Gramlich

43.3. if-Anweisung

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

1 >> if ( rem(a,2) == 0 )2 disp(’a ist gerade’)3 end

43.4. switch-Anweisung

Hat im folgenden Beispiel die Variable x denWert -1, so wird x ist -1 auf dem Bild-schirm ausgegeben. Entsprechendes geschiehtbei den anderen Fällen.

1 switch x2 case -13 disp(’x ist -1’);4 case 05 disp(’x ist 0’);6 case 17 disp(’x ist 1’);8 otherwise9 disp(’x ist ein anderer Wert’);

10 end

Weitere Informationen über Steuerstrukturenfindet man mit doc lang (help lang).

44. m-Files

Bisher wurden Anweisungen zeilenweise ein-gegeben und von Matlab verarbeitet. Diese in-teraktive Arbeitsweise ist unzweckmäßig fürAlgorithmen, die mehrere Programmzeilen be-nötigen und wieder verwendet werden sollen.Hierfür eignen sich sogenannte m-Files, die

mit einem Editor erzeugt werden und unter ei-nem Filenamen mit dem Kürzel .m abgespei-chert werden. Es gibt zwei Arten von m-Files:die Script-Files und die Function-Files.

44.1. Script-Files

Ein Script-File (Kommando-File) ist eine Fol-ge von gewöhnlichen Matlab-Anweisungen.Die Anweisungen in einem Script-File wer-den ausgeführt, wenn man den File-Namen oh-ne das Kürzel angibt. Ist zum Beispiel derFile-Name versuch.m, so gibt man einfachversuch ein. Variablen in einem Script-Filesind global, siehe Abschnitt 45. Auch kannein Script-File einen anderen m-File aufrufen.Script-Files haben keine Ein- und Ausgabear-gumente.

Wir geben ein einfaches Beispiel eines Script-Files (ErstesScript).

1 %-Script: ERSTES-SCRIPT2 Daten = [2,10,1,12,-2,3,2]’;3 sort(Daten)4 mean(Daten)5 median(Daten)6 std(Daten)

Dieser Script-File sortiert den SpaltenvektorDaten mit der Funktion sort und berechnetden arithmetischen Mittelwert (mean), den Me-dian (median) und die Standardabweichung(std) der Werte im Datenvektor Daten. Gibtman den Namen ErstesScript nach demMatlab Prompt ein, so erhält man folgendeAusgabe:

1 ans =2 -2

80 Copyright c© G. Gramlich

3 14 25 26 37 108 129 ans =

10 411 ans =12 213 ans =14 5.0662

Das folgende Beispiel zeigt ein Eigenwert-Roulette, welches darauf beruht, abzuzählenwieviele Eigenwerte einer reellen Zufallsma-trix reell sind. Ist die Matrix A reell und vonder Ordnung 8, dann gibt es 0,2,4,6 oder 8reelle Eigenwerte (die Anzahl muss geradesein, weil komplexe Eigenwerte in komplex-konjugierten Paaren auftreten). Die beiden Zei-len

1 A = randn(8);2 sum((abs(imag(eig(A))) < 0.0001));

erzeugen eine zufällig normalverteilte 8 × 8-Matrix und zählen, wieviel Eigenwerte reellsind. Dies ist so realisiert, dass geprüft wird,ob der Imaginärteil dem Betrag nach kleinerals 10−4 ist. Jeder Aufruf erzeugt nun eine an-dere Zufallsmatrix und man erhält somit unter-schiedliche Ergebnisse. Um ein Gefühl dafürzu bekommen, welche der fünf Möglichkeitenam wahrscheinlichsten ist, kann man folgen-den Script ausführen.

1 %-Script-File: EIGENWERTROULETTE2 n = 1000;3 Anzahl = zeros(n,1);4 for k=1:n

5 A = randn(8);6 Anzahl(k) = sum(abs(imag(eig(A)

)) < 0.0001);7 end8 hist(Anzahl,[0 2 4 6 8]);9 h = findobj(gca,’Type’,’patch’);

10 set(h,’FaceColor’,’r’,’EdgeColor’,’w’)

Dieser Script-File erzeugt 1000 Zufallszahlenund zeichnet ein Histogramm der Verteilungder Anzahl der reellen Eigenwerte. Die Abbil-dung 37 zeigt ein mögliches Resultat. Wollen

0 2 4 6 80

100

200

300

400

500

600

Abbildung 37: Histogramm zum Script

Sie sehen, wie Ihr Script-File den von Ihnengeschriebenen Code abarbeitet, so geben Sieecho on ein. Mit echo off können Sie denVorgang wieder rückgängig machen.

44.2. Function-Files

Wenn Sie intensiver mit Matlab arbeiten, dannwerden Sie bald feststellen, dass es nichtfür alle ihre Wünsche eingebaute Funktionenoder Kommandos gibt. In diesem Fall kön-nen Sie sich aber Ihre eigene Funktion schrei-

81 Copyright c© G. Gramlich

ben und damit die Funktionalität von Mat-lab erweitern. Mit Hilfe von Function-Files(Matlab-Funktionen, Funktionen) können Sieden Matlab-Funktionsvorrat erweitern. Va-riablen in Function-Files sind lokale Varia-blen. Function-Files haben demnach ihren ei-genen nach außen nicht sichtbaren Workspace.Die Übergabe einzelner Variablen erfolgt übereine Parameterliste im Funktionsaufruf. EinFunction-File entspricht der subroutine bzw.function in der Programmiersprache Fortran,function in C/C++ und procedure bzw. functi-on in Pascal. Haben Sie eine Funktion in Formeines Function-Files geschrieben, so könnenSie diesen genauso aufrufen, wie die eingebau-ten Matlab-Funktionen. Für das Schreiben ei-nes Function-Files sind verschiedene Dinge zubeachten.

Damit ein File ein Function-File ist, muss ermit dem Schlüsselwort function beginnen,dann folgen die Ausgabeargumente (in eckigenKlammern), der Funktionsname und schließ-lich die Eingabeargumente (in runden Klam-mern). Die Form aller Function-Files ist

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

wobei Name der vom Anwender anzugeben-de Funktionsname ist. Der Funktionsname(hier Name) muss auch der Filename sein, un-ter der der Function-File abgespeichert wird.Es ist möglich, dass ein Function-File keineAusgabe- und/oder Eingabeargumente hat.

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

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

2 [m,n] = size(A);3 if m==n4 [V,D] = eig(A);5 r = rank(A);6 else7 disp(’Fehler: Die Matrix muss8 quadratisch sein!’)9 end

Schreiben Sie sich die obigen Anweisungenin eine Datei mit dem Namen MatrixEig.mund definieren Sie eine Matrix A im Matlab-Workspace. Führen Sie

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

aus, dann stehen in der Matrix V die Eigen-vektoren, in der Hauptdiagonalen von D dieEigenwerte und in r der Rang der Matrix A.V,D,r sind die Ausgabe- und A das Eingabear-gument der Funktion MatrixEig. Der von unsgeschriebene Function-File MatrixEig ruftmehrer eingebaute Matlab-Funktionen auf:size, eig, usw.

Functions können sowohl von anderen Func-tions als auch von Scripts aufgerufen werden.Es ist eine Stärke von Matlab-Funktionen,mit einer unterschiedlichen Anzahl von Über-gabeparameter zurechtzukommen. Hierzu exi-sitieren innerhalb einer Funktion die Varia-blen nargin und nargout (number argu-ment in/out), die die Anzahl der übergebenenParameter enthalten. Zusätzlich stehen nochdie Befehle inputname zum Ermitteln derVariablennamen 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-

82 Copyright c© G. Gramlich

chende Beispiele. Für weitere Informationenüber Funktionen siehe doc function (helpfunction) und Abschnitt 51.

44.3. Namen von m-Files

Für m-Files gelten bezüglich der Namens-wahl die gleichen Regeln wie für Varia-blen, siehe Abschnitt 28. Insbesondere wirdzwischen Klein- und Großbuchstaben unter-schieden. Weitere Infos finden Sie unter docgeneral und doc lang.

44.4. Editieren von m-Files

Sie haben zwei Möglichkeiten, um einen m-File zu erzeugen und zu editieren. Sie kön-nen einerseits mit einem Editor Ihrer Wahl ar-beiten oder andererseits den eigebauten Mat-lab-Editor/Debugger verwenden. Diesen kön-nen Sie mit dem Befehl edit aktivieren oderdurch Anklicken der Menüoptionen File-Newoder File-Open.

44.5. Zur Struktur eines m-Files

m-Files sollten, um sie auch nach längerer Zeitwieder verwenden zu können, gut dokumen-tiert sein (Software Engineering). Professio-nelle m-Files haben daher folgende Form:

1 function [Out,...] = Name(In,...)2 % H1-Zeile3 % Help Text4 % Help Text usw.5 < Irgendwelche Anweisungen >

Die erste Zeile legt den Funktionsnamen unddie Ein- und Ausgabeparameter fest. Dies ha-ben wir bereits besprochen. Die zweite Zeileist die sogenannte H1-Zeile. In ihr wird in ei-ner Zeile das Programm beschrieben. Dies istdie erste Zeile, die auf dem Bilschirm ausge-geben wird, wenn Sie help Name eingeben.Außerdem sucht die lookfor-Funktion nur indieser H1-Zeile und gibt nur diese aus. Ge-ben Sie sich daher besondere Mühe, diese H1-Zeile kurz und prägnant zu schreiben. In weite-ren anschließenden Zeilen können Sie den m-File weiter dokumentieren. Script-Files wer-den genauso gehandelt, dann aber entfällt na-türlich die erste Zeile mit dem Schlüsselwortfunction. Weitere Informationen finden Siein [17].

44.6. Blockkommentare

Seit Matlab 7 können Sie auch Blöcke von Co-des auskommentieren, indem Sie den Code inzwei spezielle Kommentarzeielen setzen:

1 %{2 <Block>3 %}

<Block> steht für eine beliebige Anzahl vonCodezeilen. Matlab betrachtet dann alle Zeilenzwischen %{ und %} als Kommentar. Block-kommentare können auch geschachtelt wer-den.

44.7. Übungsaufgaben

Aufgabe 62 (Function-File) Schreiben Sieeinen Function-File, der von einem Vektor x

83 Copyright c© G. Gramlich

den arithmetischen und geometrischen Mittel-wert berechnet und die Werte zurückgibt.Lösung: Die folgende Funktion tut das Ge-wünschte.

1 function [aM,gM] = Mittelwerte(x)2 aM = mean(x);3 gM = prod(x)./length(x);

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

Aufgabe 63 (Function-File) Schreiben Sieeinen Function-File, der die Sprungfunktion(Einheitssprungfuktion, 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 definierten Funktionheaviside. Wo gibt es Unterschiede?Lösung: Die Funktion h ist durch denFunction-File

1 function y = h(t)2 y = ( t>=0 );

definiert und mit den Anweisungen

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

erhält man die Abbildung 38.

Die Funktion heaviside aus Matlab ist ander Stelle t = 0 undefiniert, das heißt Matlabordnet dem Nullpunkt NaN zu. © . . . . . . . . . . . ©

Aufgabe 64 (Function-File) Zeichnen Sie dieGraphen der verschobenen Sprungfunktionenh(t + T ), t ∈ R und h(t − T ), t ∈ R für T = 2 imIntervall [−4, 4].

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

0

0.5

1

1.5

Abbildung 38: Sprungfunktion

Lösung: Die Funktionen können mit demFunction-File

1 function y = hT(t,T)2 y = ( t>=-T );

berechnet werden. Die Anweisungen

1 subplot(2,1,1)2 fplot(@hT

,[-4,4,-0.5,1.5],[],[],[],2),3 grid, title(’h(t+2)’)4 subplot(2,1,2)5 fplot(@hT

,[-4,4,-0.5,1.5],[],[],[],-2),6 grid, title(’h(t-2)’)

erzeugen die Abbildung 39. © . . . . . . . . . . . . . ©

Aufgabe 65 (Function-File) Schreiben Sie je-weils einen Function-File, um die folgendenstückweise definierten Funktionen zu berech-nen:

(a) rect(t) =

1 |t| ≤ 0.50 sonst

(b) ramp(t) =

0 t < 0t sonst

84 Copyright c© G. Gramlich

−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 39: Verschobene Sprungfunktionen

(c) g(t) =

0 t < 0sin(πt2 ) 0 ≤ t ≤ 11 1 < t

Zeichnen Sie die Graphen der Funktionen imIntervall [−2, 2].Lösung: Mit Hilfe der Sprungfunktion h las-sen sich diese Funktionen geschlossen darstel-len. Es ist rect(t) = h(t + 0.5) − h(t − 0.5),t ∈ R, ramp(t) = th(t), t ∈ R und g(t) =sin(πt2 )(h(t)− h(t− 1)), t ∈ R. Daher lassen sichdiese drei Funktionen in Matlab wie folgt be-rechnen.

1 function y = rect(t)2 y = h(t+0.5)-h(t-0.5);

1 function y = ramp(t)2 y = t.*h(t);

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

>=1);

Die Anweisungen

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

2 fplot(@rect,[-2,2,-0.5,2]), grid3 subplot(3,1,2), title(’ramp’)4 fplot(@ramp,[-2,2,-0.5,2]), grid5 subplot(3,1,3), title(’g’)6 fplot(@g,[-2,2,-0.5,2]), grid

erzeugen die Abbildung 40. © . . . . . . . . . . . . . ©

−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 40: Graph der Funktionen

Aufgabe 66 (Function-File) Schreiben Sieeinen Function-File, um folgende Funktion zuberechnen:

f (x) =

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

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

1 function y = f(x)2 y1 = x.*(x<0);3 y2 = x.^2.*( (x<2)-(x<=0) );4 y3 = 4*(x>=2);5 y = y1+y2+y3;

85 Copyright c© G. Gramlich

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

Aufgabe 67 (Function-File) Schreiben Sieeinen Function-File, um die Funktion f (t) =t

13 , t ∈ R zu berechnen. Benutzen Sie diesen,

um die Funktion f im Intervall [0, 1] zu zeich-nen.Lösung: Mit dem Function-File

1 function y = f(t)2 y = t.^(1/3);

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

Aufgabe 68 (Function-File) Zeichnen Sie diekonstante Funktion f (x) = 5, x ∈ R im Inter-vall [0, 2].Lösung: Eine Möglichkeit ist:

1 >> f = @(x) 5;2 >> fplot(f,[0,2])

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

Aufgabe 69 (Horner-Methode) Implementie-ren Sie die Horner-Methode in Matlab. Zu-nächst skalar und dann vektoriell.Lösung: Hierzu wählen wir die folgende Dar-stellung des Polynoms

p(x) = a1 + a2x + a3x2 + · · · + anxn−1

und nennen die skalare Matlab-FunktionHorner.

1 function p = Horner(a,x)2 n = length(a);3 p = a(n);4 for k=n-1:-1:15 p = p*x+a(k);6 end

Für das Polynom p(x) = x2 + 3x + 2 liefertder Aufruf Horner([2,3,1],2) den Wert12=p(2).

Nun die vektorielle Version.

1 function p = HornerVektoriell(a,x)2 n = length(a);3 p = a(n)*ones(size(x));4 for k=n-1:-1:15 p = x.*p+a(k);6 end

Für das Polynom p(x) = x2 + 3x + 2 liefert derAufruf Horner([2,3,1],[2,3]) die Werte12=p(2) und 20 = p(3).

45. Globale und lokale Variablen

Die Variablen innerhalb jeder Funktion sindlokal, die in Script-Files sind global. GlobaleVariablen können aber auch mit global defi-niert werden. Um auf diese Variablen zugrei-fen zu können, muss diese Definition sowohlim Haupt-Workspace als auch in der Functionerfolgen. Angezeigt werden die globalen Va-riablen mit whos global, gelöscht werden siemit clear global.

46. Namenstest

Mit der Funktion exist können Sie über-prüfen, ob ein Name bereits exsitiert. Mitiskeyword kann festgestellt werden, ob einSchlüsselwort vorliegt. Eine Liste aller Schlüs-selwörter erhält man mit

1 >> iskeyword2 ans =

86 Copyright c© G. Gramlich

3 ’break’4 ’case’5 ’catch’6 ’continue’7 ’else’8 ’elseif’9 ’end’

10 ’for’11 ’function’12 ’global’13 ’if’14 ’otherwise’15 ’persistent’16 ’return’17 ’switch’18 ’try’19 ’while’

47. Wie man effiziente Programmeschreibt

Schleifen werden in Matlab ineffizient ausge-führt. Deshalb sollten Sie diese vermeiden, woimmer es geht. Nahezu alle Matlab-Funktionakzeptieren „vektorielle“ Argumente, so dassman auf Schleifen häufig tatsächlich auch ver-zichten kann.

Angenommen Sie wollen die ersten 100 na-türlichen Zahlen aufsummieren (nicht aber dieFormel n(n + 1)/2 verwenden). In einer skala-ren Programmiersprache wie zum Beispiel inC/C++ würde man wie folgt vorgehen:

1 int s = 0;2 int n;3 for (n=1;n<101;++n)4 {5 s = s+n;6 }

7 print(‘‘%d\n’’,s);

Die analoge Version dieses kleinen Programmsin Matlab wäre:

1 s = 0;2 for n=1:1003 s = s+n;4 end5 s

Dieser skalare Matlab-Code kann effizienterund übersichtlicher geschrieben werden:

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

Der erste Befehl erzeugt den Zeilenvektor N =[1,2,...,100]. Die zweite Anweisung sum-miert die Koordinaten des Vektors N auf. sumist eine eingebaute Matlab-Funktion und ver-trägt Vektoren als Argumente. Viele Matlab-Funktionen können Vektoren oder Matrizen alsArgumente verarbeiten. Dies lässt eine vekto-rielle Verarbeitung zu.

Die rationale Funktion

f (x) =( 1 + x

24

1 − x12 +

x2

384

)8

stellt im Intervall [0, 1] eine Approximation andie Exponentialfunktion e dar.

Der folgende Script zeigt, wie man die Aus-wertung dieser Funktion in einer skalaren Pro-grammiersprache wie zum Beispiel FORT-RAN oder C/C++ vornehmen müsste.

1 n = 200;2 x = linspace(0,1,n);3 y = zeros(1,n);4 for k=1:n

87 Copyright c© G. Gramlich

5 y(k) = ((1+x(k)/24)/(1-x(k)/12+(x(k)/384)*x(k)))^8;

6 end

In Matlab aber sind Vektoroperationen erlaubt,das heißt die for-Schleife kann durch eine ein-zige vektorwertige Anweisung ersetzt werden.Der folgende Script-File zeigt eine vektoriel-le Implementierung der Funktion f . Der Über-sichtlichkeit wegen splitten wir den Term f (x)in mehrere Terme auf.

1 n = 200;2 x = linspace(0,1,n);3 Zaehler = 1 + x/24;4 Nenner = 1 - x/12 + (x/384).*x;5 Quotient = Zaehler./Nenner;6 y = Quotient.^8;

Um der Variablen y die entsprechenden Funk-tionswerte von f zuzuweisen, werden ver-schiedene bekannte und weniger bekannteVektoroperationen durchgeführt: Vektoraddi-tion, Vektorsubtraktion, skalare Multiplikati-on, punktweise Vektormultiplikation, punkt-weise Vektordivision und punktweise Vektor-exponentiation.

Betrachten wir den Script-File genauer. Mat-lab erlaubt es, einen Vektor mit einem Skalarzu multiplizieren. Dies zeigt der Term x/24.Dort wird jede Koordinate des Vektors x durchdie Zahl 24 dividiert bzw. mit 1/24 multi-pliziert. Das Ergebnis ist ein Vektor mit dergleichen Länge und Orientierung (Zeile oderSpalte) wie der Vektor x. Im obigen Script istx ein Zeilenvektor und somit ist x/24 eben-falls ein Zeilenvektor. Durch die Anweisung1+x/24 wird zu jeder Koordinate des neuenVektors x/24 1 hinzuaddiert und der Variablen

Zaehler zugeordnet. Dies ist natürlich kei-ne Vektorraumoperation, aber eine nützlicheMatlab-Eigenschaft. Wir betrachten nun dieVariable Nenner. Hierbei bedeutet die Ope-ration (x/384).*x eine punktweise Vektor-multiplikation. das heißt jede Koordinate vonx/384 wird mit jeder Koordinaten des Vek-tors xmultipliziert. Beachten Sie, dass die Vek-toren die gleiche Länge haben. Zum Ergeb-nis wird 1 hinzuaddiert und von jeder Koor-dinate x/12 subtrahiert, bevor das Ergebnisder Variablen Nenner zugeordnet wird. DieAnweisung Quotient = Zaehler./Nennerbedeutet punktweise Division, das heißt, je-de Komponente des Vektors Zaehler wirddurch die entsprechende Koordinate des Vek-tors Nenner dividiert und anschließend derVariablen Quotient zugeordnet. Schließlichwird durch die Anweisung y = Quotient.ˆ8punktweise potenziert, das heißt jede Koordi-nate des Vektor Quotient wird mit 8 poten-ziert, bevor das Resultat der Variablen y zuge-ordnet wird.

Die Matlab-Funktion vectorize vektorisierteinen String automatisch. Hierzu betrachtenwir folgendes Beispiel. Sind die VektorenZaehler und Nenner wie folgt definiert:

1 Zaehler = [1 2 3];2 Nenner = [4 5 6];

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

1 >> vectorize(’Zaehler/Nenner’)2 ans =3 Zaehler./Nenner

88 Copyright c© G. Gramlich

erzeugt die gewünschte Syntax. Analog setztder Befehl vectorize vor den Zeichen * undˆ einen Punkt und ermöglichst somit eine vek-torisierte Operation.

Aufgabe 70 (Effiziente Programme) Vek-torisieren Sie den String ’((1+x/24)/(1-x/12+xˆ2/384))ˆ8’ und zeigen Sie gra-fisch, dass f eine Approximation im Intervall[0, 1] an die Exponentialfunktion e ist.Lösung: Die folgenden Zeilen lösen dieAufgabe.

1 y = vectorize(’((1+x/24)/(1-2 x/12+x^2/384))^8’);3 x = linspace(0,1,20);4 vs = vectorize(’((1+x/24)/(1-5 x/12+x^2/384))^8’);6 y = eval(vs,x);7 plot(x,exp(x),x,y,’ro’)8 legend(’e’,’f’)

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

Nicht alle Berechnungen sind jedoch vektori-sierbar. In diesen Fällen muss man auf Schlei-fen zurückgreifen. Um diese Berechnungenjedoch schneller auszuführen, sollte man dieAusgabematrizen mit Nullen vorbesetzen (Pre-allokieren). Wir erläutern an einem Beispiel,was damit gemeint ist. Angenommen es sei dieMatrix

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 der Aus-gabematrix E gespeichert werden. Das folgen-de Script realisiert dies:

1 E = zeros(2,10);

2 for k=1:103 E(:,k) = eig(A^k);4 end

Mit der Anweisung E = zeros(2,10); ha-ben wir die Ausgabematrix E mit Nullen vor-besetzt. Hätten wir dies nicht getan, so müssteMatlab in jedem Schleifendurchlauf die Größeder Matrix E durch Hinzunahme einer weiterenSpalte verändern, was sich durch eine länge-re Ausführungszeit bemerkbar machen würde.Darüber hinaus hat das Vorbesetzen der Aus-gabematrizen den Vorteil, dass man sich be-reits vorher über die Größe und OrientierungGedanken machen muss, was zu disziplinäremProgrammierstil erzieht.

Wir fassen noch einmal zusammen: Das Erset-zen einer Schleife durch eine Vektoroperationnennt man Vektorisierung und hat drei Vortei-le:

• Geschwindigkeit. Viele eingebaute Matlab-Funktionen werden schneller ausgeführt,wenn man anstelle eines mehrfachen Auf-rufs als Argument einen Vektor übergibt.

• Übersichtlichkeit. Es ist übersichtlicher, einvektorisiertes Matlab-Script zu lesen, alsdas skalare Gegenstück.

• Ausbildung. Im wissenschaftlichen Rechnenist man bei verschiedenen Rechnern inter-essiert, vektorisierte Algorithmen zu entwi-ckeln und zu implementieren. Matlab unter-stützt dies.

Somit gilt:

Vermeiden Sie Schleifen in Matlab,wann immer dies möglich ist.

Vektorisieren Sie ihre Rechnungen,

89 Copyright c© G. Gramlich

wann immer dies möglich ist.

Aufgabe 71 (Programmierung) Schreiben Siedie folgenden Matlab-Zeilen vektoriell.

1 for x = 1:102 y = sqrt(x);3 end

Lösung: Die vektorielle und effizientere Pro-grammierung ist:

1 x = 1:10;2 y = sqrt(x);

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

Aufgabe 72 (Programmierung) Plotten Sie dieFunktion

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 Program-mierfähigkeit von Matlab, sowie etwas Matri-zenrechnung und können f so wie folgt effizi-ent darstellen.

1 n = 200;2 x = linspace(-10,10,n)’;3 A = [sin(x) sin(2*x) sin(3*x) sin

(4*x)];4 y = A*[2; 3; 7; 5];5 plot(x,y)

Der Graph der Funktion f ist in Abbildung 41zu sehen. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

48. Lineare Algebra (Teil 1)

Diesen Abschnitt habe ich im Zusammenhangmit meinem Buch [4] geschrieben. Viele Bei-

−10 −5 0 5 10−20

−10

0

10

20

Abbildung 41: Zu Aufgabe 72

spiele sind daraus. Im Folgenden werden wir jenach Bedarf zwischen numerischen und sym-bolischen Funktionen hin und her wechseln,das heißt zwischen Grundfunktionen aus Mat-lab und zwischen Funktionen aus der SymbolicToolbox, siehe auch Abschnitt 66.

48.1. Lineare Gleichungssysteme undMatrizen

Zu Matrizen siehe auch Abschnitt 36. Das li-neare Gleichungssystem

x + y + 2z = 9

2x + 4y − 3z = 1

3x + 6y − 5z = 0

aus Beispiel 1.6 in [4] können wir in Matlabmit dem \-Operator (Backslash-Operator) wiefolgt lösen.

1 >> A = [1 1 2; 2 4 -3; 3 6 -5];2 >> b = [9; 1; 0];3 >> x = A\b4 ans =5 1.0000

90 Copyright c© G. Gramlich

6 2.00007 3.0000

Alternativ können wir die Funktion rref ver-wenden. Diese transformiert eine gegebeneMatrix in reduzierte Zeilenstufenform.

1 >> rref([A b])2 ans =3 1 0 0 14 0 1 0 25 0 0 1 3

Die Lösung kann nun direkt abgelesen werden.Die Funktion inv berechnet die Inverse einerMatrix. Daher finden wir die Lösung auch wiefolgt (Satz 1.8)

1 >> x = inv(A)*b2 x =3 1.00004 2.00005 3.0000

Wir bestätigen Satz 1.9 in Matlab.

1 >> syms a b c d2 >> A = [a,b; c,d];3 >> inv(A)4 ans =5 [ d/(a*d-b*c), -b/(a*d-b*c)]6 [ -c/(a*d-b*c), a/(a*d-b*c)]

Die Funktion inv kann sowohl fürnumerische als auch für symbolischeRechnungen verwendet werden. Diesgilt auch für viele andere Funktio-nen.

Aufgabe 73 (Lineare Systeme) Berechnen Siedie allgemeine Lösung des linearen Glei-

chungssystems 2 4 −24 9 −3−2 −3 7

x1

x2x3

= 2

810

.A x b

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

1 >> A = [2 4 -2; 4 9 -3; -2 -3 7];2 >> b = [2; 8; 10];3 >> x = A\b4 x =5 -1.00006 2.00007 2.0000

Die Lösung ist eindeutig, sonst wäre die MatrixA singulär und Matlab hätte mit einer Fehler-meldung geantwortet. Hier noch alternativ diesymbolische Lösung.

1 >> x = sym(A)\b2 x =3 [ -1]4 [ 2]5 [ 2]

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

Aufgabe 74 (Lineare Systeme) Berechnen Siedie allgemeine Lösung des linearen Glei-chungssystems

4x1 − 8x2 = 12

3x1 − 6x2 = 9

−2x1 + 4x2 = − 6.

91 Copyright c© G. Gramlich

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

1 >> A = [4 -8; 3 -6; -2 4];2 >> b = [12; 9; -6];3 >> rref([A b])4 ans =5 1 -2 36 0 0 07 0 0 0

ablesen. Demnach ist: x = (3, 0)+ t(2, 1), t ∈ Rdie allgemeine Lösung. Dieses Beispiel zeigt,dass auch überbestimmte Systeme unendlichviele Lösungen haben können. © . . . . . . . . . . .©

Aufgabe 75 (Lineare Systeme) Berechnen Siedie allgemeine Lösung des linearen Glei-chungssystems

−x2 + 3x3 = 1

3x1 + 6x2 − 3x3 = −2

6x1 + 6x2 + 3x3 = 5.

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

1 >> A = [0 -1 3; 3 6 -3; 6 6 3];2 >> b = [1; -2; 5];3 >> sym(A)\b4 ans =5 [ 3]6 [ -2]7 [ -1/3]

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

Aufgabe 76 (Lineare Systeme) Berechnen Siedie allgemeine Lösung des linearen Glei-

chungssystems

x1 + x2 + 2x3 = 8

−x1 − 2x2 + 3x3 = 1

3x1 − 7x2 + 4x3 = 10.

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

1 >> A = [1 1 2; -1 -2 3; 3 -7 4];2 >> b = [8; 1; 10];3 >> sym(A)\b4 ans =5 [ 3]6 [ 1]7 [ 2]

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

Aufgabe 77 (Lineare Systeme) Berechnen Siedie allgemeine Lösung von Ax = 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 Sie dieallgemeine Lösung herausbekommen.Lösung: Die eindeutige Lösung ergibt sichaus den folgenden Anweisungen.

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

2 A =3 4 1 0 0 04 1 4 1 0 05 0 1 4 1 06 0 0 1 4 1

92 Copyright c© G. Gramlich

7 0 0 0 1 48 >> b = [4.1,2.4,4.2,2.4,4.1]’;9 >> A\b

10 ans =11 1.000012 0.100013 1.000014 0.100015 1.0000

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

Aufgabe 78 (Beispiel 1.24 in [4]) BerechnenSie die Inverse der Matrix

A =[

1 −23 2

]Lösung: Es ist

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

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

Aufgabe 79 (Inverse) Bestätigen Sie Satz 1.9aus aus [4].Lösung: Es ist

1 >> syms a b c d2 >> A = [a b; c d];3 >> inv(A)4 ans =5 [ d/(a*d-b*c), -b/(a*d-b*c)]6 [ -c/(a*d-b*c), a/(a*d-b*c)]

was Satz 1.9 in Matlab bestätigt. © . . . . . . . . ©

Aufgabe 80 (Inverse) Finden Sie mit Matlab

die Inverse der Matrix

S =

a b cd e fg h i

Unter welchen Bedingungen existiert diese?Bestätigen Sie mit diesem Ergebnis die Inversein Beispiel 1.26 aus [4].Lösung: Die Inverse erhalten wir durch

1 >> syms a b c d e f g h i2 >> S = [a b c; d e f; g h i];3 >> pretty(inv(S))4 [ e i - f h5 [ --------- usw.6 [ %17 [8 [ d i - f g9 [- --------- usw.

10 [ %111 [12 [ -d h + e g13 [- ---------- usw.14 [ %115

16 %1 := a e i - a f h - d b i +17 d c h + g b f - g c e

Die Inverse exisiert genau dann, wenn der Nen-ner aei− a f h− dbi+ dch+ gb f − gce ungleichNull ist. Ein Vergleich mit

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

e

zeigt, dass dies gerade die Determinante von Sist. Setzt man für a = 1, b = 1, . . ., i = −5 nachBeispiel 1.26 in [4], so erhält man die Inverse

93 Copyright c© G. Gramlich

zu 2 −17 11−1 11 −7

0 3 −2

.Übrigends die Determinante der Matrix ist −1.© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 81 (Symmetrische Matrizen) Ange-nommen Sie wollen einen Algorithmus testen,der als Eingabe eine symmetrische Matrix be-nötigt. Finden Sie eine Möglichkeit eine belie-bige symmetrische Matrix in Matlab zu erzeu-gen.Lösung: Nach den folgenden Zeilen

1 n = 44; %-zum Beispiel 44.Ordnung2 A = rand(n);3 B = A + A’;

steht in der Matrix B eine symmetrische Matrixaus R44×44. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

48.2. Vektoren in der Ebene und im Raum

Zu Vektoren siehe auch Abschnitt 34. Vektor-operationen lassen sich in Matlab einfach aus-führen. Die Summe der beiden Vektoren u =(2, 3,−1) und v = (3,−4, 2) ist (Beispiel 2.3 in[4])

1 >> u = [2;3;-1]; v = [3;-4;2];2 >> u+v3 ans =4 55 -16 1

Die Länge des Vektors v = (4,−3) ist

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

3 5

Das Skalarprodukt der beiden Vektoren u =(0, 0, 1) und v = (0,−2, 2) haben wir in Bei-spiel 2.8 ausgerechnet; hier die Bestätigungmit der dot-Funktion

1 >> u = [0;0;1]; v = [0;-2;2];2 >> dot(u,v)3 ans =4 2

Den Winkel aus Beispiel 2.9 berechnen wir wiefolgt

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

2 KosWinkel =3 0.50004 >> phi = acos(KosWinkel)5 phi =6 1.0472

Beachten Sie, Matlab rechnet im Bogenmaß.Die Zeile

1 >> 180*phi/pi2 ans =3 60.0000

liefert den Winkel im Gradmaß. Wir berechnenden Projektionsvektor aus Beispiel 2.12

1 >> p = (u’*a)/(norm(a)^2)*a2 p =3 2.85714 -0.71435 1.4286

Mit der cross-Funktion können wir dasKreuzprodukt berechnen. Wir bestätigen damitBeispiel 2.13

94 Copyright c© G. Gramlich

1 >> u = [1;2;-2]; v = [3;0;1];2 >> cross(u,v)3 ans =4 25 -76 -6

Das dyadische Produkt abT von Vektor a =(1, 2) und b = (4, 1, 4, 3) berechnet sich wiefolgt

1 >> a = [1;2]; b = [4;1;4;3];2 >> a*b’3 ans =4 4 1 4 35 8 2 8 6

Aufgabe 82 (Skalarprodukt) Berechnen Sie je-weils das Skalarprodukt der angegebenen Vek-toren:

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

1 >> dot([1,0],[0,1])2 ans =3 0

Das bedeutet, dass die beiden Vektorensenkrecht aufeinander stehen.(b)

1 >> dot([1,0,0],[0,1,0])2 ans =3 0

Das bedeutet, dass die beiden Vektorensenkrecht aufeinander stehen.

(c)1 >> dot([1,1,1],[-2,-2,-2])2 ans =3 -6

1 >> dot([2,2,2],[3,3,3])2 ans =3 18

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

48.3. Analytische Geometrie vonGeraden und Ebenen

Wir berechnen den Normalenvektor aus Bei-spiel 3.12 in [4]

1 >> cross([1 0 2],[0 -5 8])2 ans =3 10 -8 -5

Mehr Geometrie und Matlab finden Sie bei[21].

48.4. Reelle Vektorräume undUnterräume

Zur Berechnung einer orthonormalen Basis desNullraumes und des Spaltenraumes stehen unsdie Funktionen null und orth zur Verfügung.Die Funktion null liefert auch von symboli-schen Matrizen eine Basis; diese ist im Allge-meinen aber nicht orthogonal. Um symbolischeine Spaltenraumbasis zu erhalten, können wircolspace verwenden. Auch hier gilt, dass die-se im Allgemeinen nicht orthogonal ist. Wirbetrachten Zahlenbeispiele mit der Matrix Aaus Beispiel 4.23.

95 Copyright c© G. Gramlich

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

Auch Matlab hat t = 1 gewählt, um einen Ba-sisvektor für den Nullraum von A zu bestim-men. Eine (numerische) Basis der Länge 1 er-hält man mit

1 >> A = [1,2; 3 6];2 >> null(A)3 ans =4 -0.89445 0.4472

Die beiden Anweisungen

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

liefern eine Basis des Spaltenraumes von A.Eine Basis der Länge 1 erhält man mit orth.

1 >> A = [1,2; 3 6];2 >> orth(A)3 ans =4 -0.31625 -0.9487

Wir bestätigen Satz 4.12.

1 >> null(A)2 ans =3 [ -2]4 [ 1]5 >> Z = rref(A)6 Z =7 [ 1, 2]

8 [ 0, 0]9 >> null(Z)

10 ans =11 [ -2]12 [ 1]

und

1 >> colspace(A’)2 ans =3 [ 1]4 [ 2]5 >> colspace(rref(A)’)6 ans =7 [ 1]8 [ 2]

Den Rang einer Matrix können wir mit derFunktion rank bestimmen. Wir berechnen denRang der Matrix A aus Beispiel 4.26.

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

2 >> rank(A)3 ans =4 3

In Beispiel 4.28 haben wir alle vier Fundamen-talräume an Hand der Matrix A diskutiert. Wirbestätigen nun die dort gefundenen Resulta-te, indem wir zu jedem Fundamentalraum eineBasis berechnen.

1 >> A = sym([1,2; 3 6]);2 >> null(A)3 ans =4 [ -2]5 [ 1]6 >> colspace(A)7 ans =8 [ 1]9 [ 3]

10 >> null(A’)

96 Copyright c© G. Gramlich

11 ans =12 [ -3]13 [ 1]14 >> colspace(A’)15 ans =16 [ 1]17 [ 2]

Basen der Länge 1 erhalten wir wie folgt

1 >> A = [1,2; 3 6];2 >> null(A)3 ans =4 -0.89445 0.44726 >> orth(A)7 ans =8 -0.31629 -0.9487

10 >> null(A’)11 ans =12 -0.948713 0.316214 >> orth(A’)15 ans =16 -0.447217 -0.8944

Der Spaltenraum von A und der Nullraumvon AT sind orthogonale Komplemente im Rm.Hier eine Bestätigung

1 >> A = [1,2; 3 6];2 >> orth(A)’*null(A’)3 ans =4 -1.6653e-016

bzw. analog im Rn, nun symbolisch.

1 >> colspace(A’)’*null(A)2 ans =3 0

Mit dem Backslash-Operator \ können wir li-neare Ausgleichsaufgaben lösen. Wir bestäti-gen damit die Lösung aus Beispiel 4.34.

1 >> A = [1,0; 1 1; 1 2];2 >> b = [6;0;0];3 >> A\b4 ans =5 5.00006 -3.0000

Aufgabe 83 (Lineare Unabhängigkeit) Sinddie Vektoren a = (1,−2, 3), b = (5, 6,−1) undc = (3, 2, 1) linear unabhängig (Beispiel 4.16in [4])?Lösung: Die folgenden Matlab-Zeilen zeigenauf verschiedene Weisen, dass die drei Vekto-ren linear abhängig sind.

1 >> a = [1,-2,3];2 >> b = [5,6,-1];3 >> c = [3,2,1];4 >> A = sym([a’,b’,c’]);5 >> det(A), rank(A)6 ans =7 08 ans =9 2

10 >> eig(A)11 ans =12 013 414 415 >> svd(A)16 ans =17 018 (45+3*97^(1/2))^(1/2)19 (45-3*97^(1/2))^(1/2)20 >> rref(A)21 ans =22 [ 1, 0, 1/2]23 [ 0, 1, 1/2]

97 Copyright c© G. Gramlich

24 [ 0, 0, 0]25 >> null(A)26 ans =27 128 129 -230 >> colspace(A)31 ans =32 [ 1, 0]33 [ 0, 1]34 [ 1, -1]

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

Aufgabe 84 (Basen) Bestimmen Sie von derMatrix

A =

1 01 11 2

jeweils eine Basis der vier Fundamentalräume.Lösung: Hier eine symbolische Lösung. Zu-erst Basen des Nullraumes und des Spaltenrau-mes, dann Basen des transponierten Nullrau-mes und des Zeilenraumes.

1 >> null(A), colspace(A)2 ans =3 [ empty sym ]4 ans =5 [ 1, 0]6 [ 0, 1]7 [ -1, 2]8 >> null(A’), colspace(A’)9 ans =

10 [ 1]11 [ -2]12 [ 1]13 ans =14 [ 1, 0]15 [ 0, 1]

Für eine numerische Lösung benützt man dieFunktionen null und orth; diese liefern sogarorthonormale Basen. © . . . . . . . . . . . . . . . . . . . .©

Aufgabe 85 (LGS und Rang) Wie können Sie(in Matlab) entscheiden, ob ein lineares Glei-chungssystem eine Lösung hat?Lösung: Zum Beispiel mit der Funktionrank. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 86 (LGS und Rang) Wenn ein linea-res Gleichungssystem eine Lösung hat, wiekönnen Sie dann (in Matlab) entscheiden, obes genau eine oder mehrere gibt?Lösung: Zum Beispiel mit der Funktionrank. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 87 (Ausgleich) Berechnen Sie dieNäherungslösung (im Sinne der linearen Aus-gleichsrechnung) von Ax = b und den or-thogonalen Projektionsvektor p von b auf denSpaltenraum von A des Systems 1 1

−1 1−1 2

[

x1x2

]=

70−7

.A x b

Lösung: Die folgende Zeilen geben die Lö-sungen.

1 >> A = [1 1; -1 1; -1 2];2 >> b = [7; 0 ; -7];3 >> x = A\b4 x =5 5.00006 0.50007 >> p = A*x8 p =9 5.5000

10 -4.5000

98 Copyright c© G. Gramlich

11 -4.0000

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

Aufgabe 88 (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, nachdemSie die Lösung berechnet haben.Lösung:

1 t = [0 0.2 0.4 0.6 0.8 1]’;2 b = [3.825 4.528 4.746 4.873 4.865

4.813]’;3 A = [ones(length(t),1),t,cos(t)];4 x = A\b5 x =6 -1.04287 3.15168 4.92659 plot(t,b,’o’,’MarkerSize’,10)

10 tt = linspace(min(t),max(t));11 f = x(1)+x(2)*tt+x(3)*cos(tt);12 hold on13 plot(tt,f)

Die Abbildung 74 zeigt die grafische Darstel-lung. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

0 0.2 0.4 0.6 0.8 13.8

4

4.2

4.4

4.6

4.8

5

Abbildung 42: Zu Aufgabe 88

48.5. Determinanten

Zur Berechnung der Determinante einer Ma-trix steht die Funktion det zur Verfügung, so-wohl numerisch als auch symbolisch. Wir be-rechnen die Determinante von

A =[

a bc d

].

1 >> syms a b c d2 >> A = [a b; c d];3 >> det(A)4 ans =5 a*d-b*c

Die folgende Zeile bestätigt das Ergebnis ausBeispiel 5.10.

1 >> A = [1 1 1; 2 4 -3; 3 6 -5];2 >> det(A)3 ans =4 -1

Aufgabe 89 (Determinanten) Berechnen Sie

99 Copyright c© G. Gramlich

die Determinante von

A =

1 1 22 4 −33 6 −5

Lösung: Hier die symbolische Lösung.

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

2 >> det(A)3 ans =4 -1

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

Die numerische Berechnung der Determinantegeschieht über die LU-Faktoren.

48.6. Eigenwerte und Eigenvektoren

Die Funktion eig hift uns beim Lösen einerEigenaufgabe. Es können damit sowohl Eigen-werte als auch Eigenvektoren berechnet wer-den, sowohl numerisch als auch symbolisch.Wir bestätigen Beispiel 6.2.

1 >> A = sym([1,1; -2,4]);2 >> [X,D] = eig(sym(A))3 X =4 [ 1, 1]5 [ 1, 2]6 D =7 [ 2, 0]8 [ 0, 3]

Das charakteristische Polynom einer Matrixerhalten wir mit der Funktion poly; siehe Bei-spiel 6.2.

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

3 ans =4 x^2-5*x+6

Eine symmetrische Matrix ist immer diagona-lisierbar. Wir überprüfen Beispiel 6.12.

1 >> A = [4,2,2; 2,4,2; 2,2,4];2 >> [X,D] = eig(sym(A))3 X =4 [ 0, 1, 1]5 [ -1, -1, 1]6 [ 1, 0, 1]7 D =8 [ 2, 0, 0]9 [ 0, 2, 0]

10 [ 0, 0, 8]

Wir machen die Probe.

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

Für eine symbolische Matrix versucht dieFunktion eig ein exaktes Eigenwertsystemzu berechnen. Aus der Galois-Theorie wissenwir, dass dies jedoch nicht immer für Matrizender Ordnung 5 oder größer möglich ist. Es sei

A =

−6 12 48 −21 −8

−29 72 27

gegeben. Wir wollen Matlab verwenden, umfolgende Frage zu beantworten: Ist A reell dia-gonalisierbar, das heißt, können wir eine Ma-trix X finden, so dass X−1 AX diagonalisier-bar ist? Die Eigenwerte von A finden wir miteig(sym(A)). Matlab antwortet mit:

100 Copyright c© G. Gramlich

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

Da die Eigenwerte von A alle reell und vonein-ander verschieden sind, kann A diagonalisiertwerden, das heißt, es gibt eine Matrix X mit

X−1 AX =

−1 0 00 −2 00 0 3

.Wie findet man X? Die Spalten von X kön-nen als Eigenvektoren zu den Eigenwerten -1,-2 und 3 gewählt werden. Gibt man

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

ein, so gibt Matlab in der Diagonalmatrix Ddie Eigenwerte zurück und die Spalten von Xsind dazugehörige Eigenvektoren:

1 X =2 [ 1, 0, -4]3 [ 0, 1, -2]4 [ 1, -3, 1]5 D =6 [ -2, 0, 0]7 [ 0, 3, 0]8 [ 0, 0, -1]

Schließlich kann man mit inv(X)*A*X über-prüfen, ob X−1 AX die gewünschte Diagonal-matrix ist. Wir erhalten das gewünschte Ergeb-nis:

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

Aufgabe 90 (Eigensysteme) Gegeben ist die4 × 4 Matrix

A =

12 48 68 88−19 −54 −57 −68

22 52 66 96−11 −26 −41 −64

.Zeigen Sie mit Matlab, dass die Eigenwertevon A reell und voneinander verschieden sind.Finden Sie eine Matrix X, so dass X−1 AX dia-gonal ist.Lösung:

1 >> A = [ 12 48 68 88;2 -19 -54 -57 -68;3 22 52 66 96;4 -11 -26 -41 -64];5 >> [X,D] = eig(sym(A))6 X =7 [ 1, -12/11, 0, -2]8 [ -2, 1, 1, 2]9 [ 1, -14/11, -2, -2]

10 [ 0, 7/11, 1, 1]11 D =12 [ -16, 0, 0, 0]13 [ 0, -4, 0, 0]14 [ 0, 0, -8, 0]15 [ 0, 0, 0, -12]16 >> inv(X)*A*X17 ans =18 [ -16, 0, 0, 0]19 [ 0, -4, 0, 0]20 [ 0, 0, -8, 0]21 [ 0, 0, 0, -12]

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

Die Anweisung J = jordan(A) berechnetdie Jordan-Matrix von A und [V,J] =jordan(A) zusätzlich die Ähnlichkeitstrans-formation V. Die Spalten von V sind die ver-allgemeinerten Eigenvektoren von A.

101 Copyright c© G. Gramlich

1 >> A = sym([3/2 1;-1/4 1/2]);2 >> [V,J] = jordan(A)3 V =4 [ 1/2, 1]5 [ -1/4, 0]6 J =7 [ 1, 1]8 [ 0, 1]

In Matlab gibt es die Funktion eigshow, diedas Eigenwertproblem für eine (2, 2)-Matrixvisualisiert. Beim Aufruf sieht man den Ein-heitsvektor x = (1, 0) und mit der Maus kannman diesen auf dem Einheitskreis bewegen.Zur gleichen Zeit wird Ax angezeigt und be-wegt. Manchmal ist Ax vor x, manchmal aberauch hinter x. Ax kann zu x auch parallel sein.In diesem Augenblick gilt Ax = λx und xist ein Eigenvektor. Der Eigenwert λ bestimmtsich aus der Länge und Richtung von Ax. Diezur Verfügung stehenden Matrizen illustrierenfolgende Möglichkeiten:

1. Es gibt keine (reellen) Eigenvektoren. xund Ax sind nie parallel. Die Eigenwerteund Eigenvektoren sind komplex. Es gibtkeinen Eigenraum von R2.

2. Es gibt nur eine Gerade, auf der die Eigen-vektoren liegen. Dies ist der einzige Eigen-raum von R2.

3. Es gibt Eigenvektoren mit zwei unabhängi-gen Richtungen. Es gibt genau zwei Eigen-räume von R2. Dies ist typisch, der Stan-dardfall.

4. Jeder Vektor ist Eigenvektor oder andersgesagt: Jeder eindimensionale Unterraumvon R2 ist Eigenraum.

Auch die Singulärwertzerlegung kann im Fallm = n = 2 mit der Funktion eigshow visuali-siert werden.

Viele in der Praxis auftretenden Eigenwertpro-bleme haben die Form eines verallgemeiner-ten (allgemeinen) Eigenwertproblems: Gege-ben sind zwei quadratische Matrix A und B.Gesucht sind Zahlen λ und Vektoren x, sodassgilt

Ax = λBx.

Für B , E ist diese Aufgabenstellung ei-ne Verallgemeinerung der herkömmlichen Ei-genwertaufgabe; für B = E reduziert sichdas verallgemeinerte Eigenwertproblem aufdie Standardeigenwertaufgabe. Verallgemei-nerte Eigenwertprobleme treten zum Beispielin mechanischen Schwingungssystemen auf;dort ist A die Steifigkeitsmatrix und B die Mas-senmatrix.

Ist A oder B eine reguläre Matrix, dann kannman das verallgemeinerte Problem auf ein ge-wöhnliches reduzieren, entweder so

(B−1 A)x = λx.

oder so(A−1B)x =

x.

In Matlab kann auch dieses verallgemeiner-te Problem mit der Funktion eig angegan-gen werden. Die Funktion eigs berechnet einpaar Eigenwerte und Eigenvektoren, wenn ge-wünscht.

Aufgabe 91 (Eigensysteme) Bestimmen Sieeine orthogonale Eigenvektorenmatrix Q, diedie Matrix

A =[

3 11 3

]

102 Copyright c© G. Gramlich

diagonalisiert.Lösung:

Die Matrix

Q =[−1/√

2 1/√

21/√

2 1/√

2

]diagonalisiert A. Man erhält sie mit der Funk-tion eig.

1 >> A = [3 1; 1 3];2 >> [Q,D] = eig(A)3 Q =4 -0.7071 0.70715 0.7071 0.70716 D =7 2 08 0 4

Probe:

1 >> inv(Q)*A*Q2 ans =3 2.0000 04 0 4.0000

Die symbolische eig-Funktion liefert (nur) ei-ne orthogonale Basis aus Eigenvektoren. © . .©

48.7. Lineare Abbildungen und Matrizen

Wir visualisieren lineare Abbildungen im R2.Diese können durch (2, 2)-Matrizen beschrie-ben werden. Wir zeichnen ein Haus und be-trachten das „neue“ Haus nach linearen Abbil-dungen. Die folgende Matlab-Funktion zeich-net ein Haus in der Ebene, indem sie Daten-punkte, die in der Matrix H angegeben werdenmüssen, miteinander verbindet.

1 function plotHaus(H)

2 %-Zeichnet ein Haus.3 x = H(1,:)’; y = H(2,:)’;4 plot(x,y,’o’,x,y,’r-’)5 axis([-10 10 -10 10]); axis square

;

Die beiden Anweisungen

1 >> 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]2 >> plotHaus(H)

erzeugen das Bild 43.

−10 −5 0 5 10−10

−8

−6

−4

−2

0

2

4

6

8

10

Abbildung 43: Durch die Datenpunkte in H er-zeugte Haus

Um nun lineare Abbildungen zu „sehen“ , müs-sen wir eine lineare Abbildung als Matrix Adefinieren und diese mit H multiplizieren. AlsBeispiel betrachten wir eine Drehung um 60◦

und eine Spiegelung an der x-Achse. Im erstenFall ist

A =[

cos 60◦ − sin 60◦

sin 60◦ cos 60◦

]

103 Copyright c© G. Gramlich

und im Zweiten

A =[

1 00 −1

].

Nach zweimaligem Aufruf vonplotHaus(A*H) (zuvor entsprechend Adefinieren!) erhalten wir die Bilder 44 und 45.

−10 −5 0 5 10−10

−8

−6

−4

−2

0

2

4

6

8

10

Abbildung 44: Nach Drehung

48.8. Matlab-Funktionen für die LineareAlgebra im Überblick

Zusammenfassend habe ich in den Tabellen 24,25 und 26 die wichtigsten Funktionen aus Mat-lab zur Linearen Algebra zusammengestellt.Beachten Sie, dass zum Beispiel die Funktio-nen eig, inv usw. vom Overloading Gebrauchmachen. Overloading ist ein Mechanismus, deres erlaubt verschiedene Typen von Funktion-sargumenten zu verwenden. So kann A beimAufruf von eig(A) eine symbolische oder einenumerische Matrix sein.

−10 −5 0 5 10−10

−8

−6

−4

−2

0

2

4

6

8

10

Abbildung 45: Nach Spiegelung

Symbolische Funktionencolspace 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 24: Lineare Algebra

104 Copyright c© G. Gramlich

Numerische Funktionendet 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 25: Lineare Algebra

Weitere Funktionencross Kreuzproduktdot Skalarpordukteye Einheitsmatrixlu LU-Faktorisierungqr QR-Faktorisierungzeros Nullmatrix

Tabelle 26: Linearen Algebra

49. Lineare Algebra (Teil 2)

49.1. Lineare Gleichungssysteme (2)

In vielen Anwendungen muss man lineareGleichungen lösen. Daher ist es in Matlab be-sonders einfach, solche zu lösen. Hierzu dientder \-Operator (Backslash-Operator), siehedoc slash (help slash). Auch die Funk-tion linsolve löst lineare Gleichungssyste-me. Unter Verwendung dieser Funktion ist esmöglich, lineare Systeme effizienter zu lösen,wenn die Struktur der Koeffizientenmatrix (Sy-stemmatrix) bekannt ist, siehe doc linsolve(help linsolve).

49.1.1. Quadratische Systeme

Ist A eine reguläre (quadratische) Matrix, sogibt es genau eine Lösung des linearen Sys-tems Ax = b und zwar für jede rechte Seiteb. Zum Beispiel ist die Matrix

A =[

1 −23 2

]regulär und daher gibt es für b = (1, 11) genaueine Lösung; diese ist x = (3, 1). In Matlablöst man dies in einem Einzeiler, nachdem manA und b eingegeben hat.

1 >> A = [1 -2; 3 2];2 >> b = [1; 11];3 >> x = A\b4 x =5 36 1

Ist die Koeffizientenmatrix A singulär, so er-hält man eine Fehlermeldung, auch dann wenn

105 Copyright c© G. Gramlich

b im Spaltenraum von A liegt und es nicht nureine, sondern unendlich viele Lösungen gibt.

Aufgabe 92 (Lineare Systeme) Berechnen Siedie allgemeine Lösung des linearen Glei-chungssystems 2 4 −2

4 9 −3−2 −3 7

x1

x2x3

= 2

810

.A x b

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

1 >> A = [2 4 -2; 4 9 -3; -2 -3 7];2 >> b = [2; 8; 10];3 >> x = A\b4 x =5 -1.00006 2.00007 2.0000

Die Lösung ist eindeutig, sonst wäre die MatrixA singulär und Matlab hätte mit einer Fehler-meldung geantwortet. Hier noch alternativ diesymbolische Lösung.

1 >> x = sym(A)\b2 x =3 [ -1]4 [ 2]5 [ 2]

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

49.1.2. Überbestimmte Systeme

Gibt es mehr Gleichungen als Unbekannte, sonennt man Ax = b überbestimmt. Das Sys-

tem Ax = b hat in der Regel keine Lösung,aber das Ersatzproblem Ax � b (die lineareAusgleichsaufgabe) ist stets lösbar. Entwederhat das Ersatzproblem genau eine oder aberunendlich viele Lösungen, je nachdem ob dieSpalten von A linear unabhängig sind odernicht. Im Fall, dass es unendlich viele Lösun-gen gibt erhält man durch A\b eine Basislö-sung. Mit pinv(A)*b erhält man den Lösungs-vektor kleinster Länge.

Aufgabe 93 (Ausgleich) Berechnen Sie dieLösung des linearen AusgleichsproblemsAx � 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 drei Ar-ten berechnet werden.

1 >> A = [1 0; 1 1; 1 2];2 >> b = [6; 0; 0];3 >> x = A\b4 x =5 5.00006 -3.00007 >> x = pinv(A)*b8 x =9 5

10 -311 >> x = inv(A’*A)*A’*b12 x =13 514 -3

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

Aufgabe 94 (Lineare Systeme) Berechnen Sie

106 Copyright c© G. Gramlich

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

1 >> x = A\b2 x =3 04 0.5000

und

1 >> x = pinv(A)*b2 x =3 0.20004 0.4000

Beides sind spezielle Lösungen der allgemei-nen Lösung x = (x1, x2) = (1 − 2t, 2), t ∈ Rder linearen Ausgleichsaufgabe. x = A\b be-rechnet eine Basislösung (t = 0.5) und x =pinv(A)*b die Lösung kleinster Länge (t =0.4). Da inv(A’*A) nicht existiert, kann überdiesen Weg keine Lösung berechnet werden. ©©

49.1.3. Unterbestimmte Systeme

Ein lineares System Ax = b heißt unterbe-stimmt, wenn weniger Gleichungen als Unbe-kannte vorliegen; in der Regel hat Ax = b dannunendlich viele Lösungen. In diesem Fall wirddurch A\b die Lösung kleinster Länge berech-net, das heißt von allen Lösungen x wird dieje-nige ermittelt, wo die Länge von x am kleins-ten ist. Hat das System Ax = b keine Lösung,

so wird eine Basislösung des ErsatzproblemsAx � b berechnet.

Aufgabe 95 (Lineare Systeme) Berechnen Siein 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

1 >> A = [1 1]; b = [6];2 >> x = A\b, x = pinv(A)*b,3 x =4 65 06 x =7 3.00008 3.0000

und

1 >> x = A’*inv(A*A’)*b2 x =3 34 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’)*bdie Lösung kleinster Länge (t = 3). © . . . . . . .©

49.2. Lineare Gleichungssysteme (3)

Lineare Gleichungssysteme lassen sichsymbolisch in Matlab mit den Funktionensolve und \ lösen. Darüberhinaus gibt esnoch die Maple-Funktionen gausselim und

107 Copyright c© G. Gramlich

gaussjord, die mit der maple-Funktionangesprochen werden können. Für das maple-Kommando verweise ich sie auf Abschnitt66.2.

Der Prozess einer Matrix auf reduzierte Zeilen-stufenform zu transformieren wird als Gauss-Jordan-Verfahren bezeichnet. Daher habenauch die beiden Funktionen gaussjord undrref die gleiche Wirkung. Das folgende Bei-spiel zeigt dies:

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

2 ans =3 [ 1, 0, 0, 1]4 [ 0, 1, 0, 2]5 [ 0, 0, 1, 3]

Die gausselim-Funktion transformiert die er-weiterte Matrix auf Zeilenstufenform, wo-bei die führenden Elemente nicht notwendiggleich 1 sind.

1 >> maple(’gausselim’,sym([1 1 2 9;2 4 -3 1; 3 6 -5 0]))

2 ans =3 [ 1, 1, 2, 9]4 [ 0, 2, -7, -17]5 [ 0, 0, -1/2, -3/2]

Die backsub-Funktion erlaubt es dann die Lö-sung durch Rückwärtseinsetzen zu gewinnen:

1 >> maple(’backsub’,ans)2 ans =3 [ 1, 2, 3]

Wir betrachten das folgende unterbestimmte li-

neare Gleichungssystem

−2x3 + 7x5 = 12

2x1 + 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 Parametern t ∈ Rund s ∈ R können die Lösungen wie folgt pa-rametrisiert angegeben werden:

x1 = 7 − 2x2 − 3x4

x2 = t

x3 = 1

x4 = s

x5 = 2

Mit rref können wir die Lösungen bestätigen:

1 >> Ab = sym([0 0 -2 0 7 12; 2 4-10 6 12 28; 2 4 -5 6 -5 -1])

2 Ab =3 [ 0, 0, -2, 0, 7, 12]4 [ 2, 4, -10, 6, 12, 28]5 [ 2, 4, -5, 6, -5, -1]6 >> rref(Ab)7 ans =8 [ 1, 2, 0, 3, 0, 7]9 [ 0, 0, 1, 0, 0, 1]

10 [ 0, 0, 0, 0, 1, 2]

Die Lösungen erhalten wir auch wie folgt

1 >> maple(’gausselim’,Ab)2 ans =

108 Copyright c© G. Gramlich

3 [ 2, 4, -10, 6, 12, 28]4 [ 0, 0, -2, 0, 7, 12]5 [ 0, 0, 0, 0, 1/2, 1]6 >> maple(’backsub’,ans)7 ans =8 [ 7-2*_t2-3*_t1,_t2,1,_t1,2]

Dagegen liefern die Anweisungen

1 >> A = Ab(:,1:5)2 A =3 [ 0, 0, -2, 0, 7]4 [ 2, 4, -10, 6, 12]5 [ 2, 4, -5, 6, -5]6 >> b = Ab(:,6)7 b =8 [ 12]9 [ 28]

10 [ -1]11 >> A\b12 ans =13 [ 7]14 [ 0]15 [ 1]16 [ 0]17 [ 2]

nur die Lösung x = (7, 0, 1, 0, 2). Die Parame-ter t und s sind hier gleich Null gewählt.

Lösen wir das Beispiel numerisch, so erhaltenwir die spezielle Lösung x = (0, 0, 1, 7/3, 2),wie die folgende Zeile zeigt:

1 >> double(A)\double(b)2 ans =3 04 05 1.00006 2.33337 2.0000

Aufgabe 96 (Lineare Systeme) Berechnen Sie

die allgemeine Lösung des linearen Glei-chungssystems

4x1 − 8x2 = 12

3x1 − 6x2 = 9

−2x1 + 4x2 = − 6.

mit Hilfe der Funktionen gausselim undbacksub, siehe Aufgabe 74.Lösung: Die allgemeine Lösung erhalten wirdurch

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

10 [ 3+2*_t1, _t1]

Demnach ist: x = (3, 0) + t(2, 1), t ∈ R dieallgemeine Lösung. Mit

1 >> A\b2 ans =3 34 0

erhalten wir die spezielle Lösung (3, 0). Hierist t = 0. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

Wir betrachten nun ein lineares Gleichungssys-tem, das keine Lösung hat. Das folgende Sys-tem ist überbestimmt. Überbestimmte Systemhaben mehr Gleichungen als Variablen und da-her in der Regel (generisch) keine Lösung. Tat-

109 Copyright c© G. Gramlich

sächlich ist das System

2x1 − 3x2 = −2

2x1 + x2 = 1

3x1 + 2x2 = 1

inkonsistent. Dies können wir mit der rref-Funktion sofort überprüfen:

1 >> Ab = sym([2 -3 -2; 2 1 1; 3 21])

2 Ab =3 [ 2, -3, -2]4 [ 2, 1, 1]5 [ 3, 2, 1]6 >> rref(Ab)7 ans =8 [ 1, 0, 0]9 [ 0, 1, 0]

10 [ 0, 0, 1]

Die letzte Zeile der erweiterten Matrix besagt

0x1 + 0x2 = 1.

Wir testen die anderen Funktionen, die uns zurLösung linearer Gleichung symbolisch odernumerisch in Matlab zur Verfügung stehen.Das Gauss-Verfahren liefert

1 >> maple(’gausselim’,Ab)2 ans =3 [ 2, -3, -2]4 [ 0, 4, 3]5 [ 0, 0, -7/8]

Auch hier erkennt man an der letzten Zeile derMatrix die Unlösbarkeit des linearen Systems,denn die Gleichung 0x1+0x2 = −7/8 hat keineLösung. Das Rückwärtseinsetzen bestätigt dieBeobachtung

1 >> maple(’backsub’,ans)2 ??? Error using ==> sym/maple3 Error, (in backsub) inconsistent4 system

Was liefert A\b?

1 >> A\b2 Warning: System is inconsistent.3 Solution does not exist.4 > In C:\MATLAB6p1\toolbox\symbolic

\5 @sym\mldivide.m at line 296 ans =7 Inf

Wie zu erwarten: das System ist inkonsistent.Auch die Funktion solve sagt, dass die Lö-sungsmenge leer ist:

1 >> solve(’2*x1-3*x2=-2’,’2*x1+x2=1’,’3*x1+2*x2=1’)

2 Warning: 3 equations in 2variables.

3 > In C:\MATLAB6p1\toolbox\symbolic4 \solve.m at line 1105 Warning: Explicit solution could6 not be found.7 > In C:\MATLAB6p1\toolbox\symbolic8 \solve.m at line 1369 ans =

10 [ empty sym ]

Numerisch dagegen erhalten wir die Lösung0.6429:

1 >> double(A)\double(b)2 ans =3 0.6429

Dies ist die eindeutige Lösung des dazugehöri-gen linearen Ausgleichsproblems. Für weitereEinzelheiten hierzu verweisen wir auf [6].

110 Copyright c© G. Gramlich

Die Tabelle 27 zeigt zusammenfassend die

Matlab-Syntax Bedeutung\ Löst Ax = brref Red. Zeilenstufenformsolve Löst Gleichungengausselim Gauss-Verfahrengaussjord Gauss-Jordan-Verf.

Tabelle 27: Lineare Gleichungssysteme sym-bolisch lösen

Funktionen, die man einsetzen kann, um linea-re Gleichungen symbolisch zu lösen. Beach-ten Sie, dass es das Gleiche bedeutet, eine Ma-trix in reduzierte Zeilenstufenform zu bringenwie das Gauss-Jordan-Verfahren durchzufüh-ren. Die Funktion rref bzw. das Kommando \stehen auch für numerische Berechnungen zurVerfügung.

49.3. Lineare Gleichungssysteme (4)

Über lineare Gleichungssysteme haben wir inden vorhergehenden Abschnitten schon vielgesagt. Hier soll noch ergänzt werden, dassder \-Operator (Backslash-Operator) auch ver-wendet werden kann, um MatrizengleichungenAX = B zu lösen. Hier ist die Rechte Seite Beine Matrix mit p Spalten. In diesem Fall löstMatlab AX(:, j) = B(:, j) für j = 1 : p.

49.4. Inverse

Die Inverse einer (n, n)-Matrix ist die MatrixX, die den Gleichungen AX = X A = En ge-nügt. Hierbei ist En die (n, n)-Einheitsmatrix,die in Matlab mit eye(n) erzeugt werden

kann. Eine Matrix, die keine Inverse hat, heißtsingulär. Eine singuläre Matrix kann auf meh-rere Arten charakterisiert werden: Die Deter-minante ist Null oder es gibt einen Vektor v , omit Av = o.

Die Inverse einer quadratischen Matrix kannmit der Funktion inv (auch symbolisch) be-rechnet werden. Zum Beispiel

1 >> A = pascal(3), X = inv(A)2 A =3 1 1 14 1 2 35 1 3 66 X =7 3 -3 18 -3 5 -29 1 -2 1

10 >> norm(A*X-eye(3))11 ans =12 0

Die Inverse wird mit Hilfe der LU-Faktorisierung mit partieller Pivotisierungberechnet. Gleichzeit wird mit rcond derKehrwert der Konditionszahl berechnet. Wirdfestgestellt, dass A (exakt) singulär oderdie rcond kleiner als eps ist, so wird eineWarnung ausgegeben.

Beachten Sie: Die Inverse einer Matrix mussexplizit in der Praxis nur sehr selten berech-net werden. Zum Beispiel ist das Berechneneines quadratischen lineare GleichungssystemsAx = b mit A\b zwei bis dreimal schnellerals durch inv(A)*b. Gewöhnlich ist es mög-lich, das Berechnen der Inversen einer Matrixin Termen eines linearen Gleichungssystemsauszudrücken, so dass die explizite Inversionvermieden werden kann.

111 Copyright c© G. Gramlich

50. Lineare Algebra (Teil 3)

Matlabwurde ursprünglich entwickelt, um nu-merische Berechnungen in der Linearen Al-gebra durchzuführen. Daher ist es nicht über-raschend, dass viele Funktionen zum Lösenlinearer Gleichungssysteme und Eigenwert-aufgaben zur Verfügung stehen. Sehr vieledieser Funktionen basieren auf der Fortran-Bibliothek Lapack [1].

Lange Zeit waren reelle und komplexe Matri-zen der einzige Datentyp in Matlab und diemeisten Funktionen können auch mit reellenund komplexen Matrizen aufgerufen und be-arbeitet werden. Das Teilgebiet, das sich mitnumerischen Methoden in der Linearen Alge-bra befasst, heißt Numerische Lineare Algebra.Jedes Buch über Numerische Mathematik be-handelt auch dieses Thema, siehe zum Beispiel[6], [11] und der darin zitierten Literatur.

50.1. Normen

Eine Norm ist ein skalares Maß für die Größeeines Vektors oder einer Matrix. Die p-Normeines n-Vektors x ist definiert 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 Aufruf istnorm(x,p), wobei p = 2 standardmäßig ein-gestellt ist. Im Fall p=-inf wird mini |xi| be-rechnet.

1 >> x = 1:4;2 >> [norm(x,1) norm(x,2) norm(x,inf

) norm(x,-inf)]3 ans =4 10.0000 5.4772 4.00005 1.0000

Die Tabelle 28 zeigt die Vektornormen über-

Matlab Bedeutungnorm(x)=norm(x,2) ‖x‖2norm(x,1) ‖x‖1norm(x,inf) ‖x‖∞norm(x,-inf) ‖x‖−∞norm(x,p) ‖x‖p für p ≥ 1

Tabelle 28: Vektornormen

sichtlich.

Aufgabe 97 (Vektornormen) Berechnen Siefür den Vektor x = (1,−2, 3) die Normen ‖x‖pfür p = 1, 1.5, 2, . . . 9.5 und für p = ∞.Lösung: Der Aufruf Vektornormen

1 p norm(x,p)2 -------------------3 1.0 6.00004 1.5 4.33465 2.0 3.74176 2.5 3.45867 3.0 3.30198 3.5 3.20729 4.0 3.1463

10 4.5 3.105611 5.0 3.077412 5.5 3.057413 6.0 3.043014 6.5 3.032515 7.0 3.024716 7.5 3.0188

112 Copyright c© G. Gramlich

17 8.0 3.014418 8.5 3.011119 9.0 3.008620 9.5 3.006721 Inf 3.0000

berechnet die Normen. Die FunktionVektornormen ist wie folgt realisiert.

1 function Vektornormen2 %-Vektor x3 x = [1 -2 3];4 %5 disp(’ p norm(x,p)’);6 disp(’-------------------’);7 for p = [1:0.5:9.5 inf]8 disp(sprintf(’%2.1f %15.4f ’,p,

norm(x,p)))9 end

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

Aufgabe 98 (Vektornormen) Berechnen Siedie 1, 2 und ∞-Norm der Vektoren v1 = (2, 1),v2 = (1, 0) und v3 = (1,−1).Lösung: Wir erhalten:

1 >> v1= [2,1];2 [norm(v1,1) norm(v1,2) norm(v1,inf

)]3 ans =4 3.0000 2.2361 2.00005 >> v2= [1,0];6 [norm(v2,1) norm(v2,2) norm(v2,inf

)]7 ans =8 1 1 19 >> v3= [1,-1];

10 [norm(v3,1) norm(v3,2) norm(v3,inf)]

11 ans =12 2.0000 1.4142 1.0000

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

Die p-Norm einer Matrix ist definiert durch

‖A‖p = maxx,o

‖Ax‖p‖x‖p

.

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

‖A‖1 = max1≤ j≤n

m∑i=1

|ai j|

und (Maximale Zeilensumme)

‖A‖∞ = max1≤i≤m

n∑j=1

|ai j|.

Die 2-Norm von A kann berechnet werdenals der größte singuläre Wert von A, alsomax(svd(A)). Matrizennormen werden eben-falls mit der Funktion norm berechnet. Für Ma-trizen funktioniert der Aufruf norm(A,p) mitp=1,2,inf und p=’fro’, wobei

‖A‖F =( m∑

i=1

n∑j=1

|ai j|2)1/2

die Frobenius-Norm ist. Beachten Sie: DieFunktion norm ist ein Beispiel einer Funktionmit einem Argument, das einen unterschiedli-chen Datentyp haben kann; hier double undchar (String). Hier noch ein Beispiel:

1 >> A = [1 2; 3 4];2 >> [norm(A,1) norm(A,2) norm(A,inf

) norm(A,’fro’)]3 ans =4 6.0000 5.4650 7.00005 5.4772

113 Copyright c© G. Gramlich

Ist das Berechnen der Matrixnorm für p = 2 zuaufwendig, so kann mit der Funktion normestein Näherungswert berechnet werden. Die Ta-belle 29 zeigt die Matrizennormen übersicht-

Matlab Bedeutungnorm(A)=norm(A,2) ‖A‖2norm(A,1) ‖A‖1norm(A,inf) ‖A‖∞norm(A,’fro’) ‖A‖F

Tabelle 29: Matrizennormen

lich.

Aufgabe 99 (Matrizennormen) Berechnen Siedie 1-, 2-,∞- und Frobenius-Norm für die Ma-trizen

A =[

0 1−1 0

], B =

[1 22 2

]und

C =[

1 41 2

].

Lösung: Es ist

1 >> A = [0 1; -1 0];2 >> [norm(A,1) norm(A,2) norm(A,inf

) norm(A,’fro’)]3 ans =4 1.0000 1.0000 1.00005 1.41426 >> B = [1 2; 2 2];7 >> [norm(B,1) norm(B,2) norm(B,inf

) norm(B,’fro’)]8 ans =9 4.0000 3.5616 4.0000

10 3.605611 >> C = [1 4; 1 2];12 >> [norm(C,1) norm(C,2) norm(C,inf

) norm(C,’fro’)]

13 ans =14 6.0000 4.6708 5.000015 4.6904

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

50.2. Konditionszahlen

Für eine reguläre Matrix A ist

κ(A) =‖A‖‖A−1‖

≥ 1

die Konditionszahl bezüglich der Inversi-on. Die Zahl misst die Sensitivität der Lö-sung eines 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 Funkti-on cond berechnet werden, wobei die Nor-men p=1,2,inf,’fro’ unterstützt werden.Für p=2 sind auch rechteckige Matrizen er-laubt, wobei dann die Konditionszahl durch

κ2(A) =‖A‖2‖A+‖2

definiert ist, wobei A+ die Pseudoinverse vonA ist.

Die Konditionszahl auszurechnen ist aufwen-dig. Daher gibt es in Matlab zwei Funktio-nen, die die Konditionszahl näherungsweiseberechnen: rcond und condest, siehe docrcond und doc condest.

50.3. LU-Faktorisierung

Eine LU-Faktorisierung einer quadratischenMatrix A ist eine Faktorisierung der Form A =

114 Copyright c© G. Gramlich

LU, wobei L eine untere Dreicksmatrix mitEinsdiagonale und U eine obere Dreicksmatrixsind. Nicht jede Matrix kann in dieser Formfaktorisiert werden, lässt man aber Zeilenver-tauschungen zu, so ist dies immer möglich undsolch eine Faktorisierung existiert immer. DieFunktion lu berechnet eine LU-Faktorisierungmit teilweiser Pivotisierung PA = LU, wo-bei P eine Permutationsmatrix ist. Der Aufruf[L,U,P] = lu(A) gibt die Dreiecksmatrizenund die Permutationsmatrix zurück. Mit zweiAusgabeargumenten, [L,U] = lu(A) wird Uund L = PTL zurückgegeben, das heißt List eine Dreiecksmatrix bis auf Zeilenvertau-schungen. Wir geben ein Beispiel.

1 >> A = [1 2 -1; -2 -5 3; -1 -3 0];2 [L,U,P] = lu(A)3 L =4 1.0000 0 05 -0.5000 1.0000 06 0.5000 1.0000 1.00007 U =8 -2.0000 -5.0000 3.00009 0 -0.5000 0.5000

10 0 0 -2.000011 P =12 0 1 013 1 0 014 0 0 115 >> [L,U] = lu(A)16 L =17 -0.5000 1.0000 018 1.0000 0 019 0.5000 1.0000 1.000020 U =21 -2.0000 -5.0000 3.000022 0 -0.5000 0.500023 0 0 -2.0000

Die lu Funktion arbeitet auch für rechtecki-ge Matrizen. Ist A eine (m, n)-Matrix, dann istL eine (m, n)- und U eine (n, n)-Matrix, fallsm ≥ n ist und L eine (n, n)- und U eine (m, n)-Matrix, wenn m < n gilt.

Das Lösen eines quadratischen linearen Glei-chungssystems Ax = b durch x=A\b istgleichbedeutend damit, von A eine LU-Faktorisierung zu bilden, und dann mit denFaktoren zu lösen:

1 [L,U] = lu(A);2 x = U\(L\b);

Hier ist ein Beispiel.

1 >> A = [1 1 2; 2 4 -3; 3 6 -5];2 >> b = [9;1;0];3 >> x = A\b4 x =5 1.00006 2.00007 3.00008 >> [L,U] = lu(A);9 >> x = U\(L\b)

10 x =11 1.000012 2.000013 3.0000

Der Vorteil dieser Vorgehensweise ist, dassman sich Rechnungen einspart, wenn ein Glei-chungssystem mit mehreren rechten Seitenoder eine Matrixgleichung vorliegt, weil danndie Faktorisierung nur einmal gemacht werdenmuss.

50.4. Cholesky-Faktorisierung

Jede positiv definite Hermitesche Matrix hateine Cholesky-Zerlegung A = R∗R, wobei R

115 Copyright c© G. Gramlich

eine obere Dreiecksmatrix mit reeller positiverDiagonale ist. Die Cholseky-Faktorisierungwird mit chol berechnet: R=chol(A). Hier einBeispiel.

1 >> A = pascal(3)2 A =3 1 1 14 1 2 35 1 3 66 >> R = chol(A)7 R =8 1 1 19 0 1 2

10 0 0 1

Und die Probe:

1 >> R’*R2 ans =3 1 1 14 1 2 35 1 3 6

Beachten Sie, dass chol nur die obere Drei-ecksmatrix einschließlich der Diagonalen vonA zur Faktorisierung verwendet. Ist die Ma-trix A nicht positiv definit, so erhält man ei-ne Fehlermeldung. Tatsächlich ist die Funkti-on chol gegeignet um zu überprüfen, ob eineMatrix positiv definit ist. Hat nach dem Auf-ruf [R,p]=chol(A) der Rückgabeparameter pden Wert null, so ist A positiv definit. Siehedoc chol für weitere Details zum Ausgabe-argument p.

50.5. QR-Faktorisierung

Eine QR-Faktorisierung einer (m, n)-Matrix Aist eine Faktorisierung der Form A = QR, wo-bei Q eine (m,m)-unitäre und R eine (m, n)-

obere Dreicksmatrix ist. In Matlab wird ei-ne QR-zerlegung mit der Funktion qr berech-net. Diese Faktorisierung wird zum Beispielzum Lösen linearer Ausgleichsaufgaben undzur Konstruktion einer orthonormalen Basisfür den Spaltenraum von A eingesetzt. Die An-weisung [Q,R] = qr(A) berechnet die Fak-torisierung. Ist m > n, so gibt die Anweisung[Q,R] = qr(A,0) „wirtschaftlichere“ Matri-zen zurück. Man spricht von reduzierter QR-Zerlegung. Die Matrix Q hat nur n Spalten unddie Matrix R hat n Zeilen und n Spalten. Wirgeben ein Beispiel.

1 >> A = [1 0 0; 1 1 0; 1 1 1];2 >> [Q,R] = qr(A)3 Q =4 -0.5774 0.8165 -0.00005 -0.5774 -0.4082 -0.70716 -0.5774 -0.4082 0.70717 R =8 -1.7321 -1.1547 -0.57749 0 -0.8165 -0.4082

10 0 0 0.7071

Hier noch die Probe:

1 >> Q*R2 ans =3 1.0000 0.0000 -0.00004 1.0000 1.0000 0.00005 1.0000 1.0000 1.0000

Aufgabe 100 (QR-Faktorisierung) BerechnenSie von der Matrix

A =

1 −2 −12 0 12 −4 24 0 0

eine reduzierte QR-Faktorisierung.

116 Copyright c© G. Gramlich

Lösung: Es ist

1 >> A=[1 -2 -1; 2 0 1; 2 -4 2; 4 00];

2 >> [Q1,R1]=qr(A,0)3 Q1 =4 -0.2000 0.4000 0.80005 -0.4000 -0.2000 -0.40006 -0.4000 0.8000 -0.40007 -0.8000 -0.4000 0.20008 R1 =9 -5.0000 2.0000 -1.0000

10 0 -4.0000 1.000011 0 0 -2.0000

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

Aufgabe 101 (QR-Faktorisierung) BerechnenSie von der Matrix

A =

1 −1 11 0 01 1 11 2 4

eine QR- und eine reduzierte QR-Faktorisierung.Lösung: Es ist

1 >> [Q,R] = qr(A)2 Q =3 -0.5000 0.6708 0.50004 -0.5000 0.2236 -0.50005 -0.5000 -0.2236 -0.50006 -0.5000 -0.6708 0.50007

8 0.22369 -0.6708

10 0.670811 -0.223612 R =13 -2.0000 -1.0000 -3.000014 0 -2.2361 -2.236115 0 0 2.0000

16 0 0 0

und

1 >> [Q1,R1] = qr(A,0)2 Q1 =3 -0.5000 0.6708 0.50004 -0.5000 0.2236 -0.50005 -0.5000 -0.2236 -0.50006 -0.5000 -0.6708 0.50007 R1 =8 -2.0000 -1.0000 -3.00009 0 -2.2361 -2.2361

10 0 0 2.0000

In der orthogonalen Matrix Q fehlt nun dieletzte Spalte und in der Dreiecksmatrix R dieletzte Nullzeile. © . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 102 (QR-Faktorisierung) BerechnenSie von der Matrix

A =

1 01 11 2

eine reduzierte QR-Faktorisierung.Lösung: Es ist

1 >> A = [1 0; 1 1; 1 2];2 >> [Q1,R1]=qr(A,0)3 Q1 =4 -0.5774 0.70715 -0.5774 0.00006 -0.5774 -0.70717 R1 =8 -1.7321 -1.73219 0 -1.4142

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

117 Copyright c© G. Gramlich

50.6. Singulärwertzerlegung

Die Singulärwertzerlegung (Singular ValueDecomposition, kurz: SVD) einer (m, n)-Matrix A hat die Form A = USV∗, wo-bei U eine unitäre (m,m)-Matrix, S eine re-elle (m, n)-Diagonalmatrix und V eine unitäre(n, n)-Matrix ist. Die Diagonalelemente von Ssind die singulären Werte si mit s1 ≥ s2 ≥

· · · ≥ smin{m,n} ≥ 0. Die Anweisung [U,S,V]= svd(A) berechnet eine Singulärwertzerle-gung. Gibt man nur eine Ausgabevariable an,so ist dies der Vektor, der aus den singulä-ren Wert besteht. Die Anweisung [U,S,V]= svd(A,0) liefert eine reduzierte Singulär-wertzerlegung (economy size), wenn m > nist. Dann ist U eine (m, n)-Matrix mit ortho-normalen Spalten und S hat die Größe (n, n).Die Anweisung [U,S,V] = svd(A,’econ’)liefert das gleiche Ergebnis wie [U,S,V] =svd(A,0), wenn m ≥ n ist, ist aber m < n,so hat V die Größe (n,m) mit orthonormalenSpalten, und S ist quadratisch mit Ordnung m.Hier ist ein Beispiel [6]:

1 >> A = [1 2 1 -2; 4 2 3 1];2 >> [U,S,V] = svd(A,’econ’)3 U =4 -0.3583 -0.93365 -0.9336 0.35836 S =7 5.7839 08 0 2.55869 V =

10 -0.7076 0.195211 -0.4467 -0.449712 -0.5462 0.055213 -0.0375 0.8698

Die Funktionen rank, null und orth berech-nen den Rang, eine orthonormale Basis für denNullraum und eine orthonormale Basis für denSpaltenraum der Argumentmatrix. Alle dreiFunktionen basieren auf der Singulärwertzer-legung, wobei Ein Toleranzwert proportionalzu eps verwendet wird, um zu entscheiden,wann ein singulärer Wert als Null betrachtetwerden kann. Wir geben ein Beispiel.

1 >> A = [1 -1 1; 1 0 0; 1 1 1; 1 24];

2 >> [U,S,V] = svd(A)3 U =4 -0.1517 0.8959 -0.35255 -0.0612 0.4013 0.62076 -0.3215 0.0406 0.66717 -0.9327 -0.1861 -0.21348

9 0.223610 -0.670811 0.670812 -0.223613 S =14 4.8956 0 015 0 1.6942 016 0 0 1.078417 0 0 018 V =19 -0.2997 0.6798 0.669320 -0.4157 -0.7245 0.549821 -0.8587 0.1135 -0.499722 >> rank(A)23 ans =24 325 >> null(A)26 ans =27 Empty matrix: 3-by-028 >> orth(A)29 ans =30 -0.1517 0.8959 -0.352531 -0.0612 0.4013 0.6207

118 Copyright c© G. Gramlich

32 -0.3215 0.0406 0.667133 -0.9327 -0.1861 -0.2134

Aufgabe 103 (SVD [5]) Berechnen Sie eineSingulärwertzerlegung der Matrix

A =

1 11 10 0

.Lösung: Es ist

1 >> [U,S,V] = svd(A)2 U =3 -0.7071 -0.7071 04 -0.7071 0.7071 05 0 0 1.00006 S =7 2.0000 08 0 0.00009 0 0

10 V =11 -0.7071 0.707112 -0.7071 -0.7071

Man erkennt, dass die Matrix A den Rang 1hat; die singulären Werte sind s11 = 2 unds22 = 0. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Die verallgemeinerte Singulärwertzerlegung(Generalized Singular Value Decomposition,kurz: GSVD) einer (m, p)-Matrix A und ei-ner (n, p)-Matrix B hat die Form A = UCX∗,B = VSX∗, C∗C + S∗S = E, wobei Uund V unitär sind, X regulär, und C und Dsind reelle Diagonalmatrizen mit nichtnega-tiven Diagonalelementen. Die Zahlen cii/sii

sind die verallgemeinerten singulären Werte.Diese Zerlegung wird in Matlab wie folgterreicht: [U,V,X,C.S] = gsvd(A,B). Siehedoc gsvd (help gsvd) für weitere Details.

50.7. Pseudoinverse

Die Pseudoinverse ist die Verallgemeinerungder Inversen für Matrizen A, die singulär odernicht quadratisch sind ([5]). Die mathemati-sche Notation ist A+. Sie wird in Matlabmit pinv berechnet. Die Pseudoinverse wirdmit Hilfe der Singulärwertzerlegung berech-net. Beispiele ([5]):

1 >> A = [2 0; 0 0];2 >> pinv(A)3 ans =4 0.5000 05 0 06 >> B = [2; 4];7 >> pinv(B)8 ans =9 0.1000 0.2000

10 >> C = [2 0; 0 3; 0 0];11 >> pinv(C)12 ans =13 0.5000 0 014 0 0.3333 0

50.8. Eigensysteme

Die effiziente numerische Berechnung von Ei-gensystemen (Eigenwerte und Eigenvektoren)ist ein komplexer Akt. Die Matlab-Funktioneig vereinfacht diesen Lösungsprozess, indemsie die Anzahl der Eingabematrizen, sowie de-ren Struktur und die Ausgabe berücksichtigt.Sie unterscheidet intern zwischen 16 verschie-denen Algorithmen:

• Standardproblem (eig(A)) oder verallge-meinertes Problem (eig(A,B)),

• reelle oder komplexe Matrizen A und B,

119 Copyright c© G. Gramlich

• symmetrische/Hermitesche Matrizen A undB mit B positiv definit oder nicht,

• sind Eigenvektoren gewünscht oder nicht.

Beispiele findet man in Abschnitt 48.6.

50.9. Iterative Methoden

In diesem Abschnitt besprechen wir iterati-ve Methoden. Solche Verfahren werden haupt-sächlich bei großen und möglicherweise dünnbesetzten (sparse) Problem eingesetzt; also im-mer dann, wenn direkte Verfahren zu ineffizi-ent oder gar unmöglich anwendbar sind. Dünnbesetzte Matrizen behandeln wir in Abschnitt72. Es gibt in Matlab iterative Methoden für li-neare Gleichungssysteme und iterative Verfah-ren für Eigensysteme.

50.9.1. Iterative Methoden für lineareGleichungssysteme

Es stehen mehrere Funktionen zur Verfügung,um quadratische lineare GleichungssystemeAx = b iterativ zu lösen, siehe Tabelle 30.

Funktion Methodebicg BiCGbicgstab BiCG stabilizedcgs CG squaredgmres GMRESlsqr CG für Normalleichungenminres Residuen.pcg CG mit Vorkonditionierungqmr quasi-minimale Residuienm.symmlq Symmetrische LQ

Tabelle 30: Iterative Methoden

Bis auf die Funktion minres, symmlq undpcg sind alle Funktionen auf beliebige Matri-zen A anwendbar. Für minres und symmlqmuss A Hermitesch und für pcg muss A Her-mitesch und positiv definit sein. Alle Metho-den verwenden Matrix-Vektor Produkte Axbzw. A∗x und benötigen die Matrixelemen-te von A nicht explizit. Bis auf gemres (sie-he unten) haben alle Funktionen den glei-chen Funktionsaufruf. Die einfachste Formist x = solver(B,b), wobei solver eineFunktion aus Tabelle 30 ist. Alternativ kannman auf x = solver(B,b,tol) mit einemKonvergenztoleranzwert tol, der standardmä-ßig auf 10−6 gesetzt ist. Konvergenz tritt ein,wenn norm(b-A*x) <= tol*norm(b) erfülltist. Das Argument A kann eine voll oder dünnbesetzt (sparse) Matrix sein, oder eine Funkti-on, die x als Eingabe und A*x als Ausgabe hat.

Iterative Methoden benötigen gewöhnlich ei-ne Vorkonditionierung, wenn sie effizient seinsollen. Einen guten Vorkonditionierer auszu-wählen, ist im Allgemeinen nicht leicht und er-fordert meist Kenntnisse von der Anwendung,die dahinter steckt. Die Funktionen luincund cholinc berechnen unvollständige Fak-torisierungen, die eine Möglichkeit darstellen,Vorkonditionierer zu konstruieren; siehe docluinc, doc cholinc und doc bicg. FürHintergrundinformationen zu iterativen Me-thoden der Linearen Algebra siehe [7], [9],[10], [19] und [23].

Um den Umgang mit iterativen Problemlösernzu zeigen, betrachten wir ein Beispiel, wo dieFunktion pcg Verwendung findet. Die Funkti-on pcg realisiert eine konjugierte Gradienten-methode mit Vorkonditionierung. Für A ver-

120 Copyright c© G. Gramlich

wenden wir eine positiv definite symmetri-sche Matrix, die Wathen-Matrix aus der Hig-hamschen Matrizensammlung. Es handelt sichum eine zufällige dünn besetzte finite Elemen-tematrix, siehe doc gallery.

1 >> A = gallery(’wathen’,12,12);2 >> n = length(A)3 n =4 4815 >> b = ones(n,1);6 >> x = pcg(A,b);7 pcg stopped at iteration 20

without8 converging to the desired

tolerance9 1e-006 because the maximum number

10 of iterations was reached.11 The iterate returned (number 19)12 has relative residual 0.1213 >> x = pcg(A,b,1e-6,100);14 pcg converged at iteration 92 to a15 solution with relative residual16 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 standardmä-ßig eingestellten 20 Iterationen und dem stan-dard Abbruchkriterium von 10−6. Ein erneuer-te Versuch führt nach 92 Iterationen zum Er-folg, wobei wir die Iterationsgrenze auf 100gesetzt haben. Der Toleanzwert 10−6 wurde er-füllt. Für diese Matrix kann man zeigen, dass M= diag(diag(A)) ein guter Vorkonditionie-rer ist. Übergeben wir der Funktion pcg dieseMatrix als fünftes Argument, so erreichen wireine effiziente Reduktion in der Anzahl der Ite-rationen:

1 >> [x,flag,relres,iter] = pcg(A,b,1e-6,100,diag(diag(A)));

2 >> flag, relres, iter3 flag =4 05 relres =6 8.2661e-0077 iter =8 28

Beachten Sie, dass keine Bildschirmausga-be ausgegeben wird, wenn wenn man mehrals ein Ausgabeargument im Funktionsauf-ruf angibt. Der Wert 0 der Variablen flaggibt an, dass das Verfahren konvergiert istmit einem relativen Residuum relres =norm(b-A*x)/nomrm(b) nach iter Iteratio-nen.

Die anderen Funktionen der Tabelle 30 wer-den (bis auf gmres) genauso aufgerufen undgehandelt.

Mit doc sparfun (help sparfun) bekom-men Sie eine komplette Liste über alle Funk-tionen, die bezüglich Sparserechnungen inter-essant sind, so auch die Funktionen für itera-tive Methoden von linearen Gleichungssyste-men.

50.9.2. Iterative Methoden für Eigensysteme

Die Funktion eigs berechnet auswählbare Ei-genwerte und Eigenvektoren des Standardei-genwertproblems Ax = λx oder der verall-gemeinerten Eigenwertaufgabe Ax = λBx,wobei B eine reelle symmetrische positiv de-finite Matrix ist. Im Gegensatz dazu berech-net die Funktion eig immer das gesamte Ei-gensystem, also alle Eigenwerte und Eigen-

121 Copyright c© G. Gramlich

vektoren. Wie die iterativen Löser von linea-ren Gleichungssystemen, so benötigt eigs nurMatrix-Vektor Produkte, das heißt A kann ex-plizit oder als eine Funktion, die Matrix-Vektorausführt, angegeben werden. In der einfachstenForm kann eigs wie eig aufgerufen werden:[V,D] = eigs(A). Dann werden die sechsgrößten Eigenwerte und dazugehörige Eigen-vektoren berechnet. Siehe doc eigs für wei-tere Details. Diese Funktion ist eine Schnitt-stelle zum ARPACK Paket, siehe [12]. AlsBeispiel berechnen wir nun die fünf größ-ten Eigenwerte einer dünn besetzten symme-trischen Matrix. Zum Vergleich verwenden wirdie Funktion eig, welche erwartet, dass dieMatrix im Speichermodus full vorliegt.

1 >> A = delsq(numgrid(’N’,40));2 >> n = length(A)3 n =4 14445 >> nnz(A)/n^2 %Anteil nicht Null.6 ans =7 0.00348 >> tic, e_alle = eig(full(A)); toc9 Elapsed time is 10.600102 seconds.

10 >> e_alle(n:-1:n-4)11 ans =12 7.987013 7.967614 7.967615 7.948216 7.935417 >> options.disp = 0; %Keine

Ausgabe.18 >> tic, e = eigs(A,5,’LA’,options)

;19 >> toc %LA = Largest Algebraic20 Elapsed time is 1.676173 seconds.21 >> e22 e =

23 7.987024 7.967625 7.967626 7.948227 7.9354

Mit den Funktion tic und toc kann man Zeit-messungen durchführen. Es ist klar, dass eigsviel schneller ist als eig und auch wenigerSpeicherplatz benötigt.

50.9.3. Iterative Methoden fürSingulärwertsysteme

Die Funktion, um ein paar singuläre Werte undsinguläre Vektoren einer Matrix A ∈ Cm×n ite-rativ zu berechnen, heißt: sdvs. Die Funktionsvds verwendet dabei die Funktion eigs, in-dem eigs auf die Hermitesche Matrix[

Om AA∗ On

]angewendet wird.

50.10. Funktionen einer Matrix

Mit der Funktion expm kann man für eine qua-dratische Matrix A die Matrixexponentialfunk-tion eA, die durch

eA = E + A +12!

A2 +13!

A3 + · · ·

definiert ist, berechnen. Wir geben ein Bei-spiel, siehe Beispiel 3.5 in [5].

1 >> A = [1 1; -2 4];2 >> expm(A)3 ans =4 -5.3074 12.69655 -25.3930 32.7820

122 Copyright c© G. Gramlich

Weitere Funktionen für Matrixfunktionen fin-den Sie mit help matfun.

Aufgabe 104 (Matrixfunktionen) In dieserAufgabe geht es um eA, wobei A eine quadra-tische Matrix ist.

(a) Berechnen Sie eA numerisch und symbo-lisch für

A =[

0 −11 0

].

Vergleichen Sie die Resultate mit exp(A)bzw. exp(sym(A)). Erklären Sie den Un-terschied!

(b) Berechnen Sie nun symbolisch eAt, t ∈ R,und deuten Sie das Ergebnis.

(c) Ist X eine quadratische Matrix, dann gilt

deXt

dt= XeXt = eXtX

und ∫eXt X dt = eXt

Bestätigen Sie diese Aussagen symbo-lisch.

Lösung:

(a) Es ist

1 >> A = [0 -1; 1 0]; expm(A)2 ans =3 0.5403 -0.84154 0.8415 0.54035 >> expm(sym(A))6 ans =7 [ cos(1), -sin(1)]8 [ sin(1), cos(1)]

Dagegen ist aber

1 >> exp(A)2 ans =3 1.0000 0.36794 2.7183 1.0000

und

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

In den letzten beiden Fällen werden vonden Matrixelementen die Exponentialwer-te ausgerechnet.

(b) Es ist mit A wie in (a) und

1 >> syms t

dann

1 >> expm(A*t)2 ans =3 [ cos(t), -sin(t)]4 [ sin(t), cos(t)]

(c) Nach der Deklaration

1 >> syms X t

kann man die Aussagen durch

1 >> diff(expm(X*t))2 ans =3 exp(X*t)*X

und

1 >> int(expm(X*t)*X)2 ans =3 exp(X*t)

bestätigen.

123 Copyright c© G. Gramlich

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

Aufgabe 105 (Matrixfunktionen) BerechnenSie die Matrix eAt, t ∈ R für folgenden Ma-trizen:

(a) A =[

1 00 2

](b) A =

[0 10 0

](c) A =

[0 1−1 0

]

(d) A =

0 1 00 0 10 0 0

(e) A =

[0 11 0

]Lösung: Man erhält:

(a) eAt =

[et 00 e2t

](b) eAt =

[1 t0 1

](c) eAt =

[cos t sin t− sin t cos t

]

(d) eAt =

1 t t2/20 1 t0 0 1

(e) eAt =

[cosh t sinh tsinh t cosh t

]© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

51. Mehr zu Funktionen

Funktionen spielen in Matlab eine sehr großeRolle. Seit Matlab 7 ergaben sich diesbezüg-

lich einige Neuerungen. Wir wollen deshalb indiesem Abschnitt mehr zu Matlab-Funktionensagen. Eine erste Einführung findet man in Ab-schnitt 44.

51.1. Function-Handles

In viele Anwendungen muss man einer Funk-tion als Argument eine andere Funktion über-geben. In Abschnitt 39 haben wir Beispiele be-trachtet. Gewöhnlich macht man dies mit ei-nem Function-Handle. Ein Function-Handle istein Matlab-Datentyp, der alle notwendigen In-formationen enthält, um eine Funktion auszu-werten. Ein Function-Handle wird erzeugt, in-dem man das @-Zeichen vor einen Funktions-namen stellt.

Wir zeigen die Funktionsweise mit der Funk-tion ezplot, die den Graph einer Mathemati-schen Funktion f standardmäßig über dem In-tervall [−2π, 2π] zeichnet. Ist nun zum Beispielfun eine m-Function, so geschrieben wie esdie Funktion ezplot verlangt, dann funktio-niert

1 ezplot(@fun)

fun kann aber auch eine Matlab-Funktionsein, wie zum Beispiel sin, cos oder exp. DerAufruf

1 ezplot(@cos)

zeichnet die Kosinusfunktion im Intervall[−2π, 2π].

Function-Handles wurden in Matlab 6 einge-führt und ersetzen die frühere Syntax, nachder ein Funktionsname als eine Zeichenket-

124 Copyright c© G. Gramlich

te (String) übergeben werden sollte, also zumBeispiel ezplot(’cos’).

Die Idee des nächsten Beispiels ist es, den Dif-ferenzenquotient

f (x + h) − f (x)h

in einer Matlab-Funktion zu realisieren, umdiesen dann für „kleines“ h als Näherung fürden Differenzialquotient f ′(x) zu berechnen.Die m-Function

1 function y = Differenzenq(f,x,h)2 if nargin < 33 h = sqrt(eps);4 end5 y = (f(x+h) - f(x))/h;

ist eine Implementierung des Differenzenquo-tienten von f an der Stelle x. Geben wir nun

1 >> Differenzenq(@sqrt,0.3)2 ans =3 0.9129

ein, so erhalten wir 0.9129 als Näherung fürf ′(0.3), wobei hier f (x) =

√x ist. Standard-

mäßig haben wir h ≈ 1.5 · 10−8 gewählt. Soll hgrößer oder kleiner sein, so kann dies im drit-ten Argument eingestellt werden. Dieses Bei-spiel zeigt, die Funktionsweise eines Function-Handles. Wir übergeben den Function-Handleals Argument und diese wird an den ent-sprechenden Stellen ausgewertet. Diese direk-te Auswertung ist neu in Matlab 7. In früherenVersionen musste hier mit der Funktion fevalgearbeitet werden.

Weitere Informationen finden Sie mit docfunction_handle.

51.2. Anonymous Functions

Anonymous Functions wurde in Matlab 7 ein-geführt. Anonymous Functions stellen einenWeg dar, eine ”one line”-Funktion zu erzeu-gen, ohne einen m-File schreiben zu müssen. InAbschnitt 39 haben wir dies bereits zum erstenMal gezeigt.

1 >> f = @(x) exp(x)-22 >> f(1)3 ans =4 0.7183

Hier ist f ein Function-Handle zu der An-onymous Function. Dem @-Zeichen, welchesein Function-Handle konstruiert, folgt in run-den Klammern eine Liste von Eingabeargu-menten und dannach folgt eine einfache Mat-lab-Anweisung. Als Function-Handle kanndie Anonymous Function dann einer anderenFunktion übergeben werden.

Der Ausdruck einer Anonymous Functionkann auch Variable haben, die nicht in derArgumentenliste vorkommen. So definiert dieAnweisung

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

den Mathematischen Funktionsterm g(x, y) =ax2 + bex mit a = 2 und b = 3.

Die Anweisungen und Ausgaben

1 >> g(3,4)2 ans =3 78.25664 >> a = 10;5 >> g(3,4)6 ans =7 78.2566

125 Copyright c© G. Gramlich

zeigen, dass die Variablenwerte so lange gültigbleiben, bis man die Anonymous Function neukonstruiert.

Aufgabe 106 (Anonymous Functions) DieDichtefunktion f einer normalverteiltenZufallsvariablen ist die parameterabhängigeFunktion

f (x, µ, σ) =1

σ√

2πe−

(x−µ)2

2σ2 , x ∈ R

wobei µ und σ > 0 reelle Parameter (Erwar-tungwert und Standardabweichung) sind. Die-se Funktion ist in der Statistics-Toolbox unterdem Namen normpdf implementiert. Zeich-nen Sie die Graphen der Funktionen f (·, 0, 1)und f (·, 0, 2) im Intervall [−4, 4].Lösung: Die Anweisungen

1 mu = 0; sigma = 1;2 f = @(x) normpdf(x,mu,sigma);3 fplot(f,[-4,4]), hold on,4 sigma = 2;5 f = @(x) normpdf(x,mu,sigma);6 fplot(f,[-4,4]),

erzeugen die Abbildung 46. © . . . . . . . . . . . . . ©

−4 −2 0 2 40

0.1

0.2

0.3

0.4

µ = 0σ = 2

µ = 0σ = 1

Abbildung 46: Normalverteilungen

51.3. Subfunctions

Ein Function m-File kann weitere Funktionenbeinhalten, die man subfunctions (Unterfunk-tionen) nennt. Diese können in einem m-File inirgendeiner Reihenfolge nach der Hauptfunk-tion (main function, primary function) stehen.Subfunctions sind nur der Hauptfunktion undden anderen im m-File befindlichen Subfuncti-ons sichtbar.

Wie Subfunctions verwendet werden können,zeigen wir in den folgenden Abschnitten, siehezum Beispiel Abschnitt 61.2.

51.4. Nested Functions

Man kann eine und mehr Funktionen in einerFunktion schachteln. Es muss darauf geachtetwerden, dass die end-Anweisung am Ende dereingebauten und der Hauptfunktion steht. Esgehört zum guten Stil, die eingebaute Funkti-on einzurücken.

Nested Functions haben zwei Haupteigen-schaften:

• Eine Nested Function hat Zugriff zumWorkspace aller Funktionen in welche sieeingebaut ist.

• Ein Function-Handle einer Nested Functi-on speichert alle Informationen, um zu die-ser Zugang zu haben, und darüberhinaus al-le Variablen der Funktionen, die die NestedFunktion beinhalten.

Ein Beispiel einer Nested Function zeigt dasfolgende Listing:

1 function RationalBsp(x)2 a = 1; b = 2; c = 1; d = -1;

126 Copyright c© G. Gramlich

3 Differenzenq(@Rational,x)4 function r = Rational(x)5 r = (a+b*x)/(c+d*x);6 end7 end

Das Beispiel zeigt, wie eine parameterabhän-gige Funktion einer anderen Funktion über-geben werden kann. Die Funktion Rationalist parameterabhängig und wird der FunktionDifferenzenq übergeben. Die Variablen a,b, c und d des Workspace der Hauptfunkti-on RationalBsp sind der Funktion Rationalbekannt und die Werte werden der FunktionDifferenzenq ordungsgemäß weitergereicht:

1 >> RationalBsp(2)2 ans =3 3.0000

Das Ergebnis ist korrekt, denn für den gebro-chen 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.

51.5. Overloaded Functions

Overloaded Functions sind mehrere Functi-ons gleichen Namens, bei denen anhand derArgumentliste oder der Klassenzugehörigkeitentschieden wird, welche auszuführen ist. Siewurden mit der Objektorientierung von Mat-lab in den neusten Versionen eingeführt unddienen dazu, alternative Implementierungenfür unterschiedliche Datenobjekte anzubieten.Zum Beispiel wird mit help rank eine Be-schreibung der Funktion rank angezeigt undgegen Ende wird mit

1 Overloaded methods:2 sym/rank

angegeben, dass sie auch für weitere Imple-mentierungen in anderen Objekten existiert.

51.6. Private Functions

Private Functions dienen dazu, eigene Imple-mentierungen einer bereits existierenden Func-tion gleichen Namens bereitszustellen, ohnedie Originalfunktion umzubenennen oder lö-schen zu müssen. Dazu muss die private Func-tion in einem Unterverzeichnis des Arbeitsver-zeichnisses mit dem Namen private gespei-chert werden. Da Matlab bei der Suche nachFunktionen immer zuerst nach solchen Unter-verzeichnissen sucht, bevor die im Suchpfadgespeicherten Verzeichnisse durchsucht wer-den, ist sichergestellt, dass die selbst definierte(private) Funktion vor der Originalfunktion ge-funden und ausgeführt wird. Man sollte es abervermeiden, das Unterverzeichnis mit dem Na-men private in den Suchpfad aufzunehmen.

51.7. Beispielhafte Funktionen

Der wahrscheinlich beste Weg gute Matlab-Funktionen zu schreiben, besteht darin, sichBeispiele von vorbildlich geschriebenen Funk-tionen anzusehen und sich daran zu ori-entieren. Solche Funktionen werden natür-lich mit Matlab mitgeliefert. Schauen Siesich diese an! Mit type <Funktionsname>bekommen Sie ein Listing und mit edit<Funktionsname> können Sie die Funktion

127 Copyright c© G. Gramlich

in den Matlab-Editor laden. Hier sind ein paarBeispiele:

• cov: Verwendung von varargin

• var: Überprüfung der Argumente

• hadamard: Aufbau einer Matrix

• why: Subfunctions

• fminbnd: Schleifenkonstruktionen

• quad, quadl: Rekursive Funktionen

• gsvd: Subfunctions

• ode45: Verwendung von varargin undvarargout

52. Polynome

Polynome haben in der Mathematik eine großeBedeutung. Im wissenschaftlichen Rechnenbenutzt man sie, um kompliziertere Funktionendurch einfachere anzunähern. Polynome lassensich einfach differenzieren und integrieren, undman weiß, wie man numerische Näherungenfür die Nullstellen findet. Numerische Schwie-rigkeiten können auftreten, wenn man mit Po-lynomen höherer Ordnung arbeitet.

In Matlab gibt es eine Reihe von Funktionen,die es ermöglichen, effizient mit Polynomen zuarbeiten. Zum symbolischen Rechnen mit Po-lynomen siehe Abschnitt 66.13.

52.1. Darstellung von Polynomen

Polynome werden in Matlab durch einen Zei-lenvektor repräsentiert, wobei die Koordinatendie Koeffizienten des Polynoms darstellen. DieReihenfolge ist absteigend festgelegt, das heißt

die erste Koordinate des Vektors ist der Koef-fizient des Monoms höchster Ordnung und dieletzte Kooordinate ist der Koeffizient des kon-stanten Terms des Polynoms. Zum Beispiel re-prä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 Nullkoeffizienten mit-geführt werden müssen.

1 >> p1 = [1 -8 2 1 -12]2 p1 =3 1 -8 2 1 -124 >> p2 = [2 0 1]5 p2 =6 2 0 1

52.2. Nullstellen von Polynomen

Ist ein Polynom als Zeilenvektor dargestellt, soerlaubt die Funktion roots, die Nullstellen desPolynoms zu berechnen, das heißt diejenigenWerte zu bestimmen, für die das Polynom denWert Null annimmt. roots(p2) berechnet dieNullstellen des Polynoms 2x2 + 1, gibt sie alsSpaltenvektor zurück und weist diese der Va-riablen r zu.

1 >> r = roots(p2)2 r =3 0 + 0.7071i4 0 - 0.7071i

Kennt man die Nullstellen eines Polynoms,nicht aber das Polynom selbst, so kann man mitder Funktion poly das Polynom konstruieren.Da ein Polynom aber durch seine Nullstellennur bis auf ein Vielfaches eindeutig bestimmtist, wählt Matlab das Polynom mit Koeffizient

128 Copyright c© G. Gramlich

1 im höchsten Monom.poly(r) berechnet aus den Nullstellen in rdas Polynom x2 + 1/2.

1 >> poly(r)2 ans =3 1.0000 0 0.5000

Aufgabe 107 (Polynomfunktionen) Bestim-men Sie die reellen Nullstellen folgender Po-lynome. Zeichnen Sie diese Polynome dann ineinem geeigneten Intervall, um diese Nullstel-len 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:

1 >> roots([1 -5 2 8])2 ans =3 4.00004 2.00005 -1.00006 >> roots([1 4 4])7 ans =8 -29 -2

10 >> roots([1 -3 4 0 -4 4])11 ans =12 -1.000013 1.0000 + 1.0000i14 1.0000 - 1.0000i15 1.0000 + 1.0000i16 1.0000 - 1.0000i

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

52.3. Multiplikation von Polynomen

Mit der Funktion conv kann man Polyno-me miteinander multiplizieren. Das Polynomp1(x) = x2 + 2x − 3 multipliziert mit dem Po-lynom p2(x) = 2x3 − x2 + 3x − 4 ergibt dasPolynom p3(x) = p1(x) · p2(x) = 2x5 + 3x4 −

5x3 + 5x2 − 17x + 12

1 >> p1 = [1 2 -3];2 >> p2 = [2 -1 3 -4];3 >> p3 = conv(p1,p2)4 p3 =5 2 3 -5 5 -17 12

52.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 Polynomp1(x) = x2 + 2x − 3 addiert mit dem Poly-nom p4(x) = −x2 + 3x − 4 ergibt das Polynomp5(x) = p1(x) + p4(x) = 5x − 7

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

Dies setzt jedoch Vektoren gleicher Länge, dasheißt Polynome gleichen Grades, voraus. Willman Polynome unterschiedlichen Grades ad-dieren, so muss man den Zeilenvektor zum Po-lynom kleineren Grades durch Nullen auffül-len. Das Polynom p1(x) = x2 + 2x − 3 addiertzu dem Polynom p2(x) = 2x3 − x2 + 3x − 4ergibt p6(x) = p(1) + p2(x) = 2x3 + 5x − 7

129 Copyright c© G. Gramlich

1 >> p1 = [1 2 -3];2 >> p2 = [2 -1 3 -4];3 >> p6 = [0 p1]+p24 p6 =5 2 0 5 -7

Die folgende Matlab-Funktion automatisiertdiesen Prozess.

1 function p1undp2 = addpoly(p1,p2)2 %--------------------------------3 %-Addiert zwei Polynome4 %--------------------------------5 if nargin < 26 error(’Zu wenig Argumente.’)7 end8 %-Stellt sicher, dass p1 und p29 %-Zeilenvektoren sind.

10 p1 = p1(:)’;11 p2 = p2(:)’;12 lp1 = length(p1); %Länge von p1.13 lp2 = length(p2); %Länge von p2.14 p1undp2 = [zeros(1,lp2-lp1) p1]+15 [zeros(1,lp1-lp2) p2];

Um die Funktion addpoly zu verstehen, be-trachte man die folgenden Zeilen:

1 >> addpoly(p1,p2)2 ans =3 2 0 5 -7

Das Ergebnis ist das gleiche wie oben. Die-se Matlab-Funktion addpoly kann auch dazuverwendet werden, um Polynome zu subtrahie-ren. Dies zeigen die folgenden Matlab-Zeilen:

1 >> p7 = addpoly(p1,-p2)2 p7 =3 -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.

52.5. Division von Polynomen

Mit der Funktion deconv kann man Polynomedividieren. Das Polynom p2(x) = 2x3 − x2 +

3x − 4 dividiert durch das Polynom p1(x) =x2 + 2x − 3 ergibt das Polynom q(x) = 2x − 5mit dem Restpolynom r(x) = 19x − 19.

1 >> p2 = [2 -1 3 -4];2 >> p1 = [1 2 -3];3 >> [q,r] = deconv(p2,p1)4 q =5 2 -56 r =7 0 0 19 -19

52.6. Ableiten von Polynomen

Die Matlab-Funktion polyder differenziertein Polynom. Die Ableitung des Polynomsp2(x) = 2x3 − x2 + 3x − 4 ergibt das Polynomp′2(x) = 6x2 − 2x + 3.

1 >> p2 = [2 -1 3 -4];2 >> dp2 = polyder(p2)3 dp2 =4 6 -2 3

52.7. Integrieren von Polynomen

Die Matlab-Funktion polyint integriert einPolynom. Die Integration des Polynoms p(x) =6x2 − 2x + 3 ergibt das Polynom q(x) = 2x3 −

x2 + 3x + c. Die Konstante c wird Null gesetzt.

1 >> p = [6 -2 3];2 >> q = polyint(p)3 q =4 2 -1 3 0

130 Copyright c© G. Gramlich

52.8. Auswerten von Polynomen

Polynome können mit der Funktion polyvalausgewertet werden. Die folgenden Komman-dos berechnen p(2.5) für das Polynom p(x) =4x3 − 2x2 + x − 7.

1 >> p = [4 -2 1 -7];2 >> px = polyval(p,2.5)3 px =4 45.5000

Die folgenden Befehle berechnen 100 Poly-nomwerte für das Polynom p(x) = 4x3 − 2x2 +

x− 7 zu 100 verschiedenen äquidistanten Wer-ten im Intervall von −1 bis 4.

1 >> p = [4 -2 1 -7];2 >> x = linspace(-1,4);3 >> px = polyval(p,x);

Aufgabe 108 (Polynomfunktionen) Gegebenseien die folgenden Polynomfunktionsterme

f1(x) = x3 − 3x2 − x + 3

f2(x) = x3 − 6x2 + 12x − 8

f3(x) = x3 − 8x2 + 20x − 16

f4(x) = x3 − 5x2 + 7x − 3

f5(x) = x − 2

Zeichnen Sie die Polynome im Intervall [0, 4].Benutzen Sie eingebaute Matlab-Funktionen,um folgende Polynome in den Punkten 0 und 1auswerten zu können.

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

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

(c) f1(x) f3(x)

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

Lösung: Das folgende Script löst die Aufga-be.

1 p1 = [1 -3 -1 3];2 p2 = [1 -6 12 -8];3 p3 = [1 -8 20 -16];4 p4 = [1 -5 7 -3];5 p5 = [0 0 1 -2];6 pa = p2-2*p4;7 pb = 3*p5+p2-2*p3;8 pc = conv(p1,p3);9 pd = deconv(p4,[1 -1]);

10 x = linspace(0,4);11 ypa = polyval(pa,x);12 ypb = polyval(pb,x);13 ypc = polyval(pc,x);14 ypd = polyval(pd,x);15 plot(x,ypa,x,ypb,x,ypc,x,ypd)

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

52.9. Zusammenfassung

In Matlab gibt es eine Reihe von nützlichenFunktionen, die dem Anwender das Arbeitenmit Polynomen erleichtern. Dies kommt vorallem dann zum Tragen, wenn Interpolations-und Approximationsaufgaben behandelt wer-den. Die Tabelle 37 fasst die Funktionen noch-mals zusammen, siehe doc polyfun (helppolyfun).

53. Polynominterpolation

Gegeben sind n Punkte in der Ebene R2, findeein Polynom minimalen Grades, das durch allePunkte geht. Ein solches Polynom hat höchs-tens den Grad n − 1 und ist eindeutig be-

131 Copyright c© G. Gramlich

Funktion Beschreibungconv Multipliziert Polynomedeconv Dividiert Polynomepoly Polynom aus Nullstellenpolyder Berechnet Ableitungpolyint Berechnet Integralpolyval Berechnet Polynomwerteroots Berechnet Nullstellen

Tabelle 31: Polynome in Matlab

stimmt; man nennt es das Interpolationspoly-nom. Mit der Matlab-Funktion polyfit istes bequem möglich, dieses Polynom zu be-rechnen. Als Beispiel betrachten wir die dreiPunkte (−2,−27), (0,−1) und (1, 0). Gesuchtist also ein quadratisches Polynom p2(t, x) =x1 + x2t + x3t2, das die drei gegebene Punkteinterpoliert. Die folgenden Matlab-Zeilen be-rechnen das Polynom und stellen das Problemgrafisch dar.

1 t = [-2 0 1];2 y = [-27 -1 0];3 x = polyfit(t,y,length(t)-1);4 ti = linspace(min(t),max(t));5 yi = polyval(x,ti);6 plot(ti,yi,t,y,’ro’), grid on

Lässt man sich den Zeilenvektor x ausgeben,so findet man darin die gewünschten Koeffizi-enten des quadratischen Polynom; man erhältp2(t) = −1 + 5t − 4t2.

54. Polynomapproximation

Die Funktion polyfit kann auch verwendetwerden, um Daten durch Polynome zu appro-

−2 −1.5 −1 −0.5 0 0.5 1−30

−25

−20

−15

−10

−5

0

5

Abbildung 47: Polynominterpolation

ximieren. Gegeben sind m Punkte (ti, yi), i =1, 2, . . . ,m und gesucht ist ein Parametervektorx ∈ Rn, sodass die polynomiale Modellfunk-tion p(t, x) = x1 + x2t + x3t2 + · · · + xntn−1

die gegebenen Punkte „bestmöglichst“ appro-ximiert, wobei bestmöglichst im Sinne kleins-ter Fehlerquadrate zu verstehen ist:

Minimiere∑m

i=1(yi − p(ti, x))2.

x ∈ Rn

Da die gesuchten Parameter xi in der Modell-funktion linear vorkommen, liegt eine lineareAusgleichsaufgabe vor. Als Beispiel betrach-ten wir folgende Aufgabe. Angenommen esliegen die folgenden Messdaten vor, siehe Ta-belle 32. Da diese Daten nahezu auf einer pa-rabolischen Kurve liegen, entscheiden wir unsdafür, ein quadratisches Polynom durch diesePunkte zu legen. Die folgenden Matlab-Zeilenzeigen, wie man das Polynom zweiten Gradesfindet und wie man die Ergebnisse grafisch dar-stellen kann.

1 t = [0.0:0.5:10];2 y = [2.9 2.7 4.8 5.3 7.1 7.6 7.7

132 Copyright c© G. Gramlich

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

Tabelle 32: Zur Polynomapproximation

7.6 9.4 9.0 9.6 10.0 10.2 9.78.3 8.4 9.0 8.3 6.6 6.7 4.1];

3 x = polyfit(t,y,2);4 ti = linspace(min(t),max(t));5 yi = polyval(x,ti);6 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 48: Polynomapproximation

Lässt man sich den Zeilenvektor x ausgeben,so findet man darin die gewünschten Koeffizi-enten des quadratischen Polynom; man erhältp2(t) = 2.1757+ 2.6704t− 0.2384t2. Diese Po-lynom ist das beste Polynom zweiten Grades indem Sinne, dass es die Summe der Fehlerqua-drate minimiert.

Die Polynomapproximation bzw. Ausgleichs-aufgabe ist in der Statistik von besonderer Be-deutung und wird dort unter dem Namen Re-gressionsrechnung (Engl.:data fitting) studiert.

55. Kubische Splineinterpolation

Für viele Anwendungen ist die Polynominter-polation ungeeignet, insbesondere dann, wennder Grad des Interpolationspolynoms „groß“

133 Copyright c© G. Gramlich

gewählt werden muss. Abhilfe schafft in die-sem Fall eine stückweise polynomiale Inter-polation, insbesondere eine kubische Splin-einterpolation. In Matlab kann man ein ku-bisches Splineinterpolationspolynom mithilfeder Funktion spline berechnen. Ein kubischerSpline ist ein stückweises kubisches Polynom,das zweimal stetig differenzierbar ist. Das fol-gende Beispiel zeigt eine kubische Splinein-terpolation im Vergleich zu einer ungeeignetenPolynominterpolation anhand von neun Daten-punkte, die zur Quadratwurzelfunktion gehö-ren. Während das Interpolationspolynom ach-ten Grades zu Ozillationen führt, ist eine kubi-sche Splineinterpolation gut geignet die gege-benen Punkte zu interpolieren.

1 %-Daten.2 t = [0 1 4 9 16 25 36 49 64];3 y = [0 1 2 3 4 5 6 7 8];4 %-Polynominterpolation.5 x = polyfit(t,y,length(t)-1);6 ti = linspace(min(t),max(t));7 yi = polyval(x,ti);8 %-Kubische Splineinterpolation.9 ys = spline(t,y,ti);

10 plot(ti,yi,t,y,’ro’,ti,ys),11 grid on, axis([0,64,0,10]),12 legend(’Polynom’,’Daten’,’Spline’)

56. 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 geradlinig ver-bunden, das heißt man sieht den Graph ei-

0 10 20 30 40 50 600

1

2

3

4

5

6

7

8

9

10

PolynomDatenSpline

Abbildung 49: Kubische Splineinterpolation

ner stückweisen (affin) linearen Interpolations-funktion. Mithilfe der Funktion interp1 kannman stückweise lineare Interpolationsfunktio-nen berechnen. Wir zeigen dies an einen Bei-spiel. Angenommen es soll die stückweise li-neare Interpolationsfunktion zu den Punkten(ti, yi) mit t = linspace(0,3,10) und y =humps(t) berechnet werden, so kann man dasmit den folgenden Zeilen erreichen. Beach-ten Sie, dass humps eine eingebaute Matlab-Funktion ist, deren Funktionsterm gegeben istdurch hums(t) = 1/

((t − 0.3)2 + 0.01

)+ 1/

((t −

0.9)2 + 0.04)− 6.

1 t = linspace(0,3,10);2 y = humps(t);3 tt = linspace(min(t),max(t));4 yi = interp1(t,y,tt);5 plot(tt,yi,t,y,’ro’,tt,humps(tt)),6 grid on,7 legend(’Interpolationsfunktion’,’

Punkte’,’humps’),

134 Copyright c© G. Gramlich

0 0.5 1 1.5 2 2.5 3−20

0

20

40

60

80

100

InterpolationsfunktionPunktehumps

Abbildung 50: Lineare Interpolation

57. Nichtlineare Gleichungen (1)

In Matlab gibt es die eingebaute Funktionfzero zur Lösung einer nichtlinearen Glei-chung in einer Variablen. Der Algorithmusist eine Kombination aus dem Intervallhal-bierungsverfahren, der Sekantenmethode undder inversen quadratischen Interpolation. Die-ses hybride Verfahren hat eine lange und inter-essante Geschichte, siehe [6]. Es ist ein guterAlgorithmus, aber leider nur für skalarwertigeFunktionen mit einer skalaren Variablen ein-setzbar. Den m-File fzero findet man im Ver-zeichnis Toolbox/MATLAB/funfun.

Die Buckelfunktion humps hat zwei Nullstel-len, siehe Abbildung 14. Wir berechnen diesemit fzero.

1 >> fzero(@humps,1)2 ans =3 1.29954 >> fzero(@humps,0)5 ans =6 -0.1316

Das zweite Argument des Funktionsaufrufes

gibt jeweils den Startpunkt des iterativen Ver-fahren an, x0 = 1 bzw. x0 = 3. Wir wol-len fzero noch an der nichtlinearen Gleichungx2−4 sin(x) = 0 illustrieren. Die Gleichung hatdie beiden Nullstellen: x1 = 0 und x2 ≈ 1.9.Man erhält diese durch zum Beispiel durch

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

bzw.

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

Sie können sich die einzelnen Iterationsschritteauch ausgeben lassen, indem Sie die entspre-chende Option mit der optimset-Funktionsetzen. Dies geht wie folgt:

1 >> options = optimset(’Display’,’iter’);

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

Mit der Matlab-Funktion optimset könnenSie verschiedene Parameter (zum Beispiel Ge-nauigkeitswerte) von Optimierungsfunktionensetzen. Da das Lösen nichtlinearer Gleichun-gen eng verwandt ist mit dem Lösen vonOptimierungsproblemen wird auch der Nameoptimset verständlich.

Parameterabhängige nichtlineare Gleichungenkönnen Sie ebenfalls mit fzero lösen. Glei-chungen mit Polynomfunktionen können Sieeffizient mit der Funktion roots lösen. Nicht-lineare Gleichungen mit mehr als zwei Varia-blen sind mit der Funktion fsolve anzugehen,siehe Abschnitt 67. Diese Funktion gehört aber

135 Copyright c© G. Gramlich

zur Optimization Toolbox und ist deshalb nurdann verwendbar, wenn diese installiert ist.

Aufgabe 109 (Nichtlineare Gl.) Berechnen Siemit fzero die Lösung der nichtlinearen Glei-chung

e−x = x

Lösung: Die Lösung findet man wie folgt:

1 >> f = @(x)exp(-x)-x;2 >> x = fzero(f,2)3 x =4 0.5671

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

Aufgabe 110 (Nichtlineare Gl.) Berechnen Siemit fzero die Lösung der nichtlinearen Glei-chung

ex + 2x = 0

Die Abbildung 51 zeigt die Geometrie.

−2 −1 0 1 2−5

0

5

10

x

exp(x)+2 x

Abbildung 51: Graph von f (x) = ex+2x, x ∈ R

Lösung: Die Lösung findet man wie folgt:

1 >> f = @(x) exp(x)+2*x;2 >> x = fzero(f,3)3 x =4 -0.3517

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

Aufgabe 111 (Nichtlineare Gl.) Finden Sie diepositiven Nullstellen der folgenden Funktio-nen:

(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 Graphen derFunktion (s. Abbildung 52) mit

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

2 >> fplot(f,[0 10])3 >> xlabel(’x’),ylabel(’f(x)’)4 >> grid on

0 2 4 6 8 10−5

0

5

10

15

x

f(x)

Abbildung 52: Graph der Funktion f1 im Inter-vall [0,10]

Die Nullstelle liegt offensichtlich im Inter-vall [0,1]. Mit

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

136 Copyright c© G. Gramlich

sieht man, dass die Nullstelle der Punktx = 0.6772 ist.

(b) Wir zeichnen zunächst den Graphen derFunktion (s. Abbildung 53) mit

1 >> f = @(x) log10(x+1)-x^2;2 >> fplot(f,[0 1])3 >> xlabel(’x’),ylabel(’f(x)’)4 >> 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 53: Graph der Funktion f2 im In-tervall [0,1]

Die Nullstelle liegt offensichtlich im Inter-vall [0.3,0.5]. Mit

1 >> fzero(f,[0.3,0.5])2 ans =3 0.3696

sieht man, dass die Nullstelle im Punktx = 0.3696 liegt.

(c) Statt des @-Befehls kann man auch einm-File verwenden, das die entsprechendeFunktion enthält. Dazu legt man ein m-File unter dem Namen f3.m an, dass fol-genden Inhalt hat:

1 function y = f3(x)2 y = exp(x)-5*x.^2;

Mit Hilfe des Graphen der Funktion, derdurch

1 >> fplot(@f3,[0 6])2 >> xlabel(’x’),ylabel(’f(x)’)3 >> grid on

erzeugt werden kann (s. Abbildung 54),erkennt man, dass die beiden Nullstellen

0 1 2 3 4 5 6−50

0

50

100

150

200

250

x

f(x)

Abbildung 54: Graph der Funktion f3 im Inter-vall [0,6]

im Intervall [0,1] und im Intervall [4,5]liegen. Mit

1 >> fzero(@f3,[0,1])2 ans =3 0.6053

und

1 >> fzero(@f3,[4,5])2 ans =3 4.7079

erkennt man, dass sie bei x1 = 0.6053 undx2 = 4.7079 liegen.

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

137 Copyright c© G. Gramlich

Aufgabe 112 (Exponentialgleichung) Berech-nen Sie in Matlab die Lösung von

(0.5)x = x

Lösung: Erste Möglichkeit

1 >> solve(’0.5^x=x’)2 ans =3 .64118574450498598448620048211482

Die Funktion solve ist eine symbolischeFunktion, das heißt es wird versucht, eine sym-bolische Lösung zu finden. Dies ist aber nichtmöglich, daher schaltet solve auf ein nume-risches Verfahren um und liefert eine numeri-sche Lösung.

Zweite Möglichkeit:

1 >> f = @(x) 0.5^x-x;2 >> fzero(f,[0,1])3 ans =4 0.6412

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

Aufgabe 113 (Logarithmusgleichung) Berech-nen Sie in Matlab die Lösung von

log0.5 x = x

Lösung: Erste Möglichkeit:

1 >> solve(’log(x)/log(0.5)-x’)2 ans =3 .64118574450498598448620048211482

oder

1 >> solve(’ln(x)/ln(0.5)-x’)2 ans =3 .64118574450498598448620048211482

Die Funktion solve ist eine symbolischeFunktion, das heißt es wird versucht, eine sym-bolische Lösung zu finden. Dies ist aber nichtmöglich, daher schaltet solve auf ein nume-risches Verfahren um und liefert eine numeri-sche Lösung.

Zweite Möglichkeit:

1 >> f = @(x) log(x)/log(0.5)-x;2 >> fzero(f,[0.1,1])3 ans =4 0.6412

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

Aufgabe 114 (Polynomgleichungen) Berech-nen Sie mit roots die Lösung der Polynom-gleichung

x3 + 6x2 − 11x − 6 = 0

Lösung: Die drei Lösungen findet man wiefolgt:

1 >> roots([1 6 -11 -6])2 ans =3 -7.38034 1.82565 -0.4453

© . . . . . . . . . . . © Alle drei Lösungen sind reell.

58. Optimierung (Teil 1)

Matlab besitzt zwei Funktionen, um zu op-timieren: fminbnd und fminsearch. Mitfminbnd kann man ein lokales Minimum einerreellwertigen Funktion einer reellen Variablenausfindig machen und mit fminsearch kannman eine reellwertige Funktion mehrerer Va-riablen minimieren.

138 Copyright c© G. Gramlich

Mit der Funktion optimset können Siesich alle bei einer Optimierung ein-stellbaren Parameter ansehen und spe-ziell mit optimset(’fminbnd’) bzw.optimset(’fminsearch’) die der Funktio-nen fminbnd bzw. fminsearch. Beachten Siedie Analogie zu odeset.

Das Kommando x = fminbnd(fun, x1,x2) versucht von der Funktion fun über demIntervall [x1, x2] ein lokales Minimum zufinden. Im Allgemeinen hat eine Funktionmehrere Minima. In Matlab gibt es jedochkeine Funktion, dieses schwierige Problemzu lösen, nämlich ein globales Minimum zufinden.

Wollen Sie eine Funktion f maximieren stattminimieren, dann können Sie − f minimieren,da Maxx f (x) = −Minx(− f (x)) ist.

Als Beispiel betrachten wir das eindimensio-nale (univariate) Optimierungsproblem:

Minimiere sin x − cos xx ∈ [−π, π]

Die Lösung erhalten wie folgt:

1 >> f = @(x)sin(x)-cos(x);2 >> [x,fWert] = fminbnd(f,-pi,pi)3 x =4 -0.78545 fWert =6 -1.4142

Der von fminbnd verwendete Algorithmus isteine Kombination des goldenen Schnittes undparabolischer Interpolation.

Mit der Funktion fminsearch ist es mög-lich, ein lokales Minimum einer reellwertigenFunktion von n ≥ 1 Variablen zu berechnen.

Die Syntax ist ähnlich wie die von fminbnd:x = fminsearch(fun,x0,options), außerdass das zweite Argument x0 ein Startvek-tor ist anstatt eines Intervalls. Die quadratischeFunktion f (x1, x2) = x2

1 + x22 − x1x2, (x1, x2) ∈

R2 hat in x∗ = (0, 0) eine Minimalstelle, dennes ist:

1 >> f = @(x)x(1)^2+x(2)^2-x(1)*x(2);

2 >> x = fminsearch(f,ones(2,1))3 x =4 1.0e-004 *5 -0.45826 -0.4717

Das Verfahren hinter der Funktionfminsearch basiert auf dem Nelder-MeadSimplexverfahren, eine direkte Suchmethode,die ohne Ableitungsinformationen auskommt.

Es ist möglich, dass das Verfahren zu keinemlokalen Minimum gelangt oder sehr langsamkonvergiert. Dagegen hat es den Vorteil, robustgegenüber Funktionsunstetigkeiten zu sein.

Weitere verfeinerte Algorithmen finden Sie inder Optimization Toolbox, siehe doc optim(help optim).

Aufgabe 115 (Optimierung) Lösen Sie dasProblem

Minimiere ex1−x2 + x21 + x2

2.

x ∈ R2

Geben Sie die Lösung auf vier Nachkommas-tellen 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. Man schrei-

139 Copyright c© G. Gramlich

be eine m-File, in dem man die Zielfunktiondefiniert

1 function f = myf(x)2 f = exp(x(1)-x(2))+x(1).^2+x(2)

.^2;

und ruft dann die fminsearch Funktion auf.

1 >> fminsearch(@myf,[1;1])2 ans =3 -0.28364 0.2835

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

Aufgabe 116 (Optimierung) Lösen Sie dasProblem

Minimiere ax2 − bxx ∈ R

mit der Parameterwahl a = 2 und b = 4.Lösung: Die Idee dieser Aufgabe besteht dar-in, aufzuzeigen wie man verfährt, wenn dieZielfunktion Parameter enthält. Die Lösung istx = 1 mit f (x = 1) = −2. Man erhält die Lö-sung zum Beispiel wie folgt:

1 function main2 clear all; close all; clc;3 a = 2; b = 4;4 [x,f] = fminsearch(@(x) Zielf(x,a,

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

Will man die gleiche Zielfunktion nur mit an-deren Parameterwerten a und b optimieren, sosind einfach die Werte 2 und 4 auszutauschen.© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

59. FFT

Die diskrete Fourier-Transformation (DFT) isteine unitäre lineare Abbildung von Cn nach Cn,wobei einem Vektor x ∈ Cn der Vektor y =Fnx zugeordnet wird. Hierbei ist Fn ∈ C

n×n

die unitäre Matrix, die die diskrete Fourier-Transformation beschreibt. Für n = 4 hat diesedie Form

Fn =

1 1 1 11 ω ω2 ω3

1 ω2 ω4 ω6

1 ω3 ω6 ω9

, ω = e−2πi/4.

Die schnelle Fourier-Transformation (FastFourier Transform = FFT) ist ein effizientesVerfahren um den Bildvektor y anstatt der obi-gen Matrix-Vektor Multiplikation zu berech-nen. Die Funktion fft realisiert diese Methodeund wird mit y = fft(x) aufgerufen. Die Ef-fizienz von fft hängt vom Wert n ab; Primzah-len sind schlecht, zerlegbare Zahlen sind bes-ser und Vielfache von 2 sind am Besten. Dieinverse FFT, x = F−1

n y, wird durch die Funkti-on ifft ausgeführt: x = ifft(y). Wir gebenein Beispiel:

1 >> y = fft([1 1 -1 -1]’)2 y =3 04 2.0000 - 2.0000i5 06 2.0000 + 2.0000i7 >> x = ifft(y)8 x =9 1

10 111 -112 -1

140 Copyright c© G. Gramlich

Aufgabe 117 (FFT, „Konstante“) BerechnenSie die diskrete Fourier-Transformation desVektors x = (1, 1, 1, 1). Machen Sie sich je-doch erst klar, was heraurauskommen sollte.Lösung: Es ist

1 >> y = fft([1 1 1 1])2 y =3 4 0 0 0

Die Abbildung 55 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 55: Zu Aufgabe 120

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

Aufgabe 118 (FFT, „Kosinus“) Berechnen Siedie diskrete Fourier-Transformation des Vek-tors x = (1, 0,−1, 0). Überlegen Sie jedoch zu-erst, was herauskommen sollte.Lösung: Es ist

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

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

Aufgabe 119 (FFT, „Sinus“) Berechnen Siedie diskrete Fourier-Transformation des Vek-tors x = (0, 1, 0,−1). Machen Sie sich jedoch

erst klar, was heraurauskommen sollte.Lösung: Es ist

1 >> y = fft([0,1,0,-1]).’2 y =3 04 0 - 2.0000i5 06 0 + 2.0000i

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

Aufgabe 120 (FFT, „Sinus“) Berechnen Sie je-weils die diskrete Fourier-Transformation

(a) x1 = (4, 1, 2, 1)

(b) x2 = (1, 4, 1, 2)

(c) x3 = (4, 0, 1, 0, 2, 0, 1, 0)

Lösung: Es ist

1 >> y1 = fft([4,1,2,1])2 y1 =3 8 2 4 24 >> y2 = fft([1,4,1,2]).’5 y2 =6 87 0 - 2i8 -49 0 + 2i

10 >> y3 = fft([4,0,1,0,2,0,1,0]).’11 y3 =12 813 214 415 216 817 218 419 2

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

141 Copyright c© G. Gramlich

Es existieren in Matlab auch Funktionenzur mehrdimensionalen diskreten Fouri-er-Transformation: Siehe doc fft2 (helpfft2), doc fftn (help fftn), doc ifft2(help ifft2) und doc ifftn (helpifftn).

Die FFT-Algorithmen in Matlabwerden durchdas Softwarepaket FFTW (the "Fastest Fouri-er Transform in the West") realisiert. DiesesPaket ist ein Beispiel einer adaptiven Softwa-re in dem Sinne, dass dieses dafür sorgt, dassdie Ausführungszeit am schnellsten ist, unab-hängig davon auf welcher Computerumgebungman sich gerade befindet. Die Funktion fftwstellt Parameter zur Verfügung um diesen Pro-zess zu tunen, siehe doc fftw (help fftw).

Bemerkungen zur kontinuierlichen Fourier-Transformation findet man im Abschnitt 66.20.

60. Integration

Unter numerischer Integration versteht man dieBerechnung einer Approximation an bestimm-te Integrale der Form

∫ ba f (x) dx. Matlab stellt

die beiden Funktionen quad und quadl als ad-aptive Integrationsfunktionen zur Verfügung.Sie berechnen eine Näherung an das bestimm-te Integral

∫ ba f (x) dx. Hierbei müssen die Inte-

grationsgrenzen a und b endlich sein und derIntegrand f (x) darf im Intervall [a, b] keineSingularitäten besitzen.

Wir diskutieren die Funktion quad; quadlfunktioniert analog. Ein Aufruf der Form

1 quad(fun,a,b)

berechnet das bestimmte Integral. Der Inte-grand fun kann sowohl in einem m-File alsauch als @-Funktion definiert werden. Er mussjedoch in vektorisierter Form vorliegen, sodass ein Vektor zurückgegeben werden kann,wenn das Argument x von f ein Vektor ist.

Wegen

1 >> quad(@humps,0,1)2 ans =3 29.8583

ist der Flächeninhalt unter dem Graph vonhumps im Intervall [0, 1] ungefähr gleich 30.Die Abbildung 56 zeigt die Geometrie in Form

0 0.2 0.4 0.6 0.8 10

20

40

60

80

100

Abbildung 56: Fläche unter humps in [0, 1]

von Graph und Flächeninhalt. Die Abbildungwurde dabei mit folgenden Anweisungen er-stellt:

1 >> x = linspace(0,1);2 >> y = humps(x);3 >> area(x,y,’FaceColor’,’r’,’

LineWidth’,2,’EdgeColor’,’b’);

Das bestimmte Integral∫ 1

0xx dx

142 Copyright c© G. Gramlich

kann von Matlab nicht exakt (symbolisch) be-rechnet werden.

1 >> syms x2 >> f = x^x;3 >> int(f,0,1)4 Warning: Explicit integral could5 not be found.6 > In sym.int at 587 ans =8 int(x^x,x = 0 .. 1)

Das Integral wird unverändert als nichtbere-chenbar ausgegeben. Wir können das Integralaber numerisch berechnen. Es ist:

1 >> quad(@(x)x.^x,0,1)2 ans =3 0.7834

Die Abbildung 57 zeigt die dazugehörige Geo-

0 0.2 0.4 0.6 0.8 10

0.2

0.4

0.6

0.8

1

Abbildung 57: Fläche unter xx in [0, 1]

metrie.

Aufgabe 121 (Numerische Integration) Be-rechnen Sie die Länge der Zykloide

f : R→ R2

t 7→ (t − sin t, 1 − cos t)

von t = 0 bis t = 2π.Lösung: Es ist f ′(t) = (1− cos t, sin t) und so-mit gilt

L f =

∫ 2π

0| f ′(t)| dt

=

∫ 2π

0

√(1 − cos t)2 + sin2 t dt

und damit in Matlab

1 >> f = @(t)sqrt((1-cos(t)).^2+sin(t).^2);

2 >> quad(f,0,2*pi)3 ans =4 8.0000

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

Aufgabe 122 (Numerische Integration) Be-rechnen Sie ∫ 4

2x ln(x) dx.

Lösung: Ist die Funktion

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

definiert, so erhält man nach Eingabe von

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

eine Approximation an das zu berechnende In-tegral.

Beachten Sie die Array-Multiplikation .* inobiger Funktion fxlog, damit die Funktion fürvektorwertige Eingabeargumente korrekt funk-tioniert. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

143 Copyright c© G. Gramlich

Die Funktion quad basiert auf der Simpson-Regel, welche eine Newton-Cotes 3-Punkt Re-gel ist, das heißt sie ist für Polynome bis zumGrad 3 exakt. Die Funktion quadl setzt einegenauere Gauss-Lobatto 4-Punkt Regel mit ei-ner 7-Punkt Kronrod Erweiterung ein. Somitist diese für Polynome bis zum Grad 5 bzw.9 genau. Beide Funktionen arbeiten adaptiv.Sie unterteilen das Integrationsintervall in Teil-intervalle und verwenden über jedem Teilin-tervall die zugrundeliegende Integrationsregel.Die Teilintervalle werden aufgrund des lokalenVerhaltens des Integranden gewählt, wobei daskleinste Intervall dort ausgesucht wird, wo derIntegrand sich am meisten ändert. Eine War-nung wird ausgegeben, wenn die Teilintervallezu klein werden oder falls zu viele Funktions-auswertungen gemacht werden müssen, wor-auf oft geschlossen werden kann, dass der In-tegrand eine Singularität besitzt.

60.1. Mehrfachintegrale

Man spricht von einem zweifachen Integral(Doppelintegral) wenn es die Form∫ ∫

Df (x, y) dx dy

hat. Hierbei ist D ein beschränktes Gebiet imzweidimensionalen Raum R2. Ein dreifachesIntegral (Dreifachintegral) liegt vor, wenn dieGestalt ∫ ∫ ∫

Gf (x, y, z) dx dy dz

hat, wobei G ein beschränktes Gebiet im drei-dimensionalen Raum R3 ist. Analog sind vier-

und mehrfache Integrale definiert. Die Berech-nung mehrfacher Integrale lässt sich auf dieBerechnung mehrerer einfacher Integrale zu-rü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) dx dy

approximieren, dann können wir wie folgt ver-fahren. Zunächst definieren wir den Integran-den, der nun ein Funktionsterm von zwei un-abhängigen Variablen ist.

1 function out = fxy(x,y)2 out = y^2*exp(x)+x*cos(y);

Dann geben wir ein:

1 >> dblquad(@fxy,0,1,4,6)2 ans =3 87.2983

Die Funktion, die dblquad im ersten Argu-ment übergeben wird, muss einen Vektor x undeinen Skalar y vertragen können. Zurückge-geben wird ein Vektor. Zusätzliche Argumen-te für dblquad sind möglich, um die Tole-ranz und die Integrationsmethode zu bestim-men. Standardmäßig ist dies quad.

Aufgabe 123 (Doppelintegral) Berechnen Siedas Integral ∫ 2

y=0

∫ 1

x=0(x2) dx dy

Lösung: Es ist

144 Copyright c© G. Gramlich

1 >> dblquad(@(x,y) x.^2,0,1,0,2)2 ans =3 0.6667

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

Dreifachintegrale können mit triplequad be-rechnet werden.

1 >> triplequad(@(x,y,z)(y*sin(x)+z*cos(x)),0,pi,0,1,-1,1)

2 ans =3 2.0000

Aufgabe 124 (Dreifachintegral) Berechnen Siedas Integral∫ 1

z=−1

∫ 1

y=0

∫ π

x=0(x3) dx dy dz

Lösung: Es ist

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

2 ans =3 48.7045

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

60.2. Tabellarische Daten

Eine weitere Integrationsroutine ist trapz,welche wiederholt die Trapezregel anwendet.Sie unterscheidet sich von quad und quadldadurch, dass die Eingabeargumente Vektorenxi, f (xi) und nicht der analytische Funktions-term f (x) ist. Deshalb kann die Funktion auchnicht adaptiv arbeiten. Wir zeigen die Funkti-onsweise an einem Beispiel. Der exakte Wertvon

∫ π0 sin x dx ist 2. Wir bestätigen dies mit

der Funktion trapz. Hierzu diskretisieren wirdas Intervall [0, π] gleichmäßig und berechnendie dazugehörigen Sinusfunktionswerte, damitdie Eingabeargumente tabellarisch vorliegen.

1 >> x = 0:pi/50:pi;2 >> y = sin(x);

Als Näherung erhalten wir somit

1 >> trapz(x,y)2 ans =3 1.9993

Wir zeigen noch ein Beispiel für eine nichtgleichmäßige Diskretisierung des Intervalls[0, π]

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

Im allgemeinen sind jedoch die Funktionenquad und quadl vorzuziehen, wenn der Inte-grand analytisch verfügbar ist.

Steht der Integrand f in tabellarischer Form(ti, f (ti)), i = 1, 2, . . . ,m zur Verfügung und istman an der tabellarischen Form der Integral-funktion Jt1 mit

Jt1(x) =∫ x

t1f (t) dt

interessiert, so kann man die Matlab-Funktioncumtrapz verwenden. Das bestimmte Integralvon t1 bis zu irgendeinem Punkt x = ti wirddann durch die Trapezregel berechnet. DerAufruf

1 z = cumtrapz(t,f)

145 Copyright c© G. Gramlich

liefert einen Vektor z zurück, der die gleicheLänge wie t hat und in dem die Werte Jt1(x =ti) für i = 1, 2, . . . ,m stehen. Das folgendeBeispiel zeigt die Funktionsweise der Funkti-on cumtrapz an der humps-Funktion.

1 >> t = linspace(-1,2);2 >> f = humps(t);3 >> z = cumtrapz(t,f);

Die Abbildung 58 zeigt den Graph der humps-

−1 −0.5 0 0.5 1 1.5 2−20

0

20

40

60

80

100fF

−1

Abbildung 58: humps-Funktion und Integral-funktion im Intervall [−1, 2]

Funktion und den Graph der dazugehörigenIntegralfunktion, die mit cumtrapz berechnetwurde. Die Abbildung wurde einfach mit

1 >> plot(t,f,t,z), grid,2 >> legend(’f’,’F_{-1}’)

erzeugt.

Aufgabe 125 (Integration) Zeichnen Sie denGraph der Integralfunktion F−3 von f (t) =1/√

2πe−t2/2, t ∈ R im Intervall von −3 bis 3,und in dieselbe Figur auch den Graph von f .Kennen Sie die Bedeutung der Funktionen fund F−∞.

−3 −2 −1 0 1 2 30

0.2

0.4

0.6

0.8

1

fF

−∞

Abbildung 59: Die Graphen zu Aufgabe 125

Lösung: Die Abbildung 59 zeigt die Graphen.f ist die Dichtefunktion und F−∞ ist die Ver-teilungsfunktion der Standardnormalverteilungaus der Statistik. Der dazugehörige Matlab-Code ist

1 >> t = linspace(-3,3,500);2 >> f = 1/sqrt(2*pi)*exp(-t.^2/2);3 >> z = cumtrapz(t,f);4 >> plot(t,f,t,z), grid,5 >> legend(’f’,’F_{-\infty}’)

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

60.3. Numerische uneigentlicheIntegration

Die numerische Integration kann auch beiuneigentlicher Integration eingesetzt werden,zum Beispiel etwa für

∫ ∞0 f (x) dx. Eine Mög-

lichkeit besteht darin, einen Punkt α zu fin-den, so dass der Wert von

∫ ∞α

f (x) dx im Ver-gleich zu

∫ α0 f (x) dx vernachlässigt werden

kann; man beschränkt sich dann auf die Be-rechnung des letzten Integrals mit einer be-kannten Quadraturformel. Wir zeigen die Idee

146 Copyright c© G. Gramlich

an dem Beispiel∫ ∞

1 1/x5 dx = 1/4, siehe auchAufgabe 170. Statt

∫ ∞1 1/x5 dx berechnen wir∫ 7

1 1/x5 dx. Wir erhalten

1 >> quad(@(x) 1./x.^5,1,7)2 ans =3 0.2499

was für∫ ∞

1 1/x5 dx = 1/4 eine sehr gute Nä-herung darstellt.

60.4. Zusammenfassung

Zusammenfassend können wir sagen: Mat-lab stellt zur numerischen Berechnung vonIntegralen mehrere Funktionen zur Verfü-gung. Liegt die zu integrierende mathemati-sche Funktion f in analytischer Form vor,so kann der Funktionsterm in einem m-Fileoder als anonyme Funktion definiert werden.Die Matlab-Funktionen quad, quadl, quadv,dblquad, triplequad und alle Funktionenzur numerischen Lösung von Differenzialglei-chungen, siehe Abschnitt 61, können dann ein-gesetzt werden. Die Funktion quadv ist einevektorrielle Form der Funktion quad. Liegt derIntegrand tabellarisch vor, so sind die Funktio-nen trapz und cumtrapz zu verwenden. Zursymbolischen Berechnung von Integralen ste-hen die Funktionen int und dsolve zur Ver-fügung, siehe Abschnitt 66.12 und 66.19.

61. Differenzialgleichungen

Eine Gleichung zur Bestimmung einer Funkti-on heißt Differenzialgleichung, wenn sie min-destens eine Ableitung der gesuchten Funktion

enthält. Die Ordnung der in der Differenzial-gleichung vorkommenden höchsten Ableitungder gesuchten Funktion heißt Ordnung der Dif-ferenzialgleichung. Hängt die in der Differen-zialgleichung gesuchte Funktion nur von einerVariablen ab, so nennt man die Differenzial-gleichung gewöhnlich. Enthält die Differenzi-algleichung partielle Ableitungen, so heißt siepartiell. Zum Beispiel ist die Bestimmungs-gleichung für die reellwertige Funktion y einerVariablen t

y′(t) = ay(t)

eine gewöhnliche Differenzialgleichung. Hier-bei ist a , 0 eine reelle Konstante. Die Glei-chung

utt(x, t) = c2uxx(x, t)

ist eine partielle Differenzialgleichung. Ge-sucht ist die reellwertige Funktion u mit denbeiden unabhängigen Variablen x und t, wobeic , 0 eine reelle Konstante ist. Siehe Abschnitt66.19 für symbolisches Lösen von Differenzi-algleichungen.

61.1. Anfangswertaufgaben

In Matlab gibt es mehrere Funktionen, umAnfangswertaufgaben von gewöhnlichen Dif-ferenzialgleichungen numerisch zu lösen. An-fangswertaufgaben haben folgende Form

AWA :

ddt y(t) = f (t, y(t))y(t0) = y0

t0 ≤ t ≤ t f

wobei t eine reelle Variable, y eine unbekann-te vektorwertige Funktion und die gegebeneFunktion f ebensfalls vektorwertig ist. Kon-kret kann man sich t als die Zeit vorstel-

147 Copyright c© G. Gramlich

len. Die Funktion f bestimmt die gewöhnli-che Differenzialgleichung und zusammen mitder Anfangsbedingung y(t0) = y0 wird dieAnfangswertaufgabe definiert. Der einfachs-te Weg solch ein Problem in Matlab zu lö-sen, besteht darin, eine Funktion zu schrei-ben, die f auswertet und dann einen der Mat-lab-Löser aufzurufen. Die geringste Informa-tion, die man dem Löser mitteilen muss, istder entsprechende Funktionsname, das Inter-vall [t0, t f ] wo man die Lösung sucht und dieAnfangsbedingung y0. Zusätzlich können wei-tere extra Ein- und Ausgabeargumente optio-nal angegeben werden, die mehr über das ma-thematische Problem aussagen und wie es ge-löst werden soll. Jeder einzelne Löser ist inspeziellen Situationen besonders effizient, je-doch können sie prinzipiell gegeneinander aus-getauscht werden. Im nächsten Anschnitt zei-gen wir Beispiele, die den Löser ode45 illus-trieren. Diese Funktion realisiert ein adaptivesRunge-Kutta Verfahren und ist für die meistenProbleme effizient.

Um das skalare (m = 1) Anfangswertproblem(0 ≤ t ≤ 3)

AWA :

ddt y(t) = −y(t) − 5e−t sin(5t)y(0) = 1

mit ode45 zu lösen, kreieren wir als erstes denm-File rSeite.m, der die rechte Seite der Dif-ferenzialgleichung definiert.

1 function dy = rSeite(t,y)2 dy = -y-5*exp(-t)*sin(5*t);

Danach machen wir folgende Eingabe

1 tspan = [0,3]; y0 = 1;

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

Dies erzeugt die Abbildung 60 (Beachten Sie,dass wir beim Setzen der x- und y-Labels dieKommando/Funktionsdualität ausgenutzt ha-ben). Die Eingabeargumente von ode45 sind

0 0.5 1 1.5 2 2.5 3−1

−0.5

0

0.5

1

t

y(t)

Abbildung 60: Skalares Anfangswertproblem

die Funktion rSeite, der 2-Vektor tspan,der die Zeitspanne der Simulation spezifiziertund der Anfangswert y0. Zwei Argumente tund y werden zurückgegeben. Die t-Werte lie-gen alle im Intervall [0, 3] und y(i) appro-ximiert die Lösung zur Zeit t(i). Die Wertet(2:end-1) werden von der Funktion ode45automatisch gewählt. In den Bereichen, wosich die Lösungsfunktion rapid ändert, werdenmehr Punkte ausgewählt. Für weitere Informa-tionen siehe doc funfun (help funfun).

Mit der Funktion ode15i kann man An-fangswertaufgaben, deren Differenzial-gleichung in impliziter Form vorliegt,numerisch lösen. Wir betrachten ein ska-lares Problem. Die Eingabe ist entspre-chend den anderen ODE-Funktionen:

148 Copyright c© G. Gramlich

ode15i(odefun,tspan,y0,yp0). Daserste Argument spezifiziert die Funktionf (t, y, y′), das Zweite und Dritte den Simu-lationsbereich (Integrationsintervall) [t0, t f ]bzw. den Anfangswert y(t0) und das vierteArgument den Anfangswert der Ableitung, dasheißt y′(t0). Als Beispiel betrachten wir dasAnfangswertproblem

AWA :

y′(t)y(t) + t = 0y(0) = 1

im Intervall [t0, t f ] = [0, 0.9]. In diesem Pro-blem liegt die Differenzialgleichung y′(t)y(t) +t = 0 in impliziter Form vor; sie ist von ers-ter Ordnung. Ich habe diese Differenzialglei-chung gewählt, weil deren analytische Lösungbekannt ist und man diese so mit dem nume-rischen Ergebnis vergleichen kann. Die allge-meine implizite Lösung von y′(t)y(t) + t = 0ist die Kreisgleichung t2 + y2 = c, c ≥ 0. Wirbestätigen dieses Ergebnis symbolisch mit derFunktion dsolve, siehe Abschnitt 66.19.

1 >> dsolve(’Dy*y+t=0’,’t’)2 ans =3 (-t^2+C1)^(1/2)4 -(-t^2+C1)^(1/2)

Mit der Anfangsbedingung y(0) = 1 ergibt sichdie Konstante zu 1 und die Lösung ist

y(t) =√

1 − t2.

Hier die Bestätigung:

1 ytrue = dsolve(’Dy*y+t=0’,’y(0)=1’,’t’)

2 ytrue =3 (-t^2+1)^(1/2)

Wir lösen die Anfangswertaufgabe nun nume-risch mit ode15i. Die Funktion f definierenwir im m-File fuerode15i wie folgt:

1 function res = fuerode15i(t,y,yp)2 res = yp*y+t;

Dann ergibt sich die numerische Lösung durchdie Anweisungen:

1 y0 = 1; yp0 = 0;2 t0 = 0; tf = 0.9;3 [t,y] = ode15i(@fuerode15i,[t0 tf

],y0,yp0);

Die Abbildung 61 zeigt die numerische und

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 61: ImplizitesAnfangswertproblem

symbolische (analytische) Lösung der implizi-ten Anfangswertaufgabe. Die Abbildung wur-de mit den Anweisungen

1 ezplot(ytrue,[0,0.9])2 hold on3 plot(t,y,’ro’)

erzeugt. Für weitere Informationen siehe docode15i (help ode15i).

149 Copyright c© G. Gramlich

Die folgende Aufzählung gibt eine kompletteÜbersicht über alle AWA-Löser in Matlab. Da-zu wird angegeben für welchen Problemtyp derLöser geeignet ist und welches Verfahren da-hinter steht.

• ode45 für nicht steife Differenzialgleichun-gen. Verfahren: Runge-Kutte-Verfahren derOrdnungen 4 und 5

• ode23 für nicht steife Differenzialgleichun-gen. Verfahren: Runge-Kutte-Verfahren derOrdnungen 2 und 3

• ode113 für nicht steife Differenzialglei-chungen. Verfahren: Explizites linearesMehrschrittverfahren der Ordnungen 1 bis13

• ode15s für steife Differenzialgleichungen.Verfahren: Implizites lineares Mehrschritt-verfahren der Ordnungen 1 bis 5

• ode15i für implizite Differenzialgleichun-gen. Verfahren: Implizites lineares Mehr-schrittverfahren der Ordnungen 1 bis 5

• ode23s für steife Differenzialgleichun-gen. Verfahren: Modifiziertes Rosenbrock-Verfahren der Ordnungen 2 und 3

• ode23t für mäßig steife Differenzialglei-chungen. Verfahren: Implizite Trapezregelder Ordnungen 2 und 3

• ode23tb für steife Differenzialgleichun-gen. Verfahren: Implizites Runge-Kutta-Verfahren der Ordnungen 2 und 3

Nicht alle schwierigen Probleme sind steif,aber alle steifen Probleme sind schwierig fürODE-Löser, die nicht für steife Probleme aus-gelegt sind.

Die Entwickler dieser Algorithmen, Shampine

und Reichelt haben Ergebnisse ihrer Arbeit in[25] dargestellt. Die Funktionen sind so kon-struiert, dass man sie gegeneinander leicht aus-tauschen kann. So ist es zum Beispiel leichtmöglich den ode45-Löser aus den obigen Bei-spielen durch einen anderen Löser auszutau-schen. Aus [25] entnehmen wir:

The experiments reported here and others wehave made suggest that except in special

circumstances, ode45 should be the code triedfirst. If there is reason to believe the problem

to be stiff, or if the problem turns out to beunexpectedly difficult for ode45, the code

ode15s code should be tried.

61.2. Randwertaufgaben

Treten in den Bedingungsgleichungen zur ein-deutigen Charakterisierung der Lösung einerDifferenzialgleichung die Funktions- und Ab-leitungswerte der gesuchten Funktion nicht nur–wie bei Anfangswertproblemen (AWP)– aneiner einzigen, sondern an zwei Stellen auf,und ist man nur an einer Lösung auf dem In-tervall zwischen diesen beiden Stellen interes-siert, so spricht man von einer Randwertaufga-be (RWA) (Randwertproblem (RWP); englich:Boundary Value Problem (BVP)).

Die Funktion bvp4c realisiert eineKollokationsmethode, um Zweipunkt-Randwertaufgaben zu lösen. Diese Syste-me können in folgender Form geschriebenwerden:

RWA :

ddx y(x) = f (x, y(x))g(y(x0), y(x f )) = 0

x0 ≤ x ≤ x f

150 Copyright c© G. Gramlich

Hier ist, wie auch bei Anfansgwertaufgaben,y eine unbekannte vektorwertige Funktion undf eine gegebene vektorwertige Funktion vonx und y. Die Lösung wird auf dem Intervall[x0, x f ] erwartet und die gegebene Funktion gspezifiziert die Nebenbedingungen. Bei Rand-wertaufgaben ist es üblich, die unabhängigeVariable mit x statt mit t zu bezeichnen, weilsie bei Anwendungen meist eine Ortsvariableist. Dies ist auch konsistent mit der Matlab-Dokumentation. Das Lösen von Randwertauf-gaben ist im Allgemeinen anspruchsvoller alsdas Lösen von Anfangswertaufgaben. Insbe-sondere ist es nicht ungewöhnlich, dass eineRandwertaufgabe mehrere Lösungen hat. Da-her ist es beim Aufruf von bvp4c notwendig,eine Schätzung für die Lösungsfunktion mit-anzugeben.

Als Beispiel betrachten wir die Zweipunkt-Randwertaufgabe:

RWA :

u′′ = 6xu(0) = 0 u(1) = 1

0 ≤ x ≤ 1.

Diese ist analytisch lösbar und hat die eindeu-tige Lösung

u(x) = x3.

Dies sieht man so. Die allgemeine Lösung derDifferenzialgleichung u′′ = 6x ist

u(x) = x3 + c1x + c2.

Die Randbedingungen bestimmen dann dieKonstanten c1 und c2

0 = u(0) = c2 ⇒ c2 = 0

1 = u(1) = 1 + c1 ⇒ c1 = 0

Wir verwenden nun bvp4c, um diese Lösungzu bestätigen. Im einfachsten Fall hat bvp4cdrei Funktionsargumente: Eine Funktion, inder das Differenzialgleichungssystem definiertist, eine Funktion mit den Randbedingungenund eine dritte Funktion, die ein Startgitter so-wie eine Anfangsvermutung für die Lösungs-funktion auf diesem Gitter beinhaltet. Das Dif-ferenzialgleichungssystem wird genauso ge-handhabt wie bei den Anfangswertproblemen,nämlich als System erster Ordnung. Es ist da-her als erstes notwendig, die Differenzialglei-chung zweiter Ordnung in ein System ersterOrdnung umzuschreiben. Wir schreiben gleichdas ganze Randwertproblem zweiter Ordnungin ein System erster Ordnung. Mit den Defini-tionen y1(x) = u(x) und y2(x) = u′(x) erhaltenwir die Randwertaufgabe erster Ordnung:

RWA :

y′1(x) = y2(x)y′2(x) = 6xy1(0) = 0, y1(1) = 1

0 ≤ x ≤ 1

Das Differenzialgleichungssystem wird nun inder Funktion odes definiert

1 function dydx = odes(x,y)2 dydx = [y(2);6*x];

Die Randbedingungen werden durch eine Re-siduenfunktion ausgedrückt. Die beiden Rand-bedingungen y1(0) = 0, y1(1) = 1 werden dannwie folgt (zum Beispiel in der Funktion bcs)programmiert:

1 function res = bcs(yx0,yxf)2 res = [yx0(1);yxf(1)-1];

Als Startlösungsfunktionen wählen wir dieNullfunktion.

151 Copyright c© G. Gramlich

1 function yinit = guess(x)2 yinit = [0;0];

Die folgenden Matlab-Zeilen berechnet dieLösung und stellt sie grafisch dar.

1 solinit = bvpinit(linspace(0,1,5),@guess);

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

Der Aufruf der Funktion bvpinit kreiert dieStruktur solinit, welche die Daten beinhal-tet, die durch Auswerten von guess an fünfäquidistanten Punkten von 0 bis 1 berechnetwerden; in diesem Fall alle Null.

Im Allgemeinen hat ein Aufruf von bvp4c dieForm:

1 sol = bvp4c(@odefun,@bcfun,solinit,

2 options,p1,p2,...)

In odefunwird das Differenzialgleichungssys-tem ausgewertet, in bcfun werden die Rand-bedingungen ausgewertet, solinit beschreibtden Anfangszustand, in options können Op-tionen übergeben werden und die Eingabeargu-mente p1, p2 erlauben zusätzliche Parameter.

Zusammenfassend sind für die Durchführungfolgende Schritte empfehlenswert:

1. Schreiben Sie das Problem als Randwert-problem erster Ordnung.

2. Schreiben Sie eine Matlab-Funktion, inder das System erster Ordnung definiert ist.

3. Schreiben Sie eine Funktion für die Rand-bedingungen.

4. Schreiben Sie eine Funktion für die Start-näherung.

5. Rufen Sie den RWA-Löser bvp4c auf.

6. Zeigen Sie die Resultate.

Aufgabe 126 (Randwertaufgaben) Wir be-trachten die Randwertaufgabe

RWA :

y′′ = −yy(0) = 3, y(π/2) = 7

0 ≤ x ≤ π/2.

(a) Zeigen Sie, dass

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

die eindeutige Lösung ist.

(b) Bestätigen sie (a), indem Sie die Lösungmit der Funktion bvp4c numerisch be-rechnen.

Lösung:

(a) Die allgemeine Lösung der Differenzial-gleichung ist

y(x) = c1 sin(x) + c2 cos(x).

Die unbekannten Konstanten c1 und c2können dann aus den Randbedingungenbestimmt 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 ist so-mit

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

152 Copyright c© G. Gramlich

(b) Die numerische Lösung mit der Mat-lab-Funktion bvp4c erledigt der folgendeFunction-File:

1 function RWA2 solinit = bvpinit(linspace(0,pi

/2,5),@guess);3 sol = bvp4c(@odes,@bcs,solinit);4 xint = linspace(0,pi/2);5 sxint = deval(sol,xint);6 plot(xint,sxint(1,:),’r’)7 %--------------------------------8 % Subfunctions.9 %--------------------------------

10 function dydx = odes(x,y)11 dydx = [y(2);-y(1)];12 %--------------------------------13 function res = bcs(ya,yb)14 res = [ya(1)-3;yb(1)-7];15 %--------------------------------16 function yinit = guess(x)17 yinit = [0;0];

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

61.3. Partielle Differenzialgleichungen

Mit der Funktion pdepe kann man parti-elle Differenzialgleichungen lösen. Matlabspdepe löst eine Klasse von parabolischen bzw.elliptischen partiellen Differenzialgleichungs-systeme (PDE: Partial Differential Equation).Die allgemeine Klasse hat die Form:

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

x−m(xm f (x, t,u,ux))x + s(x, t,u,ux),

wobei u die gesuchte Funktion ist. Sie hängtvon den Variablen x (Raumvariable) und t(Zeitvariable) ab und kann vektorwertig sein.

Für die unabhängigen Variablen x und t gilt:x0 ≤ x ≤ x f und t0 ≤ t ≤ t f . Die Zahl mkann die Werte 0, 1 oder 2 haben, je nachdem,ob keine, Zylinder- oder Kugelsymmetrie vor-liegt. Die Funktion c ist matrixwertig und dieFluß- bzw. Quellenfunktionen f , s sind vektor-wertig. Anfangs- und Randbedingungen müs-sen in folgender Form zur Verfügung gestelltwerden. Für x0 ≤ x ≤ x f und t = t0 muss dieLösung gleich u0(x) sein, wobei die Funktionu0 gegeben ist. Für x = x0 und t0 ≤ t ≤ t f 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 = x f undt0 ≤ t ≤ t f

px f (x, t,u) + qx f (x, t) f (x, t,u,ux) = 0

gelten, wobei die Funktionen px f und qx f gege-ben sind. Für weitere Details siehe doc pdepe(help pdepe).

Ein Aufruf von pdepe hat die allgemeine Form

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

was der Syntax von bvp4c gleicht.

Als Beispiel betrachten wir die eindimensiona-le Wärmeleitungsgleichung

ut(x, t) = uxx(x, t)

für 0 ≤ x ≤ 1 und 0 ≤ t ≤ 0.5 mit der Anfangs-bedingung

u(x, 0) = sin(πx)

153 Copyright c© G. Gramlich

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 istm = 0, c(x, t, u) = 1, f (x, t, u, ux) = ux unds(x, t, u, ux) = 0. Für x = x0 sind p(x, t, u) = uund q(x, t, u) = 0 die Randbedingungen, undfür x = x f haben wir p(x, t, u) = u undq(x, t, u) = 0. Die Function pdeWaerme rea-lisiert die Lösung des Problems.

1 function pdeWaerme2 %Löst die eindimensionale Wärme-3 %leitungungsgleichung mit den4 %angegebenen Anfangs- und Rand-5 %bedingungen.6 m = 0;7 t0 = 0;8 tf = 0.5;9 x0 = 0;

10 xf = 1;11 xmesh = linspace(x0,xf,40);12 tspan = linspace(t0,tf,20);13 sol = pdepe(m,@pdefun,@pdeic,

@pdebc,xmesh,tspan);14 u = sol(:,:,1);15 mesh(xmesh,tspan,u)16 xlabel(’x’), ylabel(’t’),17 zlabel(’u’)18 %--------------------------------19 %Subfunctions.20 %--------------------------------21 function [c,f,s] =22 pdefun(x,t,u,DuDx)23 %Differenzialgleichung.24 c = 1;25 f = DuDx;26 s = 0;27 %--------------------------------28 function u0 = pdeic(x)

29 %Anfangsbedingungen.30 u0 = sin(pi*x);31 %--------------------------------32 function [px0,qx0,pxf,qxf] =33 pdebc(x0,u0,xf,uf,t)34 %Randbedingungen.35 px0 = u0;36 qx0 = 0;37 pxf = uf;38 qxf = 0;

Hierbei haben wir die Funktion linspace ver-wendet, um ein Gitter zwischen x0 und x f , so-wie eines zwischen t0 und t f zu erzeugen. Umdie Lösung zu plotten, haben wir mesh verwen-det. Die Abbildung 62 zeigt das Ergebnis.

0

0.5

1

0

0.50

0.5

1

xt

u

Abbildung 62: Lösung der PDE

Aufgabe 127 (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

154 Copyright c© G. Gramlich

ist.Lösung: Leiten wir u(x, t) = e−π

2t sin(πx)nach t ab, so erhalten wir die linke Seite derDifferenzialgleichung

ut(x, t) = −π2 sin(πx)e−π2t.

Leiten wir u(x, t) = e−π2t sin(πx) zweimal nach

x ab, so erhalten wir die rechten Seite der Dif-ferentialgleichung

uxx(x, t) = −π2 sin(πx)e−π2t.

Da beide Seiten für alle x und t gleich sind, istalles gezeigt. © . . . . . . . . . . . . . . . . . . . . . . . . . . .©

62. Statistik

Vorhersagen sind schwierig – vor allem überdie Zuknnft

Niels Bohr.

Mit der Statistics Toolbox stehen Ihnen Statis-tikfunktionen zur Verfügung. Die Tabelle 33zeigt ein paar grundlegende Funktionen für diebeschreibende Statistik. Ein paar Dichtefunk-tionen sind in Tabelle 34 zu sehen.

Mit doc stats (help stats) erhalten Sieeinen Überblick über alle Funktionen der Sta-tistics Toolbox.

63. Kombinatorik

Wir zeigen, wie man in Matlab kombinatori-sche Probleme lösen kann.

Beschreibende Statistikcorrcoef Korrelationsmatrixcov Kovarianzmatrixgeomean Geometrischer Mittelwertmad Mittlere absolute Abw.mean Arithmetischer Mittelwertmedian Zentralwert (Median)mode Häufigster Wertrange Spannweitestd Standardabweichungtabulate Häufigkeitstabellevar Varianz

Tabelle 33: Grundlegende Funktionen

Dichtefunktionenbinopdf Binomialdichtegeopdf Geometrische Dichtenormpdf Normaldichteunidpdf Diskrete gleichmäßige Dichteunifpdf Stetige gleichmäßige Dichte

Tabelle 34: Dichtefunktionen

155 Copyright c© G. Gramlich

63.1. Fakultäten, Binomial- undPolynomialzahlen

Die Funktion factorial berechnet dieFakultät-Funktion n!. Da in doppelter Genau-igkeit nur ungefähr 15 Stellen exakt sind, istdas Ergebnis nur für n ≤ 21 exakt richtig.Sonst sind nur die ersten 15 Stellen exaktgenau.

1 >> factorial(6)2 ans =3 720

Eine Alternative stellt die Funktion prod dar.

1 >> prod(1:6)2 ans =3 720

Mit der Symbolic-Toolbox hat man Zugriffauf Maple-Funktionen, zum Beispiel aufdie Funktion factorial, die die Fakultäts-Funktion symbolisch berechnet, siehe mhelpfactorial.

1 >> maple(’factorial’,6)2 ans =3 720

1 >> syms n2 >> maple(’factorial’,n)3 ans =4 n!

oder einfach

1 >> maple(’n!’)2 ans =3 n!

1 >> maple(’6!’)2 ans =3 720

da Maple das !-Zeichen als Fakultätszeichenerkennt.

Die Funktion perms gibt alle Permutationenan. Von den drei verschiedenen Objekten 1, 2und 3 gibt es genau sechs Permutationen. Die-se sind:

1 >> perms(1:3)2 ans =3 3 2 14 3 1 25 2 3 16 2 1 37 1 2 38 1 3 2

Mit der Funktion nchoosek kann man Bino-mialzahlen berechnen.

Aufgabe 128 (Binomialzahlen) Wie vieleMöglichkeiten gibt es aus n = 49 verschie-denen Objekten k = 6 verschiedene Objekteauszuwählen?Lösung: Es ist gibt

(nk

)Möglichkeiten. Also

ist

1 >> nchoosek(49,6)2 ans =3 13983816

Demnach beträgt die Wahrscheinlichkeit beimLotto sechs richtige zu haben 1/13983816 ≈7.1511 · 10−8 = 0.000000071511. © . . . . . . . .©

Mit der Anweisung nchoosek(1:n,k) erhal-ten Sie alle Anordnungsmöglichkeiten für k

156 Copyright c© G. Gramlich

Objekte ohne Wiederholung und ohne Berück-sichtigung der Reihenfolge aus n verschiede-nen Objekten. Zum Beispiel ist dies für n = 5und k = 3:

1 >> nchoosek(1:5,3)2 ans =3 1 2 34 1 2 45 1 2 56 1 3 47 1 3 58 1 4 59 2 3 4

10 2 3 511 2 4 512 3 4 5

Aufgabe 129 (Binomialzahlen) Geben Sie alleTeilmengen der Menge {1, 2, 3, 4, 5, 6} mit ge-nau vier Elementen an. Wieviel gibt es?Lösung: Es ist:

1 >> nchoosek(1:6,4)2 ans =3 1 2 3 44 1 2 3 55 1 2 3 66 1 2 4 57 1 2 4 68 1 2 5 69 1 3 4 5

10 1 3 4 611 1 3 5 612 1 4 5 613 2 3 4 514 2 3 4 615 2 3 5 616 2 4 5 617 3 4 5 6

Demnach gibt es

1 >> nchoosek(6,4)2 ans =3 15

Möglichkeiten. © . . . . . . . . . . . . . . . . . . . . . . . . .©

Mit der Maple-Funktion multinomial kannman Polynomialzahlen berechnen.

Aufgabe 130 (Polynomialzahlen) BerechnenSie mit Matlab

(8

2,3,3

).

Lösung: Es ist

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

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

63.2. Permutationen ohne Wiederholung

Die Anzahl der Permutationen ohne Wi-derholung kann man mit den Funktionenfactorial, prod, Maple-factorial unddem Maple-Zeichen ! berechnen, siehe Ab-schnitt 63.1. Die Permutationen selbst sind mitder Funktion perms zu erhalten.

63.3. Variationen ohne Wiederholung

Die Anzahl der Variationen ohne Wiederho-lung kann mit den Funktionen zur Berechnungder Fakultäten und Binomialzahlen ausgerech-net werden, siehe Abschnitt 63.1.

Angenommen wir wollen V(30, 5) berechnen,so geht das zum Beispiel wie folgt:

1 >> factorial(30)/factorial(30-5)

157 Copyright c© G. Gramlich

2 ans =3 17100720

oder aber

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

63.4. Kombinationen ohne Wiederholung

Siehe Abschnitt 63.1.

63.5. Permutationen mit Wiederholung

Aufgabe 131 (Permutationen m.W.) Berech-nen Sie mit Matlab PW(2, 3, 3).Lösung: Es ist PW(2, 3, 3) = 8!/(2! · 3! · 3!)auszurechnen.

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

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

63.6. Variationen mit Wiederholung

Aufgabe 132 (Variationen m.W.) BerechnenSie mit Matlab VW(26, 6).Lösung: Es ist VW(n, k) = nk.

1 >> VW = 26^62 VW =3 308915776

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

63.7. Kombinationen mit Wiederholung

Aufgabe 133 (Variationen m.W.) BerechnenSie mit Matlab KW(6, 2).Lösung: Es ist KW(n, k) =

(n+k−1

k

).

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

oder

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

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

63.8. Weitere Funktionen

Verfügt man über die Extended Symbolic Tool-box, also über alle Maple-Funktionen, so gibtes das combinat-Paket. Damit stehen nochmehr Funktionen

1 bell binomial cartprod2 character Chi choose3 composition conjpart decodepart4 encodepart fibonacci firstpart5 graycode inttovec lastpart6 multinomial nextpart numbcomb7 numbcomp numbpart numbperm8 partition permute powerset9 prevpart randcomb randpart

10 randperm setpartition stirling111 stirling2 subsets vectoint

zur Lösung kombinatorischer Probleme zurVefügung, siehe mhelp combinat.

158 Copyright c© G. Gramlich

64. Zufallszahlen

Zufallszahlen sind im wissenschaftlichenRechnen ein nützliches Hilfsmittel. In vielenFällen werden Zufallszahlen in einer rech-nergestützten Simulation eines komplexenProblems eingesetzt, zum Beispiel bei derPlanung von Produktionssystemen oder vonGroßprojekten. Diese Simulation kann dannauf dem Rechner immer und immer wiederausgeführt werden, und die Resultate könnenanalysiert werden. Oft werden Zufallszahlenauch als Testdaten benutzt. Hat man zumBeispiel einen Algorithmus entwickelt, derein beliebiges Gleichungssystem lösen soll,so kann man eine Matrix als auch eine rechteSeite des Systems zum Testen des Algorithmusmit Zufallszahlen generieren.

Zufallszahlen werden am Computer mit Hil-fe spezieller Algorithmen berechnet. SolcheAlgorithmen nennt man Zufallsgeneratoren.Grundlegend ist dabei die Erzeugung von Zu-fallszahlen x1, x2, . . ., xn, deren Werte sich insehr guter Näherung wie Realisierungen vonunabhängigen auf [0, 1] gleichverteilten Zu-fallsvariablen X1, X2, . . ., Xn verhalten. Dadie Werte x1, x2, . . ., xn tatsächlich jedochberechnet werden, sind sie nicht echt zufäl-lig. Man spricht deshalb auch von Pseudo-Zufallszahlen, die sich (fast) wie echte verhal-ten. Mit Hilfe von gleichverteilten Zufallszah-len lassen sich Zufallszahlen für andere Vertei-lungen durch geeignete Transformationen er-zeugen. Je nach Verteilung kann dies sehr ein-fach oder aber auch kompliziert sein. In derStatistik Toolbox wird Ihnen diese Arbeit ab-genommen, siehe Abschnitt 64.4.

In Matlab gibt es zwei eingebaute Funktionenrand und randn, mit denen man Zufallszahlenerzeugen kann. Wir wollen im folgenden die-se beiden Funktionen vorstellen und miteinan-der vergleichen. Dabei werden uns ihre statis-tischen Eigenschaften durch grafische Darstel-lungen verdeutlichen.

64.1. Gleichverteilte Zufallszahlen

Zufallszahlen sind durch die Verteilung ih-rer Werte charakterisiert. Zum Beispiel sindgleichverteilte Zufallszahlen dadurch gekenn-zeichnet, dass alle Werte der Zahlenfolge in ei-nem bestimmten Intervall gleichverteilt liegen.So erzeugt die Funktion rand(10,1) einenSpaltenvektor mit 10 gleichmäßig über dasIntervall ]0, 1[ verteilten Zufallszahlen (Ge-naugenommen erzeugt rand eine Gleitpunkt-zahl im abgeschlossenen Intervall [eps/2, (1 −eps/2)]):

1 >> rand(10,1)2 ans =3 0.95014 0.23115 0.60686 0.48607 0.89138 0.76219 0.4565

10 0.018511 0.821412 0.4447

Der Aufruf rand(50,2) erzeugt eine Matrixmit 50 Zeilen und 2 Spalten mit Werten zwi-schen 0 und 1. Testen Sie dies! Allgemeinerzeugt der Aufruf rand(m,n) eine (m, n)-

159 Copyright c© G. Gramlich

Matrix mit gleichverteilten Zufallszahlen zwi-schen 0 und 1.

In den Anwendungen werden oft auch Zufalls-zahlen gesucht, die in einem anderen Inter-vall als ]0, 1[ liegen. Mit der Matlab-Funktionrand ist auch dies leicht möglich. Zum Bei-spiel erzeugt die Anweisung

1 5 + 3*rand(n,1)

einen Spaltenvektor mit n gleichverteilten Wer-ten im Intervall ]5, 8[.

Mit rand und der eingebauten Matlab-Funktion floor lassen sich auch leicht ganz-zahlige Zufallszahllen generieren. Die Run-dungsfunktion floor(A) rundet alle Elemen-te von A auf die nächstkleinere ganze Zahl(nächste ganze Zahl in Richtung −∞). Derfolgende Function-File realisiert das Erzeu-gen von ganzzahligen Zufallszahlen. Außer derGröße der gewünschten Matrix lässt sich au-ßerdem mit k ein Intervall [-k:k] angeben,aus dem die Zahlen zufällig erzeugt werden.Wird k nicht angegeben, so wird k=9 gewählt.

1 function A = randganz(m,n,k)2 if nargin == 1, n=m; end;3 if nargin < 3, k=9; end;4 A = floor( (2*k+1)*rand(m,n)-k );

Aufgabe 134 (Zufallszahlen) Die Matlab-Funktion rand(n) erzeugt eine n × n-Matrix, deren Einträge gleichverteilte Zufalls-zahlen aus dem Intervall ]0, 1[ sind. Schrei-ben Sie einen Function-File, der n × n-Matrizen erzeugt, deren Einträge Zahlen aus{1, 2, 3, 4, 5, 6} sind.Lösung: Dies erreicht man zum Beispiel mitfolgender Funktion. Die Funktion ceil rundet

zur nächsten ganzen Zahl auf (nächste ganzeZahl in Richtung +∞).

1 function A = randganz1bisk(m,n,k)2 if nargin == 1, n=m; end;3 if nargin < 3, k=9; end;4 A = ceil( k*rand(m,n) );

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

64.2. Normalverteilte Zufallszahlen

Erzeugen wir Zufallszahlen mit der Funktionrand, so treten alle Werte in einem bestimmtenIntervall gleichmäßig häufig auf. In den An-wendungen sucht man oft auch Zufallszahlen,deren Werte nicht gleichmäßig auftreten, son-dern wo bestimmte Werte häufiger vorkommenals andere, man nennt sie normalverteilte Zu-fallszahlen (auch Gausssche Zufallszahlen ge-nannt).

In Matlab erzeugt man normalverteilte Zu-fallszahlen mit Mittelwert 0 und Varianz1 mit der Funktion randn. Der Befehlrandn(10,1) erzeugt zum Beispiel folgendenormalverteilte Zufallszahlen:

1 ans =2 -0.43263 -1.66564 0.12535 0.28776 -1.14657 1.19098 1.18929 -0.0376

10 0.327311 0.1746

Will man eine normalverteilte n-wertige Zu-fallsfolge mit Mittelwert 10 und Standardab-

160 Copyright c© G. Gramlich

weichung 5 erzeugen, so erreicht man diesdurch:

1 10+5*randn(n,1)

64.3. Im Vergleich: Gleich- undnormalverteilte Zufallszahlen

Histogramme bieten eine geeignete Möglich-keit, um Zufallszahlen grafisch darzustellen.Der Script-File

1 subplot(2,1,1)2 yg = rand(10000,1);3

4 hist(yg,25)5 h = findobj(gca,’Type’,’patch’);6 set(h,’FaceColor’,’b’,’EdgeColor’,

’w’)7 axis([-1 2 0 600])8 title(’Gleichmäßigverteilte9 Zufallszahlen’)

10

11 yn = randn(10000,1);12 x = min(yn):0.2:max(yn);13 subplot(2,1,2)14 hist(yn,x)15 h = findobj(gca,’Type’,’patch’);16 set(h,’FaceColor’,’b’,’EdgeColor’,

’w’)17 title(’Normalverteilte18 Zufallszahlen’)

illustriert die beiden Matlab-Funktionen randund randn grafisch, siehe Abbildung 63.Das obere Histogramm zeigt, wie sich die10000 Zufallszahlen gleichmäßig über dasIntervall ]0, 1[ verteilen. Mit dem Befehlrand(10000,1) wird ein Spaltenvektor mit10000 Werten erzeugt und yg zugeordnet.

Die Matlab-Funktion hist erstellt nun dasHistogramm. Mit dieser Funktion kann manverschiedene Ziele erreichen. Ein Aufruf wiehist(yg,25) erzeugt ein Histogramm, dasangibt, wie oft ein Wert in einem Subinter-vall von ]0, 1[ vorkommt. Die Zahl 25 schreibtvor, das Intervall ]0, 1[ in 25 gleichgroße Sub-intervalle einzuteilen und 25 Rechtecksflächenzu zeichnen, deren Breite die Subintervallängeund deren Höhe die Anzahl der Zufallswertein dem jeweiligen Subintervall angeben. Dasuntere Histogramm in Abbildung 63 zeigt, wie

−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 63: Zufallszahlen

sich 10000 Zufallszahlen mit Mittelwert 0 undVarianz 1 ähnlich einer Gaußschen Glocken-kurve verteilen.

Der Skript-File

1 Punkte = rand(10000,2);2 subplot(1,2,1)3 plot(Punkte(:,1),Punkte(:,2),’.’)4 title(’Gleichmäßigverteilte5 Zufallszahlen’)6 axis([0 1 0 1])7 axis(’square’)8

161 Copyright c© G. Gramlich

9 Punkte = randn(10000,2);10 subplot(1,2,2)11 plot(Punkte(:,1),Punkte(:,2),’.’)12 title(’Normalverteilte13 Zufallszahlen’)14 axis([-3 3 -3 3])15 axis(’square’)

erzeugt die Abbildung 64, 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 64: Zufallszahlen

zwischen rand und randn klar zu machen.

Aufgabe 135 (Zufallszahlen) Erzeugen Siezehn gleichverteilte Zufallszahlen im jeweilsangegebenen 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 werden.

(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 136 (Zufallszahlen) Erzeugen Sietausend gleichverteilte Zufallszahlen

(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

(c) sqrt(12)*(rand(1000,1)-0.5)

(d) sqrt(3*12)*(rand(1000,1)-0.5)

mit den Funktionen mean und var können Siedas überprüfen; am Besten mit noch mehr Zah-len. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 137 (Zufallszahlen) Erzeugen Sietausend normalverteilte Zufallszahlen

(a) mit Mittelwert 1.0 und Varianz 0.5.

(b) mit Mittelwert -5.5 und Standardabwei-chung 0.25.

(c) mit Mittelwert -5.5 und Standardabwei-chung 1.25.

Lösung: Dies kann wie folgt erreicht werden.

(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 Transformationsformelnfür den arithmetischen Mittelwert bzw. für dieVarianz: Ist yi = axi + b, so gilt y = ax + b unds2

Y = a2s2X . Hier gilt, dass die Zahlen xi den

Mittelwert null und die Standardabweichung(Varianz) eins haben. © . . . . . . . . . . . . . . . . . . . ©

162 Copyright c© G. Gramlich

64.4. Andere Verteilungen

Wenn Sie über die Statistik Toolbox verfügen,so können Sie Zufallszahlen konfortabel undinteraktiv mit randtool erzeugen; für inge-samt 20 verschiedene Verteilungen zum Bei-spiel für die Exponential- oder Binomialvertei-lungen. Die Abbildung 65 zeigt eine Exponen-

0 2 4 6 80

10

20

30

40

50

Counts

Values

Samples

Abbildung 65: Exponentialverteilung

tialverteilung mit Erwartungwert 1.

65. Stochastische Simulationen

Eine stochastische Simulation liegt vor, wennes um die Lösung von Problemen geht, beidenen Zufallseinflüsse auftreten. Stochasti-sche Simulationsmethoden werden auch Mon-teCarloMethoden genannt. Solche Methodensind nützlich bei:

• Nichtdeterministischen (stochastischen)Prozessen.

• Deterministischen Systemen, die zu kompli-ziert sind, um sie analytisch zu behandeln.

• Deterministischen Problemen, die so hochdimensional sind, dass Standarddiskretisie-

rungsverfahren ungeignet sind (zum Bei-spiel Monte Carlo Integrationen).

Die beiden grundsätzlichen Voraussetzungenstochastischer Simulationsmethoden sind:

• Kenntnis über relevante Wahrscheinlich-keitsverteilungen.

• Unterstützung bei der Erzeugung von Zu-fallszahlen.

Mit gleichverteilten Zufallszahlen können wirzum Beispiel Spiele mit dem Glücksrad amRechner simulieren. Wenn wir etwa die rela-tive Häufigkeit von Werten berechnen, die imIntervall [0.2, 0.6] liegen, und mit der Wahr-scheinlichkeit P(0.2 ≤ X ≤ 0.6) = 0.4 ver-gleichen, dann sollte für größeres n die relativeHäufigkeit nach dem Gesetz großer Zahlen mithoher Wahrscheinlichkeit bei 0.4 liegen. Auchsollte die empirische Verteilungsfunktion dergezogenen Zahlen x1, x2, . . ., xn sich der [0, 1]-Gleichverteilung annähern.

Wir „spielen“ nun Glücksrad am Computer,indem wir wiederholt auf [0, 1] gleichverteilterZufallszahlen ziehen. Das Intervall [0, 1] wirdwie in Abbildung 66 in zehn Teilintervalle der

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 66: Empirische Verteilungen

163 Copyright c© G. Gramlich

Länge 0.1 zerlegt und zu jedem „Spiel“ wirdfestgelegt, in welches Teilintzervall die gezo-gene Zufallszahl fällt. Abbildung 66 zeigt linksdas resultierende Histogramm mit den relati-ven Häufigkeiten für die zehn Teilklassen nachn = 100 Spielen. Man sieht, dass die relati-ven Häufigkeiten zum Teil noch deutlich vondem zu erwartenden Wert 0.10 abweichen. Fürn = 1000 haben sich diese Häufigkeiten be-reits wesentlich besser an den Wert 0.10 sta-bilisiert. Anders ausgedrückt: Die empirischeVerteilung der gezogenen Zahlen approximiertdie wahre Gleichverteilung besser.

Aufgabe 138 (Stochastische S.) Schreiben Sieeine Simulation, die das Volumen der Einheits-kugel {x ∈ R4 | |x|2 ≤ 1} in R4 schätzt.Lösung: Sei

Bn = {x ∈ Rn | |x| ≤ 1}

und sei

Qn = [−1, 1]n

= {x ∈ Rn | |xi| ≤ 1, i = 1, .., n}

Dann ist Bn ⊂ Qn. rand(n,1)*2-1 erzeugtuniform verteilte Zufallsvariablen in Qn. DieWahrscheinlichkeit, dass einer dieser Vektorenin Bn ist, ist Vol(Bn)

Vol(Qn) mit Vol(Qn) = 2n. Be-trachtet man also z Zufallsvariablen, die durchrand(n,1)*2-1 erzeugt werden und definiertdie Variable Inside als die Anzahl derjenigenVektoren, die in Bn liegen, so liefert Vol(Qn) ·Inside

z eine Schätzung für Vol(Bn). Man nenntdiese Methode Monte Carlo Methode.

Somit löst das folgende Matlab Script-File diegestellte Aufgabe:

1 n=4;2 Inside=0;3 VolBn=zeros(500,1);4 for k=1:5005 A=-1+2*rand(n,100);6 Inside=Inside+sum(sum(A.^2)<=1);7 VolBn(k)=Inside/(k*100)*2^n;8 end9 plot(VolBn)

10 VolBn(500)

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

65.1. Näherung für π

Mit stochastischen Simulationen ist es mög-lich, Antworten auch auf nicht-stochastischeFragestellungen zu geben. Mit einer stochas-tischen Simulation werden wir nun eine Nähe-rung für die Kreiszahl π = 3.14159 . . . berech-nen.

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 Zufallsprin-zip mit Dartpfeilen auf diese Scheibe und be-stimmen die relative Häufigkeit der Kreistref-fer, das heißt

h =Anzahl der TrefferAnzahl der Würfe

.

Hierbei werden nur Würfe gezählt, bei de-nen mindestens das Quadrat getroffen wurde.Schreibt man die relativen Häufigkeiten derKreistreffer auf, so stellt man fest, dass sie sichmit zunehmender Wurfzahl dem Wert π/4 nä-hert, denn die relative Häufigkeit h der Kreis-treffer wird mit zunehmender Wurfzahl etwa

164 Copyright c© G. Gramlich

dem Verhältnis (Flächeninhalt des Kreises) zu(Flächeninhalt des Quadrates) entsprechen. Istalso r der Kreisradius, so gilt: h ≈ r2π

4r2 =π4 und

somit

π ≈ 4h.

Wir führen dieses Experiment nicht real aus(selbstverständlich können Sie dies tun, wennSie wollen), sondern simulieren es auf demComputer. Wie ist das möglich? Die Wahr-scheinlichkeit eines zufälligen Ereignisses istdie idealisierte relative Häufigkeit, mit welcherdieses vorkommt, wenn das zugehörige Zu-fallsexperiment sehr oft wiederholt wird. Derfolgende Script-File realisiert die Simulation.

1 %---------------------------------2 % Script-File: Pfeilwurf.3 %4 % Simulation von 50 000 Pfeil-5 % würfen zur Näherungsberechnung6 % von Pi.7 %---------------------------------8 AnzahlimKreis = 0;9 PiNaeherung = zeros(500,1);

10 for k=1:50011 x = -1+2*rand(100,1);12 y = -1+2*rand(100,1);13 AnzahlimKreis = AnzahlimKreis14 + sum(x.^2+y.^2<=1);15 PiNaeherung(k) =16 4*AnzahlimKreis/(k*100);17 end18 plot(PiNaeherung)19 title(sprintf(’Näherung von Pi =20 %5.3f’,PiNaeherung(end)));21 xlabel(’mal Hundert’)

Die Abbildung 67 zeigt das Ergebnis der Si-mulation. Siehe auch Aufgabe 187.

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 67: Näherung für π

65.2. Zum Ziegenproblem

In einer Spielshow ist als Hauptpreis ein Au-to ausgesetzt. Hierzu sind auf der Bühne dreiverschlossene Türen aufgebaut. Hinter einerrein zufällig ausgewählten Tür befindet sichder Hauptpreis, hinter den beiden anderen je-weils eine Ziege. Der Kandidat wählt eine derTüren, beispielsweise Tür 1 aus; diese bleibtaber vorerst verschlossen. Der Spielleiter, derweiß, hinter welcher Tür das Auto steht, öffnetdaraufhin mit den Worten: „Soll ich Ihnen maletwas zeigen?“eine der beiden anderen Türen,zum Beispiel Tür 3, und eine Ziege schaut insPublikum. Der Kandidat hat nun die Möglich-keit, bei seiner ursprünglichen Wahl zu bleibenoder die andere verschlossene Tür (in unseremBeispiel Nr.2) zu wählen. Er erhält dann denPreis hinter der von ihm zuletzt gewählten Tür.In dem folgenden Skript finden Sie die Ant-wort auf diese Frage.

1 %---------------------------------2 % Script-File: Ziegen3 %4 % Simulation des Ziegenproblems.

165 Copyright c© G. Gramlich

5 % Es werden zehn Versuche mit6 % jeweils zehntausend7 % Durchgängen simuliert.8 %---------------------------------9 %Zehn Versuche.

10 for i=1:1011 %Zehntausend Durchgänge.12 %Zufall wird vorbereitet.13 %Es wird eine (10000,3)-Zu-14 %fallsmatrix mit den Werten15 % 1,2 und 3 erzeugt.16 a = ceil(3*rand(10000,3));17 %Zufallswahl der Autotür A.18 A = a(:,1);19 %Zufällige Erstwahl W1.20 W1 = a(:,2);21 %Moderator will Tür M öffnen.22 M = a(:,3);23 %M darf keine Autotür (A) sein24 %und auch nicht die gewählte25 %Tür (W1).26 for j=1:1000027 while ( (M(j)==A(j)) | (M(j)

==W1(j)) )28 M(j) = ceil(3*rand(1,1));29 end30 end31 %W2 wäre die Tür, zu der nun32 %gewechselt werden kann. Es33 %muss sein: M+W1+W2=6.34 W2 = 6-M-W1;35 %Wenn W2 die Autotür ist, ein36 %Punkt für ’Wechseln ist37 %richtig’. Sonst ein Punkt für38 %’Wechseln ist falsch’, da W139 %gleich A ist. Die Variablen R40 %und F zählen das richtige bzw.41 %falsche Wechseln.42 R = sum(W2==A);43 F = 10000-R;44 sprintf(’Wechseln ist richtig:45 %3.0f\t Wechseln ist falsch:

46 %3.0f’,R,F)47 subplot(2,5,i); pie([R,F]);48 end49 %Grafische Ausgabe als50 %Kreisdiagramm.51 legend(’Wechseln ist richtig’,52 ’Wechseln ist falsch’);

65.3. Das Geburtstagsparadox

Stellen wir uns vor, dass sich in einem Raumeine gewisse Anzahl von Personen befindet.Wir interessieren uns dafür, ob zwei am glei-chen Tag Geburtstag haben. Wie viele Perso-nen müssen vorhanden sein, damit garantiertzwei am gleichen Tag Geburtstag haben? Dasist eine einfache Frage: Da das Jahr 365 Ta-ge hat, haben von 366 Personen bestimmt zweiam gleichen Tag Geburtstag (Wir gehen aufSchaltjahre nicht ein). Eine wesentlich inter-essantere Frage ist: Wie viele Personen müs-sen vorhanden sein, damit es wahrscheinlichist, dass zwei am gleichen Tag Geburtstaghaben? Genauer: Wie viele Personen brauchtman, dass mit einer Wahrscheinlichkeit vonüber 50% zwei am gleichen Tag Geburtstaghaben? Die Antwort ist überraschend: Bereits23 Personen reichen aus, um die Wahrschein-lichkeit für einen gleichen Geburtstag auf über50% zu bringen. Achtung: Es ist weder danachgefragt, dass zwei am 1. Januar Geburtstag ha-ben oder dass jemand am gleichen Tag wie SieGeburtstag hat, sondern danach, ob zwei Leuteam 1. Januar oder am 2. Januar oder usw. Ge-burtstag haben.

In einem Raum sind n Personen versammelt.Unter der Voraussetzung, dass jedes Jahr 365

166 Copyright c© G. Gramlich

Tage hat (es gibt keine Schaltjahre) und dassdie Geburtstage übers Jahr gleichverteilt sind,ist die Wahrscheinlichkeit dafür, dass mindes-tens zwei Personen am gleichen Tag Geburts-tag haben gegeben durch die Formel:

P = 1 −364 · 363 · · · (365 − n + 1)

365n−1

Für n = 23 ergibt sich 0.5073 = 50.73% undfü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.

1 %---------------------------------2 % Script-File: Geburtstag3 %4 % Das Geburtstagsparadox.5 %---------------------------------6 clear all7 %kmax: Anzahl der Simulationen.8 kmax = 5000;9 %n: Anzahl der Personen im Raum.

10 for n = [5:5:55]11 r = 0;12 for k=1:kmax13 %Zufallszahlen zwischen 114 %und 365.15 g = ceil(365*rand(n,1));16 for i=1:n17 a = g-g(i)*ones(n,1);18 if( sum(~a)>=2 )19 %Zwei Zahlen sind20 %gleich.21 r = r+1;22 break23 end24 end25 end26 %Wahrscheinlichkeit.27 p = r/kmax;

28 [n,p]29 end

Die Ergebnisse der theoretischen Berechnun-gen und der Simulation sind in Tabelle 35 ge-genübergestellt.

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 35: Zum Geburtstagsparadox

65.4. Bestimmte Integrale

Das bestimmte Integral∫ 1

0xx dx

kann von Matlab nicht exakt (symbolisch) be-rechnet werden, siehe Abschnitt 60. Wir kön-nen aber mit Hilfe der Näherung∫ 1

0f (x) dx ≈

1n

n∑i=1

f (xi)

167 Copyright c© G. Gramlich

einen geschätzten Wert erhalten. Hierbei sindxi gleichmäßig verteilte Zufallszahlen aus demIntervall ]0, 1[.

1 >> n = 1000;2 >> x = rand(n,1);3 >> y = x.^x;4 >> sum(y)/n5 ans =6 0.7850

Somit ist also∫ 1

0xx dx ≈ 0.7850

66. Symbolisches Rechnen

Symbolisches Rechnen ist der Versuch, dieMethoden, die man beim Rechnen mit Papierund Bleistift kennt, auf Computern abzubildenund dort schließlich durchzuführen.

Um mit Matlab symbolisch rechnen zu kön-nen, muss die Symbolic Math Toolbox instal-liert sein.

Symbolische Rechnungen basieren auf Varia-blen, denen nicht unbedingt Zahlen zugewie-sen sind. Man rechnet mit Symbolen und Ter-men, wie man es vom Rechnen mit Papier

und Bleistift kennt. Arithmetische Operatio-nen können exakt durchgeführt werden. Au-ßerdem kann man Näherungen bis auf einebeliebig vorgegebene gewünschte Anzahl vonStellen finden. Man kann Polynome oder ra-tionale Ausdrücke symbolisch addieren, sub-trahieren und dividieren. Ausdrücke könnendifferenziert werden und man erhält die glei-chen Ergebnisse, die bisher nur mit Bleistiftund Papier zu erzielen waren. Ausdrücke kön-nen sogar unbestimmt integriert werden, sofernsie Integrale in geschlossener Form besitzen.Diese Möglichkeiten erleichtern das ermüden-de und fehlerbedrohte Manipulieren kompli-zierter Ausdrücke, das auch häufig das Vor-spiel numerischer Behandlung bildet. Mit sym-bolischem Rechnen lassen sich auch kleine-re lineare Gleichungssysteme ohne Rundungs-fehler lösen. Auf jeden Fall ist symbolischesRechnen ein sich ständig entwickelndes Ge-biet, dessen Bedeutung für das wissenschaft-liche Rechnen zunehmen wird.

66.1. Erste Schritte

Durch

1 >> syms x t

werden die beiden symbolischen Variablen xund t erzeugt, mit denen man durch

1 >> 3*x^2+x*t-12 ans =3 3*x^2+x*t-1

den Ausdruck 3x2 + xt − 1 kreiert.

168 Copyright c© G. Gramlich

Bekanntlich ist

a2 − b2

a − b= a + b.

1 >> syms a b2 >> simplify((a^2-b^2)/(a-b))3 ans =4 a+b

Es ist

(a + b + c)2 = a2 + b2 + c2 + 2(ab + ac + bc)

1 >> syms a b c2 >> expand((a+b+c)^2)3 ans =4 a^2+2*a*b+2*a*c+b^2+2*b*c+c^2

Mit dem pretty-Befehl kann man Formeln inetwas lesbarerer Form ausgeben.

Aufgabe 139 (expand-Funktion) Die 6. Fibo-nacci-Zahl ist 8. Diese kann man durch

1√

5

(1 +√

52

)6−

1√

5

(1 −√

52

)6

berechnen. Bestätigen Sie dies.Lösung: Es ist

1 a = expand(((1+sqrt(sym(5)))/2)^6);

2 b = expand(((1-sqrt(sym(5)))/2)^6);

3 simplify(1/sqrt(5)*a-1/sqrt(5)*b)4 ans =5 8

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

Mit der Funktion simplify können symboli-sche Terme vereinfacht werden. In der Mathe-matik lernt man die Gültigkeit von sin(x)2 +

cos(x)2 = 1. Mit der Funktion simplify kannman dies bestätigen:

1 >> syms x2 >> simplify( sin(x)^2+cos(x)^2 )3 ans =4 1

Substitutionen können mit der Funktion subsdurchgeführt werden. Die folgenden Anwei-sungen substituieren cos(x) anstelle von x.

1 >> syms x2 >> subs( sqrt(1-x^2),x,cos(x) )3 ans =4 (1-cos(x)^2)^(1/2)

Matlab verfügt über viele eingebaute mathe-matische Funktionen mit denen man symbo-lisch rechnen kann. Mit diesen vordefiniertenFunktionen ist es uns dann möglich, weite-re Funktionen zu konstruieren, indem man dieentsprechenden Funktionsterme f (x) miteinan-der verküpft.

Funktionsterme sind Ausdrücke, das heißt, siekönnen wie gewöhnliche Terme erzeugt wer-den. Angenommen wir wollen mit dem Funk-tionsterm f (x) = 2x2 + 3x + 4 arbeiten, zumBeispiel differenzieren oder integrieren, so de-finiert man diesen wie folgt.

1 >> syms x2 >> f = 2*x^2+3*x+4;

Danach kann man zum Beispiel f ′(x) = 4x+ 3bilden.

1 >> diff(f)2 ans =3 4*x+3

169 Copyright c© G. Gramlich

Aufgabe 140 (Rangordnung) Berechnen Siesymbolisch:

(a) 2ˆ10/10

(b) 2+3*4

(c) 1+2/3*4.

Lösung: Es ist

1 a) >> sym(2^10/10)2 ans =3 512/54

5 b) >> sym(2+3*4)6 ans =7 148

9 c) >> sym(1+2/3*4)10 ans =11 11/3

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

Aufgabe 141 (Potenzregeln) Bestätigen Siedie folgenden Rechenregeln:

(a) am · an = am+n

(b) am

an = am−n

Verwenden Sie die Matlab-Funktionsimplify.Lösung: » syms a n m

(a)1 >> simplify(a^m*a^n)2 ans =3 a^(m+n)

1 >> simplify(a^m/a^n)2 ans =3 a^(m-n)

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

Aufgabe 142 (Rechnen) Berechnen Sie den

Ausdruck √16 + cos(π/3)

3√8 + 4symbolisch und numerisch.Lösung: Symbolische Rechnung:Sowohl

1 >> sym((sqrt(16)+cos(pi/3))/(8^(1/3)+4))

also auch

1 >> (sym(sqrt(16)) + sym(cos(pi/3)))/sym(8^(1/3)+4)

liefert

1 ans =2 3/4

Numerische Rechnung:

1 >> (sqrt(16)+cos(pi/3))/(8^(1/3)+4)

2 ans =3 0.7500

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

Aufgabe 143 (Vereinfachen) Vereinfachen Sieden Ausdruck

x2 + 2xy + y2

x2 − y2

Lösung: Mit

1 >> syms x y2 >> simplify((x^2-2*x*y+y^2)/(x^2-y

^2))

erhält man

1 ans =2 (-y+x)/(x+y)

170 Copyright c© G. Gramlich

Somit ist die Vereinfachung dann also

x2 + 2xy + y2

x2 − y2 =x − yx + y

.

Anmerkung: Man kann statt simplify auchden Befehl simple verwenden. © . . . . . . . . . .©

Aufgabe 144 (Multiplikation) MultiplizierenSie

(x2 + x + 1) · (x3 − x2 + 1).

Lösung: Mit

1 >> syms x2 >> collect( (x^2+x+1)*(x^3-x^2+1))3 ans =4 x^5+x+1

sieht man, dass

(x2 + x + 1) · (x3 − x2 + 1) = x5 + x + 1

ist. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

Aufgabe 145 (Potenzieren) Berechnen Sie

(1 + x)4.

Lösung: Mit

1 >> syms x2 >> expand((1+x)^4)3 ans =4 1+4*x+6*x^2+4*x^3+x^4

sieht man, dass

(1 + x)4 = x4 + 4x3 + 6x2 + 4x + 1

ist. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

Aufgabe 146 (Faktorisieren) Faktorisieren Siedas Polynom

x6 + x4 − x2 − 1.

Lösung: Mit

1 >> syms x2 >> factor(x^6+x^4-x^2-1)3 ans =4 (x-1)*(1+x)*(1+x^2)^2

sieht man, dass

(x6 + x4 − x2 − 1) = (x − 1) · (x + 1) · (x2 + 1)2

ist. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

66.2. Wie man Maple-Funktionenverwendet

Die Funktion maple erlaubt es, jede Maple-Funktion direkt zu verwenden. Kennt man denNamen der gewünschten Maple-Funktion, sokann man mit

1 mhelp <Name>

Maple-Online-Informationen erhalten. Mitdem Aufruf

1 >> mhelp index[function]

erhält man eine Liste aller Maple-Funktionen.

Als Beispiel betrachten wir den Befehl

1 >> mhelp gcd

Da man auf diese Art die Syntax der Maple-Funktion gcd erfahren hat, kann man nun dieFunktion maple benutzen, um gcd zu verwen-den. Die folgenden Zeilen zeigen, wie manden größten gemeinsamen Teiler der Polyno-me x2 − y2 und x3 − y3 berechnet:

1 >> syms x y2 p1 = x^2-y^2;3 p2 = x^3-y^3;

171 Copyright c© G. Gramlich

4 maple(’gcd’,p1,p2)5 ans =6 -y+x

Die Anweisungen

1 >> maple(’gcd’,225,725)2 ans =3 25

bestimmen den größten gemeinsamen Teilervon 225 und 725.

66.3. Mathematische Funktionen

Matlab verfügt über viele eingebaute Mathe-matische Funktionen mit denen man symbo-lisch rechnen kann. Mit diesen vordefiniertenFunktionen ist es uns dann auch möglich, wei-tere Funktionen zu konstruieren, indem mandie entsprechenden Funktionsterme f (x) mit-einander verküpft.

Funktionsterme sind Ausdrücke, das heißt, siekönnen wie gewöhnliche Terme erzeugt wer-den. Angenommen wir wollen mit dem Funk-tionsterm f (x) = 2x2 + 3x + 4 arbeiten, zumBeispiel differenzieren oder integrieren, so de-finiert man diesen wie folgt.

1 >> syms x2 >> f = 2*x^2+3*x+4;

Danach kann man zum Beispiel f ′(x) = 4x+ 3bilden.

1 >> diff(f)2 ans =3 4*x+3

Will man einen abstrakten Funktionsterm f (x)erzeugen, das heißt einen Term, der irgendein

spezieller Funktionsterm sein kann, so ist dasdurch die die Anweisung

1 >> f = sym(’f(x)’)

möglich. Hierdurch wird das symbolische Ob-jekt f erzeugt, das wie f (x) agiert, das heißt,dem Objekt f ist bekannt, dass eine unabhän-gige Variable x existiert. Das dem so ist, zeigendie folgenden Zeilen.

1 >> diff(f)2 ans =3 diff(f(x),x)4 >> diff(f,’t’)5 ans =6 0

Der Funktionsterm f (x) nach x abgeleitet,ergibt f ′(x) bzw. in Matlab-Terminologiediff(f(x),x); nach t abgeleitet ist er aber 0,denn f (x) hängt nicht von t ab.

Damit können wir nun den Differenzenquoti-ent der Funktion f im Punkt x bilden

1 >> syms xbar h2 >> ( subs(f,xbar+h)-subs(f,xbar) )

/h3 ans =4 (f(xbar+h)-f(xbar))/h

und dann auch die Ableitung (Differenzialquo-tient) f ′(x) im Punkt x.

1 >> limit(ans,h,0)2 ans =3 D(f)(xbar)

Als weiteres Beispiel bestätigen wir die Pro-duktregel.

1 >> diff(f*g)

172 Copyright c© G. Gramlich

2 ans =3 diff(f(x),x)*g(x)+f(x)*diff(g(x),x

)

Aufgabe 147 (Funktionsterme) Bestätigen Siedie Quotientenregel( f (x)

g(x)

)′=

f ′(x)g(x) − f (x)g′(x)2g(x)

Lösung: Hier die Bestätigung:

1 f = sym(’f(x)’); g = sym(’g(x)’);2 diff(f/g)3 ans =4 diff(f(x),x)/g(x)-f(x)/g(x)^2*5 diff(g(x),x)

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

Häufig hat man einen symbolischen Funkti-onsterm definiert und möchte dann symboli-sche oder numerische Funktionswerte berech-nen. Als Beispiel betrachten wir den symbo-lischen Funktionsterm f (x) =

√x. Es soll

f (2) zunächst symbolisch ausgewertet werden;hierbei hilft die subs-Funktion.

1 >> syms x2 >> f = sqrt(x);3 >> pretty(subs(f,sym(2)))4

5 1/26 2

Auch die numerische Funktionsberechnungkann mit der subs-Funktion erfolgen.

1 >> subs(f,2)2 ans =3 1.4142

Wir können f (x) aber auch für mehrere x-Werte auswerten. Numerisch:

1 >> subs(f,[1, 2, 3, 4])2 ans =3 1.0000 1.4142 1.7321 2.0000

und symbolisch:

1 >> subs(f,sym([1, 2, 3, 4]))2 ans =3 [ 1, 2^(1/2), 3^(1/2), 4^(1/2)]

Mit zwei gegebenen Funktionen f und g undden Operationen Addition, Subtraktion, Mul-tiplikation und Division kann man die Sum-me f + g, die Differenz f − g, das Produktf g und den Quotienten f /g bilden. Zusätzlichkann man die Komposition von f und g, in Zei-chen f ◦ g, definieren.

Die Sinusfunktion f = sin und die Exponen-tialfunktion g = exp sind eingebaute Funk-tionen. Wir können damit die Summenfunk-tion f + g = sin+ exp oder die Verkettungf ◦ g = esin dieser beiden Funktionen bilden.Die folgenden Anweisungen zeigen die Um-setzung:

1 >> syms x2 >> sin(x) + exp(x)3 ans =4 sin(x)+exp(x)5 >> exp(sin(x))6 ans =7 exp(sin(x))

oder alternativ mit der Funktion compose fürdie Komposition.

1 >> syms x2 >> compose(exp(x),sin(x))3 ans =

173 Copyright c© G. Gramlich

4 exp(sin(x))

Wir können auch (symbolische) Funktionswer-te berechnen.

1 >> sin(sym(1.5))2 ans =3 sin(3/2)

Den dazugehörigen numerischen Werte erhal-ten wir durch die Anweisung

1 >> double(ans)2 ans =3 0.9975

1 >> sin(sym(pi/4))2 ans =3 1/2*2^(1/2)

Wir können auch die Funktion subs verwen-den, um Funktionswerte zu berechnen.

1 >> syms x2 >> exp(sin(x));3 >> subs(ans,sym(2))4 ans =5 exp(sin(2))

Der numerische Wert ist

1 >> double(ans)2 ans =3 2.4826

oder direkt

1 >> exp(sin(x));2 >> subs(ans,2)3 ans =4 2.4826

Mit dem Befehl type ist die Überprüfungmöglich, ob eine vorliegende Funktion f gera-de oder ungerade ist. Eine reellwertige Funk-tion f mit symmetrischem DefinitionsbereichD f ⊆ R wird als gerade bezeichnet, wennf (x) = f (−x) für alle x ∈ D f gilt. Demnachist die Kosinusfunktion cos eine gerade Funk-tion. Wir überprüfen diese Behauptung.

1 >> syms x2 >> f = cos(x);3 >> maple(’type’,f,’evenfunc(x)’)4 ans =5 true

Die Exponentialfunktion exp ist dagegen we-der gerade noch ungerade.

1 >> g = exp(x);2 >> maple(’type’,g,’evenfunc(x)’)3 ans =4 false5 >> maple(’type’,g,’oddfunc(x)’)6 ans =7 false

Mit der Funktion finverse kann man von derFunktion f die Umkehrfunktion f −1 finden,genauer: man kann den Funktionsterm von f −1

berechnen. Das folgende Beispiel zeigt dies fürdie Exponentialfunktion f (x) = ex, x ∈ R.

1 >> syms x2 >> f = exp(x);3 >> finverse(f)4 ans =5 log(x)

Die Umkehrfunktion ist somit f −1(x) = ln(x),x > 0, wobei der Definitionsbereich von Mat-lab nicht angegeben wird, sondern in Eigen-verantwortung hingeschrieben werden muss.

174 Copyright c© G. Gramlich

Ist bei der Umkehrfunktion besonders auf denDefinitionsbereich zu achten, so gibt Matlabeine Warnung heraus, wie folgendes Beispielzeigt:

1 >> g = x^2;2 >> finverse(g)3 Warning: finverse(x^2) is not4 unique.5 > In C:\MATLAB6p1\toolbox\symbolic

\6 @sym\finverse.m at line 437 ans =8 x^(1/2)

Die Umkehrfunktion von der quadratischenFunktion f (x) = x2, x ∈ R ist die Wurzel-funktion, der Definitionsbereich dieser ist abernicht ganz R, sondern R≥0.

Der Stetigkeitsbegriff ist ein zentraler Begriffder Analysis bzw. der Differenzial- und In-tegralrechung. Die Maple-Funktion iscountüberprüft, ob eine vorliegende Funktion f aufeinem anzugebendem Intervall stetig ist. DieFunktion f (x) = 1/x ist auf [1, 3] stetig, nichtaber auf [−1, 3]. Hier die Bestätigung:

1 >> syms x2 >> maple(’iscont’,1/x,’x=1..3’)3 ans =4 true5 >> maple(’iscont’,1/x,’x=-1..3’)6 ans =7 false

Stückweise definierte Funktionen lassen sichmit der Funktion piecewise definieren. Hierein Beispiel.

1 >> f = maple(’piecewise’,’x<=0’,’x’,’0<x’,’1/x’)

2 f =

3 PIECEWISE([x, x <= 0],[1/x, 0 < x])

4 >> diff(f)5 ans =6 PIECEWISE([1, x < 0],[NaN, x = 0],7 [-1/x^2, 0 < x])8 >> int(f)9 ans =

10 PIECEWISE([1/2*x^2, x < 0],11 [NaN, x = 0],[log(x), 0 < x])

66.4. Algebraische Gleichungen

Mit der Funktion solve kann man Gleichun-gen lösen. Das folgende Beispiel löst x2 − x =0.

1 >> solve(’x^2-x = 0’)2 ans =3 [0]4 [1]

Findet man keine exakte symbolische Lösung,so wird die Lösung in variabler Genauigkeitausgegeben.

1 >> solve(’cos(x) = x’)2 ans =3 .739...87

Aufgabe 148 (Algebraische Gl.) Lösen Sie diealgebraischen Gleichungen cos x = ex und ex+

2e−x − 9 = 0.Lösung: Es ist

1 >> solve(’cos(x)=exp(x)’)2 ans =3 04 >> solve(’exp(x)+2*exp(-x)-9=0’)5 ans =6 [ log(9/2+1/2*73^(1/2))]

175 Copyright c© G. Gramlich

7 [ log(9/2-1/2*73^(1/2))]8 >> double(ans)9 ans =

10 2.171611 -1.4784

Die Funktion fzero erlaubt es uns alternativdie Nullstellen numerisch zu berechnen. Mitdem Starwert x0 = 1 (zweites Argument infzero) erhalten wir die Lösung

1 >> fzero(’exp(x)+2*exp(-x)-9’,1)2 ans =3 2.1716

und mit dem Starwert x0 = −1 die zweite Lö-sung

1 >> fzero(’exp(x)+2*exp(-x)-9’,-1)2 ans =3 -1.4784

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

Aufgabe 149 (Algebraische Gl.) BerechnenSie die Lösung der Gleichung xex = 1.Lösung:

1 >> solve(’x*exp(x)=1’)2 ans =3 lambertw(1)4 >> double(ans)5 ans =6 0.5671

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

Aufgabe 150 (Algebraische Gl.) Lösen Sie dasGleichungssystem

3x2 + 2y = 0

2x − 3y2 = 0

Lösung:

1 >> [x,y] = solve(’3*x^2+2*y=0’,’2*x-2*y^2=0’)

2 x =3 [0]4 [1/9*18^(2/3)]5 [(1/6*18^(1/3)-1/6*i*3^(1/2)6 *18^(1/3))^2]7 [(1/6*18^(1/3)+1/6*i*3^(1/2)8 *18^(1/3))^2]9 y =

10 [0]11 [-1/3*18^(1/3)]12 [1/6*18^(1/3)-1/6*i*3^(1/2)13 *18^(1/3)]14 [1/6*18^(1/3)+1/6*i*3^(1/2)15 *18^(1/3)]16 >> double(x), double(y)17 ans =18 019 0.763120 -0.3816 - 0.6609i21 -0.3816 + 0.6609i22 ans =23 024 -0.873625 0.4368 - 0.7565i26 0.4368 + 0.7565i

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

66.5. Grenzwerte

Die Folge

an =2n + 1

4n, n ≥ 1

hat den Grenzwert 1/2. Der folgende Matlab-Code bestätigt dies:

176 Copyright c© G. Gramlich

1 >> limit((2*n+1)/(4*n),inf)2 ans =3 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 → ∞. Die fol-genden Anweisungen zeigen dies:

1 >> syms n2 >> limit((1+1/n)^n,inf)3 ans =4 exp(1)

Mit der Funktion limit lassen sich auchGrenzwerte von Funktionen berechnen. DieTabelle 36 Möglichkeiten mit limit.

Mathematik Matlablimx→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 36: Grenzwerte berechnen

Besitzt der Differenzenquotient( f (x) − f (x))/(x − x) der Funktion f fürx → x einen Grenzwert, so heißt f an derStelle x differenzierbar. Der Grenzwert wirdmit f ′(x) bezeichnet und man schreibt

f ′(x) = limx→x

f (x) − f (x)x − x

.

Man nennt den Grenzwert auch Differenzial-quotient und die Berechnungsmethode vonf ′(x) die x-Methode.

Wir können limit einsetzen, um die Ablei-tung einer Funktion f an der Stelle x zu berech-nen. Als Beispiel berechnen wir für die Funk-tion f (x) = 3/x, x > 0 die Ableitung f ′(2).

1 >> syms x2 >> limit( (3/x-3/2)/(x-2) ,x,2 )3 ans =4 -3/4

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 > 0 undx = 2 erhält man:

1 >> syms h2 >> limit( (3/(2+h)-3/2)/h, h, 0)3 ans =4 -3/4

Bekanntlich hat der Differenzenquotient( f (x) − f (x))/(x − x) für die Betragsfunktionf (x) = abs(x) = |x|, x ∈ R und x = 0 keinenGrenzwert. In Matlab erhalten wir:

1 >> syms x2 >> limit((abs(x)-abs(0))/(x-0),x

,0)3 ans =4 NaN

177 Copyright c© G. Gramlich

Zwar ist die Betragsfunktion abs im Punkt 0nicht differenzierbar, hat aber dort einen rech-ten und linken Grenzwert, das heißt es gilt

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:

1 >> limit( (abs(x)-abs(0))/(x-0),x,0,’right’)

2 ans =3 14 >> limit( (abs(x)-abs(0))/(x-0),x

,0,’left’)5 ans =6 -1

Die Ableitung einer Funktion basiert bekann-termaßen auf dem Prozeß der Grenzwertbil-dung. Zum Beispiel ist die Ableitungsfunkti-on der Kosinusfunktion cos die Funktion − sin.Mathematisch bedeutet dies:

ddx

cos(x) = limh→0

cos(x + h) − cos(x)h

= − sin(x)

Dies können wir mit der limit-Funktion be-stätigen.

1 >> syms x h2 >> limit( (cos(x+h)-cos(x))/h, h,

0)3 ans =4 -sin(x)

Die folgenden Matlab-Anweisungen berech-nen den Grenzwert

limx→0

cos(x) = 1

1 >> syms x2 >> limit(cos(x))3 ans = 1

Aufgabe 151 (Grenzwerte) Berechnen Sie denGrenzwert

limx→0

sin xx

Lösung: Berechnen Sie den Grenzwert mit

1 >> syms x2 >> limit( sin(x)/x )3 ans =4 1

Somit ist der Grenzwert

limx→0

sin(x)x= 1 .

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

Aufgabe 152 (Grenzwerte) Berechnen Sie denGrenzwert

limh→0

cos(h) − 1h

Lösung: Berechnen Sie den Grenzwert mit

1 >> syms h2 >> limit( (cos(h)-1)/h )3 ans =4 0

Somit ist der Grenzwert

limh→0

cos(h) − 1x

= 0.

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

178 Copyright c© G. Gramlich

Aufgabe 153 (Grenzwerte) Bestimmen Sieden Grenzwert

limx→∞

xe−x

und interpretieren Sie ihn.Lösung: Der Grenzwert ist Null, denn es ist:

1 >> syms x2 >> limit(x*exp(-x),inf)3 ans =4 0

Die Exponentialfunktion f (x) = e−x, x ∈ Rfällt für x → ∞ schneller als die lineare Funk-tion g(x) = x, x ∈ R für x→ ∞ steigt. © . . . . ©

Aufgabe 154 (Grenzwerte) Bestimmen Sieden Grenzwert

limh→0

(x + h)3 − x3

h.

Was bedeutet dieser Grenzwert?Lösung: Es ist:

1 >> syms x h2 >> limit(((x+h)^3-x^3)/h,h,0)3 ans =4 3*x^2

Der Grenzwert ist der Ableitungsterm derFunktion f (x) = x3, x ∈ R. © . . . . . . . . . . . . . . ©

Aufgabe 155 (Grenzwerte) Bestätigen Sie zu-nächst rechnerisch mit Bleistift und Papier unddann in Matlab die folgenden Grenzwerte:

(a) limx→0

(x2 − 2x +

5)/(cos x) = 5

(b) limx→∞

(2x2 +

4)/(x2 − 1) = 2

(c) limx→1

(x − 1)/(x2 −

1) = 1/2

179 Copyright c© G. Gramlich

(d) limx→∞

3x/4x = 0 (e) limx→0

(√

x + 1 −

1)/x = 1/2

Lösung:

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

Aufgabe 156 (Grenzwerte) Die folgendenGrenzwerte existieren nicht. Was liefert Mat-lab?

(a) limx→0

1/x (b) limx→0x>0

1/x (c) limx→0x<0

1/x

Lösung:

1 >> limit(1/x,0)2 ans =3 NaN4 >> limit(1/x,x,0,’right’)5 ans =6 Inf7 >> limit(1/x,x,0,’left’)8 ans =9 -Inf

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

66.6. Endliche und unendliche Summen

Endliche oder unendliche Reihen lassen sichmit der Matlab-Funktion symsum berech-nen, die symbolisches Summieren erlaubt. DieSumme der endlichen Reihe

10∑k=1

2k = 2 + 4 + 8 + · · · + 1024

ist 2046, was man durch folgende Zeilen bestä-tigen kann:

1 >> symsum(2^k,1,10)2 ans =3 2046

Ob die Summe einer unendlichen Reihe exis-tiert und welchen Wert sie gegebenenfalls hat,lässt sich ebenfalls mit der Matlab-Funktionsymsum beantworten. In der Analysis beweistman2:

∞∑n=1

1n2 =

π2

6.

Mit dem Kommando symsum kann man diesüberprüfen:

1 >> syms n2 >> symsum(1/n^2,1,inf)3 ans =4 1/6*pi^2

Aufgabe 157 (Endliche Summen) BerechnenSie

10∑k=1

1k.

Lösung: Mit

1 >> syms k2 >> symsum(1/k,1,10)

erhält man

1 ans =2 7381/2520

Es ist also

10∑k=1

1k=

73812520

.

2Zum Beispiel mit Hilfe der Theorie der Fourier-Reihen.

180 Copyright c© G. Gramlich

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

Aufgabe 158 (Endliche Summen) BestätigenSie 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: Definiert man zunächst

1 >> syms k n

so erhält man

1 a) >> simple(symsum(k,1,n))2 ans =3 1/2*n*(n+1)4

5 b) >> simple(symsum(k^2,1,n))6 ans =7 1/6*n*(n+1)*(2*n+1)8

9 c) >> simple(symsum(k^3,1,n))10 ans =11 1/4*n^2*(n+1)^2

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

Aufgabe 159 (Unendliche Summen) Berech-nen Sie die Summe der Reihe

∞∑k=1

14k2 − 1

.

Lösung: Mit

1 >> syms k2 >> symsum( 1/(4*k^2-1),1,inf)

erhält man

1 ans =2 1/2

Also ist die Summe der Reihe∞∑

k=1

14k2 − 1

=12.

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

Aufgabe 160 (Unendliche Summen) Bestäti-gen Sie, dass für die harmonische Reihe gilt

∞∑k=1

(−1)k−1 1k= ln(2).

Lösung: Mit

1 >> syms k2 >> symsum( (-1)^(k-1)/k,1,inf)

erhält man

1 ans =2 log(2)

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

Aufgabe 161 (Unendliche Summen) Berech-nen Sie die Leibnizsche Reihe

∞∑k=1

(−1)k 12k + 1

Lösung: Mit

1 >> syms k2 >> symsum( (-1)^k/(2*k+1),1,inf)

erhält man

1 ans =2 -1+1/4*pi

Also ist die Leibnizsche Reihe∞∑

k=1

(−1)k 12k + 1

4− 1 .

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

181 Copyright c© G. Gramlich

Aufgabe 162 (Endliche Summen) BerechnenSie die endliche Reihe

n∑k=1

(2k − 1)

das heißt die Summe der ersten n ≥ 1 ungera-den natürlichen Zahlen.Lösung: Mit

1 >> syms k n2 >> simplify(symsum(2*k-1,1,n))

erhält man

1 ans =2 n^2

Also istn∑

k=1

(2k − 1) = n2.

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

Aufgabe 163 (Endliche Summen) BerechnenSie die endliche Reihe

n∑k=1

(2k − 1)2

das heißt die Summe der Quadrate der erstenn ≥ 1 ungeraden natürlichen Zahlen.Lösung: Mit

1 >> syms k n2 >> simplify(symsum((2*k-1)^2,1,n))

erhält man

1 ans =2 -1/3*n+4/3*n^3

Also ist

n∑k=1

(2k − 1)2 =43

n3 −13

n.

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

66.7. Differenziation

Die Funktion diff berechnet die symbolischeAbleitung eines Funktionsterms. Um einensymbolischen Ausdruck zu erzeugen, mussman zuerst die verwendeten symbolischen Va-riablen definieren, und dann den gewünschtenAusdruck bilden, und zwar genauso, wie manes mathematisch tun würde. Die folgenden An-weisungen

1 >> syms x2 >> f = x^2*exp(x);3 >> diff(f)

erzeugen eine symbolische Variable x, bildenden symbolischen Ausdruck x2 exp(x) und be-rechnen die Ableitung von f nach x. Das Er-gebnis ist:

1 ans =2 2*x*exp(x)+x^2*exp(x)

Aufgabe 164 (Ableitungen) Berechnen Sie

ddx

(x2ex)

Lösung: Mit

1 >> syms x2 >> diff(x^2*exp(x))3 ans =4 2*x*exp(x)+x^2*exp(x)

182 Copyright c© G. Gramlich

sieht man, dass

ddx

(x2ex) = 2xex + x2ex

ist. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

Aufgabe 165 (Ableitungen) Berechnen Sie

ddx

arctan(x)

Lösung: Mit den Anweisungen

1 >> syms x2 >> diff(atan(x))3 ans =4 1/(1+x^2)

erkennt man, dass

ddx

arctan(x) =1

1 + x2

ist. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

Aufgabe 166 (Ableitungen) Berechnen Sie

ddx

(xxx)

Lösung: Mit den Anweisungen

1 >> syms x2 >> diff(x^(x^x))3 ans =4 x^(x^x)*(x^x*(log(x)+1)*log(x)5 +x^x/x)

erkennt man, dass

ddx

(xxx)= xxx

(xx (ln (x) + 1) ln (x) +

xx

x

)ist. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

66.8. Partielle Differenziation

Es können auch partielle Ableitungen berech-net werden:

1 >> syms w x y2 >> diff(sin(w*x*y))

berechnet die Ableitung von sin(wxy) nach x.Das Ergebnis ist cos(wxy)wy. Das Ergebnisvon

1 >> diff(sin(w*y))

ist cos(wy)w. Selbstverständlich kann manauch steuern, nach welcher Variablen differen-ziert werden soll.

1 >> diff(sin(w*y),w)

liefert das Ergebnis

1 ans =2 cos(w*y)*y

Es ist auch möglich, Ableitungen höherer Ord-nung zu berechnen.

66.9. Der Gradient

Mit der Funktion jacobian ist es möglich, denGradient einer reellwertigen Funktion zu be-rechnen. Für f : R3 → R mit f (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.

183 Copyright c© G. Gramlich

1 >> syms x y z real2 >> jacobian(exp(x+2*y)+2*x*sin(z)+

z^2*x*y)’3 ans =4 [ exp(x+2*y)+2*sin(z)+z^2*y]5 [ 2*exp(x+2*y)+z^2*x]6 [ 2*x*cos(z)+2*z*x*y]

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

H f (x) =[

24x2 + 6y 6x + 6y2

6x + 6y2 12xy + 8

].

Wir bestätigen dies in Matlab; hilfreich istwieder die jacobian-Funktion.

1 >> syms x y real2 >> f = 2*x^4+3*x^2*y+2*x*y^3+4*y

^2;3 >> gradf = jacobian(f)’4 gradf =5 [ 8*x^3+6*x*y+2*y^3]6 [ 3*x^2+6*x*y^2+8*y]7 >> hessf = jacobian(gradf)8 hessf =9 [ 24*x^2+6*y, 6*x+6*y^2]

10 [ 6*x+6*y^2, 12*x*y+8]

Im Punkt (x, y) = (−2, 3) gilt

∇ f (−2, 3) =[−46−72

]

und

H f (−2, 3) =[

114 4242 −64

].

In Matlab:

1 >> subs(gradf,{x,y},{-2,3})2 ans =3 -464 -725 >> subs(hessf,{x,y},{-2,3})6 ans =7 114 428 42 -64

66.11. Die Jacobi-Matrix

Bei Funktionen mehrerer Veränderlicher be-rechnet man die Funktionalmatrix oder Jaco-bi-Matrix mittels jacobian. Will man die Ja-cobi-Matrix der Funktion

f : R3 → R3

(x, y, z) 7→ (xy, x, z)

berechnen, so geht das wie folgt:

1 >> syms x y z2 >> J = jacobian([x*y,x,z],[x,y,z])

1 J =2 [ y, x, 0]3 [ 1, 0, 0]4 [ 0, 0, 1]

Im ersten Argument der Function jacobiansteht der Funktionsterm und im Zweiten stehendie unabhängigen Variablen.

Aufgabe 167 (Jacobi-Matrizen) Berechnen Siedie Jacobi-Matrix der Funktion f : R2 → R3,(x, y) 7→ (x+y, x2 sin y, exy) in einem beliebigen

184 Copyright c© G. Gramlich

Punkt (x, y) ∈ R2. Wie lautet die Jacobi-Matrixim Punkt (1, 0)?Lösung: Es ist

1 >> syms x y2 >> J = jacobian([x+y,x^2*sin(y),

exp(x*y)],[x,y])3 J =4 [ 1, 1]5 [ 2*x*sin(y), x^2*cos(y)]6 [ y*exp(x*y), x*exp(x*y)]

Die Jacobi-Matrix im Punkt (1, 0) ist:

1 >> subs(J,[x,y],[1,0])2 ans =3 1 14 0 15 0 1

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

66.12. Integration

Die Funktion int erlaubt symbolische Integra-tion.

Als erstes Beispiel wollen wir die Gleichung∫sin(x) dx = − cos(x) + c bestätigen.

1 >> syms x2 >> f = sin(x);3 >> int(f)4 ans =5 -cos(x)

Bei parameterabhängigen unbestimmten Inte-gralen der Form

Ft(x) =∫

f (x, t) dx

(t ist der Parameter) empfielt es sich x und t alssymbolische Variablen zu definieren. Als Bei-spiel betrachten wir

∫(x−t)2 dx = 1/3(x−t)3+c

1 >> syms x t2 >> pretty(int((x-t)^2))3

4 35 1/3 (x - t)

Sie können die Symbolic Math Toolbox heran-ziehen, um bestimmte Integrale∫ b

af (x) dx

symbolisch zu lösen. Auch parameterabhängi-ge 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 ausder Symbolic Math Toolbox.

1 >> int(’sin(x)’,0,pi)2 ans =3 2

Aufgabe 168 (Integration) Berechnen Sie dasunbestimmte Integral∫

x sin(x) dx.

Lösung: Mit

185 Copyright c© G. Gramlich

1 >> syms x2 >> int(x*sin(x))3 ans =4 sin(x)-x*cos(x)

sieht man, dass∫x sin(x) dx = sin(x) − x cos(x) + c

ist. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

Aufgabe 169 (Integration) Berechnen Sie dasbestimmte Integral∫ π

0x sin(x) dx

symbolisch.Lösung: Mit

1 >> syms x2 >> int(x*sin(x),0,pi)3 ans =4 pi

folgt also, dass∫ π

0x sin(x) dx = π

ist. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

Aufgabe 170 (Integration) Berechnen Sie dasuneigentliche Integral∫ ∞

1

1x5 dx.

Lösung: Mit

1 >> syms x2 >> int(x^(-5),1,inf)3 ans =4 1/4

folgt also, dass∫ ∞

1

1x5 dx =

14

ist. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

Aufgabe 171 (Integration) Berechnen Sie dasuneigentliche Integral∫ ∞

0sin(2t)e−st dt

symbolisch.Lösung: Mit

1 >> syms t; syms s positive;2 >> int(sin(2*t)*exp(-s*t),t,0,inf)

;3 >> F = simple(ans)4 F =5 2/(s^2+4)

folgt also, dass∫ ∞

0sin(2t)e−st dt =

2s2 + 4

ist. Es handelt sich hier um die Laplace-Transformierte der Funktion f (t) = sin(2t),t ∈ R. Mit der eingebauten Funktion laplacekann man die Laplace-Transformierte auch un-mittelbar berechnen:

1 >> syms t;2 >> laplace(sin(2*t))3 ans =4 2/(s^2+4)

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

Aufgabe 172 (Ableitungen, Integrale) Be-rechnen Sie symbolisch mit den Matlab-Funktionen diff und int die Ableitungenbzw. Integrale folgender Exponentialfunktio-nen:

186 Copyright c© G. Gramlich

(a) ex

(b) 2x

(c) 10x

(d) ax

Lösung: » syms x a

(a)1 >> diff(exp(x))2 ans =3 exp(x)4 >> int(exp(x))5 ans =6 exp(x)

1 >> diff(2^x)2 ans =3 2^x*log(2)4 >> int(2^x)5 ans =6 1/log(2)*2^x

(b)(c)1 >> diff(10^x)2 ans =3 10^x*log(10)4 >> int(10^x)5 ans =6 1/log(10)*10^x

1 >> diff(a^x)2 ans =3 a^x*log(a)4 >> int(a^x)5 ans =6 1/log(a)*a^x

Damit gilt:

(d)

f (x) f ′(x)∫

f (x) dxex ex ex

2x ln(2)2x 2x/ ln(2)10x ln(10)10x 10x/ ln(10)ax ln(a)ax ax/ ln(a)

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

66.13. Polynome

Wir zeigen nun Beispiele für den Umgang mit„symbolischen Polynomen“, siehe Abschnitt52 für Rechnungen mit „numerischen Polyno-men “ .

Die Funktion horner erlaubt die Darstellungeines Polynoms in Horner-Form.

1 >> syms x2 >> p = -3*x^3+3*x^2+10*x+5;3 >> ph = horner(p)4 ph =5 5+(10+(3-3*x)*x)*x

Will man dieses zum Beispiel an der Stelle x =3 auswerten, so geht das wie folgt:

1 >> subs(ph,x,3)2 ans =3 -19

Will man den Grad eines Polynoms bestim-men, so hilft die Maple-Funktion degree.

1 >> maple(’degree’,p)2 ans =3 3

Weitere Matlab bzw. Maple Funktionen zumRechnen mit Polynomen finden Sie in der Ta-belle 37. Hilfe zu den Maple-Funktionen erhal-ten Sie mit mhelp <Funktionsname>.

187 Copyright c© G. Gramlich

Funktion Bedeutungcoeff Koeffizient (Maple)convert Konvertiert (Maple)degree Grad des Polynoms (Maple)factor Linearfaktoren (Maple)horner Horner-Darstellungsolve Nullstellensubs Ersetzen

Tabelle 37: Zum symbolischen Rechnen mitPolynomen

66.14. Taylor-Polynome

Die Funktion taylor erlaubt das symbolischeBerechnen des Taylor-Polynoms einer Funkti-on. Zum Beispiel liefert

1 >> syms x2 >> taylor(sin(x))

das Taylor-Polynom bis zur fünften Ordnung:

1 ans =2 x-1/6*x^3+1/120*x^5

Aufgabe 173 (Taylor-Polynome) BerechnenSie das Taylor-Polynom der Kosinus-Funktion

f (x) = cos(x)

vom Grad vier im Entwicklungspunkt 0.Lösung: Es ist

1 >> syms x2 >> taylor(cos(x),5,x,0)3 ans =4 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.

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

66.15. Die Funktionen funtool undtaylortool

Die Funktionen funtool und taylortoolstellen pädagogische Hilfsmittel zur Verfü-gung. Die Funktion funtool ist eine Art gra-fischer Taschenrechner, der wichtige Operatio-nen und einfache Visualisierungen bei Funk-tionen einer Veränderlichen ermöglicht, sieheAbbildung 68.

Abbildung 68: Das GUI von funtool

Mit Hilfe des Kommandos taylortool kön-nen Sie die grafische Oberfläche des Pro-gramms taylortool starten und damit Tay-lor-Approximationen studieren, siehe Abbil-dung 69.

188 Copyright c© G. Gramlich

Abbildung 69: Das GUI von taylortool

66.16. MehrdimensionaleTaylor-Polynome

Zur Berechnung des Taylor-Polynoms ei-ner reellwertigen Funktion mehrerer Variablenkann man die Funktion mtaylor aus Mapleverwenden.

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. Hierdie Bestätigung in Matlab:

1 >> syms x y2 >> T2 = maple(’mtaylor’,exp(x+y),’

[x,y]’,3)3 T2 =4 1+x+y+1/2*x^2+x*y+1/2*y^2

Aufgabe 174 (Taylor) Berechnen Sie das Tay-lor-Polynom zweiter Ordnung mit dem Ent-wicklungspunkt (−1/2,−1/2) der quadrati-schen Funktion q(x, y) = x2 + y2 + x + y,(x, y) ∈ R2.

Lösung: Die folgenden Matlab-Zeilen be-rechnen die Lösung:

1 >> syms x y2 >> T2 = maple(’mtaylor’,x^2+y^2+x+

y,’[x=-1/2,y=-1/2]’,3)3 T2 =4 -1/2+(x+1/2)^2+(y+1/2)^2

Wir bestätigen das Ergebnis:

1 >> simplify(T2)2 ans =3 x^2+y^2+x+y

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

Aufgabe 175 (Taylor) Approximieren Sie dieFunktion f (x, y) = xey − x3y, (x, y) ∈ R2 inder Nähe des Nullpunktes durch ihr Taylor-Polynom T2 zweiten Grades. Vergleichen Siedann die Funktionswerte von f und T2 an derStelle (0.5, 0.5), indem Sie den relativen Fehler|T2(0.5, 0.5) − f (0.5, 0.5)|/| f (0.5, 0.5)| berech-nen.Lösung: Es ist

1 >> syms x y2 >> f = x*exp(y)-x^3*y;3 >> T2 = maple(’mtaylor’,f,’[x,y]’

,3)4 T2 =5 x+x*y6 >> subs(T2,[x,y],[0.5,0.5]),subs(f

,[x,y],[0.5,0.5])7 ans =8 0.75009 ans =

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

12 ans =

189 Copyright c© G. Gramlich

13 0.0156

Der relative Fehler ist demnach zirka 1.5%. ©©

66.17. Lineare Algebra

Siehe Abschnitt 48

66.18. Differenzengleichungen

Maple kann Differenzengleichungen lösen.Die Funktion rsolve kann lineare Differen-zengleichungen mit konstanten Koeffizienten,Systeme linearer Differenzengleichungen mitkonstanten Koeffizienten und manche nicht-lineare Gleichungen erster Ordnung. Imple-mentiert sind Standardtechniken wie erzeugen-de Funktionen und z-Transformationen, sowieMethoden basierend auf Substitutionen undcharakteristischen Gleichungen.

Die lineare Differenzengleichung erster Ord-nung

yt = −0.9yt−1

hat die Lösung

yt = (−1)t(0.9)ty0.

Hier die Bestätigung in Matlab.

1 >> maple(’rsolve’,’y(t)=-0.9*y(t-1)’,’y(t)’)

2 ans =3 y(0)*(-9/10)^t

Die Komplexität der Gaussschen Eliminationist

1 >> maple(’rsolve’,’{T(n)=T(n-1)2 +n^2’,’T(1)=0}’,’T(n)’)3 ans =4 -3*(n+1)*(1/2*n+1)+n+2*(n+1)*5 (1/2*n+1)*(1/3*n+1)6 >> factor(sym(maple(’rsolve’,’{T(n

)=T(n-1)+n^2’,’T(1)=0}’,’T(n)’)))

7 ans =8 1/6*(n-1)*(2*n^2+5*n+6)

Aufgabe 176 (Differenzengleichungen) Bestä-tigen Sie die Lösung yt = (0.5)t(y0 − 12) + 12der Differenzengleichung

yt = 0.5yt−1 + 6

Lösung: Es ist

1 >> maple(’rsolve’,’y(t)=0.5*y(t-1)+6’,’y(t)’)

2 ans =3 y(0)*(1/2)^t-12*(1/2)^t+12

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

In Abschnitt 71 wird gezeigt, wie man Diffe-renzengleichungen mit Simulink numerisch si-muliert.

66.19. Differenzialgleichungen

Mit Hilfe der Matlab-Funktion dsolve ist esmöglich, allgemeine Lösungen von Differenzi-algleichungen zu berechnen, Anfangswertauf-gaben und Randwertaufgaben zu lösen. Hier-bei kann eine einzelne Differenzialgleichungoder aber auch ein System von Gleichungenvorliegen. Mit der Funktion pdsolve können

190 Copyright c© G. Gramlich

sogar einfache partielle Differenzialgleichun-gen bzw. partielle Differenzialgleichungssyste-me gelöst werden.

Die gewöhnliche Differenzialgleichung y′ =ay hat die allgemeine Lösung y(t) = ceat. InMatlab bestätigt man das wie folgt:

1 >> dsolve(’Dy = a*y’)2 ans =3 exp(a*t)*C1

Aufgabe 177 (Differenzialgleichung) Berech-nen Sie die allgemeine Lösung der gewöhnli-chen Differenzialgleichung

y′(t) = −y(t) − 5e−t sin(5t)

siehe Abschnitt 61.Lösung: Die allgemeine Lösung ist

1 >> y = dsolve(’Dy=-y-5*exp(-t)*sin(5*t)’)

2 y =3 exp(-t)*cos(5*t)+exp(-t)*C1

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

Aufgabe 178 (Anfangswertaufgabe) Berech-nen Sie die Lösung der Anfangswertaufgabe

AWA :

y′(t) = −y(t) − 5e−t sin(5t)y(0) = 1

t ≥ 0

aus Abschnitt 61.Lösung: Die Lösung ist

1 >> y = dsolve(’Dy=-y-5*exp(-t)*sin(5*t)’,’y(0)=1’)

2 y =3 exp(-t)*cos(5*t)

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

Aufgabe 179 (Anfangswertaufgabe) Berech-nen Sie die Lösung der Anfangswertaufgabe

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

1 >> y = dsolve(’D2y+144*y=cos(11*t)’,

2 ’y(0)=0’,’Dy(0)=0’)3 y =4 -1/23*cos(12*t)+1/23*cos(11*t)

Eine Differenzialgleichung dieses Types nenntman die Gleichung des (ungedämpften) har-monischen Oszillators mit äußerer harmoni-scher Anregung, hier cos(11t). Die Lösungy(t) = 1/23 cos(11t) − 1/23 cos(12t) ist ei-ne Überlagerung von zwei Schwingungen mitunterschiedlichen Frequenzen. Man sprichtvon einer Schwebung (amplitudenmodulierteSchwingung), eine Bewegungsform, die für dieAkustik und Funktechnik von großer Bedeu-tung ist. Die Abbildung 70 zeigt die Lösung. ©©

Wir berechnen die Lösung der Randwertaufga-be

RWA :

u′′ = 6xu(0) = 0, u(1) = 1

0 ≤ x ≤ 1.

aus Abschnitt 61.2.

1 >> u = dsolve(’D2u-6*x=0’,2 ’u(0)=0’,’u(1)=1’,’x’)3 u =4 x^3

191 Copyright c© G. Gramlich

0 5 10 15−0.1

−0.05

0

0.05

t

−1/23 cos(12 t)+1/23 cos(11 t)

Abbildung 70: Lösung der AWA

Aufgabe 180 (Randwertaufgabe) BerechnenSie die Lösung der Randwertaufgabe

RWA :

y′′ = −yy(0) = 3, y(π/2) = 7

0 ≤ x ≤ π/2.

aus Abschnitt 61.2.Lösung: Es ist

1 >> y = dsolve(’D2y=-y’,’y(0)=3’,2 ’y(pi/2)=7’,’x’)3 y =4 7*sin(x)+3*cos(x)

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

Mit der Maple-Funktion pdsolve kann maneinfache partielle Differenzialgleichungen lö-sen. Als Beispiel betrachten wir die eindimen-sionale homogene Wellengleichung

utt − c2uxx = 0 (c , 0).

Dies ist eine lineare partielle hyperbolischeDifferenzialgleichung zweiter Ordnung. Umdiese symbolisch zu lösen, definieren wir zu-nächst die symbolischen Variablen x, t, c unddie Funktion u(x, t):

1 >> syms x t c2 >> u = sym(’u(x,t)’);

Danach berechnen wir die Ableitungen zweiterOrdnung

1 >> uxx = diff(u,x,2);2 >> utt = diff(u,t,2);

und schließlich die allgemeine Lösung

1 >> maple(’pdsolve’,utt-c^2*uxx)2 u(x,t) = _F1(t*c+x)+_F2(t*c-x)

Hierbei sind _F1 und _F2 zwei beliebige zwei-mal stetig differenzierbare Funktionen. Wähltman für diese beiden Funktionen die Funktione−z2

, z ∈ R und für den Parameter c den Wert1, so erhält man die Lösungsfunktion u(x, t) =e−(t+x)2

+ e−(t−x)2. Die Abbildung 71 zeigt den

−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 71: Lösung der eindimensionalenWellengleichung

Graph der Lösungsfunktion, der mit

1 >> ezsurf(’exp(-(t+x)^2)+2 exp(-(t-x)^2)’)

192 Copyright c© G. Gramlich

erzeugt wurde. Man erkennt, dass die allgemei-ne Lösung der homogenen Wellengleichungeine Überlagerung zweier gegenläufiger Wel-len darstellt.

Aufgabe 181 (Differenzialgleichung) Berech-nen Sie mit pdsolve eine Lösung der partiel-len Differenzialgleichung

axux + btut = 0.

Lösung: Es ist

1 >> syms x t a b2 u = sym(’u(x,t)’);3 ux = diff(u,x);4 ut = diff(u,t);5 maple(’pdsolve’,a*x*ux+b*t*ut)6 ans =7 u(x,t) = _F1(t/(x^(b/a)))

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

Aufgabe 182 (Differenzialgleichung) ZeigenSie mit der Matlab Symbolic Toolbox, dass diejeweils angegebene Lösung y die vorgegebeneDifferenzialgleichung löst.

(a) y′ + ty = ty(t) = 1 + e−t2/2.

(b) y′ + y2 = 0y(t) = 1/(t − 3).

(c) yy′ + ty = 0y(t) = 10 − t2/2.

Lösung: Es ist

1 >> dsolve(’Dy+t*y=t’)2 ans =3 1+exp(-1/2*t^2)*C1

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

Aufgabe 183 (Differenzialgleichung) Bestäti-gen Sie mit der Symbolic-Toolbox anhand derFunktion

f (x) = x · sin2(x)

die Gültigkeit des Hauptsatzes derDifferenzial- und Integralrechnung. Einekleine Rechnung ist nötig.Lösung: Es ist

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

Aufgabe 184 (Differenzialgleichung) Benut-zen Sie dsolve, um die Lösung der folgendenAnfangswertaufgaben zu finden. Zeichnen Siejede Lösung über dem angegebenen Intervall.

(a) y′ + ty = ty(0) = −1, [−4, 4].

(b) y′ + y2 = 0y(0) = 2, [0, 5].

(c) yy′ + ty = 0y(1) = 4, [−4, 4].

Lösung: Es ist

1 >> dsolve(’Dy+t*y=t’,’y(0)=-1’)2 ans =3 1-2*exp(-1/2*t^2)

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

66.20. Die kontinuierlicheFourier-Transformation

Die kontinuierliche Fourier-Transformation(CFT) untersucht, welche Frequenzen mit wel-chen Amplituden in einem Zeitsignal f (t) ent-halten sind, wenn das Zeitsignal nicht peri-odisch ist. Man nennt dieses Vorgehen –wie bei

193 Copyright c© G. Gramlich

den Fourier-Reihen– die Frequenzanalyse desZeitsignals f (t). Man kann sagt auch, die konti-nuierliche Fourier-Transformation (CFT) zer-legt ein Signal in sinusförmige Wellen unter-schiedlicher Frequenzen.

Die kontinuierliche Fourier-Transformation(CFT) drückt ein Signal f (t) als eine „stetigeLinearkombination“ von Sinus- und Cosinus-funktionen aus

f (ω) =∫R

f (t)e−iωt dt.

Die Abbildung f 7→ f heißt kontinuierlicheFourier-Transformation (CFT). Stellt die un-abhängige Variable t die Zeit dar, so hat dieVariable ω die Bedeutung der Frequenz. Somitist die Frequenz ω eine kontinuierliche Grö-ße, das heißt alle möglichen Frequenzen sinddarstellbar. Die kontinuierliche Fourier-Trans-formation (CFT) bildet die Funktion f vomOriginalbereich (Zeitbereich) in den Bildbe-reich (Frequenzbereich) ab. Die inverse Fou-rier-Transformation (ICFT) transformiert um-gekehrt.

Für den Rechteckimpuls

f (t) =

1, falls |t| < T0, sonst

soll die Fourier-Transformierte f (ω) berech-

net werden. Es ergibt sich

f (ω) =∫ ∞

−∞

f (t)e−iωt dt =∫ T

−Te−iωt dt

=

[e−iωt

−iω

]T

−T=

1−iω

(e−iTω − eiTω)

=2ω

12i

(eiTω − e−iTω

)=

2 sin(ωT )ω

.

Die folgenden Anweisungen bestätigen dieRechnung.

1 >> syms t T2 >> Rechteck = heaviside(t+T)-

heaviside(t-T);3 >> fourier(Rechteck)4 ans =5 2/w*sin(T*w)

Die folgenden Anweisungen geben eine zweiteMöglichkeit, obiges Resultat zu bestätigen. Esist T = 1.

1 >> maple(’T:=1’);2 >> maple(’Rechteck(t/T):=3 Heaviside(t+T)-Heaviside(t-T):’);4 >> maple(’simplify(fourier(

Rechteck5 (t/T),t,w))’)6 ans =7 2/w*sin(w)

Das folgende Beispiel zeigt, dass die Fourier-Transformierte f (·) einer Funktion f (·) im allg-meinen eine komplexwertige Funktion ist.

Für die von den Parametern a > 0 und b > 0abhängige Funktion

f (t) =

ae−bt, falls t > 00, sonst

194 Copyright c© G. Gramlich

soll die Fourier-Transformierte f (ω) berech-net werden. Es ergibt sich

f (ω) =∫ ∞

−∞

f (t)e−iωt dt

=

∫ ∞

0ae−bte−iωt dt = a

∫ ∞

0e−(b+iω) dt

= a[

e−(b+iω)t

−(b + iω)

]t=∞

t=0=

ab + iω

.

Die folgenden Anweisungen bestätigen das Er-gebnis symbolisch in Matlab.

1 >> maple(’assume(a>0,b>0)’);2 >> maple(’fourier(a*exp(-b*t)3 *Heaviside(t),t,w)’)4 ans =5 a/(b+i*w)

Beachten Sie, dass die Konstanten a und b,so wie es die Theorie erfordert, größer alsNull definiert werden müssen, weil sonst ge-gebenenfalls das Integral bzw. die Fourier-Transformation nicht existiert.

Die Fourier-Transformierte von

f (x) = e−x2

istf (ξ) =

√πe−ξ

2/4.

Wir bestätigen dies symbolisch mit derfourier Funktion

1 >> syms x2 >> f = exp(-x^2);3 >> fhat = fourier(f)4 fhat =5 pi^(1/2)*exp(-1/4*w^2).

Aufgabe 185 (Fourier-T.) Berechnen Sie zu-nächst per Hand und dann mit Matlab die Fou-rier-Transformierte von

f (x) = e−|x|.

Lösung: Die Fourier-Transformierte von

f (x) = e−|x|

istf (ξ) =

21 + ξ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

1 >> syms x2 >> f = exp(-abs(x));3 >> fhat = fourier(f)4 fhat =5 2/(1+w^2)

Beachten Sie, dass die unabhängige Variableder Fourier-Transformierten w ist. Die Abbil-dung 72 zeigt die Funktion f und ihre Fouri-er-Transformierte f . © . . . . . . . . . . . . . . . . . . . .©

195 Copyright c© G. Gramlich

−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 72: Zur kontinuierlichen Fourier-Transformation

Die diskrete Fourier-Transformierte haben wirin Abschnitt 59 besprochen.

66.21. Laplace-Transformation

Die Laplace-Transformation kann symbolischmit der Funktion laplace berechnet werden.Siehe Aufgabe 171 für ein Beispiel.

Aufgabe 186 (Laplace-T.) Berechnen Sie dieLaplace-Transformation von der Funktionf (t) = e−at, t ∈ R, wobei a ein reeller Para-meter ist.Lösung: Es ist

1 >> syms a t2 laplace(exp(-a*t))3 ans =4 1/(a+s)

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

66.22. Spezielle mathematischeFunktionen

Über 50 spezielle mathematische Funktionenstehen mit der Symbolic Math Toolbox zur Ver-fügung. Diese Funktionen werden mit mfunangesprochen und werten die entsprechende

Funktion an der gewünschten Stelle nume-risch aus. Dies stellt somit auch eine Erwei-terung zum Standard-Matlab dar, denn die-se klassischen Funktionen stehen dort nichtzur Verfügung. Siehe doc mfunlist (helpmfunlist).

66.23. Variable Rechengenauigkeit

Zusätzlich zu Matlab’s doppelt genauer Gleit-punktarithmetik und der symbolischen Re-chenmöglichkeit wird durch die SymbolicToolbox eine variable Rechengenauigkeitsa-rithmetik unterstützt, die durch den Maple-Kern durchgeführt wird. Diese Art von Arith-metik zu verwenden, ist dann sinnvoll, wenneine genaue Lösung verlangt wird, aber eineexakte unmöglich oder aber zu zeitaufwendigzu 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 Rechen-genauigkeitsarithmetik basiert auf dem vpa-Kommando. Der einfachste Gebrauch bestehtzum Beispiel darin, die Kreiszahl π auf 32 Stel-len zu berechnen:

1 >> digits2

3 Digits = 324

5 >> vpa(pi)6 ans =7 3.1415926535897932384626433832795

196 Copyright c© G. Gramlich

Wie der Aufruf vpa(pi,40) zeigt, können Siemit dem zweiten Argument von vpa die zurZeit aktuelle Anzahl von gültigen Dezimalenüberschreiben.

Das nächste Beispiel berechnet die EulerscheZahl e auf 50 Nachkommastellen genau, gibtsie aus und überprüft, ob der Logarithmus da-von wieder 1 ergibt:

1 >> digits(50);2 >> x = vpa(sym(’exp(1)’))3 x =4 2.718281828459045235360287471352665 249775724709370006 >> vpa(log(x))7 ans =8 1.000000000000000000000000000000009 00000000000000000

Vorsicht Falle:

1 >> x = vpa(sym(exp(1)))2 x =3 2.718281828459045534884808148490264 501178741455078135 >> vpa(log(x))6 ans =7 1.000000000000000110188913283849498 58218182413442295

Wir haben auf die Hochkomma in exp(1) ver-zichtet. Das Resultat ist, dass Matlab exp(1)mit doppelter Genauigkeit berechnet, diese 16-stellige Dezimalzahl in eine 50-stellige De-zimalzahl transformiert (34 Stellen sind so-mit bedeutungslos) und dann den Logarithmusanwendet, was zu einem ungenauen Ergebnisführt. Erst die Hochkomma sorgen dafür, dassder Matlab-Interpreter übergangen wird, da-

mit Maple den Ausdruck auswerten kann.

Aufgabe 187 (Symbolisches Rechnen) Be-rechnen Sie π auf 50 Stellen genau!Lösung: Sowohl

1 >> digits(50)2 >> vpa(pi)

als auch

1 >> vpa pi 50

liefern

1 ans =2 3.141592653589793238462643383273 95028841971693993751

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

Aufgabe 188 (Geschwindigkeit) Sowohl

∞∑n=0

1n!= lim

n→∞

n∑k=0

1k!

als auch

limn→∞

(1 +1n

)n

ergeben die Eulersche Zahl e = 2.71 . . ..

(a) Verifizieren Sie die beiden Aussagen.

(b) Berechnen Sie die Eulersche Zahl aufzehn Dezimalen.

(c) Vergleichen Sie nun die Konvergenzge-schwindigkeiten der beiden Folgen, diefür n = 0, 1, 2, . . . durch sn =

∑nk=0 1/k!

und an = (1 + 1/n)n gegeben sind, indemSie die folgende Tabelle vervollständigen.

197 Copyright c© G. Gramlich

n sn an

2 2.5000000000 2.25000000004 2.7083333333 2.441406250068

101214161820

Lösung:

(a) Hier die Verifikation. Zum Einen ist

1 >> symsum(1/sym(’n!’),0,inf)2 ans =3 exp(1)

und zum Anderen gilt

1 >> limit((1+1/n)^n,inf)2 ans =3 exp(1)

(b) Die Eulersche Zahl auf zehn Nachkom-mastellen ist

1 >> digits(11)2 >> e = vpa(exp(1))3 e =4 2.7182818285

(c) Mit den Zeilen

1 >> n = 2:2:20;2 >> an = (1+1./n).^n;3 >> for i=1:104 >> sn(i,1) = symsum(1/sym(’k!’

),0,n(i));5 >> end

erhält man den gewünschten Vergleich.

1 >> digits(11)2 >> [vpa(sn) vpa(an’)]3 ans =4 [ 2.5000000000, 2.2500000000]5 [ 2.7083333333, 2.4414062500]6 [ 2.7180555556, 2.5216263717]7 [ 2.7182787698, 2.5657845140]8 [ 2.7182818011, 2.5937424601]9 [ 2.7182818283, 2.6130352902]

10 [ 2.7182818285, 2.6271515563]11 [ 2.7182818285, 2.6379284974]12 [ 2.7182818285, 2.6464258211]13 [ 2.7182818285, 2.6532977051]

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

66.24. Überblick über alle symbolischenFunktionen

Mit doc symbolic (help symbolic) erhal-ten Sie einen Überblick über alle Funktionender Symbolic Math Toolbox.

66.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 eingebaute Mat-lab-Funktionen und Kommmandos, diedie entsprechenden Maple-Befehle aufru-fen. Eine Liste dieser Funktionen erhal-ten Sie mit help symbolic. Darüber hin-aus besteht die Möglichkeit, andere Maple-Kommandos anzusprechen, die zur Stan-dardbibliothek von Maple gehören. Hierzuverwendet man die maple-Funktion.

198 Copyright c© G. Gramlich

• 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- und Aus-gabe Möglichkeiten als auch Funktionenund Kommandos spezieller Maple-Paketezu nutzen.

Mit dem Aufruf

1 >> 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 hilft derAufruf mhelp combinat weiter. Dieser lis-tet dann alle relevanten Funktionen auf. Mitmaple(’with(combinat)’) laden Sie dasPaket und mit mhelp binomial erhalten Siezum Beispiel weitere Informationen über dieFunktion binomial, etwa wie man sie aufzu-rufen hat.

Das Paket LinearAlgebra enthält die Funkti-on Basis. Mit mhelp Basis erhalten Sie dieMeldung

1 Multiple matches found:2 SolveTools,Basis3 Modular,Basis4 LinearAlgebra,Basis

Dann hilft mhelp(’LinearAlgebra,Basis’)oder mhelp LinearAlgebra[Basis] weiter.

Eine Online-Einführung in die Symbolic MathToolbox erhalten Sie mit dem Befehl demos.Geben Sie hierzu demos nach dem Matlab-Prompt ein. Es wird dann das Matlab-Demo-Fenster geöffnet.

67. Nichtlineare Gleichungen (2)

Mit der Funktion fsolve, die zur Optimizati-on Toolbox gehört, kann man nichtlineare Glei-chungssysteme lösen.

Wir wollen eine Nullstelle des nichtlinearenGleichungssystems

16x4 + 16y4 + z4 − 16 = 0

x2 + y2 + z2 − 3 = 0

x3 − y = 0

mit drei Gleichungen und drei Variablen fin-den. Hierzu starten wir den iterativen Algorith-mus mit x0 = (1, 1, 1) und definieren die vek-torwertige Funktion F : R3 → R3, F(x, y, z) =(16x4+16y4+ z4−16, x2+y2+ z2−3, x3−y) indem Function-File MyFunction.m wie folgt:

1 function F = MyFunction(x)2 F = [16*x(1)^4+16*x(2)^4+x(3)

^4-16;3 x(1)^2+x(2)^2+x(3)^3-3;4 x(1)^3-x(2)];

Dann rufen wir den Löser fsolve auf und er-halten eine Nullstelle des Systems:

1 >> [x,fval] = fsolve(@MyFunction,x0)

2 Optimization terminated: ...3 x =4 0.88965 0.70406 1.19657 fval =8 1.0e-012 *9 0.1243

10 0.002211 0.0022

199 Copyright c© G. Gramlich

68. Optimierung (Teil 2)

Mit der Optimization Toolbox kann man Opti-mierungsaufgaben lösen, insbesondere solche,wo Nebenbedingungen (Restriktionen) auftre-ten. Diese sind in der Praxis auch meist vor-handen. Sie treten linear als auch nichtline-ar auf. Für folgende Optimierungsmodelle ste-hen Matlab-Funktionen zur Verfügung: Linea-re Optimierung, Quadratische Optimierung,Minmax Optimierung, Mehrzielige Optimie-rung, Semiinfinite Optimierung und Nichtli-neare Optimierung. Siehe doc optim (helpoptim) für eine komplette Übersicht über al-le in Matlab lösbaren Optimierungsmodelle.

Zu beachten ist, dass jedes Optimierungs-problem als Minimierungsproblem formuliertwerden muss.

68.1. Lineare Optimierung

An einem einfachen Beispiel zur Linearen Op-timierung zeigen wir, wie man unter Matlabsolche Probleme löst. Als Beispiel betrachtenwir die Optimierungsaufgabe (u.d.N. steht als

Abkürzung für unter den Nebenbedingungen)

Minimiere(x1, x2) ∈ R2 −2x1 − 3x2

u.d.N.x1 + 2x2 ≤ 10x1 + x2 ≤ 6

x1 ≥ 0, x2 ≥ 0

Mit den Anweisungen

1 c = [-2;-3]; A = [1 2; 1 1];2 b = [10;6]; u = [0;0];

und dem Funktionsaufruf

1 [x,fWert] = linprog(c,A,b,[],[],u)

erhalten wir die Ausgabe

1 Optimization terminated success...2 x =3 2.00004 4.00005 fWert =6 -16.0000

Das bedeutet, dass x∗ = (x∗1, x∗2) = (2, 4) die

Minimalstelle des linearen Optimierungspro-blems ist, und −(2)(2)− (3)(4) = −16 der Ziel-funktionswert, das heißt das Minimum ist.

Das erste Argument c der Funktion linprogbeinhaltet die Koeffizienten der Zielfunktion.Die Matrix A beinhaltet die Koeffizienten derlinearen Ungleichungen, wobei die Koeffizien-ten der rechten Seiten der Ungleichungen imVektor b stehen. Schließlich werden die unte-ren Grenzen der Variablen im Vektor u gespei-chert und als sechstes Argument in linprogübergeben. Das vierte und fünfte Argument derFunktion linprog ist für eventuell vorkom-mende lineare Gleichungen vorgesehen.

200 Copyright c© G. Gramlich

Allgemein gilt: Mit der Funktion linprogkö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. Falls derAufruf

1 [x,fWert] = linprog(c,A,b,B,d,l,u)

erfolgreich war, findet man in der Varia-blen x den berechneten Lösungsvektor und inder Variablen fWert den zugehörigen Wertder Zielfunktion cT x =: f (x). Wie bei al-len anderen Matlab-Funktionen entsprechen-den Typs können Argumente weggelassen wer-den, wenn nicht alle Formen der Nebenbe-dingungen auftreten. Damit aber die Reihen-folge erhalten bleibt, müssen gegebenenfallseckige Klammern [] hierfür geschrieben wer-den. Ferner können Optionen gesetzt wer-den und weitere Ausgabeargumente angege-ben werden. Für weitere Hinweise verweisenwir auf die Online-Hilfe, siehe doc linprog(help linprog).

Aufgabe 189 (Lineare Optimierung) Die linea-re Optimierungsaufgabe

Minimierex ∈ R2 −x1 − x2

u.d.N.

x1 + 3x2 ≤ 133x1 + x2 ≤ 15−x1 + x2 ≤ 3

x1 ≥ 0, x2 ≥ 0

hat die Minimalstelle x∗ = (4, 3) mit demMinimum −7, wie die Abbildung 73 grafisch

0 2 4 6 80

2

4

6

8Lineare Optimierungsaufgabe

Zulässige Menge

−7

−7

−7

−7

Abbildung 73: Lineare Optimierung

zeigt. Bestätigen Sie die Lösung in Matlabmitder Funktion linprog.Lösung: Die Lösung erhält man in Matlabwie folgt:

1 c = [-1 -1];2 A = [1 3; 3 1; -1 1];3 b = [13; 15; 3];4 lb = [0; 0];5 [x,fx] = linprog(c,A,b,[],[],lb)6 Optimization terminated.7 x =8 4.00009 3.0000

10 fx =11 -7.0000

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

68.2. Quadratische Optimierung

Die Quadratische Optimierung gehört bereitsin die Klasse der Nichtlinearen Optimierungs-aufgaben, stellt aber bereits einen wichtigen

201 Copyright c© G. Gramlich

Spezialfall dieser Problemklasse dar, sowohlaus theoretischen als auch aus algorithmischnumerischen Gründen. Quadratische Program-me treten im Bereich der Regelungstechnikhäufig bei der Online-Optimierung von Stell-größen linearer Systeme mit quadratischen Gü-tefunktionalen und linearen Nebenbedingun-gen auf. Lineare Regressionsprobleme sindwiederum wichtige Spezialfälle QuadratischerOptimierungsaufgaben.

Eine Quadratische Optimierungsaufgabe liegtvor, wenn die Zielfunktion quadratisch und dieNebenbedingungen wie bei der Linearen Opti-mierung linear sind. Die allgemeine Problem-stellung ist:

Minimierex ∈ Rn

12 xTHx + cT x

u.d.N.Ax ≤ bBx = d

l ≤ x ≤ u

Die Matrix H in der Zielfunktion ist aus Rn×n

und symmetrisch. Ansonsten gilt analoges wiebei Linearen Optimierungsaufgaben. Falls derAufruf

1 [x,qWert] = quadprog(c,A,b,B,d,l,u)

erfolgreich war, findet man in der Variablenx den berechneten Lösungsvektor und in derVariablen qWert den zugehörigen Wert derZielfunktion 1/2xTHx + cT x =: q(x). Wiebei allen anderen Matlab-Funktionen entspre-chenden Typs können Argumente weggelas-sen werden, wenn nicht alle Formen der Ne-benbedingungen auftreten. Damit aber die Rei-henfolge erhalten bleibt, müssen gegebenen-falls eckige Klammern [] hierfür geschrieben

werden. Ferner können Optionen gesetzt wer-den und weitere Ausgabeargumente angege-ben werden. Für weitere Hinweise verweisenwir auf die Online-Hilfe, siehe doc quadprod(help quadprog).

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 Zielfunktion q(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

1 H = [-4 -8; -8 -8]; c = [-4;-5];2 A = [1 1; 1.25 0.75; 0 1];3 b = [200;200;150];4 l = [0;0];

und dem Aufruf

1 [x,qWert]=quadprog(H,c,A,b,[],[],l)

erhält man die Ausgabe

1 Warning: Large-scale method does2 not currently solve this problem

202 Copyright c© G. Gramlich

3 formulation,4 switching to medium-scale method.5 > In quadprog at 2366 Optimization terminated.7 x =8 50.00009 150.0000

10 qWert =11 -155950

Aufgabe 190 (Quadratische Optimierung) Lö-sen Sie das Problem

Maximierex ∈ R2 x1x2

u.d.N.x1 + x2 = 20

x1 ≥ 0, x2 ≥ 0

Dieses quadratische Optimierungsproblementsteht durch die Aufgabe, das Rechteckmit dem Umfang 40 zu bestimmen, das dengrößten Flächeninhalt hat.Lösung: Die Lösung erhält man in Matlabwie folgt:

1 >> H = -[0 1; 1 0];2 >> Aeq = [1 1];3 >> beq = [20];4 >> [x,fx] = quadprog(H,[],[],[],

Aeq,beq)5 x =6 10.00007 10.00008 fx =9 -100.0000

Das Rechteck mit dem größten Flächeninhaltist also das Quadrat mit der Seitenlänge 10. ©©

68.3. Lineare Ausgleichsaufgaben mitlinearen Nebenbedingungen

Mit der Funktion lsqlin kann man lineareAusgleichsaufgaben mit linearen Gleichungs-und Ungleichungsnebenbedingungen lösen.Die Zeilen

1 A = eye(3); b = zeros(3,1);2 C = [1 2 4]; d = [7];3 [x,q] = lsqlin(A,b,[],[],C,d)

berechnen die Lösung

1 x =2 0.33333 0.66674 1.33335 q =6 2.3333

des mathematischen Modells

Minimierex ∈ R3 q(x) = x2

1 + x22 + x2

3

u. d. N. x1 + 2x2 + 4x3 = 7

x = [0.3333 0.6667 1.3333] ist derPunkt mit dem kleinsten Abstand zum Koor-dinatenursprung, der auf der Ebene liegt, diedurch die Nebenbedingung spezifiziert ist.

68.4. Nichtlineare Optimierung

Mit der Funktion fmincon aus der Optimiza-tion Toolbox kann man nichtlineare Optimie-rungsaufgaben mit (nichtlinearen) Gleichungs-und Ungleichungsnebenbedingungen lösen.Die Funktion fmincon ist eine Implementie-rung des SQP-Verfahrens mit BFGS-Update

203 Copyright c© G. Gramlich

(Quasi-Newton Methode). Gegeben sind Funk-tionen f , g und h, Matrizen A und B, sowie dieVektoren b, d, l und u. Gesucht ist ein Vektorx, der die folgende Aufgabe löst:

Minimierex ∈ Rn f (x)

u.d.N.

g(x) ≤ 0h(x) = 0Ax ≤ bBx = d

l ≤ x ≤ u

Falls der Aufruf

1 [x,fWert] = fmincon(@Zielf,x0,A,b,B,d,l,u,@Nebenb,Options)

erfolgreich war, finden Sie in der Variablen xden Lösungsvektor x∗ und in fWert den da-zugehörigen Wert der Zielfunktion f (x∗). DieArgumente Zielf und Nebenb im Funktions-aufruf sind Matlab-Funktionsnamen in denendie Zielfunktion f bzw. die Nebenbedingungenð und h definiert sind. Wie bei entsprechen-den anderen Matlab-Funktionen können Ar-gumente weggelassen werden, wenn nicht alleFormen der Nebenbedingungen auftreten. Umaber die Reihenfolge zu gewährleisten, müssengegebenenfalls leere Klammern [] eingefügtwerden. Auch können Optionen gesetzt wer-den und weitere Ausgabeargumente angegebenwerden. Für weitere Hinweise verweisen wirwieder auf die Online-Hilfen.

Als Beispiel betrachten wir die Aufgabe

Minimierex ∈ R2 ex1(4x2

1 + 2x22 + 4x1x2 + 2x2 + 1)

u.d.N.x1x2 − x1 − x2 ≤ −1.5

x1x2 ≥ −10.

Es handelt sich um eine nichtlineare Optimie-rungsaufgabe, in der sowohl die Zielfunkti-on als auch die Nebenbedingungen nichtline-ar sind. Lineare Nebenbedingungen und Box-beschränkungen treten keine auf. Auch gibt eskeine Gleichungsrestriktionen. Die Zielfunkti-on f ist durch

f (x1, x2) = ex1(4x21 + 2x2

2 + 4x1x2 + 2x2 + 1)

und die Nebenbedingung durch

g(x1, x2) =[

x1x2 − x1 − x2 + 1.5−x1x2 − 10

]gegeben. Die Zielfunktion spezifizieren wir imFunction-File Zielf.m.

1 function f = Zielf(x)2 %-Zielfunktion.3 f = exp(x(1))*(4*x(1)^2+2*x(2)

^2+4*x(1)*x(2)+2*x(2)+1);

und die Nebenbedingungsfunktionen im FileNebenb.m

1 function [g,h] = Nebenb(x)2 %-Ungleichungen.3 g = [x(1)*x(2)-x(1)-x(2)+1.5; -x

(1)*x(2)-10];4 %-Gleichungen.5 h = [];

Bevor wir die Funktion fmincon aufrufen, de-finieren wir den Startvektor x0 und setzen dieOption (’LargeScale’,’off’).

1 >> x0 = [-1,1];2 >> options = optimset(’LargeScale’

,’off’);3 >> [x,fWert] = fmincon(@Zielf,x0

,[],[],[],[],[],[],@Nebenb,options)

204 Copyright c© G. Gramlich

Die Ausgabe des Aufrufs ergibt

1 Optimization terminatedsuccessfully:

2 Search direction less than 2*options.TolX and

3 maximum constraint violation isless than options.TolCon

4 Active Constraints:5 16 27 x =8 -9.5474 1.04749 fWert =

10 0.0236

Wir überprüfen, ob die beiden Nebenbedin-gungen auch erfüllt sind

1 >> g = Nebenb(x)2 g =3 1.0e-015 *4 -0.88825 0

und stellen fest, dass diese sogar aktiv sind,was uns obige Matlab-Ausgabe auch schonmitgeteilt hat.

Bisher haben wir weder Ableitungen der Ziel-funktion noch Nebenbedingungen mitberück-sichtigt bzw. als Argumente im Funktionsauf-ruf übergeben. Die Funktion fmincon berech-net in diesem Fall die Ableitungen numerischüber finite Differenzen. Alternativ dazu kön-nen die Ableitungen analytisch berechnet unddann übergeben werden. Typischerweise kannin solch einem Fall das Problem genauer undeffizienter gelöst werden. Dazu erweitern wirden File Zielf.m wie folgt:

1 function [f,df] = Zielf(x)2 %-Zielfunktion.

3 f = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);

4 %-Gradient der Zielfunktion.5 df = [f+exp(x(1))*(8*x(1)+4*x(2));

...6 exp(x(1))*(4*x(1)+4*x(2)+2)

];

Wir stellen auch die Ableitungen der Unglei-chungssnebenbedingungen zur Verfügung.

1 function [g,h,dg,dh] = Nebenb(x)2 %-Ungleichungen.3 g = [x(1)*x(2)-x(1)-x(2)+1.5; -x

(1)*x(2)-10];4 %-Ableitungen der Ungleichungen.5 dg = [x(2)-1, -x(2); x(1)-1, -x(1)

];6 %-Gleichungen.7 h = [];8 dh = [];

Über das Options-Argument wird der Funktionfmincon mitgeteilt, dass die Ableitungen ana-lytisch zur Verfügung stehen.

1 >> options = optimset(options,’GradObj’,’on’,’GradConstr’,’on’);

2 >> [x,fWert] = fmincon(@Zielf,x0,[],[],[],[],[],[],@Nebenb,options)

3 Optimization terminatedsuccessfully:

4 Search direction less than 2*options.TolX and

5 maximum constraint violation isless than options.TolCon

6 Active Constraints:7 18 29 x =

10 -9.5474 1.0474

205 Copyright c© G. Gramlich

11 fWert =12 0.0236

Die Ausgabe ist die Gleiche wie oben oh-ne Ableitungsinformationen, aber die Anzahlder Funktionsauswertungen hat sich von 36auf 18 reduziert, was man erkennt, wenn mandas Options-Argument Display auf iter ein-stellt.

Aufgabe 191 (Nichtlineare Optimierung) Lö-sen Sie die Aufgabe

Minimierex ∈ R2 (x1 − 2)2 + (x2 − 1)2

u.d.N.x2

1 − x2 ≤ 0x1 + x2 ≤ 2.

Lösung: Die Minimalstelle ist x∗ = (1, 1) unddas Minimum ist f (x∗) = 1. Dies zeigen diefolgenden Zeilen.

1 >> f = @(x) (x(1)-2).^2+(x(2)-1).^2;

2 >> [x,fx] = fmincon(f,[2,2],[],[],[],[],[],[],@Nebenb)

3 Warning: Large-scale (trust region) method does not currentlysolve this type of problem,

4 switching to medium-scale (linesearch).

5 > In fmincon at 2716 Optimization terminated: first-

order optimality measure less7 than options.TolFun and maximum

constraint violation is less8 than options.TolCon.9 Active inequalities (to within

options.TolCon = 1e-006):10 lower upper ineqlin

ineqnonlin

11 112 213 x =14 1.0000 1.000015 fx =16 1.0000

Die Nebenbedingungen sind wie folgt defi-niert:

1 function [g,h] = Nebenb(x)2 %-Ungleichungen.3 g = [x(1)*x(1)-x(2); x(1)+x(2)-2];4 %-Gleichungen.5 h = [];

Aufgabe 192 (Nichtlineare Optimierung) Lö-sen Sie das Optimierungsmodell

Minimiere(x, y) ∈ R2 y

u. d. N. PA + PB = 8

mit PA =√

(x − 0)2 + (y − 5)2 und PB =√(x − 3)2 + (y − 2)2.

Lösung: Die Function

1 function NLinOpt2 x0 = [-1,1];3 options = optimset(’LargeScale’,’

off’);4 [x,fWert] = fmincon(@Zielf,x0

,[],[],[],[],[],[],@Nebenb,options)

5 %-Zielfunktion.6 function f = Zielf(x)7 f = x(2);8 %-Nebenbedingungen9 function [g,h] = Nebenb(x)

10 %-Ungleichungen.11 g = [];12 %-Gleichungen.

206 Copyright c© G. Gramlich

13 h = sqrt((x(1)-0).^2+(x(2)-5).^2)+sqrt((x(1)-3).^2+(x(2)-2).^2)-8;

berechnen die Lösung

1 x =2 2.1068 -0.20813 fWert =4 -0.2081

des mathematischen Modells.

Aufgabe 193 (fmincon) Finden Sie die Lö-sung des nichtlinearen Optimierungsmodells

Minimiere(x0, . . . , y4)

z1 + z2 + z3 + z4

u.d.N.

(x1 − 1)2 + (y1 − 4)2 ≤ 2(x2 − 9)2 + (y2 − 5)2 ≤ 1

2 ≤ x3 ≤ 4−3 ≤ y3 ≤ −1

6 ≤ x4 ≤ 8−2 ≤ y4 ≤ 2

mit zi =√

(x0 − xi)2 + (y0 − yi)2.Lösung: Mit

1 function NLinOpt2 clear all; close all, clc;3 x0 = ones(10,1);4 options = optimset(’LargeScale’,’

off’);5 lb = [-inf,-inf,2,6,-inf,-inf

,-3,-2,-inf,-inf];6 ub = [inf,inf,4,8,inf,inf,-1,2,inf

,inf];7 [x,fWert] = fmincon(@Zielf,x0

,[],[],[],[],lb,ub,@Nebenb,options)

8 %-Zielfunktion.9 function f = Zielf(x)

10 f = sqrt((x(1)-x(9))^2+(x(5)-x(10))^2)+...

11 sqrt((x(2)-x(9))^2+(x(6)-x(10))^2)+...

12 sqrt((x(3)-x(9))^2+(x(7)-x(10))^2)+...

13 sqrt((x(4)-x(9))^2+(x(8)-x(10))^2);

14 %-Nebenbedingungen15 function [g,h] = Nebenb(x)16 %-Ungleichungen.17 g = [(x(1)-1)^2+(x(5)-4)^2-4;(x(2)

-9)^2+(x(6)-5)^2-1];18 %-Gleichungen.19 h = [];

erhalten wir die Lösung

1 ...2 x =3 2.85694 8.29305 4.00006 6.00007 3.25718 4.29289 -1.0000

10 2.000011 6.000012 2.000013 fWert =14 10.2334

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

Aufgabe 194 (fmincon) Finden Sie die Lö-sung des nichtlinearen Optimierungsmodells

Minimiere(x1, x2) ∈ R2 x1 + x2

u.d.N.(x1 − 1)2 + x2

2 ≤ 2(x1 + 1)2 + x2

2 ≥ 2

Lösung: Mit

207 Copyright c© G. Gramlich

1 function NLinOpt2 clear all; close all, clc;3 x0 = [12,-11];4 options = optimset(’LargeScale’,’

off’,’Display’,’iter’);5 [x,fWert] = fmincon(@Zielf,x0

,[],[],[],[],[],[],@Nebenb,options)

6 %-Zielfunktion.7 function f = Zielf(x)8 f = x(1)+x(2);9 %-Nebenbedingungen

10 function [g,h] = Nebenb(x)11 %-Ungleichungen.12 g = [(x(1)-1)^2+x(2)^2-2; -(x(1)

+1)^2-x(2)^2+2];13 %-Gleichungen.14 h = [];

erhalten wir die Lösung

1 ...2 x =3 0.0000 -1.00004 fWert =5 -1.0000

Beachten Sie, dass der Startpunkt x0 =

(12,−11) „weit weg“ von der Lösung x∗ =(0, 1) liegt. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

Aufgabe 195 (fmincon) Das folgende nichtli-neare Optimierungsmodell

Minimiere(x1, x2) ∈ R2 x1

u.d.N.(x1 + 1)2 + x2

2 ≥ 1x2

1 + x22 ≤ 2

hat zwei lokale Minimalstellen, nämlich x∗1 =(−1, 1) und x∗2 = (−1,−1). Berechnen Sie mit

der Function fmincon beide Minima.Lösung: Mit

1 function NLinOpt2 clear all; close all, clc;3 x0 = [-3,-2];4 options = optimset(’LargeScale’,’

off’,’Display’,’iter’);5 [x,fWert] = fmincon(@Zielf,x0

,[],[],[],[],[],[],@Nebenb,options)

6 %-Zielfunktion.7 function f = Zielf(x)8 f = x(1);9 %-Nebenbedingungen

10 function [g,h] = Nebenb(x)11 %-Ungleichungen.12 g = [-(x(1)+1)^2-x(2)^2+1;x(1)^2+x

(2)^2-2];13 %-Gleichungen.14 h = [];

erhalten wir die Lösung

1 ...2 x =3 -1.0000 -1.00004 fWert =5 -1

Die Lösung x∗1 = (−1, 1) erhält man, wennman den Startpunkt x0 „in der Nähe“ von x∗1 =(−1, 1) wählt. © . . . . . . . . . . . . . . . . . . . . . . . . . . ©

68.5. Überblick über alle Funktionen zurOptimierung

Mit doc optim (help optim) erhalten Sieeinen Überblick über alle Funktionen der Op-timization Toolbox.

208 Copyright c© G. Gramlich

69. Lineare Ausgleichsaufgaben

Lineare Ausgleichsaufgaben können mit Mat-lab auf mehrere Arten gelöst werden. ZumEinem ist da der \-Operator (Backslash-Operator), siehe Abschnitt 48.4 und Abschnitt49.1.2.

Lineare Ausgleichsprobleme mit polynomia-ler Modellfunktion können alternativ mit derFunktion polyfit und interaktiv aus jeder Fi-gure unter Tools Basic Fitting gelöst werden.Siehe auch Abschnitt 54.

Lineare Ausgleichsaufgaben mit linearen Ne-benbedingungen werden in Abschnitt 68.3 be-handelt.

Nichtlineare Ausgleichsaufgaben werden inAbschnitt 70 besprochen.

69.1. Weitere Aufgaben zur linearenAusgleichsrechnung

Aufgabe 196 Berechnen Sie die Näherungslö-sung (im Sinne der linearen Ausgleichsrech-nung) von Ax = b und den orthogonalen Pro-jektionsvektor p von b auf den Spaltenraumvon A des Systems 1 1

−1 1−1 2

[

x1x2

]=

70−7

.A x b

Lösung: Die nachfolgende Zeilen geben dieLösungen.

1 >> A = [1 1; -1 1; -1 2];2 >> b = [7; 0 ; -7];

3 >> x = A\b4 x =5 5.00006 0.50007 >> p = A*x8 p =9 5.5000

10 -4.500011 -4.0000

Aufgabe 197 Die Datenpunkte

ti 0 0.2 0.4 0.6 0.8 1.0bi 3.825 4.528 4.746 4.873 4.865 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, nachdemSie die Lösung berechnet haben.Lösung:

1 t = [0 0.2 0.4 0.6 0.8 1]’;2 b = [3.825 4.528 4.746 4.873 4.865

4.813]’;3 A = [ones(length(t),1),t,cos(t)];4 x = A\b5 x =6 -1.04287 3.15168 4.92659 plot(t,b,’o’,’MarkerSize’,10)

10 tt = linspace(min(t),max(t));11 f = x(1)+x(2)*tt+x(3)*cos(tt);12 hold on13 plot(tt,f)

Die Abbildung 74 zeigt die grafische Darstel-lung.

209 Copyright c© G. Gramlich

0 0.2 0.4 0.6 0.8 13.8

4

4.2

4.4

4.6

4.8

5

Abbildung 74: Graph von φ(t) = −1.0428 +3.1516t + 4.9265 cos(t)

Lineare Ausgleichsprobleme mit polynomia-ler Modellfunktion können alternativ mit derFunktion polyfit und interaktiv aus jeder Fi-gure unter Tools Basic Fitting gelöst werden.

Aufgabe 198 (Basislösung und Lösung kleins-ter Länge) Zeigen Sie, dass die Ersatzaufga-be des überbestimmten linearen Gleichungs-systems

4x1 − 8x2 = 12

3x1 − 6x2 = 9

−2x1 + 4x2 = − 6.

unendlich viele Lösungen hat und berechnenSie die Lösung kleinster Länge sowie eine Ba-sislösung (vgl. Aufgabe 1.9 in [4]).Lösung: Zunächst ist

1 >> rank(A)2 ans =3 1

und damit gibt es unendlich viele Lösungen.Die Lösung kleinster Länge ist

1 >> x = pinv(A)*b2 x =3 0.60004 -1.2000

und eine Basislösung ist

1 >> x = A\b2 x =3 04 -1.5000

Eine Parametriesierung der allgemeinen Lö-sung von AT A = ATb ist x = (x1, x2) =(2t + 3, t), t ∈ R. Für t = −1.2 erhält man dieLösung kleinster Länge und für t = −1.5 eineBasislösung. Auch (3, 0) ist eine Basislösung.

Aufgabe 199 Berechnen Sie mit den Matlab-Funktionen pinv, inv und dem \-Operator dieAusgleichslösung x für das folgende überbe-stimmte Gleichungssystem:

x1 + x2 = 3

2x1 − 3x2 = 1

0x1 + 0x2 = 2

Lösung: Da die Matrix A vollen Rang hat, er-gibt sich in allen drei Fällen die eindeutige Lö-sung x = (2, 1).

Aufgabe 200 (Rangdefekt) Bestimmen Sie alleLösungen von Ax � b mit

A =

1 22 4−1 −2

und b =

321

.Lösung: Da A rangdefekt ist, gibt es unend-lich viele Lösungen. Die Lösung mit kleinster

210 Copyright c© G. Gramlich

Länge erhält man durch pinv(A)*b. Das Er-gebnis ist:

1 » pinv(A)*b ans =2 2.0000e-0013 4.0000e-001

Um alle Lösungen angeben zu können, benö-tigt man eine Basis des Nullraumes von A. Ei-ne solche erhält man durch null(A). Man be-kommt

1 >> null(A)2 ans =3 -8.9443e-0014 4.4721e-001

Somit sind alle Lösungen von Ax � b durch[0.20.4

]+ α

[−0.89443

0.44721

]gegeben.

Aufgabe 201 Berechnen Sie die Ausgleichslö-sung des linearen Systems:

x1 + x2 = 3

2x1 − 3x2 = 1

0x1 + 0x2 = 2

Lösung: In Matlab gilt:

1 >> A = [1 1;2 -3;0 0];2 >> b = [3;1;2];3 >> A\b4 ans =5 2.00006 1.0000

Beachten Sie, dass Sie das gleiche Ergebnismit

1 >> A(1:2,:)\b(1:2)2 ans =3 24 1

erhalten, da die letzte Gleichung (Zeile) fürdie Lösung keine Rolle spielt. Man löst somitein reguläres quadratisches Gleichungssystem.Für den Gesamtfehler muss b3 = 2 jedoch be-rücksichtigt werden (Additive Konstante in derZielfunktion).

Aufgabe 202 Berechnen Sie die Näherungslö-sung (im Sinne der linearen Ausgleichsrech-nung) von Ax = b und den orthogonalen Pro-jektionsvektor p von b auf den Spaltenraumvon A des Systems 1 1

−1 1−1 2

[

x1x2

]=

70−7

.A x b

Lösung: Die nachfolgende Zeilen geben dieLösungen.

1 >> A = [1 1; -1 1; -1 2];2 >> b = [7; 0 ; -7];3 >> x = A\b4 x =5 5.00006 0.50007 >> p = A*x8 p =9 5.5000

10 -4.500011 -4.0000

Aufgabe 203 Berechnen Sie per Hand überdie Normalgleichungen die Ausgleichslösung

211 Copyright c© G. Gramlich

x für das folgende überbestimmte Gleichungs-system:

x1 + x2 = 3

2x1 − 3x2 = 1

0x1 + 0x2 = 2

(a) Berechnen Sie die Projektion y = Ax.

(b) Berechnen Sie den Fehlervektor r = Ax−b.

(c) Verifizieren Sie r ∈ Null(AT ).

Lösung:

(a) Die eindeutige Lösung ist:

1 >> A = sym([1 1;2 -3;0 0]);2 >> b = sym([3;1;2]);3 >> xbar = inv(A’*A)*A’*b4 xbar = [ 2] [ 1]

(b) Die Projektion auf den Bildraum von A istdann:

1 >> y = A*xbar2 y = [ 3] [ 1] [ 0]

(c) Der Fehlervektor ergibt sich zu:

1 >> r = A*xbar-b2 r = [ 0] [ 0] [ -2]

r liegt im Nullraum von AT , denn:

1 >> A’*r2 ans = [ 0] [ 0]

Aufgabe 204 Ein Ingenieur hat experimentelldie folgenden Daten ermittelt

Spannung ti 0 2 5 7 9 13 24Stromstärke bi 0 6 7.9 8.5 12 21.5 35

Berechnen Sie eine lineare und quadratischeAusgleichsfunktion und vergleichen Sie dieWerte beider Modellfunktionen an der Stellet = 5.Lösung:

1 t = [0,2,5,7,9,13,24];2 b = [0,6,7.9,8.5,12,21.5,35];3 A = [ones(7,1),t’];4 x = A\b’5 x =6 0.68317 1.4353

Die lineare Ausgleichsfunktion ist daher

φ1(t) = x1 + x2t ≈ 0.6831 + 1.4353t

1 t = [0,2,5,7,9,13,24];2 b = [0,6,7.9,8.5,12,21.5,35];3 A = [ones(7,1),t’,t.^2’];4 x = A\b’5 x =6 0.89777 1.36958 0.0027

Die quadratische Ausgleichsfunktion ist daher

φ2(t) = x1+x2t+x3t2 ≈ 0.8977+1.3695t+0.0027t2

Somit gilt φ1(5) = 7.8596 und φ2(5) = 7.8127.Die Werte der beiden Modellfunktionen unter-scheiden sich also erst ab der zweiten Nach-kommastelle.

Aufgabe 205 Bestimmen Sie die Gleichungder Ausgleichsgeraden für den funktionalenZusammenhang U = aI + U0 zwischen derelektrischen Spannung U in V und der Strom-stärke I in mA beim Stromdurchgang durch ei-ne Zelle auf Grundlage der folgenden Mess-werte:

212 Copyright c© G. Gramlich

I 0.10 0.12 0.13 0.16 0.18 0.19U 0.40 0.45 0.50 0.55 0.60 0.65

Lösung: Man erhält a ≈ 2.6 und U0 ≈ 0.14.

70. 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 beiParameteridentifikationsproblemen auf undspielen in den Anwendungen eine große Rolle.Wenn Sie sich für diesen Problemkreis näherinteressieren, sehen Sie auch unter den WortenInverse Probleme nach ([22]). Wir zeigen dasLösen einer nichtlinearen Ausgleichsaufgabein folgender Aufgabe.

Aufgabe 206 (lsqcurvefit) Gegeben sinddie vier Datenpunkte

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), sodass die Funkti-on f die Datenpunkte im Sinne kleinster Qua-drate bestmöglichst ausgleicht.Lösung: Das Problem kann in Matlabmit derFunktion lsqcurvefit gelöst werden.

1 t = [0:3];2 y = [2 0.7 0.3 0.1];3 fxt = @(x,t) x(1)*exp(x(2)*t);4 x0 = [1,0];5 [x,resnorm]=lsqcurvefit(fxt,x0,t,y

)6 Optimization terminated7 successfully:8 Relative function value changing9 by less than OPTIONS.TolFun

10 x =11 1.9950 -1.009512 resnorm =13 0.0020

Die Lösungsstelle ist somit x∗ ≈

(1.995,−1.0095). Die Abbildung 75 zeigt

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 75: Zu Aufgabe 206

die dazugehörige Geometrie und wurde wiefolgt erzeugt:

1 tt = linspace(0,3);2 ff = x(1)*exp(x(2).*tt);3 plot(tt,ff,t,y,’ro’), grid,

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

Für lineare Ausgleichsaufgaben siehe Ab-

213 Copyright c© G. Gramlich

schnitt 69.

71. Simulink

Simulink ist ein signalflussorientiertes (block-orientiertes), interaktives System zur Simulati-on linearer und nichtlinearer dynamischer Sys-teme. Es handelt sich um ein mausgesteuertesGrafikprogramm, das ein Modell eines natür-lichen, technischen oder wirtschaftlichen Sys-tems, das als Blockdiagramm (Blockschalt-bild, Signalflussdiagramm) auf dem Bild-schirm darzustellen ist, unter dynamischenEinwirkungen nachbildet. Es kann für lineare,nichtlineare, zeitkontinuierliche oder zeitdis-krete Prozesse eingesetzt werden. Grundlagesind Matlab-Funktionen zur Lösung gewöhn-licher Differenzialgleichungen (DGL) bzw.Anfangswertaufgaben (AWA). In diesem Sinnkann Simulink als ein numerischer Differenzi-algleichungslöser aufgefasst werden. Im zeit-diskreten Fall sind die Modellgleichungen na-türlich Differenzengleichungen. Innerhalb derMatlab-Umgebung ist Simulink eine Matlab-Toolbox, die sich von den anderen Toolboxeneben durch diese spezielle Oberfläche, mit derdann auch eine besondere „Programmiertech-nik“ verbunden ist, unterscheidet. Variablenkönnen von Simulink nach Matlab problemlosimportiert und exportiert werden. Damit ste-hen zum Beispiel alle Visualisierungsmöglich-keiten von Matlab zur Verfügung, oder Grö-ßen des Systems können mathematisch opti-miert werden, zum Beispiel mit der Optimiza-tion Toolbox.

71.1. Erste Schritte

Der Start des Programms Simulink erfolgt zumBeispiel durch das Kommando simulink imMatlab-command window. Danach öffnet sichder so genannte block Library Browser. Die-ser stellt die verfügbaren Blöcke (Funktions-blöcke) der Simulink-Bibliothek in Form einerListe und in Form von Icons dar. Die Biblio-thek ist dabei in Funktionsgruppen organisiert:

• Sources

• Sinks

• Continous

• Discrete

• usw.

Bei der Auswahl eines Listeneintrages (Icon)öffnet sich dann im Simulink Library Brow-ser-Fenster ein Teilfenster mit den zur Funk-tionsbibliothek gehörenden Funktionssysmbo-len. Ein Klick auf Sources etwa öffnet alleFunktionsblöcke zur Erzeugung von Signalen(Funktionen). Zu sehen sind etwa die BlöckeConstant zur Erzeugung eines konstanten Si-gnals oder Sine Wave zur Erzeugung einer Si-nusfunktion. Die Funktionsblöcke haben fol-gende Eigenschaften:

• Name

• Ein- und Ausgabe

• Parameter (Doppelklick)

• Online-Hilfe (Help-Button)

• Kontextmenü (Maus rechts)

Simulink ist erweiterbar, das heißt, es könneneigene Blöcke mit der gewünschten Funktiondefiniert werden.

214 Copyright c© G. Gramlich

71.2. Konstruktion einesBlockdiagramms

Will man nun mit Hilfe der Bibliothekenein eigenes System konstruieren, so mussman zunächst im Simulink-Libraray Browserdurch Auswahl von File New Model ein lee-res Fenster öffnen. Blöcke können nun viaDrag&Drop aus der Bibliothek eingefügt wer-den. Zwei Blöcke können dadurch verbundenwerden, dass man mit der linken Maustaste aufeinen Blockausgang klickt, die Maustaste fest-hält und die sich aufbauende Verbindungsli-nie auf den gewünschten Blockeingang zieht.Am Besten zieht man das Verbindungssignal(Verbindungslinie) immer gegen der Signal-flussrichtung vom Eingang des Zielblocks zumAusgang des Quellblocks. Blöcke und Verbin-dungen löschen, können Sie mit Hilfe der rech-ten Maustaste. Blöcke können durch Ziehenan den Ecken auch vergrößert oder verkleinertwerden.

Bereits vorhandene Blockdiagramme könnenmit File Open geöffnet und dann bearbeitetwerden.

Die Kanten sind den Signalen (oder Größen)des Systems zugeordnet, in den Knoten wer-den diese Signale generiert oder umgewandelt,also geformt. Da Signale eine bestimmte Fluss-richtung haben, sind Blockdiagramme gerich-tete Graphen.

71.3. Weitere Arbeitsschritte

Bevor wir mit dem Blockdiagramm jedoch ei-ne Simulation durchführen können, sind nochweitere Arbeitsschritte durchzuführen:

• Parametrierung der verwendeten Blöcke,

• Festlegung des numerischen Lösungsver-fahrens (Integrator),

• Angabe der Anfangswerte, Simulationsdau-er usw., also allgemeine Parameter der Si-mulation,

• Dokumentation.

71.4. Ein erstes Beispiel

Wir konstruieren uns nun ein einfaches Bei-spiel (Modell) eines Blockdiadramms unter Si-mulink, führen die zur Simulation notwendi-gen Arbeitsschritte durch und machen mit die-sem Modell ein paar Simulationen.

Es soll ein Quellsignal, die Sinusfunktionf (t) = 2 sin(t), t ∈ R, (Amplitudenwert 2) inte-griert werden, und samt ihrer IntegralfunktionF(t) = 2

∫ t0 sin(τ) dτ = −2 cos(t)+2 von [0, 15]

grafisch ausgegeben werden.

Aufgabe 207 Überlegen Sie, warum das Er-gebnis der Simulation die Lösung der Anfangs-wertaufgabe

AWA :

y′(t) = x(t)y(0) = 0

t ∈ [0, 15]

mit y(t) = F(t) und x(t) = f (t) ist.Lösung: Nennen wir den Ausgang des Inte-gratorblocks y(t), so hat man zwischen Ein-gangssignal x(t) und Ausgangssignal y(t) dieBeziehung

y(t) =∫ t

0x(τ) dτ + y(0).

Durch Differenziation dieser Gleichung erhältman y′(t) = x(t). © . . . . . . . . . . . . . . . . . . . . . . . .©

215 Copyright c© G. Gramlich

71.4.1. Konstruktion des Blockdiagramms

Wir öffnen ein neues Fenster und speichernes unter dem Namen ErstesBeispiel.mdl(mdl steht abkürzend für model) ab. In das lee-re Fenster ziehen wir aus der Block Library mitHilfe der Maus den Block Sine Wave; dieserbefindet sich in der Bibliothek Sources. Glei-chermaßen verfahren wir mit den Blöcken In-tegrator (Continuouse), Mux (Signal Routing)und Scope (Sinks). Jetzt werden die Blöckeverbunden. Der Ausgang von Sine Wave mitdem Eingang von Integrator, der Ausgang vonIntegrator mit einem Eingang von Mux undder Ausgang von Mux mit dem Eingang vonScope. Schließlich verbinden wir den zwei-ten Eingang von Mux mit der Verbindungsli-nie (Signalkante) zwischen Sine Wave und In-tegrator. Hierzu beginnt man mit dem Eingangvon Mux. Bei einer Verbindung „um die Ecke“muss die Maustaste zwischendurch losgelas-sen werden. Man beachte auch, dass die Ver-bindung zu einer Signalkante (wie hier zwi-schen Sine Wave und Integrator) erst dann voll-ständig ist, wenn an der Kreuzungsstelle einkleiner rechteckiger Punkt erscheint.

71.4.2. Weitere Arbeitsschritte

Wir beginnen mit der Parametrierung des SineWave-Blocks. Ein Doppelklick auf den Blocköffnet ein Fenster, in dem die Amplitude aufden Wert 2 eingestellt wird. Die anderen Para-meter (Frequenz, usw.) bleiben unverändert.

Der Block Mux hat zwei Eingänge, was in un-serem Beispiel gerade passend ist. Hier ist alsonichts zu tun. Prima! Die Zahl der Eingänge

kann jedoch im Allgemeinen eingestellt wer-den.

Der Integratorblock (Integrator) verlangt unteranderem den Anfangswert der Integration. Fürdas Beispiel soll der Wert auf der voreingestell-ten Null stehen bleiben. Die übrigen Parame-ter betreffen spezielle Formen von Integrato-ren und bleiben für unser Beispiel auf den vor-eingestellten Werten. Der Eintrag 1/s im Inte-gratorblock deutet an, dass es sich um die La-place-Transformierte der Integration handelt.Die meisten (linearen) Funktionsblöcke sindmit der Laplace-Transformierten bzw. demdiskreten Pendant dazu, der Z-Transformation,gekennzeichnet.

Der Scope-Block sollte auch parametriert wer-den. Ein Doppelklick auf den Block und einKlick aus das Parameters-Icon öffnet ein Kar-teifenster in dem Parameter eingestellt wer-den können. Interessant ist die Möglichkeit,das angezeigte Signal direkt in einer Matlab-Variablen speichern zu lassen. Man achte dar-auf, an dieser Stelle auf das Array-Format um-zustellen, wenn man von dieser Möglichkeitdes Datenexports in den Matlab-WorkspaceGebrauch machen will.

Den letzten Schliff gibt dem Ganzen nun nochdie Dokumentation (Beschriftung, Hervorhe-bung durch Farbe usw.). Durch einen Dop-pelklick in Modellfenster erscheint ein bli-ckender Cursor. Hier kann frei Text eingetra-gen werden, der über den Menüpunkt Format-Font noch nach Geschmack im Erscheinungs-bild verändert werden kann.

Das Ergbenis all unserer Bemühungen sehenSie in Abbildung 76.

216 Copyright c© G. Gramlich

Mein erstes Simulink Modell

Sine WaveScope

1s

Integrator

Abbildung 76: Erstes Beispiel

Das eingestellte numerische Lösungsverfahrenist ode45 (unten im Fenster ErstesBeispiel).Wir ändern daran nichts. Wenn Sie doch eineÄnderung durchführen wollen, dann unter Si-mulation und weiter unter Configuration Para-meters. Es würde an dieser Stelle zu weit füh-ren, im Einzelnen auf die numerischen Integra-tionsverfahren einzugehen. Eine tiefe Diskus-sion der Verfahren würde den Rahmen dieserEinführung bei weitem sprengen. Es sei jedochbemerkt, dass die modernsten mathematischenVerfahren zum Einsatz kommen [24, 25], sieheauch Abschnitt 60.

Den Wert der Simulationsdauer setzen wir von10 auf 15 (zweite Zeile von oben rechts).

71.4.3. Simulation

Nun steht einer Simulation nichts mehr im We-ge. Drücken Sie einfach auf das Dreieckssym-bol in der zweite Zeile des Modellfensters. ImScope-Block bauen sich dann das in Abbildung77 dargestellte Sinussignal f und die zugehö-rige Integralfunktion F auf.

Abbildung 77: Ergebnis

71.5. Beispiele

In diesem Absschnitt betrachten wir nun wei-tere Simulink-Modelle. Hierbei handelt es sichum das Lösen von Differenzial- und Differen-zengleichungen unter Simulink, oder andersgesagt, um die Simulation dynamischer Syste-me.

Als erstes Beispiel wählen wir die Anfangs-wertaufgabe

AWA :

y′(t) = −y(t) − 5e−t sin(5t)y(0) = 1

die wir bereits in Abschnitt 61.1 numerisch undin Abschnitt 66 symbolisch behandelt haben.Die Lösung ist

y(t) = e−t cos(5t).

Als ersten Schritt löst man die gegebene Diffe-renzialgleichung nach der höchsten Ableitung

217 Copyright c© G. Gramlich

auf. In diesem Fall ist diese eins und die Glei-chung braucht nicht umgeformt zu werden

y′(t) = −y(t) − 5e−t sin(5t).

Zur Integration wird der Block Integrator(Continous) verwendet. Er sorgt für die nume-rische Integration der Differenzialgleichung.Danach wird die rechte Seite der Differenzi-algleichung mit Hilfe von Integrieren, Addi-tionsstellen, usw. aufgebaut. Im vorliegendenFall wird mit dem Block fcn (User-DefinedFunctions) der Ausdruck −5e−t sin(5t) gebildetund durch die Summationsstelle Sum (Com-monly Used Blocks) mit dem Ausgang desIntegrierers zusammengefasst. Da die rech-te Seite nun komplett ist und diese gleichder ersten Ableitung ist, wird der Ausgangmit dem Integrierereingang verbunden (Rück-kopplung). Zur grafischen Darstellung des Si-gnals (Lösung y der Differenzialgleichung)während der Simulation wird der Block Sco-pe (Sinks) verwendet. Den Block Clock fin-det man in Source. Das Simulink-Modell zurLösung der Differenzialgleichung ist in Abbil-dung 78 dargestellt.

Nun setzen wir beim Integrierer die Anfangs-bedingungen. Dies geschieht durch Doppelkli-cken auf das Symbol und dem Eintrag des An-fangwertes, hier 1. Der letzte Schritt bestehtin der Wahl der Simulationsparameter. Untermehreren Integrationsverfahren (das sind gera-de die DGL-Löser ode45, usw. von Matlab)muss ein geeignetes aufgewählt werden. Vor-eingestellt ist ode45. Außerdem ist die Simu-lationszeit einzustellen. Ich habe das Intervall[t0 = 0, t f = 3] gewählt. Das grafische Ergeb-nis der Simulation, das heißt die Lösung der

Scope

1s

Integrator

f(u)

FcnClock

Abbildung 78: Simulink-Modell

Differenzialgleichung, ist in Abbildung 60 zusehen.

Aufgabe 208 (y′(t) = k) KonstruierenSie eine (signalflussorientierte) Simulink-Implementierung der Differenzialgleichungy′(t) = k und simulieren Sie damit. Wählen Siespeziell k = 10 und y(0) = 0 und 0 ≤ t ≤ 11.Lösung: Die Abbildung 79 zeigt eine

y(t)

Scope

1s

Integrator

10

Constant

Abbildung 79: y′(t) = k

Simulink-Implementierung der Differenzial-gleichung y′(t) = k. © . . . . . . . . . . . . . . . . . . . . .©

Aufgabe 209 (y′(t) = ky(t)) Konstruie-ren Sie eine (signalflussorientierte) Simulink-Implementierung der Differenzialgleichungy′(t) = ky(t) und simulieren Sie damit. WählenSie speziell k = −0.1, y(0) = 1 und 0 ≤ t ≤ 30.Ab wann ist der Zustandswert y(t) kleiner als0.1? Wie lautet die analytische Lösung? Sie

218 Copyright c© G. Gramlich

kann gegebenenfalls zu Kontrollzwecken ver-wendet werden.Lösung: Die Abbildung 80 zeigt eine Si-

y(t)y’(t)

Scope

1s

Integrator

−K−

Gain

Abbildung 80: y′(t) = ky(t)

mulink-Implementierung der Differenzialglei-chung y′(t) = ky(t). An der grafische Ausgabekann man erkennt, dass der Zustandswert y(t)für t & 23 (ungefähr größer) kleiner 0.1 ist. Dieanalytische Lösung ist y(t) = e−0.1t, t ∈ [0, 30].© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 210 (yt = kyt−1) KonstruierenSie eine (signalflussorientierte) Simulink-Implementierung der Differenzengleichungyt = kyt−1, t = 1, 2, . . ., und simulieren Siedamit. Wählen Sie speziell k = −7/10, y0 = 1und 0 ≤ t ≤ 20.Lösung: Die Abbildung 81 zeigt eineSimulink-Implementierung der Differenzen-gleichung yt = kyt−1. Man muss also nur denIntegrator-Block durch den Unit Delay-Block(Discrete) auswechseln. Der Anfangswerty0 = 1 wird in diesem Block eingestellt.Die Abbildung 82 zeigt das Ergebnis derSimulation mit der Parameterwahl k = −7/10,y0 = 1 und 0 ≤ t ≤ 20. © . . . . . . . . . . . . . . . . . . ©

y_t−1y_t

z

1

Unit Delay

Scope

−K−

Gain

Abbildung 81: yt = kyt−1

Abbildung 82: Simulation

219 Copyright c© G. Gramlich

71.6. Vereinfachungen

Schon für vergleichsweise kleine dynamischeSysteme werden relativ schnell viele Blöckebenötigt. Für die gezeigten einfachen Beispie-le ist dieser Effekt natürlich in erster Linie dar-auf zurückzuführen, dass schon für die Opera-tionen der untersten Ebene, wie etwa die Ad-dition oder Skalierung, entsprechende Blöckeeingesetzt wurden. Dies trägt zwar zur Nach-vollziehbarkeit der Modellgleichungen inner-halb des Blockdiagramms bei, macht aber das-selbe auch schnell unübersichtlich.

Durch geschickte Verwendung des Fcn-Blocksaus der Bibliothek userDefined Functions kön-nen Simulink-Systeme vereinfacht werden.Mit Hilfe dieses Blocks ist es möglich, gan-ze Formeln zu einer Einheit zusammenzufas-sen, so dass auf die Elementarblöcke der un-tersten Ebene (Sum oder Gain) verzichtet wer-den kann.

Eine weitere Möglichkeit zur Vereinfachungvon Simulink-Systemen ist eine Zusam-menfassung von Teilsystemen zu eigenenSimulink-Blöcken; eine Konstruktion von Sub-systemen. Die damit verbundene Hierarchi-sierung des Problems entspricht der Mo-dularisierung durch Funktionen bei Matlab-Programmen. Eine solche Modularisierung istfür die meisten Probleme der Praxis unum-gänglich.

71.7. Kommunikation mit Matlab

Mit Hilfe verschiedenster Blöcke aus der Bi-bliothek Sinks ist es möglich mit Matlab zukommunizieren. Als Beispiele seien die Blö-

cke Scope und To Workspace erwähnt.

Mit Hilfe der Matlab-Funktion sim kann ausMatlab ein Simulink-Modell aufgerufen wer-den. Genaue Auskunft über die verschiedenenFormen der Verwendung von sim erhalten siemit doc sim (help sim).

Eine weiter Kommunikationsart besteht überdas Konzept globaler Variablen.

71.8. Umgang mit Kennlinien

In den Anwendungen kann ein funktiona-ler Zusammenhang zwischen vorkommendenGrößen meist nicht explizit angegeben werden,das heißt eine Formel oder Funktionsvorschriftsteht nicht zur Verfügung. Vielmehr stehen ge-messene oder beobachte Werte tabellarisch zurVerfügung. Eine solche Tabelle nennt man eineKennlinie.

In der Bibliothel Lookup Tables stehen Blöckezur Verfügung mit denen man Kenntlinien be-handeln kann (Interpolation, Extrapolation).

71.9. Weitere Bemerkungen undHinweise

Weitere Informationen und Details über Simu-link finden Sie in [26].

72. Dünn besetzte Matrizen

Rechnet man mit einer Matrix, so geht Mat-lab davon aus, dass diese dicht besetzt ist, dasheißt, nur wenige Matrixelemente sind Null.Sind in einer Matrix jedoch viele ElementeNull (zum Beispiel 95% oder mehr) so spricht

220 Copyright c© G. Gramlich

man von einer Sparsematrix oder von einerdünn besetzten Matrix. Liegt solch eine Spar-sematrix vor und möchte man Matrixoperatio-nen mit dieser durchführen, so kann man meis-tens Gleitpunktoperationen auf den Nullele-menten einsparen. Darüber hinaus muss mannicht die ganze Matrix abspeichern, sondern esgenügt, nur die von Null verschiedenen Ele-mente abzulegen. Trägt man diesen Sachver-halten Rechnung, so lässt sich die Effizienz vonAlgorithmen in bezug auf Speicher- und Zeit-aufwand reduzieren. Damit ist es möglich, grö-ßere Probleme zu lösen, die sonst nicht lösbarwären. Matlab kann die dünne Besetztheit ei-ner Matrix ausnutzen.

Matlab verfügt über zwei Speichermodi: fullund sparse, wobei full standardmäßig ein-gestellt ist. Die Funktionen full und sparseerlauben es, zwischen beiden Modi hin und herzu schalten.

Im Sparsemodus werden die von Null ver-schiedenen Matrixelemente als eindimensiona-les (lineares) Feld mit ihren Zeilen- und Spal-tenindizes abgespeichert. Die Anweisung

1 >> F = -triu(tril(ones(6),1),-1)2 +3*eye(6)

erzeugt die (6, 6)-Matrix

1 F =2 2 -1 0 0 0 03 -1 2 -1 0 0 04 0 -1 2 -1 0 05 0 0 -1 2 -1 06 0 0 0 -1 2 -17 0 0 0 0 -1 2

Mit S = sparse(F) wird F im Sparsemodusabgespeichert:

1 S =2 (1,1) 23 (2,1) -14 (1,2) -15 (2,2) 26 (3,2) -17 (2,3) -18 (3,3) 29 (4,3) -1

10 (3,4) -111 (4,4) 212 (5,4) -113 (4,5) -114 (5,5) 215 (6,5) -116 (5,6) -117 (6,6) 2

Die von Null verschiedenen Elemente werdenzusammen mit ihren Indizes spaltenweise an-geordnet. Mit

1 >> F = full(S)

lässt sich dies rückgängig machen. Der Funk-tionsaufruf nnz(F) zeigt Ihnen die Anzahl dervon Null verschiedenen Elemente der MatrixF.

72.1. Sparsematrizen erzeugen

Sparsematrizen können auch direkt erzeugtwerden. Mit Hilfe der Funktion spdiags lässtsich zum Beispiel eine dünn besetzte Bandma-trix erzeugen. Obige Bandmatrix F kann somitdirekt wie folgt erstellt werden:

1 >> m = 6; n = 6;2 >> e = ones(n,1); d = 2*e;3 >> A = spdiags([-e,d,-e],[-1,0,1],

m,n);

221 Copyright c© G. Gramlich

Der Vektor [-1,0,1] gibt an, in welcher Dia-gonalen die Spalten von [-e,d,-e] stehen.Führen Sie die Anweisungen aus und sehenSie sich die volle Matrix mit full(A) an. Al-ternativ dazu können Sie sich mit spy(A) dieStruktur der Matrix A grafisch betrachten. Diezu eye, zeros, ones, rand und randn ana-logen Sparsefunktionen sind: speye, sparse,spones, sprand, und sprandn.

72.2. Mit Sparsematrizen rechnen

Unabhängig vom Speichermodus können Siedie arithmetischen Operationen und vieleFunktionen verwenden. Welchen Speichermo-dus haben dann die Ergebnismatrizen? Opera-tionen mit vollen Matrizen ergeben volle Ma-trixresultate. Ist S eine Sparsematrix und F einevollbesetzte Matrix, so ist:

1 Sparse: S+S, S*S, S.*S, S.*F,2 S^n, S.^n, S\S3 Sparse: inv(S),chol(S), lu(S),4 diag(S), max(S), sum(S)5 Full: S+F, S*F, S\F, F\S

Ist a ein Skalar, so sind die Ergebnisse von a*Sund a\S vom Sparsemodus.

Um Eigenwerte oder singuläre Werte einerSparsematrix S zu berechnen, muss man S inden vollen Speichermodus konvertieren unddie Funktionen eig bzw. svd verwenden:eig(full(S)) bzw. svd(full(S)). Willman nur einige Eigenwerte oder singuläreWerte berechnen, so kann man die Funktio-nen eigs und svds benutzen. Diese akzep-tieren Sparsematrizen als Eingabeargument:eigs(S) bzw. svds(S) .

Bildet man eine Blockmatrix und ist eine Un-termatrix eine Sparsematrix, so ist auch dieBlockmatrix vom Speichermodus sparse.

Weitere Informationen erhalten Sie mit docsparfun (help sparfun).

Aufgabe 211 (Sparsematrizen) Erzeugen Sieeine (100, 100)-Sparsematrix A, die in der Dia-gonalen lauter 4-en hat und die obere und un-tere Nebendiagonale besteht aus lauter Zahlen-1. Plotten Sie die Sparsematrix A und bestim-men Sie die Anzahl der von Null verschiede-nen Elementen.Lösung: Man definiert zunächst

1 >> n = 100;2 >> e = ones(n,1);3 >> d = 4*e;

Dann erzeugt man die Matrix A mittels

1 A = spdiags([-e,d,e],[-1,0,1],n,n);

Mit spy(A) kann ein Plot der Matrix A erzeugtwerden, siehe Abbildung 83. In der Grafik er-

0 50 100

0

20

40

60

80

100

nz = 298

Abbildung 83: Sparsematrix

scheint die Anzeige nz = 298 (nz: non zeros).

222 Copyright c© G. Gramlich

Dies gibt die Anzahl der von Null verschiede-nen Elemente an. Diese Information kann manauch mittels nz = length(nonzeros(A))erhalten. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

Aufgabe 212 (Sparsematrizen) Wie sieht dieMatrix S nach den folgenden Anweisungenaus? Überlegen Sie zuerst und überprüfen Siedanach Ihre Antwort mit full(S).

1 n = 6;2 D = sparse(1:n,1:n,2*ones(1,n),n,n

);3 U = sparse(2:n,1:n-1,-ones(1,n-1),

n,n);4 L = sparse(1:n-1,2:n,-ones(1,n-1),

n,n);5 S = L+D+U;

Lösung: Die Matrix S hat die folgende Form:

1 >> full(S)2 ans =3 2 -1 0 0 0 04 -1 2 -1 0 0 05 0 -1 2 -1 0 06 0 0 -1 2 -1 07 0 0 0 -1 2 -18 0 0 0 0 -1 2

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

Aufgabe 213 (Sparsematrizen, fill-in) In vie-len Fällen, zum Beispiel bei der Diskreti-sierung von partiellen Differenzialgleichungenmit Differenzenverfahren und nach der Me-thode der finiten Elemente, entstehen Matri-zen, deren n2 Elemente nicht in den Haupt-speicher passen, sehr viele Nullelemente ha-ben, aber ihre nichtverschwindenden Elementesehr wohl in den Arbeitsspeicher passen, wennman spezielle Speichertechniken verwendet.

Im allgemeinen sind dann Eliminationsver-fahren (LU- bzw. QR-Zerlegungen) nicht an-wendbar, weil in Ihrem Verlauf Nichtnulle-mente an vorher noch nicht belegten Posi-tionen entstehen können. Dieses Phänomender Erzeugung von Nichtnullelementen be-zeichnet man als fill-in. Das folgende Bei-spiel zeigt solch ein fill-in. Definieren Sie hier-zu die Matrix A durch die Anweisung A =gallery(’redheff’,20). Schauen Sie sichmit help private/redheff an, wie die Ma-trix definiert ist. Mit Hilfe der Funktion lu ent-hält man in Matlab eine LU-Zerlegung (Siehezum Beispiel [6]). Plotten Sie sodann die Ma-trizen A, L und U mit der Funktion spy.Lösung: Die LU-Zerlegung der Matrix A er-hält man mit

1 >> [L,U] = lu(A);

Die grafische Darstellung der Matrizen A, Lund U (Siehe Abbildung 84 und 85) erzeugt

0 5 10 15 20

0

5

10

15

20

nz = 85

Plot der Matrix A

Abbildung 84: Plot der Matrix A

man mit

1 >> figure2 >> plot(3,1,1)

223 Copyright c© G. Gramlich

0 10 20

0

5

10

15

20

nz = 160

Plot der Matrix L

0 10 20

0

5

10

15

20

nz = 147

Plot der Matrix U

Abbildung 85: Plot der Matrizen L und U

3 >> spy(A)4 >> title(’Plot der Matrix A’)5 >> subplot(1,2,1)6 >> spy(L)7 >> title(’Plot der Matrix L’)8 >> subplot(1,2,2)9 >> spy(U)

10 >> title(’Plot der Matrix U’)

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

73. Mehrdimensionale Arrays

Arrays der Datentypen (Abschnitt 74) double,char, cell und struct können mehr als zweiDimensionen haben. Solche mehrdimensiona-le Arrays werden in natürlicher Verallgemeine-rung zu Techniken, wie man sie für Matrizenkennt, definiert und manipuliert.

Mit den Funktionen zeros, rand und randnkönnen mehrdimensionale Arrays erzeugt wer-den. Zum Beispiel wird durch

1 randn(3,4,5)

ein (3, 4, 5)-Array mit insgesamt 3 · 4 · 5 = 60normalverteilten Zufallszahlen erzeugt.

Ein dreidimensionales Array könnte zum Bei-spiel dreidimensionale physikalische Datendarstellen, etwa die Temperatur in einem Raumüber den Punkten eines rechteckigen Gitters.Es könnte auch eine Folge von Matrizen Ak re-präsentieren bzw. Abtastwerte einer zeitabhän-gigen Matrix A(t) bezeichnen. Das (i, j)-te Ele-ment der k-ten Matrix ist dann A(i, j, k) = ai jk.

Mit Hilfe der cat-Funktion kann man einmehrdimensionales Array durch Angabe derElemente in einer Anweisung definieren. Daserste Argument gibt die Dimension des Arrays.Die folgende Anweisung erzeugt ein dreidi-mensionales Array der Größe 3 × 2 × 2.

1 >> A = cat(3,[1 2;3 4;5 6],[7 8;910;11 12])

2 A(:,:,1) =3 1 24 3 45 5 66 A(:,:,2) =7 7 88 9 109 11 12

Funktionen, die elementweise arbeiten, kön-nen auch auf mehrdimensionale Arrays ange-wendet werden, zum Beispiel arithmetische,logische und relationale Operatoren. zum Bei-spiel geben die Ausdrücke A.*A, exp(A),3.ˆA und A>0 die erwarteten Ergebnisse.Der (konjugiert) tranponierte Operator und dieFunktionen diag, inv, eig und \ aus der Li-nearen Algebra sind für Arrays der Dimensiongrößer als zwei nicht definiert, also nur für Ma-trizen (zweidimensionale Arrays).

224 Copyright c© G. Gramlich

Die Tabelle 38 gibt weitere Matlab-Funktionen an, die speziell zum Manipulierenvon mehrdimensionalen Arrays geeignet sind.

Funktion Bedeutungcat Verkettet Arraysndims Größe, Ordnungndgrid Erzeugt Arrayspermute Permutiert Dimensionipermute Inverse Permutationshiftdim Verschiebt Dimensionsqueeze Verschiebt Dimension

Tabelle 38: Array-Funktionen

Aufgabe 214 (Mehrdim. Arrays) VerwendenSie dreidimensionale Arrays, um die folgen-de symmetrische Matrix für verschiedene re-elle Parameter t zu studieren:

At =

t −1 0 0 0−1 t −1 0 00 −1 t −1 00 0 −1 t −10 0 0 −1 t

.

(a) Brechnen Sie die Inverse von A2 und vonA5.

(b) Versuchen Sie die Inverse von A0 zu be-rechnen.

(c) Lassen Sie den Parameter t von 2 an lang-sam immer kleiner werden. Berechne dieInversen von At und gib den ersten Wertan, wo At singulär wird.

Die n × n-Matrix At ist beim numerischen Lö-sen von Differenzialgleichungen von Bedeu-tung, insbesondere für große n.Lösung: Zunächst definieren wir die MatrixA0 für A0.

1 A0 = diag(-ones(4,1),1)+diag(-ones(4,1),-1);

Nun definieren wir für verschiedene Parame-terwerte den Vektor T. Zum Beispiel:

1 T = [0 1 2 3.7 5];

Dann erzeugen wir At durch:

1 for i=1:length(T)2 A(:,:,i) = A0+T(i)*diag(ones(5,1))

;3 end

(a) Die Inverse der Matrix A5 erhält mandurch inv(A(:,:,5)).

(b) Die Inverse der Matrix A2 ist durchinv(A(:,:,3)) zu berechnen.

(c) Der Befehl inv(A(:,:,1)) zeigt, dassdie Matrix A0 singulär ist.

(d) Der erste Parameterwert, für den die Ma-trix At singulär wird, ist t = 1.

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

74. Datentypen (Klassen)

Bei der Realisierung numerischer und haupt-sächlich nichtnumerischer Algorithmen sindDatentypen von besonderer Bedeutung.Spricht man von einfachen Datentypen, someint man ganze Zahlen, Gleitpunktzahlen,Zeichenketten usw. Unter einem zusammen-gesetzten Datentyp oder einer Datenstrukturversteht man ein Array (Feld) oder einenVerbund. Datenstrukturen können statisch unddynamisch sein. Ein statischer Datentyp ist

225 Copyright c© G. Gramlich

zum Beispiel ein Array und eine verketteteListe ist ein dynamischer Datentyp. Durchdie Definition von Datentypen werden diemöglichen Operationen mit denen Daten unddie Größe des Speicherplatzes festgelegt. InMatlab wird stets der Begriff Datentyp oderKlasse verwendet und man meint damit zumBeispiel 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 dem Da-tentyp double und sym (aus der SymbolicToolbox) gearbeitet; gelegentlich auch mit derKlasse function_handle.

Um festzustellen von welchem Datentyp einObjekt ist, kann man die Funktion class ver-wenden:

1 >> class(pi)2 ans =3 double4 >> f = @(x) x^2;5 >> class(f)6 ans =7 function_handle

Auch mit der Funktion isa kann man den Da-tentyp einer Variablen herausfinden.

1 >> f = @(x) x^2;2 >> isa(f,’double’)3 ans =4 05 >> isa(f,’function_handle’)6 ans =

7 1

Mit den folgenden Anweisungen werden dieVariablen A bis N definiert, die alle einen ande-ren Datentyp besitzen. Den Datentyp könnenSie aus dem Matlab-Workspace ablesen.

1 >> A = ’Z’;2 >> B = magic(3);3 >> C = @(x) x^2;4 >> D = cell(3,2);5 >> E.field = 1;6 >> F = int8(123);7 >> G = uint8(123);8 >> H = int16(123);9 >> I = uint16(123);

10 >> J = int32(123);11 >> K = uint32(123);12 >> L = single(123);13 >> M = sym(123);14 >> N = ss(1,1,1,1);

Die vorletzte Anweisung M = sym(123) istmit der Symbolic Math Toolbox und die letz-te Anweisung N = ss(1,1,1,1) mit ControlToolbox möglich. Erstere erzeugt eine sym-bolische Variable und Letztere ein Zustands-raummodell. Weitere Matlab-Datentypen wer-den von Toolboxen erzeugt. Für weitere Infor-mationen siehe auch doc datatypes (helpdatatypes). Die drei Datentypen char, cellund struct wollen wir etwas genauer an-schauen.

74.1. Zeichenketten (char)

Zeichenketten (Strings) werden durch Hoch-kommata begrenzt

1 >> s = ’Ich bin eine Zeichenkette’2 s =

226 Copyright c© G. Gramlich

3 Ich bin eine Zeichenkette

Die Variable s ist ein Array der Größe (1, 25)vom Typ char. Mit dieser Variablen könnenSie nun mit allen erlaubten Arrayoperationenmanipulieren. Sie können zum Beispiel Zei-chenketten zusammenfügen oder trennen. Mitden Funktionen str2num oder num2str kön-nen Sie Zeichen in Zahlen konvertieren oderumgekehrt.

Für weitere Informationen siehe doc strfun(help strfun).

Aufgabe 215 (Zeichenketten) Die druckbarenZeichen des Ascii-Zeichensatzes werden durchdie ganzen Zahlen 32:127 dargestellt. Zah-len kleiner als 32 entsprechen nicht druckba-ren Steuerzeichen. Geben Sie diese druckbarenZeichen auf dem Bildschirm aus. Pro Zeile sol-len 16 Zeichen ausgegeben werden. WelcherZahl entspricht das @-Zeichen, das in jeder E-Mail-Adresse vorkommt?Lösung: Zunächst definiert man eine (6, 16)-Matrix Z, die die Werte 32 bis 127 enthält.

1 N = 32:127;2 Z = reshape(N,16,6)’;

Dann kann man diese mit Hilfe des Befehlschar in den ASCII-Zeichensatz umwandeln.Nach der Eingabe

1 char(Z)

sieht die Ausgabe wie folgt aus:

1 ans =2 !"#$%&’()*+,-./3 0123456789:;<=>?4 @ABCDEFGHIJKLMNO5 PQRSTUVWXYZ[\]^_

6 ‘abcdefghijklmno7 pqrstuvwxyz{|}~

Um herauszufinden welcher Zahl ein Zeichenentspricht kann man Befehl double verwen-den. double(’@’) liefert dann die Zahl 64. ©©

74.2. Zellen- und Strukturenarrays

Die Datentypen cell und struct erlauben es,unterschiedliche aber logisch zusammengehö-rige Daten (Felder) zu einer Variablen zusam-menzufassen. Zum Beispiel können Zeichen-ketten und numerische Felder unterschiedli-cher Größe in einer Zelle gespeichert werden.Mathematische Operationen sind darauf abernicht definiert. Hierzu muss man gegebenen-falls auf den Inhalt zugreifen. Strukturen undZellen sind ähnlich. Ein Unterschied bestehtjedoch darin, dass Strukturen durch Namenund nicht durch Zahlen identifiziert werden.

Strukturenarrays werden innerhalb von Mat-lab an verschiedenen Stellen verwendet, zumBeispiel von den Funktionen spline, solveund von Optimierungs- und Differenzialglei-chungslösern. Außerdem spielen sie beim ob-jektorientierten Programmieren in Matlab einegroße Rolle (Darauf sind wir bisher nicht ein-gegangen). Zellenarrays finden zum Beispielin den Funktionen varargin und varargoutVerwendung, sowie in Grafikkommandos, umText zu spezifizieren.

Eine Struktur ist ein Datentyp, welcher ver-schiedene Werte von möglicherweise verschie-denen Datentypen beinhaltet. Eine Matlab-Struktur ist mit dem Datentyp Record in der

227 Copyright c© G. Gramlich

Sprache Pascal vergleichbar. Im einfachstenFall lässt sich eine Struktur durch einfacheAnweisungen erzeugen. Die folgenden Anwei-sungen erzeugen die Variable M vom Datentypstruct. M ist ein (1, 1)-Array.

1 n = 2;2 M.Name = ’Hilbert’;3 M.Matrix = hilb(n);4 M.Eigenwerte = eig(sym(hilb(n)));

Gibt man M ein, so erhält man die Feldnamen,aber nicht deren Inhalt:

1 >> M2 M =3 Name: ’Hilbert’4 Matrix: [2x2 double]5 Eigenwerte: [2x1 sym]

Das erste Feld M.Name ist vom Typ char, daszweite vom Typ double und das dritte vomTyp sym. Den Inhalt des zweiten Feldes erhältman zum Beispiel durch

1 >> M.Matrix2 ans =3 1.0000 0.50004 0.5000 0.3333

Ein Zellenarray ist ein Matlab-Array, das alsElemente Matlab-Arrays haben kann. Ein Ele-ment heißt Zelle oder Zellenelement. Im Ge-gensatz zu Strukturenarrays werden Zellenar-rays nicht durch Namen, sondern durch Zah-len identifiziert. Ein Weg, um ein Zellenarrayzu definieren besteht darin, geschweifte Klam-mern zu verwenden. Die folgende Anweisungerzeugt das (2, 2)-Zellenarray Z und gibt Infor-mationen über die einzelnen Zellen am Bild-schirm aus.

1 >> Z = {sym(2), pi; pascal(3), ’ABC’}

2 Z =3 [1x1 sym ] [3.1416]4 [3x3 double] ’ABC’

Ein Zellenarray erlaubt es somit, Arrays ver-schiedener Datentypen zu einem Objekt zu-sammenzufassen. Im obigen Beispiel bestehtdas Zellenarray Z aus Arrays des Typs doubleund char. Sind die Zellen nicht zu groß, sowerden sie am Bildschirm angezeigt. Lässt esder Raum aber nicht zu, so erscheint nur dieGröße der jeweiligen Zelle. Eine Zelle kannauch eine mehrdimensionale Struktur sein. DieInhalte von einzelnen Zellen sind zur Ausgabemit Indizes in geschweiften Klammern anzu-geben. Beispiel:

1 >> Z{2,1}2 ans =3 1 1 14 1 2 35 1 3 6

Mit der Funktion cellplot kann man sich diegrafische Struktur eines Zellenarrays in einemGrafikfenster anschauen. Der Aufruf

1 cellplot(A)

erzeugt die Abbildung 86.

Aufgabe 216 (Zellenarrays) Speichern Sie dieBlockmatrix

A =

1 2 3 4 56 7 8 9 1011 12 13 14 1516 17 18 19 20

,

228 Copyright c© G. Gramlich

3.1416

ABC

Abbildung 86: Die cellplot-Funktion

durch Indexadressierung in einem (2, 2)-Zellenarray A ab.Lösung: Die entsprechenden Zeilen lauten:

1 A{1,1} = [1 2 3;6 7 8];2 A{1,2} = [4 5;9 10];3 A{2,1} = [11 12 13;16 17 18];4 A{2,2} = [14 15;19 20];

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

Aufgabe 217 (Zellenarrays) Speichern Sie im(2, 2)-Zellenarray Z orthonormale Basen für al-le vier fundamentalen Unterräume von

A =

1 −1 11 0 01 1 11 2 4

.In der (1,1)-Zelle soll eine orthonormale Ba-sis von Bild(AT) stehen, in der (1,2)-Zelle ei-ne Basis von Null(A), in der (2,1)-Zelle vonBild(A) und in der verbleibenden Zelle eine or-thonormale Basis von Null(A)T.Lösung: Die Singulärwertzerlegung

A = USVT

liefert orthonormale Basen für alle vier funda-mentalen Unterräume von A.

1 >> A = [1 -1 1;1 0 0;1 1 1;1 2 4];2 >> [U,S,V] = svd(A);3 >> Z = cell(2,2);4 >> Z(1,1) = {V};5 >> Z(1,2) = {[]};6 >> Z(2,1) = {U(:,1:3)};7 >> Z(2,2) = {U(:,4)};

Alternativ kann eine Lösung wie folgt ausse-hen:

1 >> Z{1,1} = orth(A’);2 >> Z{1,2} = null(A);3 >> Z{2,1} = orth(A);4 >> Z{2,2} = null(A’);

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

75. Audiosignale (Töne, Musik)

Für die folgende Beispiele mit Au-diosignalen ist eine funktionsfähige„PC Sound Card“ erforderlich.

Analoge Signale, also wert- und zeitkonti-nuierliche Signale, können mit Hilfe einesAnalog-Digital-Umsetzers (A/D-Umsetzer)durch Abtastung und Quantisierung in eindigitales (wert- und zeitdiskretes) Signalüberführt werden. Umgekehrt lassen sich ausdigitalen Signalen mit einem Digital-Analog-Umsetzer (D/A-Umsetzer) analoge Signaleerzeugen. Wichtige Parameter dabei sind dieAbtastfrequenz fS , das heißt die Häufigkeitder Abtastungen pro Sekunde, und die Wort-länge w, das heißt die Zahlendarstellung derAmplituden des digitalen Signals.

229 Copyright c© G. Gramlich

Eine moderne „PC Sound Card“ besitzt A/D-und D/A-Umsetzer mit einer typischerweisevon 5 bis 44.1 kHZ einstellbaren Abtastfre-quenz und einer Wortlänge von 8 oder 16 Bit.Sie erreicht dann theoretisch eine Hörqualitätvergleichbar zur Audio-CD.

Der folgende Script läd die Datei handel inden Workspace. Darin befindet sich das Audio-signal y für das Hallelujah aus Handels Mes-sias. Mit der Funktion soundsc kann das Si-gnal abgespielt werden. Die Abspieldauer be-trägt 8.9 s. Die Abtastfrequenz Fs ist 8192 Hz.

1 >> load handel2 >> soundsc(y,Fs)

Weiter Tonbeispiele (Zugpfeife, Gong,Gelächter, usw.) finden Sie unter docaudiovideo (help audiovideo).

Am PC mit Betriebssystem Windows liegenAudiosignale oft in Dateien im wav-Formatvor. Matlab kann derartige Dateien lesen undschreiben, sowie digitale Signale direkt andie „PC Sound Card“ ausgeben. Siehe docaudiovideo (help audiovideo).

Aufgabe 218 (Audiosignale) Suchen Sie aufIhrem PC eine wav-Datei und laden Sie sie mitder Funktion wavread. Bestimmen Sie die Ab-tastfrequenz und die Wortlänge und geben Siedas Signal grafisch aus.Lösung: Hier mein Beispiel, siehe Abbildung87. Dazu habe ich folgende Skript verwendet.

1 >> [y,fs] = wavread(’Beispielwav’);

2 >> soundview(y,fs)

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

Abbildung 87: wav-Datei

76. WWW-Seiten

Die Firma MathWorks kann über das WorldWide Web (WWW) erreicht werden. Die URL-Adresse3 lautet: http://www.mathworks.com Der Deutsche Web Mirror (Spiegel) isthttp://www.mathworks.de Von hier ausfindet man verschiedene Informationen überMatlab und Simulink sowie deren Toolboxen.Außerdem gibt es Hinweise über Blocksets, ei-ne Liste von Büchern über Matlab sowie m-Files von anderen Benutzern. Auch Informa-tionen zur Studentenversion sind dort zu ha-ben. Es empfiehlt sich, hin und wieder die Ho-mepage aufzusuchen, da dort die aktuellen In-formationen über Matlab zu finden sind.

Um sich m-Files von der User Communityzu besorgen, steht die Adresse http://www.mathworks.de/matlabcentral zur Verfü-gung.

Programmiertipps stehen unter http://www.mathworks.de/access/helpdesk/help/techdoc/matlab_prog. In dieserBeschreibung findet Sie auf der letzten Seiteweitere Adressen, um weitere Infos über Rea-

3URL: Uniform Resource Locator.

230 Copyright c© G. Gramlich

lease Notes, Function Reference, Newsgroup-Adressen, Suchadressen nach Online-Quellen,Digest-Infos, News & Notes, Dokumentatio-nen (Handbücher), Beispielsammlung, usw.Übrigens, diese Programmiertips (mit denAdressen auf der letzten Seite) werden auchals PDF-File mit Matlab mitgeliefert. Überdas Menü help in Matlab help unter PrintableDokumentation (PDF) kommen Sie an dasPDF-Dokument.

Ein FAQ-Text (FAQ = Frequently Asked Ques-tions) zu Matlab finden Sie unter http://www.mit.edu/~pwb/cssm.

77. Das Matlab-Logo

Das Matlab-Logo (Abbildung 88) ist eineDarstellung des ersten Schwingungsmodus ei-nes dünnen, fest in einen L-förmigen Rahmeneingespannten Tuches4, dessen Schwin-gungsverhalten durch eine Wellengleichungbeschrieben wird. Zur Geschichte des Mat-lab-Logos siehe http://www.mathworks.com/company/newsletters/news_notes/clevescorner/win03_cleve.html. DasMatlab-Logo erhält man durch das Komman-do logo (doc logo).

78. Studentenversion

Eine Studentenversion von Matlab erhaltenSie unter https://www.academic-center.de/cgi-bin/home.

4etwa wie ein Tambourin (eine längliche, zylindrischeTrommel, die mit zwei Fellen bespannt ist).

Abbildung 88: Das Matlab-Logo

79. Cleve’s Corner

Besonders interessant finde ich Cleve’s Cor-ner. Darin befinden sich interessante Artikelrund um Matlab von CleveMoler, siehe www.mathworks.com/company/newsletters/news_notes/clevescorner/index.html.

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

81. Progammiertips

Das Handbuch [18] gibt Ihnen Tipszum effizienten Programmieren in Mat-lab. Es ist als PDF-File verfügbar unterhttp://www.mathworks.de/access/helpdesk/help/pdf_doc/matlab/programming_tips.pdf.

231 Copyright c© G. Gramlich

82. Literatur

Bücher zu und über Matlab findet man un-ter http://www.mathworks.de/support/books. Darunter auch das sehr empfehlens-werte Buch von CleveMoler, siehe [20].

83. Ähnliche Systeme

Diejenigen, die sich Matlab nicht leis-ten können, sei auf die Public DomainSoftware Scilab (http://www-rocq.inria.fr/scilab/), Octave (http://www.gnu.org/software/octave/,http://www.che.wisc.edu/octave),RLaB (http://rlab.sourceforge.net)und Euler (http://mathsrv.ku-eichstaett.de/MGF/homes/grothmann/euler/german/index.html)verwiesen. Diese Systeme sind bezüglichSyntax und Kapazität dem Matlab-Systemähnlich. Andere kommerzielle Systeme sindzum Beispiel Gauss, HiQ, IDL, Mathcad undPV-WAVE.

Andere interaktive Systeme, die ihre Stärkenhauptsächlich im Bereich symbolischer Rech-nungen haben, sind: Axiom, Derive, Macsyma,Maple, Mathematica, MuPAD und Reduce.Man nennt diese Systeme Computeralgebra-Systeme (CA-Systeme).

232 Copyright c© G. Gramlich

A. Glossar

Array (Feld). Unter einem Array (Feld) ver-steht man eine Reihe (Ansammlung) vonDaten eines bestimmten Typs. Vektorenund Matrizen sind die bekanntesten Bei-spiele.

Array Editor. Ein Tool, das es erlaubt, den In-halt von Arrays anzuzeigen und zu verän-dern.

Class (Klasse oder Datentyp). Ein Daten-typ 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 den Prompt» anzeigt und man Kommandos ein-geben kann. Es ist Teil der MatlabArbeitsoberfläche.

Current Directory Browser. AktuellerVerzeichnis-Browser. Ein Browser, indem m-Files und andere Files angezeigtwerden. Es können auch Operationenangewendet werden.

Editor/Debugger. Ein Tool zum Erzeugen,Editieren und zur Fehlersuche von Files.

FIG-file. Ein File mit der Endung .fig, dereine Matlab-Figur speichert und in Mat-lab eingeladen werden kann.

Figure. Ein Matlab-Fenster zur Anzeige vonGrafik.

Function M-File. Ein Typ von m-File, der

Ein- und Ausgabeargumente akzeptiert.Variablen sind dort lokal definiert.

Handle Graphics. Ein objekt-orientiertesGrafiksystem, dem die Grafik von Mat-lab unterliegt. Objekte sind hierachischorganisiert und werden durch Handlesmanipuliert.

Help Browser. Ein Browser, mit dem mandie Dokumentation von Matlab und an-deren MathWorks Produkten anschauenund suchen kann.

IEEE arithmetic (IEEE-Arithmetik). EinStandard-Gleitpunktsystem, das inMatlab realisiert ist.

LAPACK. Eine Bibliothek von FORTRAN77 Programmen zur Lösung linearerGleichungen, Ausgleichsaufgaben,Eigenwert- und Singulärwertberech-nnungen. Viele Matlab-Funktionen zurlinearen Algebra basieren auf LAPACK.

Launchpad. Ein Fenster für den Zugang zuTools, Demos und Dokumentationen vonMathWorks Produkten.

M-File. Ein File mit der Endung .m, der Mat-labKommandos beinhaltet. Ein m-File istentweder ein Function oder Script-File.

MAT-File. Ein File mit der Endung .mat, derMatlab Variablen beinhaltet. Es wird mitden Kommandos save und load erzeugtbzw. eingeladen.

Matlab desktop (Arbeitsoberfläche). EineBenutzer-Arbeitsoberfläche, um Files,Tools und Anwendungen mit Matlab zubearbeiten.

MEX-File. Ein Unterprogramm mit C oder

233 Copyright c© G. Gramlich

FORTRAN-Code, das plattformabgängi-ge Endungen hat. Es verhält sich wie einm-File oder eine eingebaute Funktion.

Script M-File. Ein Typ von m-File, das keinEin- und Ausgabeargument hat und aufDaten im Workspace (Arbeitsspeicher)operiert.

Toolbox. Eine Sammlung von m-Files, dieden Funktionsumfang von Matlab erwei-tert, gewöhnlich im Hinblick auf ein spe-zielles Anwendungsfeld.

Workspace. Arbeitsspeicher, der über dieMatlab-Befehlszeilen erreichbar ist.Beim Beenden werden die Variablengelöscht.

Workspace Browser. Ein Browser, der al-le Variablen im Workspace auflistet undOperationen auf diesen erlaubt.

234 Copyright c© G. Gramlich

B. Die Top Matlab-Funktionen

In diesem Anhang liste ich Matlab-Funktionenauf, von denen ich glaube, dass sie vom typi-schen Matlab-User am Häufigsten eingesetztwerden. Informationen über diese Funktionenerhalten Sie mit den Online-Hilfen von Mat-lab, insbesondere mit doc und help. Sieheauch die Abschnitte 17 und 18.

Vektoren/Matrizenzeros Nullmatrixones Einsmatrixeye Einheitsmatrixrand Zufallsmatrixrandn Zufallsmatrixlinspace Gleicher Abstand

Spezielle Variablen/Konstantenans Nullarrayeps Maschinengenauigkeiti Imaginäre Einheitj Imaginäre Einheitinf ∞

NaN Not a Numberpi Kreiszahl π

Logische Operatorenall Test auf Nichtnullenany Test für ein Nichtnullelementfind Findet Indizesisempty Test auf leeres Arrayisequal Test auf Gleichheit

Arrayssize Arraygrößelength Vektorlängereshape Ändert Form: Doppelpunktend Letzter Indexdiag Diagonalmatrizentril Dreiecksmatrizentriu Dreiecksmatrizenrepmat Blockmatrix

Kontrollstrukturenerror Fehlermeldungfor For-Schleifeif If-Abfrageswitch, case Fallunterscheidungwhile Wiederholungen

Datenanalysismax Maximummin Minimummean arithm. Mittelwertstd Standardabweichungsum Summeprod Produktsort Sortieren

Lineare Algebranorm Normcond Kondition\ Löst LGSeig Eigensystemelu LU-Faktorisierungqr QR-Faktorisierungsvd Singulärwertzerlegung

235 Copyright c© G. Gramlich

m-Filesedit Editorlookfor Suchenargin Anzahl Input-Argumentenargout Anzahl Output-Argumentetype Listet Filewhich Pfadname

Gemischtesclc Löschtdemo Demonstrationendiary Aufzeichnungendir Verzeichnisdoc Hilfehelp Hilfetic, toc Zeitmessungwhat Listet Files

Datentypendouble Double Precisionchar Zeichencell Zellenum2str Zahl2Zeichensparse Sparsematrixstruct Struktur

Workspaceclear Löschtwho Listet Variablenload Läd Variablensave Speichertexit, quit Beendet

Ein- und Ausgabedisp Zeigt Text oder Arrayfprintf Schreibt Datensprintf Schreibt Dateninput Prompt für Eingabe

Numerische Methodenbvp4c Randwertaufgabefft FFTfminbnd Minimierunginterp1 Interpolationode45 Löst ODEpolyfit Polynomfitquadl Numerische Integrationroots Nullstellenspline Splines

Grafikplot 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ächengraphspy Sparsestrukturprint Druckenclf Löscht Figurclose Schließt Figur

236 Copyright c© G. Gramlich

Literatur

Die Literaturangaben sind alphabetisch nachden Namen der Autoren sortiert.

[1] Anderson, E., Bai, Z., Bischof, C., Dem-mel, J., Dongarra, J., Croz, J. D., Green-baum, A., Hammarling, S., McKenney,A., Ostrouchov, S., Sorensen, D.: LA-PACK User’s Guide. Society for Indus-trial and Applied Mathematics, Philadel-phia, PA, USA, 3. Auflage, 1999.

[2] Dongarra, J., Bunch, J., Moler, C., Ste-wart, G.: LINPACK Users’ Guide. So-ciety for Industrial and Applied Mathe-matics, Philadelphia, PA, USA, 1979.

[3] Golub, G., van Loan, C.: Matrix Compu-tations. The Johns Hopkins UniversityPress, 3. Auflage, 1996.

[4] Gramlich, G.: Lineare Algebra.Mathematik-Studienhilfen. Fachbuch-verlag Leipzig im Carl Hanser Verlag,2003.

[5] Gramlich, G.: Anwendungen der Linea-ren Algebra. Mathematik-Studienhilfen.Fachbuchverlag Leipzig im Carl HanserVerlag, 2004.

[6] Gramlich, G., Werner, W.: NumerischeMathematik mit Matlab. dpunkt.verlag,2000.

[7] Greenbaum, A.: Iterative Methods forSolving Linear Systems. Society for In-dustrial and Applied Mathematics, Phil-adelphia, PA, USA, 1997.

[8] Higham, D., Higham, N.: Matlab Guide.Society for Industrial and Applied Ma-

thematics, Philadelphia, PA, USA, 2000.

[9] Kanzow, C.: Numerik linearer Glei-chungssysteme. Springer Verlag, 2005.

[10] Kelley, C.: Iterative Methods for Linearans Nonlinear Equations. Society for In-dustrial and Applied Mathematics, Phil-adelphia, PA, USA, 1995.

[11] Knorrenschild, M.: Numerische Mathe-matik. Mathematik-Studienhilfen. Fach-buchverlag Leipzig im Carl Hanser Ver-lag, 2003.

[12] Lehoucq, R., Sorensen, D., Yang, C.: AR-PACK User’s Guide: Solution of Large-Scale Eigenvalue Problems with Implicit-ly Restarted Arnoldi Methods. Societyfor Industrial and Applied Mathematics,Philadelphia, PA, USA, 1998.

[13] Matlab: Classes and Object-OrientedProgramming. The MathWorks, Na-tick, MA, USA, 2008. http://www.mathworks.de.

[14] Matlab: Data Analysis. The MathWorks,Natick, MA, USA, 2008. http://www.mathworks.de.

[15] Matlab: Graphics. The MathWorks, Na-tick, MA, USA, 2008. http://www.mathworks.de.

[16] Matlab: Mathematics. The MathWorks,Natick, MA, USA, 2008. http://www.mathworks.de.

[17] Matlab: Programming. The MathWorks,Natick, MA, USA, 2008. http://www.mathworks.de.

[18] Matlab: Programming Tips. TheMathWorks, Natick, MA, USA, 2008.

237 Copyright c© G. Gramlich

http://www.mathworks.de.

[19] Meister, A.: Numerik linearer Glei-chungssysteme. Vieweg Verlag, 1999.

[20] Moler, C.: Numerical Computing withMatlab. Society for Industrial andApplied Mathematics, Philadelphia, PA,USA, 2004.

[21] Nitschke, M.: Geometrie. Mathematik-Studienhilfen. Fachbuchverlag Leipzigim Carl Hanser Verlag, 2005.

[22] Rieder, A.: Keine Probleme mit InversenProblemen. Vieweg Verlag, 2003.

[23] Saad, Y.: Iterative Methods for Sparse Li-near Systems. Society for Industrial andApplied Mathematics, Philadelphia, PA,USA, 2. Auflage, 2003.

[24] Shampine, L., Gladwell, I., Thompson,S.: ODEs with Matlab. Cambridge,2003.

[25] Shampine, L. F., Reichelt, M. W.: TheMATLAB ODE suite. SIAM J. SCI. Com-puting, (18):1–22, 1997.

[26] Simulink: Simulation and Model-BasedDesign. The MathWorks, Natick, MA,USA, 2008. http://www.mathworks.de.

[27] Smith, B., Boyle, J., Dongarra, J., Gar-bow, B., Ikebe, Y., Kleme, V., Moler,C.: Matrix Eigensystem Routines-EispackGuide. Springer Verlag, 1976.

[28] Weigand, H., Weth, T.: Computer im Ma-thematikunterrricht. Spektrum Akademi-scher Verlag, 2002.

238 Copyright c© G. Gramlich

Stichwortverzeichnis

’, 44*, 10, 15, 29, 32, 48+, 29, 32, 48, 49-, 29, 32, 48, 49-all, 27-realmin, 34.*, 49, 50.+, 50./, 15, 49.ˆ, 49.\, 49/, 15, 29, 32:, 42, 235ˆ, 29, 48\, 90, 97, 105, 107, 111, 209, 224, 235

abs, 33acos, 38acosd, 38acsc, 38Albrecht Durer, 12all, 235all(any(B)), 54angle, 33ans, 29, 32, 235any, 235any(all(B)), 54any(B(1:2,1:3)), 54any(B), 54Ascii, 25asec, 38asin, 38asind, 38atan, 38atan2, 38

Axiom, 232axis, 69, 236axis equal, 70axis square, 69

backsub, 108, 109bar, 71, 236bar3, 71bar3h, 71barh, 71Basis, 199bench, 28Bessel, 38bicg, 120bicgstab, 120binomial, 199binopdf, 155blkdiag, 52box off, 62box on, 62bvp4c, 150–153, 236bvpinit, 152

C/C++, 17, 38, 77, 82cart2pol, 71cart2sph, 71cat, 224, 225cd, 28ceil, 160ceil(x), 39cell, 224, 226, 236cellplot, 228cgs, 120char, 113, 224, 226–228, 236chol, 116

239

Cholesky, 115cholinc, 120Cholseky, 116circshift, 52class, 226clc, 27, 236clear, 236clear global, 86CleveMoler, 2, 231, 232clf, 236close, 236coeff, 188colorbar, 65colormap, 65colspace, 95, 104combinat, 158compan, 45compose, 173computer, 28, 32, 34cond, 114, 235condest, 114contour, 236conv, 129, 132convert, 188corrcoef, 155cos, 38, 124cosd, 38cot, 38cov, 128, 155cross, 50, 94, 105csc, 38cumprod, 53cumsum, 53cumtrapz, 145–147cylinder, 75, 76

dblquad, 144, 147deconv, 130, 132

degree, 187, 188delete, 28demo, 236demos, 199Derive, 232det, 99, 104, 105diag, 44, 52, 104, 105, 224, 235diag(rot90(B)), 52diary, 236diary off, 25diff, 53, 182digits, 196dir, 28, 236disp, 56, 236doc, 22, 26, 27, 235, 236doc audiovideo, 230doc datatypes, 36, 226doc demo, 26doc demos, 26doc elfun, 26, 33, 38doc elmat, 32, 43doc funfun, 59, 148doc gallery, 121doc general, 83doc graph2d, 63doc graph3d, 63doc graphics, 75doc iofun, 57doc lang, 32, 80, 83doc logo, 231doc ops, 41, 43, 78doc optim, 139, 200, 208doc polyfun, 131doc sim, 220doc sparfun, 121, 222doc specfun, 38doc specgraph, 63doc stats, 155

240 Copyright c© G. Gramlich

doc strfun, 227doc symbolic, 198doc uicontrol, 75doc vissuite, 73dot, 94, 105double, 3, 9, 30, 33, 35, 36, 113, 224, 226,

228, 236dsolve, 147, 149, 190

echo off, 81echo on, 81edit, 83, 236eig, 82, 100, 102–105, 119, 121, 122, 222,

224, 235eigs, 2, 102, 121, 122, 222eigshow, 102Eispack, 16ellipsoid, 75end, 126, 235eps, 32, 33, 111, 118, 235eps*realmin, 34error, 235Euklid, 37Euler, 177, 197, 198, 232Excel, 23, 25exist, 28, 86exit, 19exit, quit, 236exp, 39, 124expand, 169expm, 51, 104, 105, 122eye, 44, 105, 222, 235ezmesh, 63, 68ezplot, 63, 64, 66, 69, 124, 236ezplot3, 66ezsurf, 68

factor, 188

factorial, 156, 157feval, 125fft, 140, 236fftw, 142Fibonacci, 169filebrowser, 22find, 235find(B), 54finite(B(:,3)), 54finverse, 174fix(x), 39fliplr, 52, 53fliplr(A), 52flipud, 11, 52floor, 160floor(x), 39fminbnd, 128, 138, 139, 236fmincon, 203–205, 207, 208fminsearch, 138, 139fopen, 57, 58for, 78, 79, 235format, 31, 56format bank, 31format long, 31format short, 31Fortran, 17, 82, 112Fourier, 140–142, 193–196fourier, 195fplot, 58, 59, 63, 64, 85, 236fprintf, 56–58, 236fread, 58Frobenius, 113, 114fscanf, 58fsolve, 135, 199full, 122, 221function, 40, 82, 83function_handle, 226funm, 51

241 Copyright c© G. Gramlich

funtool, 188fwrite, 58fzero, 59, 135, 136, 176

Galiei, 9gallery, 45Gauss, 110, 190Gauss-Jordan, 108Gauss, 232gausselim, 107–109, 111gaussjord, 108, 111gcd, 171gemres, 120geomean, 155geopdf, 155get, 75global, 86gmres, 120, 121grid, 60, 236gsvd, 128guide, 75

Hadamard, 45hadamard, 45, 128handel, 230Hankel, 38, 45hankel, 45Hdf, 25Heaviside, 84heaviside, 84help, 25–27, 235, 236Hermite, 115, 120, 122Hesse, 184Higham, 121Highams, 45hilb, 45Hilbert, 45HiQ, 232

hist, 71, 236hold, 236Horner, 86horner, 187, 188hostid, 28humps, 64, 135, 142, 146

i, 32, 235IDL, 232Ieee, 30, 33, 34if, 78, 80, 235ifft, 140imag, 33image, 74, 75imagesc, 74, 75imfinfo, 74, 75imread, 74, 75imwrite, 74, 75Inf, 32, 34, 35inf, 32, 235input, 56, 236inputname, 82int, 147, 185int16, 35int32, 35int8, 35, 36interp1, 134, 236interp2, 65intmax, 36intmin, 36inv, 91, 104, 105, 111, 224inverse, 26invhilb, 45ipermute, 225isa, 226iscount, 175isempty, 235isequal, 235

242 Copyright c© G. Gramlich

iskeyword, 86isvarname, 32

j, 32, 235Jacobi, 184, 185jacobian, 183, 184Java, 17, 38Jordan, 104jordan, 104

kron, 51Kronecker, 51

Lapack, 112Laplace, 186, 196, 216laplace, 186, 196legend, 236Leibniz, 181length, 235license, 28limit, 177, 178LinearAlgebra, 199Linpack, 16linprog, 200, 201linsolve, 105linspace, 42, 154, 235load, 21, 45, 236log, 39log10, 39log2, 39loglog, 70logm, 51logo, 231logspace, 42lookfor, 26, 27, 83, 236lookfor complex, 33ls, 28lsqcurvefit, 213lsqlin, 203

lsqnonlin, 213lsqr, 120lu, 105, 115, 223, 235luinc, 120

Macsyma, 232mad, 155magic, 10, 45Maple, 12, 107, 156–158, 171, 175, 189,

190, 192, 196–199, 232maple, 108, 171, 198maple(’with(combinat)’), 199Mathcad, 232Mathematica, 232Matlab, 86, 204matlabrc, 29matlabroot, 28max, 37, 53, 235mean, 53, 80, 155, 162, 235median, 53, 80, 155mesh, 62, 63, 154, 236meshgrid, 62mfun, 196mhelp, 187mhelp Basis, 199mhelp binomial, 199mhelp combinat, 158, 199mhelp LinearAlgebra[Basis], 199mhelp(’LinearAlgebra,Basis’), 199min, 53, 235minres, 120mode, 155movie, 75mtaylor, 189multinomial, 157MuPAD, 232

namelengthmax, 31

243 Copyright c© G. Gramlich

NaN, 32, 34, 84, 235nargchk, 82nargin, 82, 236nargout, 82, 236nchoosek, 156ndgrid, 225ndims, 225norm, 37, 112, 113, 235normest, 114normpdf, 126, 155null, 95, 104, 105, 118num2str, 227, 236

Octave, 232ode113, 150ode15i, 148–150ode15s, 150ode23, 150ode23s, 150ode23t, 150ode23tb, 150ode45, 59, 128, 148, 150, 217, 218, 236odeset, 139ones, 44, 222, 235optimset, 135, 139optimset(’fminbnd’), 139optimset(’fminsearch’), 139orth, 95, 96, 105, 118

Pascal, 17, 45, 82, 228pascal, 45patch, 76path, 27Path Browser, 28pathtool, 28pcg, 120, 121pdepe, 153, 154pdsolve, 190, 192, 193

peaks, 64, 65perms, 156, 157permute, 225pi, 31, 32, 235pie, 71piecewise, 175pinv, 119pinv(A)*b, 106plot, 15, 59–64, 236plot3, 62plotyy, 70, 71pol2cart, 71polar, 71poly, 100, 104, 105, 128, 132polyder, 130, 132polyfit, 132, 209, 210, 236polyint, 130, 132polyval, 131, 132pretty, 169print, 74, 236private, 127prod, 53, 156, 157, 235PV-WAVE, 232pwd, 28

qmr, 120qr, 105, 116, 235quad, 40, 59, 142, 144, 145, 147quad, quadl, 128quadl, 142, 144, 145, 147, 236quadv, 147quit, 19quiver, 72quiver3, 72, 73

rand, 10, 44, 159, 160, 162, 222, 224, 235rand(n), 160randn, 44, 159, 160, 162, 224, 235

244 Copyright c© G. Gramlich

randtool, 163range, 155rank, 96, 104, 105, 118, 127rcond, 111, 114real, 33realmax, 34realmin, 34Record, 227Reduce, 232Reichelt, 150repmat, 235reshape, 52, 235reshape(A,4,3), 52RLaB, 232roots, 132, 135, 138, 236Rosenbrock, 150rosser, 45rot90, 52rot90(A,3), 52rot90(B), 52round, 40round(x), 39rref, 91, 104, 105, 108, 110, 111rsolve, 190Runge-Kutta, 148, 150Runge-Kutte, 150

save, 21, 236saveas, 74Scilab, 232sdvs, 122sec, 38semilog, 236semilogx, 70semilogy, 70set, 75Shampine, 150shiftdim, 225

sim, 220simplify, 169simulink, 214sin, 26, 38, 59, 124sind, 38single, 35, 36size, 43, 45, 82, 235solve, 107, 110, 111, 138, 175, 188, 227sort, 53, 80, 235soundsc, 230sparse, 221, 222, 236spdiags, 221speye, 222sph2cart, 71sphere, 75, 76spline, 134, 227, 236spones, 222sprand, 222sprandn, 222sprintf, 57, 236spy, 223, 236sqrt, 25, 32, 39, 41sqrtm, 51squeeze, 225startup, 29std, 53, 80, 155, 235stem, 71str2num, 227struct, 224, 226, 228, 236subplot, 62, 236subs, 169, 173, 174, 188sum, 53, 235surf, 62, 236svd, 104, 105, 222, 235svds, 122, 222switch, 78, 80switch, case, 235sym, 226, 228

245 Copyright c© G. Gramlich

symmlq, 120symsum, 180

Toplitz, 45tabulate, 155tan, 38Taylor, 189taylor, 188taylortool, 188, 189text, 236tic, 122tic, toc, 236title, 60, 62, 236toc, 122toeplitz, 45trapz, 145, 147tril, 52, 104, 105, 235triplequad, 145, 147triu, 52, 104, 105, 235triu(B), 52type, 28, 174, 236

uiimport, 25uint16, 35uint32, 35uint8, 35, 36unidpdf, 155unifpdf, 155

vander, 45Vandermonde, 45var, 53, 128, 155, 162varargin, 128, 227varargout, 128, 227vectorize, 55, 88, 89ver, 28version, 28vpa, 196, 197

Wathen, 121wav, 230wavread, 230what, 28, 236whatsnew, 28which, 28, 236while, 78, 79, 235who, 21, 236whos, 9, 21whos global, 86why, 128Wilkinson, 45wilkinson, 45

xlabel, 62, 236xlim, 236

ylabel, 62, 236ylim, 236

zeros, 44, 79, 105, 222, 224, 235zlabel, 62

246 Copyright c© G. Gramlich