Einführung in MATLAB

252
aus Sicht eines Mathematikers. unter M. Gramlich Professor für Mathematik an der Hochschule Ulm http://www.hs-ulm.de/gramlich Ulm, 30. Juni 2009

description

aus der Sicht eines Mathematikers - Hochschule Ulm

Transcript of Einführung in MATLAB

Page 1: Einführung in MATLAB

aus Sicht eines Mathematikers.

GunterM. GramlichProfessor für Mathematik an der Hochschule Ulm

http://www.hs-ulm.de/gramlichUlm, 30. Juni 2009

Page 2: Einführung in MATLAB

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[13, 15, 16, 19, 17]. 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 Programmierung,mehrdimensionale Arrays, Zellenarrays,Strukturen, mehr lineare Algebra fürSparse-Probleme, neue DGL-Löser, HilfeBrowser.

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

2 Copyright c© G. Gramlich

Page 3: Einführung in MATLAB

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.

2008: Matlab 7.7 (R2008b)Function Browser (Help Leiste), neue Al-gorithmen für Zufallszahlen, Symbolic Tool-box verwendet standardmäßig nun MuPAD2

statt Maple. Weitere Neuerungen findet manim Hilfesystem unter Release Notes.

2009: Matlab 7.8 (R2009a)Neuerungen findet man im Hilfesystem un-ter Release Notes.

Nicht näher gehe ich auf die Themen: Objekt-orientiertes Programmieren mit Matlab, Java-Schnittstellen, GUI (Graphical User Inter-face) Werkzeuge und die Publikationstools wie

2MuPAD (Multi Processing Algebra Data tool) istein kommezielles Computeralgebrasystem. Es wur-de an der Universität Paderborn unter Leitung von B.Fuchssteiner entwickelt.

HTML, 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)3. 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, 30. Juni 2009 Günter Gramlich

3Eine Erklärung des Begriffs Toolbox findet man imGlossar. Eine Liste aller Toolboxen finden Sie auf derHomepage von The MathWork bzw. in den ReleaseNotes.

3 Copyright c© G. Gramlich

Page 4: Einführung in MATLAB

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 28

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

Page 5: Einführung in MATLAB

34. Vektoren 41

35. Vektorenoperationen 42

36. Matrizen 4336.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 . . 7040.9. Zwei y-Achsen . . . . . . . . . 7140.10. Koordinatentransformationen . . 7140.11. Spezielle Grafikfunktionen . . . 7240.12. Vektorfelder visualisieren . . . . 7240.13. Grafiken exportieren und drucken 7440.14. Digitale Bilder . . . . . . . . . . 7540.15. Animationen . . . . . . . . . . . 7640.16. Handle Graphics . . . . . . . . . 7640.17. Graphical User Interface (GUI) . 7640.18. Geometrische Körper . . . . . . 76

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

41. Vergleichsoperatoren, Vergleichs-funktionen 78

42. Logische Operatoren und logischeFunktionen 78

42.1. Logische Operatoren . . . . . . 7842.2. Logische Funktionen . . . . . . 79

43. Steuerstrukturen 7943.1. for-Schleife . . . . . . . . . . . 7943.2. while-Schleife . . . . . . . . . 8043.3. if-Anweisung . . . . . . . . . . 8143.4. switch-Anweisung . . . . . . . 81

44. m-Files 8144.1. Script-Files . . . . . . . . . . . 8144.2. Function-Files . . . . . . . . . . 8344.3. Namen von m-Files . . . . . . . 8444.4. Editieren von m-Files . . . . . . 8444.5. Zur Struktur eines m-Files . . . 8444.6. Blockkommentare . . . . . . . . 8544.7. Übungsaufgaben . . . . . . . . 85

45. Globale und lokale Variablen 87

46. Namenstest 88

47. Wie man effiziente Programmeschreibt 88

48. Built-in Functions 91

49. Lineare Algebra (Teil 1) 9249.1. Lineare Gleichungssysteme und

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

Raum . . . . . . . . . . . . . . 96

5 Copyright c© G. Gramlich

Page 6: Einführung in MATLAB

49.3. Analytische Geometrie von Ge-raden und Ebenen . . . . . . . . 97

49.4. Reelle Vektorräume und Unter-räume . . . . . . . . . . . . . . 97

49.5. Determinanten . . . . . . . . . . 10149.6. Eigenwerte und Eigenvektoren . 10149.7. Lineare Abbildungen und Matrizen10549.8. Matlab-Funktionen für die Li-

neare Algebra im Überblick . . . 105

50. Lineare Algebra (Teil 2) 10650.1. Lineare Gleichungssysteme (2) . 10650.1.1. Quadratische Systeme . . . . . . 10750.1.2. Überbestimmte Systeme . . . . 10850.1.3. Unterbestimmte Systeme . . . . 10950.2. Lineare Gleichungssysteme (3) . 10950.3. Lineare Gleichungssysteme (4) . 11350.4. Inverse . . . . . . . . . . . . . . 113

51. Lineare Algebra (Teil 3) 11351.1. Normen . . . . . . . . . . . . . 11451.2. Konditionszahlen . . . . . . . . 11651.3. LU-Faktorisierung . . . . . . . . 11751.4. Cholesky-Faktorisierung . . . . 11851.5. QR-Faktorisierung . . . . . . . 11951.6. Singulärwertzerlegung . . . . . 12051.7. Pseudoinverse . . . . . . . . . . 12251.8. Eigensysteme . . . . . . . . . . 12251.9. Iterative Methoden . . . . . . . 12351.9.1. Iterative Methoden für lineare

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

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

wertsysteme . . . . . . . . . . . 12551.10. Funktionen einer Matrix . . . . 126

52. Mehr zu Funktionen 127

52.1. Function-Handles . . . . . . . . 12752.2. Anonymous Functions . . . . . 12852.3. Subfunctions . . . . . . . . . . 12952.4. Nested Functions . . . . . . . . 12952.5. Overloaded Functions . . . . . . 13052.6. Private Functions . . . . . . . . 13052.7. Beispielhafte Funktionen . . . . 131

53. Polynome 13153.1. Darstellung von Polynomen . . . 13153.2. Nullstellen von Polynomen . . . 13153.3. Multiplikation von Polynomen . 13253.4. Addition und Subtraktion von

Polynomen . . . . . . . . . . . 13253.5. Division von Polynomen . . . . 13353.6. Ableiten von Polynomen . . . . 13353.7. Integrieren von Polynomen . . . 13453.8. Auswerten von Polynomen . . . 13453.9. Zusammenfassung . . . . . . . . 135

54. Polynominterpolation 135

55. Polynomapproximation 135

56. Kubische Splineinterpolation 137

57. Stückweise lineare Interpolation 137

58. Nichtlineare Gleichungen (1) 138

59. Optimierung (Teil 1) 142

60. FFT 143

61. Integration 14561.1. Mehrfachintegrale . . . . . . . . 14761.2. Tabellarische Daten . . . . . . . 14861.3. Numerische uneigentliche Inte-

gration . . . . . . . . . . . . . . 150

6 Copyright c© G. Gramlich

Page 7: Einführung in MATLAB

61.4. Zusammenfassung . . . . . . . . 150

62. Differenzialgleichungen 15062.1. Anfangswertaufgaben . . . . . . 15162.2. Randwertaufgaben . . . . . . . 15362.3. Partielle Differenzialgleichungen 156

63. Statistik 158

64. Kombinatorik 15964.1. Fakultäten, Binomial- und Poly-

nomialzahlen . . . . . . . . . . 15964.2. Permutationen ohne Wiederholung 16064.3. Variationen ohne Wiederholung . 16164.4. Kombinationen ohne Wiederho-

lung . . . . . . . . . . . . . . . 16164.5. Permutationen mit Wiederholung 16164.6. Variationen mit Wiederholung . 16164.7. Kombinationen mit Wiederholung 16164.8. Weitere Funktionen . . . . . . . 161

65. Zufallszahlen 16265.1. Gleichverteilte Zufallszahlen . . 16265.2. Normalverteilte Zufallszahlen . 16365.3. Im Vergleich: Gleich- und nor-

malverteilte Zufallszahlen . . . . 16465.4. Andere Verteilungen . . . . . . 166

66. Stochastische Simulationen 16666.1. Näherung für π . . . . . . . . . 16766.2. Zum Ziegenproblem . . . . . . . 16866.3. Das Geburtstagsparadox . . . . 16966.4. Bestimmte Integrale . . . . . . . 171

67. Symbolisches Rechnen 17167.1. Erste Schritte . . . . . . . . . . 17267.2. Wie man Maple-Funktionen ver-

wendet . . . . . . . . . . . . . . 17567.3. Mathematische Funktionen . . . 175

67.4. Algebraische Gleichungen . . . 17967.5. Grenzwerte . . . . . . . . . . . 18067.6. Endliche und unendliche Summen 18367.7. Differenziation . . . . . . . . . 18567.8. Partielle Differenziation . . . . . 18667.9. Der Gradient . . . . . . . . . . . 18667.10. Die Hesse-Matrix . . . . . . . . 18767.11. Die Jacobi-Matrix . . . . . . . . 18767.12. Integration . . . . . . . . . . . . 18867.13. Polynome . . . . . . . . . . . . 19067.14. Taylor-Polynome . . . . . . . . 19067.15. Die Funktionen funtool und

taylortool . . . . . . . . . . 19167.16. Mehrdimensionale Taylor-

Polynome . . . . . . . . . . . . 19167.17. Lineare Algebra . . . . . . . . . 19267.18. Differenzengleichungen . . . . . 19367.19. Differenzialgleichungen . . . . . 19367.20. Die kontinuierliche Fourier-

Transformation . . . . . . . . . 19667.21. Laplace-Transformation . . . . . 19867.22. Spezielle mathematische Funk-

tionen . . . . . . . . . . . . . . 19967.23. Variable Rechengenauigkeit . . . 19967.24. Überblick über alle symboli-

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

weise . . . . . . . . . . . . . . 201

68. Nichtlineare Gleichungen (2) 202

69. Optimierung (Teil 2) 20269.1. Lineare Optimierung . . . . . . 20369.2. Quadratische Optimierung . . . 20469.3. Lineare Ausgleichsaufgaben mit

linearen Nebenbedingungen . . . 20769.4. Nichtlineare Optimierung . . . . 208

7 Copyright c© G. Gramlich

Page 8: Einführung in MATLAB

69.5. Überblick über alle Funktionenzur Optimierung . . . . . . . . . 213

70. Lineare Ausgleichsaufgaben 21370.1. Weitere Aufgaben zur linearen

Ausgleichsrechnung . . . . . . . 213

71. Nichtlineare Ausgleichsaufgaben 218

72. Simulink 21972.1. Erste Schritte . . . . . . . . . . 22072.2. Konstruktion eines Blockdia-

gramms . . . . . . . . . . . . . 22072.3. Weitere Arbeitsschritte . . . . . 22172.4. Ein erstes Beispiel . . . . . . . . 22172.4.1. Konstruktion des Blockdiagramms 22172.4.2. Weitere Arbeitsschritte . . . . . 22272.4.3. Simulation . . . . . . . . . . . . 22372.5. Beispiele . . . . . . . . . . . . . 22372.6. Vereinfachungen . . . . . . . . 22572.7. Kommunikation mit Matlab . . 22672.8. Umgang mit Kennlinien . . . . . 22672.9. Weitere Bemerkungen und Hin-

weise . . . . . . . . . . . . . . 226

73. Dünn besetzte Matrizen 22673.1. Sparsematrizen erzeugen . . . . 22773.2. Mit Sparsematrizen rechnen . . 227

74. Mehrdimensionale Arrays 230

75. Datentypen (Klassen) 23175.1. Zeichenketten (char) . . . . . . 23275.2. Zellen- und Strukturenarrays . . 233

76. Audiosignale (Töne, Musik) 235

77. WWW-Seiten 236

78. Das Matlab-Logo 237

79. Studentenversion 237

80. Cleve’s Corner 237

81. Handbücher 237

82. Progammiertips 237

83. Literatur 237

84. Ähnliche Systeme 238

A. Glossar 239

B. Die Top Matlab-Funktionen 241

Literatur 243

Stichwortverzeichnis 245

8 Copyright c© G. Gramlich

Page 9: Einführung in MATLAB

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 Grundlagefür neue Erkenntnisse und neu Denk- und Ar-beitsweisen. So ermöglichte erst die Erfindungdes Rades den einfachen Transport größererGüter über weitere Entfernungen, mit demFernrohr entdeckte Galilei die Jupitermondeund mit dem Computer lassen sich Berechnun-gen durchführen, die jenseits der Möglichkei-ten von Papier und Beistift liegen. Werkzeugehaben aber auch eine didaktische Dimension,da ihr Einsatz geplant und der Umgang mit ih-nen gelernt und gelehrt werden muss. Darüberhinaus ziehen neue Werkzeuge auch neue Ver-fahren, Arbeits- und Denkweisen nach sich“.([33])

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) 1x1 was 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

Page 10: Einführung in MATLAB

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

Page 11: Einführung in MATLAB

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

Page 12: Einführung in MATLAB

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

Page 13: Einführung in MATLAB

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

Page 14: Einführung in MATLAB

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

Page 15: Einführung in MATLAB

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

Page 16: Einführung in MATLAB

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

Page 17: Einführung in MATLAB

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 ande-rem stehen folgende Toolboxen zur Verfügung:Symbolic Math Toolbox, Financial Toolbox,Image Processing Toolbox, Neural NetworkToolbox, Optimization Toolbox, Partial Diffe-rential Equation Toolbox, Signal ProcessingToolbox, Spline Toolbox, Statistics Toolbox undWavelet Toolbox. Darüber hinaus stellt Matlabeine Schnittstelle zur numerischen Programm-bibliothek Nag (http://www.nag.com) be-reit.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 SymbolicMath Toolbox ist es innerhalb der Matlab-Umgebung möglich, symbolisch zu rechnen.Dadurch kann der Benutzer symbolische undnumerische Berechnungen miteinander ver-knüpfen. In Abschnitt 67 wird diese Toolboxgenauer 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

Page 18: Einführung in MATLAB

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

Page 19: Einführung in MATLAB

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,Bildverarbeitung, Statistik, Mechanik,Hydraulik, Optimierung 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], [28], [29] und natürlich auf die Matlab-Dokumentationen [13, 14, 15, 16, 19, 20], so-wie auf die Toolbox-Dokumentationen [18, 21,22].

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-

19 Copyright c© G. Gramlich

Page 20: Einführung in MATLAB

nen Komponenten können in ihrer Positionie-rung und Größe mit der Maus verändert unddurch Festhalten der Namensliste mit der lin-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,

20 Copyright c© G. Gramlich

Page 21: Einführung in MATLAB

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

21 Copyright c© G. Gramlich

Page 22: Einführung in MATLAB

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

22 Copyright c© G. Gramlich

Page 23: Einführung in MATLAB

Variablen und wird durch Klicken auf dieVariable im Workspace geöffnet, siehe Ab-bildung 7. Alternativ kann der Array Editor

Abbildung 7: Der Array Editor

mittels openvar(’VarName’) aus dem Com-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 75) 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 Matlab

Abbildung 8: Der Editor/Debugger

Scripts und Functions sowie dem grafische De-buggen. Der Editor hebt dabei Matlab Schlüs-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-

23 Copyright c© G. Gramlich

Page 24: Einführung in MATLAB

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

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

24 Copyright c© G. Gramlich

Page 25: Einführung in MATLAB

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

25 Copyright c© G. Gramlich

Page 26: Einführung in MATLAB

2

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

Auffallend ist, dass in der Erklärung der Nameder sqrt-Funktion groß geschrieben ist. Diesdient 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 Beispiel

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

26 Copyright c© G. Gramlich

Page 27: Einführung in MATLAB

Funktion mit dem Namen inverse. Somit istdie Antwort auf

1 >> help inverse

folgende:

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

27 Copyright c© G. Gramlich

Page 28: Einführung in MATLAB

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

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

22. Wie man weitereSysteminformationen erhält

Die Tabelle 3 zeigt Matlab-Funktionen, die

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.

28 Copyright c© G. Gramlich

Page 29: Einführung in MATLAB

Funktion Beschreibungbench Benchmarksver Versionenversion Versionsnummerwhatsnew Release Notes

Tabelle 4: Weitere Infos

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

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

29 Copyright c© G. Gramlich

Page 30: Einführung in 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.40004 >> 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

30 Copyright c© G. Gramlich

Page 31: Einführung in MATLAB

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

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

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 =

31 Copyright c© G. Gramlich

Page 32: Einführung in MATLAB

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

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! Siekönnen diese spezielle Variablen überschrei-ben; vermeiden Sie dies aber, wenn immermöglich.

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

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

32 Copyright c© G. Gramlich

Page 33: Einführung in MATLAB

2 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

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

33 Copyright c© G. Gramlich

Page 34: Einführung in MATLAB

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

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

34 Copyright c© G. Gramlich

Page 35: Einführung in MATLAB

1 >> computer2 ans =3 PCWIN

Aufgabe 10 (Arithmetik) Berechnen Sie:

(a) e700

(b) e710

Beschreiben Sie die Resultate.Lösung:

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

35 Copyright c© G. Gramlich

Page 36: Einführung in MATLAB

7 >> x+2538 ans =9 255

10 >> x+25411 ans =12 25513 >> x-814 ans =15 016 >> x-917 ans =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], [24] und Ab-schnitt 75 für weitere Informationen.

36 Copyright c© G. Gramlich

Page 37: Einführung in MATLAB

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.

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

Eingabeargumente 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 sindvariabel, 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 =

37 Copyright c© G. Gramlich

Page 38: Einführung in MATLAB

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

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 75), 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 doc

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

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

1 >> cos(pi/2)2 ans =

38 Copyright c© G. Gramlich

Page 39: Einführung in MATLAB

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

Tabelle 10: Trigonometrische Funktionen

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.

39 Copyright c© G. Gramlich

Page 40: Einführung in MATLAB

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[−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 diesen

Matlab 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 61) 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 67.

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:

40 Copyright c© G. Gramlich

Page 41: Einführung in MATLAB

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

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

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 (hiery 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 die

41 Copyright c© G. Gramlich

Page 42: Einführung in MATLAB

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

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

42 Copyright c© G. Gramlich

Page 43: Einführung in MATLAB

50 und 51.

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 eckigeoder 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 75 und Matrizen sind speziel-le mehrdimensionale numerische Arrays, sie-he Abschnitt 74. 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 49, 50 und 51.

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

vor, 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 =

43 Copyright c© G. Gramlich

Page 44: Einführung in MATLAB

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.

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

Funktion Bedeutungzeros Nullmatrixones Einsmatrixeye Einheitsmatrixrand Zufallsmatrixrandn Zufallsmatrix

Tabelle 12: Elementare Matrizen

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

44 Copyright c© G. Gramlich

Page 45: Einführung in MATLAB

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

Diagonalmatrizen werden mit der Funktiondiag erzeugt.

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

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-

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

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.

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 j mit Schrittweite 1 erzeugt.

45 Copyright c© G. Gramlich

Page 46: Einführung in MATLAB

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

46 Copyright c© G. Gramlich

Page 47: Einführung in MATLAB

Zeilen 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 alleSpalten 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.0

5.5 7.7

].

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

Aufgabe 23 (Doppelpunkt) Gegeben ist die

Matrix

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

47 Copyright c© G. Gramlich

Page 48: Einführung in MATLAB

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

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

.

48 Copyright c© G. Gramlich

Page 49: Einführung in MATLAB

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 =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^2

2 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=Bund A/B ist eine Lösung X der Matrizenglei-chung X*B=A. Für weiter Einzelheiten sieheAbschnitt 49.

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-mentweise Operationen) zusammen.

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

49 Copyright c© G. Gramlich

Page 50: Einführung in MATLAB

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

Tabelle 15: Elementweise Operationen

Arrayoperationen elementweise zuverstehen sind.

Das folgende Beispiel zeigt eine Arraymulti-plikation:

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

50 Copyright c© G. Gramlich

Page 51: Einführung in MATLAB

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’ \ b8 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 [4].

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

51 Copyright c© G. Gramlich

Page 52: Einführung in MATLAB

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

52 Copyright c© G. Gramlich

Page 53: Einführung in MATLAB

(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

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-

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

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

53 Copyright c© G. Gramlich

Page 54: Einführung in MATLAB

Vektoren 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

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

54 Copyright c© G. Gramlich

Page 55: Einführung in MATLAB

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 =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) er-zeugt (hundert äquidistante Punkte im Inter-vall [0, 3]) und in der zweiten Anweisung wirdder Vektor y mit hundert Koordinaten gene-riert, der die entsprechenden Funktionswerteenthält.

Diese vektorielle Vorgehensweise hat den Vor-teil, dass man auf Schleifen verzichten kann, soeinen übersichtlicheren Programmcode erhält

55 Copyright c© G. Gramlich

Page 56: Einführung in MATLAB

und das Programm schneller abläuft. Einge-baute Matlab-Funktionen erlauben als Einga-beparameter fast immer 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.

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

56 Copyright c© G. Gramlich

Page 57: Einführung in MATLAB

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ügunggestellte 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.1052

8 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.225522 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,

57 Copyright c© G. Gramlich

Page 58: Einführung in MATLAB

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-

Funktion Ascii binärfscanf ×

fprintf ×

fread ×

fwrite ×

Tabelle 18: Dateien lesen und schreiben

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

58 Copyright c© G. Gramlich

Page 59: Einführung in MATLAB

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

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

59 Copyright c© G. Gramlich

Page 60: Einführung in MATLAB

Hierzu nehmen wir an, dass die Messung deszeitlichen Verlaufs der Abkühlung einer Flüs-sigkeit die Werte aus der Tabelle 19 ergab. Wir

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

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

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.

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π

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

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

60 Copyright c© G. Gramlich

Page 61: Einführung in MATLAB

Die Abbildung 11 zeigt das Ergebnis.

0 2 4 6 8−1

−0.5

0

0.5

1Die Sinusfunktion im Intervall [0,2π]

Abbildung 11: Ein einfacher Plot

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

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

61 Copyright c© G. Gramlich

Page 62: Einführung in MATLAB

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

−50

0

50

−50

0

50−5

0

5

x(t)

plot3−Beispiel

y(t)

z(t)

Abbildung 12: 3D-Plot mit plot3

In diesem Beispiel haben wir die Funktio-nen xlabel, ylabel, title und entspre-chend zlabel zur Beschriftung der Abbil-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 der

62 Copyright c© G. Gramlich

Page 63: Einführung in MATLAB

Funktion 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)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 (helpgraph2d), 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-

63 Copyright c© G. Gramlich

Page 64: Einführung in MATLAB

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

Der Aufruf

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

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.

64 Copyright c© G. Gramlich

Page 65: Einführung in MATLAB

−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

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

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 die

−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

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

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

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

65 Copyright c© G. Gramlich

Page 66: Einführung in MATLAB

−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

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.

Aufgabe 47 (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.

−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

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

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

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

Aufgabe 48 (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 49 (Ebene Kurve) Zeichnen Sie dieKurve

x = sin(−t)

y = 1 − cos(−t)

66 Copyright c© G. Gramlich

Page 67: Einführung in MATLAB

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

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

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 50 (Räumliche Kurve) Plotten Sie die

räumliche Kurve

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

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

z(t) = t

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

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)’),7 ylabel(’y(t)’), zlabel(’z(t)’)

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

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 Sie

67 Copyright c© G. Gramlich

Page 68: Einführung in MATLAB

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

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

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

zAbbildung 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,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 positiven

68 Copyright c© G. Gramlich

Page 69: Einführung in MATLAB

−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

x-Achse einschliesst, so ist eine Parameterdar-stellung der Wendelfläche durch

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

2π,

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

69 Copyright c© G. Gramlich

Page 70: Einführung in MATLAB

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

70 Copyright c© G. Gramlich

Page 71: Einführung in MATLAB

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 der

100

101

102

103

100

101

102

Abbildung 26: y =√

x, x ≥ 1

Quadratwurzelfunktion 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 eingewö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-

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

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-larkoordinaten und umgekehrt durchgeführtwerden.

Zum Zeichnen von Polarkoordinaten ist dieFunktion polar geeignet.

71 Copyright c© G. Gramlich

Page 72: Einführung in MATLAB

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

40.12. Vektorfelder visualisieren

Mit der Funktion quiver (doc quiver, helpquiver) können Sie Vektorfelder darstellen.Das ebene Vektorfeld f (x, y) = (−y, x), (x, y) ∈R2 ist in Abbildung 28 dargestellt. Das Vektor-

−3 −2 −1 0 1 2 3

−2

−1

0

1

2

x

y

Abbildung 28: Vektorfeld

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

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

72 Copyright c© G. Gramlich

Page 73: Einführung in MATLAB

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 räumliche 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. © . . . . . . . . . . . . . ©

0 2 4 6 8 10−10

0

100

0.5

1

1.5

xy

Abbildung 30: Vektorfeld

Aufgabe 59 (Vektorfeld) Stellen Sie mit derFunktion quiver3 das räumliche 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

Aufgabe 60 (Vektorfeld) Stellen Sie mit derFunktion quiver das ebene Vektorfeld

f : R2 → R2

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

dar.Lösung: Die Anweisungen

1 [X,Y] = meshgrid(-6:0.8:6);2 U = sin(X); V = sin(Y);3 quiver(X,Y,U,V), grid,

erzeugen die Abbildung 32. © . . . . . . . . . . . . . ©

Aufgabe 61 (Vektorfeld) Stellen Sie mit derFunktion quiver das ebene Vektorfeld

f : R2 → R2

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

dar.Lösung: Die Anweisungen

73 Copyright c© G. Gramlich

Page 74: Einführung in MATLAB

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

−4

−2

0

2

4

6

Abbildung 32: Zu Aufgabe 60

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

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

−10 −5 0 5 10−10

−5

0

5

10

Abbildung 33: Zu Aufgabe 61

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

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

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-

74 Copyright c© G. Gramlich

Page 75: Einführung in MATLAB

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 34: Das bin ich

Figure in Abbildung 34, 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 35 eine Fotografie aus

100 200 300 400 500 600

50

100

150

200

250

300

350

400

450

Abbildung 35: 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 36 zu sehen. Es kann analog der Da-tei gatlin.mat aus der Datei clown.mat er-zeugt werden. In [4] habe ich dieses Bild (alsGrautonbild) für eine Anwendung der Singu-lärwertzerlegung in der Bildverabeitung ver-wendet.

In Tabelle 22 sind wichtige Funktionen fürPixel-Grafiken zusammengefasst.

75 Copyright c© G. Gramlich

Page 76: Einführung in MATLAB

50 100 150 200 250 300

50

100

150

200

Abbildung 36: Clown

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 dieMö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 zur

76 Copyright c© G. Gramlich

Page 77: Einführung in MATLAB

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

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 37. 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 37: 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 62 (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];

77 Copyright c© G. Gramlich

Page 78: Einführung in MATLAB

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’),16 ylabel(’y’), zlabel(’z’),

Die Abbildung 38. zeigt die Situation grafisch.

−100

10−10

010

−5

0

5

10

yx

z

Abbildung 38: 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 denlogischen 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.

Verknüpft man zwei Matrizen mit einem logi-schen und, so ist die entsprechende Ergebnis-komponente 1, wenn die beiden Komponenten

78 Copyright c© G. Gramlich

Page 79: Einführung in MATLAB

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

Tabelle 23: Logische Operatoren

von Null verschieden sind.

1 >> x = [1 0 2 3 0 4];2 >> y = [5 6 7 0 0 8];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 63 (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.

79 Copyright c© G. Gramlich

Page 80: Einführung in MATLAB

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.

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 eine Initia-lisierung weniger Arbeit. Werden Matri-zen schrittweise aufgebaut, dann muss sichMatlab ständig um die Reservierung (Al-lokation) von zusätzlichem Speicher küm-mern, was eventuell auch eine zeitaufwen-dige Kopie der Matrix in einen neuen (grö-ßeren) Speicherbereich nötig macht. Dieskann man verhindern, indem man gleichzu Beginn die Matrix auf die passen-de endgültige Größe setzt und diese an-

schließend schrittweise mit Werten füllt.Betrachten wir hierzu obige erste for-Schleife und wie die Variable x zu ei-nem 11-dimensionalen Zeilenvektor wird.Im ersten Schleifendurchlauf ist x ein Vek-tor der Länge 1 (ein Skalar). Im zwei-ten Durchlauf weist x(2) den Speicher-manager an, x zu einem zweidimensiona-len Vektor zu machen. Im dritten Durch-lauf wird der Speichermanager durch x(3)angewiesen, x in einen Vektor der Länge 3umzuformen. Dies setzt sich fort, bis dasEnde der for-Schleife erreicht ist und x11 Koordinaten hat. Es ist eine Konventi-on in Matlab, dass durch diese Konstrukti-onsweise ein Zeilenvektor entsteht.

Es ist daher effizienter, obige erste for-Schleife wie folgt zu programmieren:

1 >> x = zeros(1,11);2 >> for k = 1:113 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 >> Summe

80 Copyright c© G. Gramlich

Page 81: Einführung in MATLAB

7 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

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, diemit 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 kann

81 Copyright c© G. Gramlich

Page 82: Einführung in MATLAB

ein 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 -23 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 von

der 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:n5 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 39 zeigt ein mögliches Resultat. WollenSie 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.

82 Copyright c© G. Gramlich

Page 83: Einführung in MATLAB

0 2 4 6 80

100

200

300

400

500

600

Abbildung 39: Histogramm zum Script

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

beachten.

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.

83 Copyright c© G. Gramlich

Page 84: Einführung in MATLAB

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-chende Beispiele. Für weitere Informationenüber Funktionen siehe doc function (helpfunction) und Abschnitt 52.

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

84 Copyright c© G. Gramlich

Page 85: Einführung in MATLAB

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 64 (Function-File) Schreiben Sieeinen Function-File, der von einem Vektor xden 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 65 (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 Funktion

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

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

0

0.5

1

1.5

Abbildung 40: Sprungfunktion

Die Funktion heaviside aus Matlab ist ander Stelle t = 0 undefiniert, das heißt Matlabordnet dem Nullpunkt NaN zu. © . . . . . . . . . . . ©

Aufgabe 66 (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].Lösung: Die Funktionen können mit demFunction-File

1 function y = hT(t,T)2 y = ( t>=-T );

berechnet werden. Die Anweisungen

85 Copyright c© G. Gramlich

Page 86: Einführung in MATLAB

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

−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 41: Verschobene Sprungfunktionen

Aufgabe 67 (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

(c) g(t) =

0 t < 0sin(πt

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

diese 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 42. © . . . . . . . . . . . . . ©

Aufgabe 68 (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 .

86 Copyright c© G. Gramlich

Page 87: Einführung in MATLAB

−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 42: Graph der Funktionen

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;

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

Aufgabe 69 (Function-File) Schreiben Sieeinen Function-File, um die Funktion f (t) =

t13 , 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 70 (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 71 (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. Globale

87 Copyright c© G. Gramlich

Page 88: Einführung in MATLAB

Variablen 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 =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 aus-geführt. Deshalb sollten Sie diese vermeiden,wo immer es geht. Im Abschnitt 37 haben wirauf diesen Sachverhalt zum ersten Mal hinge-wiesen. Nahezu alle Matlab-Funktion akzep-tieren „vektorielle“ Argumente, so dass manauf Schleifen häufig tatsächlich auch verzich-ten 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)

88 Copyright c© G. Gramlich

Page 89: Einführung in MATLAB

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

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:n5 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 VariablenZaehler 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 wird

89 Copyright c© G. Gramlich

Page 90: Einführung in MATLAB

durch 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

erzeugt die gewünschte Syntax. Analog setztder Befehl vectorize vor den Zeichen * undˆ einen Punkt und ermöglichst somit eine vek-torisierte Operation.

Aufgabe 72 (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.

90 Copyright c© G. Gramlich

Page 91: Einführung in MATLAB

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,wann immer dies möglich ist.

Aufgabe 73 (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 74 (Programmierung) Plotten Sie die

Funktion

f (x) =2 sin(x) + 3 sin(2x) + 7 sin(3x)

+ 5 sin(4x), x ∈ R

im Intervall [−10, 10].Lösung: Wir nutzen die vektorielle 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 43zu sehen. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

−10 −5 0 5 10−20

−10

0

10

20

Abbildung 43: Zu Aufgabe 74

48. Built-in Functions

Wir haben breits gesehen (siehe Abschnitt37 und Abschnitt 47), dass viele Matlab-

91 Copyright c© G. Gramlich

Page 92: Einführung in MATLAB

Funktionen Matrizen als Argumente akzeptie-ren; es ist daher nicht nötig, die Komponenteneinzeln zu durchlaufen. Verwendet man dieseFunktionen, so beschleunigt dies die Program-mausführung.

Funktionen, die oft verwendet werden oder de-ren Ausführung zeitaufwendig ist, sind meistals ausführbare Files implementiert. Sie hei-ßen built-ins. Built-ins sind Funktionen, dieentweder aus der Lapack/Blas-Library stam-men oder von MathWorks erstellt wurden. Die-se Funktionen sind sehr effizient implementiertund sollten so viel wie möglich anstelle voneigenem M-Code verwendet werden. Ob eineFunktion built-in ist, kann mit which festge-stellt werden:

1 >> which sin2 built-in (C:\Programme\MATLAB\

R2009a\toolbox\matlab\elfun\@double\sin) % double method

Im Gegensatz zu M-file functions kann manden Quellcode dieser Funktionen nicht sehen.

Mit der Funktion exist kann man built-insidentifizieren:

1 >> exist sin2 ans =3 5

Der Rückgabewert 5 bedeutet, dass es sich beider Funktion sin um eine built-in Funktionhandelt.

Übrigens: Mit type kann man sich den M-Code von Funktionen anschauen, die keinebuilt-ins sind. Zum Beispiel zeigt type hilbden M-Code der Funktion hilb, die eine Hil-bert-Matrix erzeugt. type pinv liefert den

Matlab-Code zum Berechnen der Pseudoin-versen über die Singulärwertzerlegung (svd).

49. Lineare Algebra (Teil 1)

Diesen Abschnitt habe ich im Zusammenhangmit meinem Buch [5] geschrieben. Viele Bei-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 Abschnitt 67.

49.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 [5] 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.00006 2.00007 3.0000

Alternativ können wir die Funktion rref ver-wenden. Diese transformiert eine gegebeneMatrix in reduzierte Zeilenstufenform.

92 Copyright c© G. Gramlich

Page 93: Einführung in MATLAB

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 aus [5])

1 >> x = inv(A)*b2 x =3 1.00004 2.00005 3.0000

Wir bestätigen Satz 1.9 aus [5] 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 75 (Lineare Systeme) Berechnen Siedie allgemeine Lösung des linearen Glei-chungssystems 2 4 −2

4 9 −3−2 −3 7

x1

x2x3

=

28

10

.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 76 (Lineare Systeme) Berechnen Siedie allgemeine Lösung des linearen Glei-chungssystems

4x1 − 8x2 = 12

3x1 − 6x2 = 9

−2x1 + 4x2 = − 6.

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 3

93 Copyright c© G. Gramlich

Page 94: Einführung in MATLAB

6 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 77 (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 78 (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 79 (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 17 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

94 Copyright c© G. Gramlich

Page 95: Einführung in MATLAB

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

Aufgabe 80 (Beispiel 1.24 in [5]) 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 81 (Inverse) Finden Sie mit Matlabdie 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 [5].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 [ %1

15

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 [5], so erhält man die Inversezu 2 −17 11

−1 11 −70 3 −2

.Übrigends die Determinante der Matrix ist −1.© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 82 (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. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

95 Copyright c© G. Gramlich

Page 96: Einführung in MATLAB

49.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[5])

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

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

96 Copyright c© G. Gramlich

Page 97: Einführung in MATLAB

(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

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

49.3. Analytische Geometrie vonGeraden und Ebenen

Wir berechnen den Normalenvektor aus Bei-spiel 3.12 in [5]

1 >> cross([1 0 2],[0 -5 8])2 ans =3 10 -8 -5

Mehr Geometrie und Matlab finden Sie bei[25].

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

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.

97 Copyright c© G. Gramlich

Page 98: Einführung in MATLAB

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

98 Copyright c© G. Gramlich

Page 99: Einführung in MATLAB

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 84 (Lineare Unabhängigkeit) Sinddie Vektoren a = (1,−2, 3), b = (5, 6,−1) undc = (3, 2, 1) linear unabhängig (Beispiel 4.16in [5])?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]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 85 (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 ]

99 Copyright c© G. Gramlich

Page 100: Einführung in MATLAB

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 86 (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 87 (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 88 (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.500011 -4.0000

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

Aufgabe 89 (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)];

100 Copyright c© G. Gramlich

Page 101: Einführung in MATLAB

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 78 zeigt die grafische Darstel-

0 0.2 0.4 0.6 0.8 13.8

4

4.2

4.4

4.6

4.8

5

Abbildung 44: Zu Aufgabe 89

lung. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

49.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 90 (Determinanten) Berechnen Siedie 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.

49.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]);

101 Copyright c© G. Gramlich

Page 102: Einführung in MATLAB

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 wissen

wir, 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:

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 =

102 Copyright c© G. Gramlich

Page 103: Einführung in MATLAB

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

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 Eigenwerte

103 Copyright c© G. Gramlich

Page 104: Einführung in MATLAB

und 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 92 (Eigensysteme) Bestimmen Sieeine orthogonale Eigenvektorenmatrix Q, diedie Matrix

A =

[3 11 3

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

104 Copyright c© G. Gramlich

Page 105: Einführung in MATLAB

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

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◦

]und im Zweiten

A =

[1 00 −1

].

−10 −5 0 5 10−10

−8

−6

−4

−2

0

2

4

6

8

10

Abbildung 45: Durch die Datenpunkte in H er-zeugte Haus

Nach zweimaligem Aufruf vonplotHaus(A*H) (zuvor entsprechend Adefinieren!) erhalten wir die Bilder 46 und 47.

49.8. Matlab-Funktionen für die LineareAlgebra im Überblick

Zusammenfassend habe ich in den Tabellen 24und 25 die wichtigsten Funktionen aus Matlabzur Linearen Algebra zusammengestellt. Be-achten Sie, dass zum Beispiel die Funktioneneig, inv usw. vom Overloading Gebrauch ma-chen. Overloading ist ein Mechanismus, der eserlaubt verschiedene Typen von Funktionsar-gumenten zu verwenden. So kann A beim Auf-ruf von eig(A) eine symbolische oder eine nu-merische Matrix sein.

105 Copyright c© G. Gramlich

Page 106: Einführung in MATLAB

−10 −5 0 5 10−10

−8

−6

−4

−2

0

2

4

6

8

10

Abbildung 46: Nach Drehung

−10 −5 0 5 10−10

−8

−6

−4

−2

0

2

4

6

8

10

Abbildung 47: 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

50. Lineare Algebra (Teil 2)

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

106 Copyright c© G. Gramlich

Page 107: Einführung in MATLAB

Numerische Funktionencross Kreuzproduktdet Determinantediag Diagonalmatrixdot Skalarpordukteig Eigenwerte und -vektoreneye Einheitsmatrixexpm Exponentialfunktioninv Inverselu LU-Faktorisierungnull Orth. Basis für Nullraumorth Orth. Basis für Spaltenraumpoly Charakteristisches Polynomqr QR-Faktorisierungrank Rangrref Reduzierte Zeilenstufenformsvd Singulärwertzerlegungtril Untere Dreiecksmatrixtriu Obere Dreiecksmatrixzeros Nullmatrix

Tabelle 25: Lineare Algebra

50.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 wennb im Spaltenraum von A liegt und es nicht nureine, sondern unendlich viele Lösungen gibt.

Aufgabe 93 (Lineare Systeme) Berechnen Siedie allgemeine Lösung des linearen Glei-chungssystems 2 4 −2

4 9 −3−2 −3 7

x1

x2x3

=

2810

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

107 Copyright c© G. Gramlich

Page 108: Einführung in MATLAB

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]

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

50.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 94 (Ausgleich) Berechnen Sie dieLösung des linearen Ausgleichsproblems

Ax � b mit

A =

1 01 11 2

und b =

600

.Lösung: Die eindeutige Lösung ist x =

(5,−3). Diese kann auf die folgenden 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 95 (Lineare Systeme) Berechnen Siein 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

108 Copyright c© G. Gramlich

Page 109: Einführung in MATLAB

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

50.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 96 (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). © . . . . . . .©

50.2. Lineare Gleichungssysteme (3)

Lineare Gleichungssysteme lassen sichsymbolisch in Matlab mit den Funktionensolve und \ lösen. Darüberhinaus gibt esnoch die Maple-Funktionen gausselim undgaussjord, die mit der maple-Funktionangesprochen werden können. Für das maple-Kommando verweise ich sie auf Abschnitt67.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 =

109 Copyright c© G. Gramlich

Page 110: Einführung in MATLAB

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

110 Copyright c© G. Gramlich

Page 111: Einführung in MATLAB

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 97 (Lineare Systeme) Berechnen Siedie allgemeine Lösung des linearen Glei-chungssystems

4x1 − 8x2 = 12

3x1 − 6x2 = 9

−2x1 + 4x2 = − 6.

mit Hilfe der Funktionen gausselim undbacksub, siehe Aufgabe 76.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-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]

111 Copyright c© G. Gramlich

Page 112: Einführung in MATLAB

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

Die Tabelle 26 zeigt zusammenfassend die

Matlab-Syntax Bedeutung\ Löst Ax = brref Red. Zeilenstufenformsolve Löst Gleichungengausselim Gauss-Verfahrengaussjord Gauss-Jordan-Verf.

Tabelle 26: 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-

112 Copyright c© G. Gramlich

Page 113: Einführung in MATLAB

ren. Die Funktion rref bzw. das Kommando \stehen auch für numerische Berechnungen zurVerfügung.

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

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

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

113 Copyright c© G. Gramlich

Page 114: Einführung in MATLAB

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

51.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 27 zeigt die Vektornormen über-sichtlich.

Aufgabe 98 (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

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 27: 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.018817 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]

114 Copyright c© G. Gramlich

Page 115: Einführung in MATLAB

8 disp(sprintf(’%2.1f %15.4f ’,p,norm(x,p)))

9 end

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

Aufgabe 99 (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

Ist das Berechnen der Matrixnorm für p = 2 zuaufwendig, so kann mit der Funktion normestein Näherungswert berechnet werden. Die Ta-belle 28 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 28: Matrizennormen

lich.

Aufgabe 100 (Matrizennormen) BerechnenSie die 1-, 2-, ∞- und Frobenius-Norm für die

115 Copyright c© G. Gramlich

Page 116: Einführung in MATLAB

Matrizen

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

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

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

sagt, dass A gut oder schlecht konditioniertist, wenn κ(A) klein bzw. groß ist, wobei„klein“ und „groß“ vom Kontext abhängigsind. Die Kondition kann mit der Funktioncond berechnet werden, wobei die Normenp=1,2,inf,’fro’ unterstützt werden.

Aufgabe 101 (Konditionszahlen) BerechnenSie die Konditionszahl bezüglich der 2-Normfür die Hilbert-Matrix H10. Bestätigen Sie an-schließend, dass die Kondition gleich dem ma-ximalen Singulärwert dividiert durch den mini-malen Singulärwert dieser Hilbert-Matrix ist.Lösung: Es ist

1 >> cond(hilb(10))2 ans =3 1.6025e+0134 >> max(svd(hilb(10)))/min(svd(hilb

(10)))5 ans =6 1.6025e+013

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

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.

116 Copyright c© G. Gramlich

Page 117: Einführung in MATLAB

51.3. LU-Faktorisierung

Eine LU-Faktorisierung einer quadratischenMatrix A ist eine Faktorisierung der Form A =

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

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

Aufgabe 102 (LU-Faktorisierung) Berechnen

117 Copyright c© G. Gramlich

Page 118: Einführung in MATLAB

Sie von der Matrix

A =

1 1 22 4 −33 6 −5

die LU-Faktorisierung mit teilweiser Pivotisie-rung.Lösung: Es ist

1 >> A = [1 1 2; 2 4 -3; 3 6 -5];2 >> [L,U,P] = lu(A)3 L =4 1 0 05 0.33333 1 06 0.66667 0 17 U =8 3 6 -59 0 -1 3.6667

10 0 0 0.3333311 P =12 0 0 113 1 0 014 0 1 0

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

Aufgabe 103 (LU-Faktorisierung) BerechnenSie von der Matrix

A =

2 4 −24 9 −3−2 −3 7

die LU-Faktorisierung mit teilweiser Pivotisie-rung.Lösung: Es ist

1 >> A = [2 4 -2; 4 9 -3; -2 -3 7];2 >> [L,U,P] = lu(A)3 L =4 1 0 05 -0.5 1 0

6 0.5 -0.33333 17 U =8 4 9 -39 0 1.5 5.5

10 0 0 1.333311 P =12 0 1 013 0 0 114 1 0 0

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

51.4. Cholesky-Faktorisierung

Jede positiv definite Hermitesche Matrix hateine Cholesky-Zerlegung A = R∗R, wobei Reine 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 von

118 Copyright c© G. Gramlich

Page 119: Einführung in MATLAB

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

51.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 104 (QR-Faktorisierung) BerechnenSie von der Matrix

A =

1 −2 −12 0 12 −4 24 0 0

eine reduzierte QR-Faktorisierung.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 105 (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

119 Copyright c© G. Gramlich

Page 120: Einführung in MATLAB

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.000016 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 106 (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

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

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

120 Copyright c© G. Gramlich

Page 121: Einführung in MATLAB

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

20 -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.620732 -0.3215 0.0406 0.667133 -0.9327 -0.1861 -0.2134

Aufgabe 107 (SVD [4]) 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,

121 Copyright c© G. Gramlich

Page 122: Einführung in MATLAB

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.

Aufgabe 108 (SVD [6]) Plotten Sie die zehnsingulären Werte der Hilbert-Matrix H10.Lösung: Die Zeile

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

zeigt wie man Abbildung 48 erzeugen kann.

0 2 4 6 8 1010

−15

10−10

10−5

100

105

Abbildung 48: Die singulären Werte von H10

Beachten Sie den logarithmischen Maßstab aufder y-Achse. © . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

51.7. Pseudoinverse

Die Pseudoinverse ist die Verallgemeinerungder Inversen für Matrizen A, die singulär oder

nicht quadratisch sind ([4]). Die mathemati-sche Notation ist A+. Sie wird in Matlabmit pinv berechnet. Die Pseudoinverse wirdmit Hilfe der Singulärwertzerlegung berech-net. Beispiele ([4]):

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

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

• symmetrische/Hermitesche Matrizen A undB mit B positiv definit oder nicht,

• sind Eigenvektoren gewünscht oder nicht.

Beispiele findet man in Abschnitt 49.6.

122 Copyright c© G. Gramlich

Page 123: Einführung in MATLAB

51.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 Abschnitt73. Es gibt in Matlab iterative Methoden für li-neare Gleichungssysteme und iterative Verfah-ren für Eigensysteme.

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

Funktion Methodebicg BiCGbicgstab BiCG stabilizedcgs CG squaredgmres GMRESlsqr CG für Normalleichungenminres Residuen.pcg CG mit Vorkonditionierungqmr quasi-minimale Residuienm.symmlq Symmetrische LQ

Tabelle 29: 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 29 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], [23] und [27].

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

123 Copyright c© G. Gramlich

Page 124: Einführung in MATLAB

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 0

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

Aufgabe 109 (Konjugierte Gradientenmetho-de) Berechnen Sie mit pcm die Lösung von 2 1 0

1 2 10 1 2

x1

x2x3

=

111

.A x b

Lösung: Es ist

1 >> A = [2 1 0; 1 2 1; 0 1 2];2 >> b = [1; 1; 1];3 >> x = pcg(A,b)4 pcg converged at iteration 2 to a

solution with relative residual3.1e-016

124 Copyright c© G. Gramlich

Page 125: Einführung in MATLAB

5 x =6 0.50007 0.00008 0.5000

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

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

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

]

125 Copyright c© G. Gramlich

Page 126: Einführung in MATLAB

angewendet wird.

51.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 [4].

1 >> A = [1 1; -2 4];2 >> expm(A)3 ans =4 -5.3074 12.69655 -25.3930 32.7820

Weitere Funktionen für Matrixfunktionen fin-den Sie mit help matfun.

Aufgabe 110 (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 =

126 Copyright c© G. Gramlich

Page 127: Einführung in MATLAB

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.

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

Aufgabe 111 (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

]© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

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

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

127 Copyright c© G. Gramlich

Page 128: Einführung in MATLAB

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

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

128 Copyright c© G. Gramlich

Page 129: Einführung in MATLAB

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

zeigen, dass die Variablenwerte so lange gültigbleiben, bis man die Anonymous Function neukonstruiert.

Aufgabe 112 (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 49. © . . . . . . . . . . . . . ©

−4 −2 0 2 40

0.1

0.2

0.3

0.4

µ = 0σ = 2

µ = 0σ = 1

Abbildung 49: Normalverteilungen

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

52.4. Nested Functions

Man kann eine und mehr Funktionen in einerFunktion schachteln. Es muss darauf geachtet

129 Copyright c© G. Gramlich

Page 130: Einführung in MATLAB

werden, 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;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.

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

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

130 Copyright c© G. Gramlich

Page 131: Einführung in MATLAB

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

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

53. Polynome

Polynome haben in der Mathematik eine großeBedeutung. Im wissenschaftlichen Rechnenbenutzt man sie, um kompliziertere Funktionen

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

53.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ßtdie 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

53.2. Nullstellen von Polynomen

Ist ein Polynom als Zeilenvektor dargestellt, soerlaubt die Funktion roots, die Nullstellen des

131 Copyright c© G. Gramlich

Page 132: Einführung in MATLAB

Polynoms 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 Koeffizient1 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 113 (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.0000

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

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

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

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

132 Copyright c© G. Gramlich

Page 133: Einführung in MATLAB

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

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.

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

53.6. Ableiten von Polynomen

Die Matlab-Funktion polyder differenziertein Polynom. Die Ableitung des Polynoms

133 Copyright c© G. Gramlich

Page 134: Einführung in MATLAB

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

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

53.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 114 (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)

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

134 Copyright c© G. Gramlich

Page 135: Einführung in MATLAB

53.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 36 fasst die Funktionen noch-mals zusammen, siehe doc polyfun (helppolyfun).

Funktion Beschreibungconv Multipliziert Polynomedeconv Dividiert Polynomepoly Polynom aus Nullstellenpolyder Berechnet Ableitungpolyint Berechnet Integralpolyval Berechnet Polynomwerteroots Berechnet Nullstellen

Tabelle 30: Polynome in Matlab

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

−2 −1.5 −1 −0.5 0 0.5 1−30

−25

−20

−15

−10

−5

0

5

Abbildung 50: Polynominterpolation

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.

55. Polynomapproximation

Die Funktion polyfit kann auch verwendetwerden, um Daten durch Polynome zu appro-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-

135 Copyright c© G. Gramlich

Page 136: Einführung in MATLAB

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 31. Da diese Daten nahezu auf einer pa-

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 31: Zur Polynomapproximation

rabolischen Kurve liegen, entscheiden wir unsdafür, ein quadratisches Polynom durch diese

Punkte 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

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

136 Copyright c© G. Gramlich

Page 137: Einführung in MATLAB

56. Kubische Splineinterpolation

Für viele Anwendungen ist die Polynominter-polation ungeeignet, insbesondere dann, wennder Grad des Interpolationspolynoms „groß“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’)

0 10 20 30 40 50 600

1

2

3

4

5

6

7

8

9

10

PolynomDatenSpline

Abbildung 52: Kubische Splineinterpolation

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

137 Copyright c© G. Gramlich

Page 138: Einführung in MATLAB

4 yi = interp1(t,y,tt);5 plot(tt,yi,t,y,’ro’,tt,humps(tt)),6 grid on,7 legend(’Interpolationsfunktion’,’

Punkte’,’humps’),

0 0.5 1 1.5 2 2.5 3−20

0

20

40

60

80

100

InterpolationsfunktionPunktehumps

Abbildung 53: Lineare Interpolation

58. 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 Funktionsaufrufesgibt 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 von

138 Copyright c© G. Gramlich

Page 139: Einführung in MATLAB

Optimierungsproblemen 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 68. Diese Funktion gehört aberzur Optimization Toolbox und ist deshalb nurdann verwendbar, wenn diese installiert ist.

Aufgabe 115 (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 116 (Nichtlineare Gl.) Berechnen Siemit fzero die Lösung der nichtlinearen Glei-chung

ex + 2x = 0

Die Abbildung 54 zeigt die Geometrie.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 117 (Nichtlineare Gl.) Finden Sie die

−2 −1 0 1 2−5

0

5

10

x

exp(x)+2 x

Abbildung 54: Graph von f (x) = ex+2x, x ∈ R

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

Die Nullstelle liegt offensichtlich im Inter-vall [0,1]. Mit

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

sieht man, dass die Nullstelle der Punktx = 0.6772 ist.

(b) Wir zeichnen zunächst den Graphen derFunktion (s. Abbildung 56) mit

139 Copyright c© G. Gramlich

Page 140: Einführung in MATLAB

0 2 4 6 8 10−5

0

5

10

15

x

f(x)

Abbildung 55: Graph der Funktion f1 im Inter-vall [0,10]

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 56: 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 57),erkennt man, dass die beiden Nullstellen

0 1 2 3 4 5 6−50

0

50

100

150

200

250

x

f(x)

Abbildung 57: 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

140 Copyright c© G. Gramlich

Page 141: Einführung in MATLAB

und

1 >> fzero(@f3,[4,5])2 ans =3 4.7079

erkennt man, dass sie bei x1 = 0.6053 undx2 = 4.7079 liegen.

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

Aufgabe 118 (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 119 (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 120 (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.

141 Copyright c© G. Gramlich

Page 142: Einführung in MATLAB

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

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 121 (Optimierung) Lösen Sie das

142 Copyright c© G. Gramlich

Page 143: Einführung in MATLAB

Problem

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-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 122 (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.© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

60. 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 ∈ Cn×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:

143 Copyright c© G. Gramlich

Page 144: Einführung in MATLAB

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

Aufgabe 123 (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 58 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 58: Zu Aufgabe 126

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

Aufgabe 124 (FFT, „Kosinus“) Berechnen Sie

die 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 125 (FFT, „Sinus“) Berechnen Siedie diskrete Fourier-Transformation des Vek-tors x = (0, 1, 0,−1). Machen Sie sich jedocherst 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 126 (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

144 Copyright c© G. Gramlich

Page 145: Einführung in MATLAB

10 >> y3 = fft([4,0,1,0,2,0,1,0]).’11 y3 =12 813 214 415 216 817 218 419 2

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

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

61. 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 59 zeigt die Geometrie in Form

0 0.2 0.4 0.6 0.8 10

20

40

60

80

100

Abbildung 59: Fläche unter humps in [0, 1]

145 Copyright c© G. Gramlich

Page 146: Einführung in MATLAB

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

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 60 zeigt die dazugehörige Geo-metrie.

Aufgabe 127 (Numerische Integration) Be-rechnen Sie die Länge der Zykloide

f : R→ R2

t 7→ (t − sin t, 1 − cos t)

0 0.2 0.4 0.6 0.8 10

0.2

0.4

0.6

0.8

1

Abbildung 60: Fläche unter xx in [0, 1]

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

146 Copyright c© G. Gramlich

Page 147: Einführung in MATLAB

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

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.

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

147 Copyright c© G. Gramlich

Page 148: Einführung in MATLAB

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 129 (Doppelintegral) Berechnen Siedas Integral ∫ 2

y=0

∫ 1

x=0(x2) dx dy

Lösung: Es ist

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

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

61.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 mitder 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 ist

148 Copyright c© G. Gramlich

Page 149: Einführung in MATLAB

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

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 61 zeigt den Graph der humps-

−1 −0.5 0 0.5 1 1.5 2−20

0

20

40

60

80

100fF

−1

Abbildung 61: humps-Funktion und Integral-funktion im Intervall [−1, 2]

Funktion und den Graph der dazugehörigen

Integralfunktion, die mit cumtrapz berechnetwurde. Die Abbildung wurde einfach mit

1 >> plot(t,f,t,z), grid,2 >> legend(’f’,’F_{-1}’)

erzeugt.

Aufgabe 131 (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−∞.Lösung: Die Abbildung 62 zeigt die Graphen.

−3 −2 −1 0 1 2 30

0.2

0.4

0.6

0.8

1

fF

−∞

Abbildung 62: Die Graphen zu Aufgabe 131

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

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

149 Copyright c© G. Gramlich

Page 150: Einführung in MATLAB

61.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 werdenkann; man beschränkt sich dann auf die Be-rechnung des letzten Integrals mit einer be-kannten Quadraturformel. Wir zeigen die Ideean dem Beispiel

∫ ∞1 1/x5 dx = 1/4, siehe auch

Aufgabe 176. Statt∫ ∞

1 1/x5 dx berechnen wir∫ 71 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.

61.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 62, können dann ein-gesetzt werden. Die Funktion quadv ist einevektorrielle Form der Funktion quad. Liegt der

Integrand 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 67.12 und 67.19.

62. Differenzialgleichungen

Eine Gleichung zur Bestimmung einer Funkti-on heißt Differenzialgleichung, wenn sie min-destens eine Ableitung der gesuchten Funktionenthä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 Abschnitt67.19 für symbolisches Lösen von Differenzi-algleichungen.

150 Copyright c© G. Gramlich

Page 151: Einführung in MATLAB

62.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-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 63 (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 63: Skalares Anfangswertproblem

die Funktion rSeite, der 2-Vektor tspan,der die Zeitspanne der Simulation spezifiziertund der Anfangswert y0. Zwei Argumente t

151 Copyright c© G. Gramlich

Page 152: Einführung in MATLAB

und 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: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 67.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 64 zeigt die numerische undsymbolische (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).

152 Copyright c© G. Gramlich

Page 153: Einführung in MATLAB

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 64: ImplizitesAnfangswertproblem

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, Shampineund Reichelt haben Ergebnisse ihrer Arbeit in[30] 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 [30] 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.

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

153 Copyright c© G. Gramlich

Page 154: Einführung in MATLAB

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

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ösungu(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

154 Copyright c© G. Gramlich

Page 155: Einführung in MATLAB

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.

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 odefun wird 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 132 (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).

155 Copyright c© G. Gramlich

Page 156: Einführung in MATLAB

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

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

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

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

156 Copyright c© G. Gramlich

Page 157: Einführung in MATLAB

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)

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 65 zeigt das Ergebnis.

Aufgabe 133 (Partielle DGL) Bestätigen Sie,dass

u(x, t) = e−π2t sin(πx)

157 Copyright c© G. Gramlich

Page 158: Einführung in MATLAB

0

0.5

1

0

0.50

0.5

1

xt

u

Abbildung 65: Lösung der PDE

eine Lösung des Wärmeleitungsproblemsut(x, t) = uxx(x, t)u(x, 0) = sin(πx)u(0, t) = u(1, t) = 0

0 ≤ x ≤ 1, t ≥ 0

ist.Lösung: Leiten wir u(x, t) = e−π

2t sin(πx)nach t ab, so erhalten wir die linke Seite 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. © . . . . . . . . . . . . . . . . . . . . . . . . . . .©

63. Statistik

Vorhersagen sind schwierig – vor allem überdie Zuknnft

Niels Bohr.

Mit der Statistics Toolbox stehen Ihnen Statis-tikfunktionen zur Verfügung. Die Tabelle 32zeigt ein paar grundlegende Funktionen fürdie beschreibende Statistik. Ein paar Dichte-

Beschreibende Statistikcorrcoef Korrelationsmatrixcov Kovarianzmatrixgeomean Geometrischer Mittelwertmad Mittlere absolute Abw.mean Arithmetischer Mittelwertmedian Zentralwert (Median)mode Häufigster Wertrange Spannweitestd Standardabweichungtabulate Häufigkeitstabellevar Varianz

Tabelle 32: Grundlegende Funktionen

funktionen sind in Tabelle 33 zu sehen. Mit

Dichtefunktionenbinopdf Binomialdichtegeopdf Geometrische Dichtenormpdf Normaldichteunidpdf Diskrete gleichmäßige Dichteunifpdf Stetige gleichmäßige Dichte

Tabelle 33: Dichtefunktionen

der Funktion disttool können Sie Dichte-funktionen und Verteilungsfunktionen visuali-sieren. Die Abbildung 66 zeigt die Dichtefunk-tion der Standardnormalverteilung.

Mit doc stats (help stats) erhalten Sieeinen Überblick über alle Funktionen der Sta-tistics Toolbox.

158 Copyright c© G. Gramlich

Page 159: Einführung in MATLAB

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

0.2

0.4

0.6

0.8

Abbildung 66: disttool

64. Kombinatorik

Wir zeigen, wie man in Matlab kombinatori-sche Probleme lösen kann.

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

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

159 Copyright c© G. Gramlich

Page 160: Einführung in MATLAB

Aufgabe 134 (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 kObjekte 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 135 (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 136 (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

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

64.2. Permutationen ohne Wiederholung

Die Anzahl der Permutationen ohne Wi-derholung kann man mit den Funktionen

160 Copyright c© G. Gramlich

Page 161: Einführung in MATLAB

factorial, prod, Maple-factorial unddem Maple-Zeichen ! berechnen, siehe Ab-schnitt 64.1. Die Permutationen selbst sind mitder Funktion perms zu erhalten.

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

Angenommen wir wollen V(30, 5) berechnen,so geht das zum Beispiel wie folgt:

1 >> factorial(30)/factorial(30-5)2 ans =3 17100720

oder aber

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

64.4. Kombinationen ohne Wiederholung

Siehe Abschnitt 64.1.

64.5. Permutationen mit Wiederholung

Aufgabe 137 (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

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

64.6. Variationen mit Wiederholung

Aufgabe 138 (Variationen m.W.) BerechnenSie mit Matlab VW(26, 6).Lösung: Es ist VW(n, k) = nk.

1 >> VW = 26^62 VW =3 308915776

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

64.7. Kombinationen mit Wiederholung

Aufgabe 139 (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

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

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

161 Copyright c© G. Gramlich

Page 162: Einführung in MATLAB

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

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

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

162 Copyright c© G. Gramlich

Page 163: Einführung in MATLAB

5 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)-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 140 (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 rundetzur 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) );

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

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

163 Copyright c© G. Gramlich

Page 164: Einführung in MATLAB

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-weichung 5 erzeugen, so erreicht man diesdurch:

1 10+5*randn(n,1)

65.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 67.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 67 zeigt, wiesich 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

9 Punkte = randn(10000,2);

164 Copyright c© G. Gramlich

Page 165: Einführung in MATLAB

−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 67: Zufallszahlen

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 68, 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 68: Zufallszahlen

zwischen rand und randn klar zu machen.

Aufgabe 141 (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 142 (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 143 (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;.

165 Copyright c© G. Gramlich

Page 166: Einführung in MATLAB

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

65.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 69 zeigt eine Exponen-

0 2 4 6 80

10

20

30

40

50

Counts

Values

Samples

Abbildung 69: Exponentialverteilung

tialverteilung mit Erwartungwert 1.

66. Stochastische Simulationen

Eine stochastische Simulation liegt vor, wennes um die Lösung von Problemen geht, bei

denen 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 70 in zehn Teilintervalle derLänge 0.1 zerlegt und zu jedem „Spiel“ wirdfestgelegt, in welches Teilintzervall die gezo-

166 Copyright c© G. Gramlich

Page 167: Einführung in MATLAB

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 70: Empirische Verteilungen

gene Zufallszahl fällt. Abbildung 70 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 144 (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. Die

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

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

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

167 Copyright c© G. Gramlich

Page 168: Einführung in MATLAB

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 etwadem 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 = AnzahlimKreis

14 + 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 71 zeigt das Ergebnis der Si-

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 71: Näherung für π

mulation. Siehe auch Aufgabe 192.

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

168 Copyright c© G. Gramlich

Page 169: Einführung in MATLAB

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

33 %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’);

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

169 Copyright c© G. Gramlich

Page 170: Einführung in MATLAB

haben? 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 365Tage 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 34 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 34: Zum Geburtstagsparadox

170 Copyright c© G. Gramlich

Page 171: Einführung in MATLAB

66.4. Bestimmte Integrale

Das bestimmte Integral∫ 1

0xx dx

kann von Matlab nicht exakt (symbolisch) be-rechnet werden, siehe Abschnitt 61. Wir kön-nen aber mit Hilfe der Näherung∫ 1

0f (x) dx ≈

1n

n∑i=1

f (xi)

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

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

Achtung! Seit Matlab 7.7 (R2008b) basiert

171 Copyright c© G. Gramlich

Page 172: Einführung in MATLAB

die Symbolic Math Toolbox auf MuPAD undnicht mehr auf Maple. Ist Maple nicht zusätz-lich installiert, so können Maple-Funktionennicht mehr aus Matlab heraus verwendet wer-den. Dafür steht nun das CA-System MuPADzur Verfügung. Mit der Funktion mupad kön-nen Sie ein MuPAD Notebook erzeugen undüber die Funktionen getVar und setVar istzwischen den beiden Systemen Matlab undMuPAD ein Datenaustausch möglich. Mit denFunktionen evalin und feval (statt maple)können MuPAD Ausdrücke in Matlab verwen-det werden, siehe doc symbolic.

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

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

172 Copyright c© G. Gramlich

Page 173: Einführung in MATLAB

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

Aufgabe 146 (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/5

4

5 b) >> sym(2+3*4)6 ans =7 148

9 c) >> sym(1+2/3*4)10 ans =11 11/3

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

Aufgabe 147 (Potenzregeln) Bestätigen Siedie folgenden Rechenregeln:

(a) am · an = am+n

(b) am

an = am−n

Verwenden Sie die Funktion simplify.Lösung:

1 >> syms a n m2 >> simplify(a^m*a^n)3 ans =4 a^(m+n)5 >> simplify(a^m/a^n)6 ans =7 a^(m-n)

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

Aufgabe 148 (Rechnen) Berechnen Sie denAusdruck √

16 + cos(π/3)3√8 + 4

symbolisch und numerisch.Lösung: Symbolische Rechnung:Sowohl

1 >> sym((sqrt(16)+cos(pi/3))/(8^(1/3)+4))

also auch

173 Copyright c© G. Gramlich

Page 174: Einführung in MATLAB

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

Somit ist die Vereinfachung dann also

x2 + 2xy + y2

x2 − y2 =x − yx + y

.

Anmerkung: Man kann statt simplify auchden Befehl simple verwenden. © . . . . . . . . . .©

Aufgabe 150 (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 151 (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 152 (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. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

174 Copyright c© G. Gramlich

Page 175: Einführung in MATLAB

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

67.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 irgendeinspezieller 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 =

175 Copyright c© G. Gramlich

Page 176: Einführung in MATLAB

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)2 ans =3 diff(f(x),x)*g(x)+f(x)*diff(g(x),x

)

Aufgabe 153 (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)]

176 Copyright c© G. Gramlich

Page 177: Einführung in MATLAB

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

177 Copyright c© G. Gramlich

Page 178: Einführung in MATLAB

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.

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 43

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

178 Copyright c© G. Gramlich

Page 179: Einführung in MATLAB

67.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 154 (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))]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 155 (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 156 (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]

179 Copyright c© G. Gramlich

Page 180: Einführung in MATLAB

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

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

67.5. Grenzwerte

Die Folge

an =2n + 1

4n, n ≥ 1

hat den Grenzwert 1/2. Der folgende Matlab-Code bestätigt dies:

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

180 Copyright c© G. Gramlich

Page 181: Einführung in MATLAB

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 Betragsfunktion f (x) = abs(x) = |x|,x ∈ R und x = 0, keinen Grenzwert. In Matlaberhalten wir:

1 >> syms x2 >> limit((abs(x)-abs(0))/(x-0),x

,0)3 ans =4 NaN

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

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

181 Copyright c© G. Gramlich

Page 182: Einführung in MATLAB

Aufgabe 157 (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 158 (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.

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

Aufgabe 159 (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 160 (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 161 (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

(d) limx→∞

3x/4x = 0

(e) limx→0

(√

x + 1 − 1)/x = 1/2

Lösung: Wir zeigen nur den ersten Teil derAufgabe in Matlab:

1 >> limit((x^2-2*x+5)/(cos(x)),x,0)2 ans =

182 Copyright c© G. Gramlich

Page 183: Einführung in MATLAB

3 5

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

Aufgabe 162 (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

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

67.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 beweistman4:

∞∑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 163 (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

.

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

Aufgabe 164 (Endliche Summen) BestätigenSie die folgenden Ergebnisse

4Zum Beispiel mit Hilfe der Theorie der Fourier-Reihen.

183 Copyright c© G. Gramlich

Page 184: Einführung in MATLAB

(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 165 (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 166 (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 167 (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 .

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

184 Copyright c© G. Gramlich

Page 185: Einführung in MATLAB

Aufgabe 168 (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 169 (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.

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

67.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 170 (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)

185 Copyright c© G. Gramlich

Page 186: Einführung in MATLAB

sieht man, dass

ddx

(x2ex) = 2xex + x2ex

ist. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

Aufgabe 171 (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 172 (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. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

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

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

186 Copyright c© G. Gramlich

Page 187: Einführung in MATLAB

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]

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

67.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 173 (Jacobi-Matrizen) Berechnen Siedie Jacobi-Matrix der Funktion f : R2 → R3,(x, y) 7→ (x+y, x2 sin y, exy) in einem beliebigen

187 Copyright c© G. Gramlich

Page 188: Einführung in MATLAB

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

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

67.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 174 (Integration) Berechnen Sie dasunbestimmte Integral∫

x sin(x) dx.

Lösung: Mit

188 Copyright c© G. Gramlich

Page 189: Einführung in MATLAB

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 175 (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 176 (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 177 (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 178 (Ableitungen, Integrale) Be-rechnen Sie symbolisch mit den Matlab-Funktionen diff und int die Ableitungenbzw. Integrale folgender Exponentialfunktio-nen:

189 Copyright c© G. Gramlich

Page 190: Einführung in MATLAB

(a) ex

(b) 2x

(c) 10x

(d) ax

Lösung: Es ist

1 >> syms x a2 >> diff(exp(x))3 ans =4 exp(x)5 >> int(exp(x))6 ans =7 exp(x)8 >> diff(2^x)9 ans =

10 2^x*log(2)11 >> int(2^x)12 ans =13 1/log(2)*2^x14 >> diff(10^x)15 ans =16 10^x*log(10)17 >> int(10^x)18 ans =19 1/log(10)*10^x20 >> diff(a^x)21 ans =22 a^x*log(a)23 >> int(a^x)24 ans =25 1/log(a)*a^x

Damit gilt zusammenfassend:

f (x) f ′(x)∫

f (x) dxex ex ex + c2x ln(2)2x 2x/ ln(2) + c10x ln(10)10x 10x/ ln(10) + cax ln(a)ax ax/ ln(a) + c

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

67.13. Polynome

Wir zeigen nun Beispiele für den Umgang mit„symbolischen Polynomen“, siehe Abschnitt53 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 36. Hilfe zu den Maple-Funktionen erhal-ten Sie mit mhelp <Funktionsname>.

67.14. Taylor-Polynome

Die Funktion taylor erlaubt das symbolischeBerechnen des Taylor-Polynoms einer Funkti-on. Zum Beispiel liefert

1 >> syms x2 >> taylor(sin(x))

190 Copyright c© G. Gramlich

Page 191: Einführung in MATLAB

Funktion Bedeutungcoeff Koeffizient (Maple)convert Konvertiert (Maple)degree Grad des Polynoms (Maple)factor Linearfaktoren (Maple)horner Horner-Darstellungsolve Nullstellensubs Ersetzen

Tabelle 36: Zum symbolischen Rechnen mitPolynomen

das Taylor-Polynom bis zur fünften Ordnung:

1 ans =2 x-1/6*x^3+1/120*x^5

Aufgabe 179 (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.

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

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

Abbildung 72: 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 73.

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

191 Copyright c© G. Gramlich

Page 192: Einführung in MATLAB

Abbildung 73: Das GUI von taylortool

Entwicklungspunkt (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 180 (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 181 (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 =13 0.0156

Der relative Fehler ist demnach zirka 1.5%. ©©

67.17. Lineare Algebra

Siehe Abschnitt 49, 50 und 51.

192 Copyright c© G. Gramlich

Page 193: Einführung in MATLAB

67.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 182 (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 72 wird gezeigt, wie man Diffe-renzengleichungen mit Simulink numerisch si-muliert.

67.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önnensogar 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

193 Copyright c© G. Gramlich

Page 194: Einführung in MATLAB

Aufgabe 183 (Differenzialgleichung) Berech-nen Sie die allgemeine Lösung der gewöhnli-chen Differenzialgleichung

y′(t) = −y(t) − 5e−t sin(5t)

siehe Abschnitt 62.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 184 (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 62.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 185 (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 74 zeigt die Lösung. ©

0 5 10 15−0.1

−0.05

0

0.05

t

−1/23 cos(12 t)+1/23 cos(11 t)

Abbildung 74: Lösung der AWA

©

Wir berechnen die Lösung der Randwertaufga-be

RWA :

u′′ = 6xu(0) = 0, u(1) = 1

0 ≤ x ≤ 1.

aus Abschnitt 62.2.

194 Copyright c© G. Gramlich

Page 195: Einführung in MATLAB

1 >> u = dsolve(’D2u-6*x=0’,2 ’u(0)=0’,’u(1)=1’,’x’)3 u =4 x^3

Aufgabe 186 (Randwertaufgabe) BerechnenSie die Lösung der Randwertaufgabe

RWA :

y′′ = −yy(0) = 3, y(π/2) = 7

0 ≤ x ≤ π/2.

aus Abschnitt 62.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 75 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 75: Lösung der eindimensionalenWellengleichung

Graph der Lösungsfunktion, der mit

1 >> ezsurf(’exp(-(t+x)^2)+2 exp(-(t-x)^2)’)

erzeugt wurde. Man erkennt, dass die allgemei-ne Lösung der homogenen Wellengleichungeine Überlagerung zweier gegenläufiger Wel-len darstellt.

Aufgabe 187 (Differenzialgleichung) Berech-nen Sie mit pdsolve eine Lösung der partiel-len Differenzialgleichung

axux + btut = 0.

195 Copyright c© G. Gramlich

Page 196: Einführung in MATLAB

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 188 (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 zum Beispiel:

1 >> dsolve(’Dy+t*y=t’)2 ans =3 1+exp(-1/2*t^2)*C1

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

Aufgabe 189 (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 = 0

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

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

67.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 beiden 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 vom

196 Copyright c© G. Gramlich

Page 197: Einführung in MATLAB

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

Rechteck

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

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

197 Copyright c© G. Gramlich

Page 198: Einführung in MATLAB

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 190 (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 76 zeigt die Funktion f und ihre Fouri-

−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 76: Zur kontinuierlichen Fourier-Transformation

er-Transformierte f . © . . . . . . . . . . . . . . . . . . . .©

Die diskrete Fourier-Transformierte haben wirin Abschnitt 60 besprochen.

67.21. Laplace-Transformation

Die Laplace-Transformation kann symbolischmit der Funktion laplace berechnet werden.Siehe Aufgabe 177 für ein Beispiel.

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

198 Copyright c© G. Gramlich

Page 199: Einführung in MATLAB

3 ans =4 1/(a+s)

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

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

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

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 =

199 Copyright c© G. Gramlich

Page 200: Einführung in MATLAB

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 192 (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 193 (Geschwindigkeit) Sowohl

∞∑n=0

1n!

= limn→∞

n∑k=0

1k!

als auchlimn→∞

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

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

200 Copyright c© G. Gramlich

Page 201: Einführung in MATLAB

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

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

67.24. Überblick über alle symbolischenFunktionen

Mit doc symbolic (help symbolic) erhal-ten Sie einen Überblick über alle Funktionender Symbolic Math Toolbox.

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

• 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

201 Copyright c© G. Gramlich

Page 202: Einführung in MATLAB

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.

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

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

202 Copyright c© G. Gramlich

Page 203: Einführung in MATLAB

Zu beachten ist, dass jedes Optimierungs-problem als Minimierungsproblem formuliertwerden muss.

69.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 alsAbkü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]; l = [0;0];

und dem Funktionsaufruf

1 [x,fWert] = linprog(c,A,b,[],[],l)

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.

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 verweisen

203 Copyright c© G. Gramlich

Page 204: Einführung in MATLAB

wir auf die Online-Hilfe, siehe doc linprog(help linprog).

Aufgabe 194 (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 77 grafisch

0 2 4 6 80

2

4

6

8Lineare Optimierungsaufgabe

Zulässige Menge

−7

−7

−7

−7

Abbildung 77: 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.0000

9 3.000010 fx =11 -7.0000

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

69.2. Quadratische Optimierung

Die Quadratische Optimierung gehört bereitsin die Klasse der Nichtlinearen Optimierungs-aufgaben, stellt aber bereits einen wichtigenSpezialfall 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

204 Copyright c© G. Gramlich

Page 205: Einführung in MATLAB

1 [x,qWert] = quadprog(H,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 geschriebenwerden. 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 problem3 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 195 (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];

205 Copyright c© G. Gramlich

Page 206: Einführung in MATLAB

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

Aufgabe 196 (Quadratische Optimierung) Lö-sen Sie in Matlab die folgende quadratischeOptimierungsaufgabe

Minimiere(x1, x2) ∈ R2 x2

1 − 2x1x2 + 2x22 − 2x1 − 6x2

u. d. N.x1 + x2 ≤ 2

x1 − 2x2 ≥ −2x1 ≥ 0, x2 ≥ 0

Die Lösung ist x∗ = (4/5, 6/5).Lösung:

1 >> H = [2 -2; -2 4];2 >> f = [-2; -6];3 >> A = [1 1; -1 2];4 >> b = [2; 2];5 >> lb = [0; 0];6 >> [x,fx] = quadprog(H,f,A,b

,[],[],lb)7 Warning: Large-scale method does

not currently solve thisproblem formulation,

8 switching to medium-scale method.9

10 > In C:\MATLAB6p5\toolbox\optim\quadprog.m at line 213

11 Optimization terminatedsuccessfully.

12 x =13 0.8000

14 1.200015 fx =16 -7.2000

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

Aufgabe 197 (Quadratische Optimierung) Lö-sen Sie in Matlab die Quadratische Optimie-rungsaufgabe (Skript: Optimierung)

Minimiere(x, y) ∈ R2 q(x, y) = x2 + x

Erklären Sie!Lösung: Aus der Theorie (Skript: Optimie-rung) wissen wir, dass es unendlich viele Lö-sungen gibt. Eine davon berechnet uns Matlab:

1 >> H = [2 0; 0 0]; b = [1; 0];2 >> [x,q] = quadprog(H,b)3 Warning: Large-scale method does

not currently solve thisproblem formulation,

4 switching to medium-scale method.5 > In quadprog at 2426 Optimization terminated.7 x =8 -0.50009 0

10 q =11 -0.2500

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

Aufgabe 198 (Quadratische Optimierung) Lö-sen Sie in Matlab die Quadratische Optimie-rungsaufgabe (Skript: Optimierung)

Minimiere(x, y) ∈ R2 q(x, y) = x2 + x + y

Erklären Sie!Lösung: Aus der Theorie (Skript: Optimie-

206 Copyright c© G. Gramlich

Page 207: Einführung in MATLAB

rung) wissen wir, dass es keine Lösung gibt.Hier die Bestätigung in Matlab.

1 >> H = [2 0; 0 0]; b = [1; 1];2 >> [x,q] = quadprog(H,b)3 Warning: Large-scale method does

not currently solve thisproblem formulation,

4 switching to medium-scale method.5 > In quadprog at 2426 Exiting: the solution is unbounded

and at infinity;7 the constraints are not

restrictive enough.8 x =9 1.0e+016 *

10 -1.000011 -1.000012 q =13 1.0000e+032

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

Aufgabe 199 (Quadratische Optimierung) Lö-sen Sie in Matlab die Quadratische Optimie-rungsaufgabe (Skript: Optimierung)

Minimiere(x, y) ∈ R2 q(x, y) = x2 + y2 + x + y

Erklären Sie!Lösung: Aus det Theorie (Skript: Optimie-rung) wissen wir, dass es genau eine Lösunggibt. Hier die Bestätigung in Matlab.

1 >> H = [2 0; 0 2]; b = [1; 1];2 >> [x,q] = quadprog(H,b)3 Warning: Large-scale method does

not currently solve thisproblem formulation,

4 switching to medium-scale method.5 > In quadprog at 2426 Optimization terminated.

7 x =8 -0.50009 -0.5000

10 q =11 -0.5000

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

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

Die Funktion lsqnonneg löst nichtnegative li-neare Ausgleichsaufgaben. Dies bedeutet, dass

207 Copyright c© G. Gramlich

Page 208: Einführung in MATLAB

der Lösungsvektor x nur nichtnegative Koordi-nanten hat. Das mathematische Optimierungs-modell ist also von der Form

Minimierex ∈ Rn ‖Ax − b‖22u.d.N. x ≥ o

69.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(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);

208 Copyright c© G. Gramlich

Page 209: Einführung in MATLAB

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)

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

5 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 = [];

209 Copyright c© G. Gramlich

Page 210: Einführung in MATLAB

Ü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.047411 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 200 (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

ineqnonlin11 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 201 (Nichtlineare Optimierung) Lö-sen Sie das Optimierungsmodell

Minimiere(x, y) ∈ R2 y

u. d. N. PA + PB = 8

210 Copyright c© G. Gramlich

Page 211: Einführung in MATLAB

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.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 202 (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.2928

211 Copyright c© G. Gramlich

Page 212: Einführung in MATLAB

9 -1.000010 2.000011 6.000012 2.000013 fWert =14 10.2334

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

Aufgabe 203 (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

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

4 fWert =5 -1.0000

Beachten Sie, dass der Startpunkt x0 =

(12,−11) „weit weg“ von der Lösung x∗ =

(0, 1) liegt. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

Aufgabe 204 (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 mitder 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 =

212 Copyright c© G. Gramlich

Page 213: Einführung in MATLAB

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

69.5. Überblick über alle Funktionen zurOptimierung

Mit doc optim (help optim) erhalten Sieeinen Überblick über alle Funktionen der Op-timization Toolbox.

70. Lineare Ausgleichsaufgaben

Lineare Ausgleichsaufgaben können mit Mat-lab auf mehrere Arten gelöst werden. ZumEinem ist da der \-Operator (Backslash-Operator), siehe Abschnitt 49.4 und Abschnitt50.1.2. Zum Anderen gibt es die Funktionenpinv und inv.

Liegt eine überbestimmte lineare Ausgleichs-aufgabe Ax � b vor, so gibt es stets eine Lö-sung. In Matlab können wir zur Berechnungeiner Lösung den Backslash-Operator \ ver-wenden. Ist die Ausgleichsaufgabe eindeutiglösbar, weil Rang(A) = n ist, so bekommt manmit der Anweisung A\b diese eindeutige Lö-sung. Ist Rang(A) < n, so liefert A\b eine Ba-sislösung. In jedem Fall bekommt man mit A\beine Lösung der Ausgleichsaufgabe.

Ist Rang(A) = n, so können Sie alternativdie eindeutige Lösung auch mit x=pinv(A)*boder x=inv(A’*A)*A’*b lösen.

Ist Rang(A) < n, so liefert x=pinv(A)*bdie Lösung kleinster Länge in Alterna-tive zu A b, wo man eine Basislösungbekommt. x=inv(A’*A)*A’*b funktioniertnicht. Warum?

Zusammenfassend ist also:

• Eindeutige Lösung: x = A\b =pinv(A)*b = inv(A’*A)*A’*b.

• Basislösung: x = A\b.

• Lösung kleinster Länge: x = pinv(A)*b.

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

Lineare Ausgleichsaufgaben mit linearen Ne-benbedingungen werden in Abschnitt 69.3 be-handelt.

Nichtlineare Ausgleichsaufgaben werden inAbschnitt 71 besprochen.

70.1. Weitere Aufgaben zur linearenAusgleichsrechnung

Aufgabe 205 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 die

213 Copyright c© G. Gramlich

Page 214: Einführung in MATLAB

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

Aufgabe 206 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 78 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 78: 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 207 (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 [5]).Lösung: Zunächst ist

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

214 Copyright c© G. Gramlich

Page 215: Einführung in MATLAB

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 208 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 209 (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 kleinsterLänge erhält man durch pinv(A)*b. Das Er-gebnis ist:

1 >> pinv(A)*b2 ans =3 2.0000e-0014 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 210 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

215 Copyright c© G. Gramlich

Page 216: Einführung in MATLAB

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 211 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 212 Berechnen Sie per Hand überdie Normalgleichungen die Ausgleichslösungx 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 213 Ein Ingenieur hat experimentelldie folgenden Daten ermittelt

216 Copyright c© G. Gramlich

Page 217: Einführung in MATLAB

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 214 Bestimmen Sie die Gleichungder Ausgleichsgeraden für den funktionalen

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

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.

Aufgabe 215 (Geometrische Modellierung)Ein Kreis mit Mittelpunkt (3, 1) und Radius 2lässt sich parametrisiert durch die beiden fol-genden Gleichungen darstellen:

x = 3 + 2 cos(t)

y = 1 + 2 sin(t)

mit t ∈ [0, 2π]. Verwenden Sie Mat-lab und berechnen Sie die Punkte aufdem Kreis für die dreizehn Parameterwertet = 0.0, 0.5, 1.0, . . . , 6.0. Stören Sie diesePunkte nun mit xs=x+0.1*rand(13,1) undys=y+rand(13,1); das heißt mit Zufallszah-len, die gleichmäßig zwischen 0 und 1 verteiltsind. Berechnen Sie nun den Kreis, der die ge-störten Punkte bestmöglichst im Sinne kleins-ter Quadrate ausgleicht. Zeichnen Sie anschlie-ßend die gestörten Punkte und den optimalenKreis.Lösung: Das mathematische Modell ist dasfolgende überbestimmte lineare Gleichungs-

217 Copyright c© G. Gramlich

Page 218: Einführung in MATLAB

system:

1 0 cos(t1)1 0 cos(t2)...

......

1 0 cos(t13)0 1 sin(t1)0 1 sin(t2)...

......

0 1 sin(t13)

c1c2r

=

xs1xs2...

xs13ys1ys2...

ys13

wobei c = (c1, c2) der Mittelpunkt und r derRadius des Kreises sind. Wir berechnen nunden Mittelpunkt und den Radius.

1 >> t = [0:0.5:6]’;2 >> x = 3+2*cos(t);3 >> y = 1+2*sin(t);4 >> xs = x+rand(13,1);5 >> ys = y+rand(13,1);6 >> A = [ones(13,1) zeros(13,1) cos

(t); zeros(13,1) ones(13,1) sin(t)];

7 >> b = [xs; ys];8 >> k = A\b9 k =

10 3.452011 1.494812 1.9886

Der Mittelpunkt ist c ≈ (3.4520, 1.4948) undder Radius ist r ≈ 1.9886. Die Abbildung 79zeigt die Geometrie, die wie folgt erzeugt wor-den ist:

1 >> tt = [0:0.1:6.3];2 >> plot( k(1)+k(3)*cos(tt),k(2)+k

(3)*sin(tt),xs,ys,’xr’)3 >> axis equal

1 2 3 4 5 6

−0.5

0

0.5

1

1.5

2

2.5

3

3.5

Abbildung 79: Lösung zur Aufgabe 215

71. 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 ([26]). Wir zeigen dasLösen einer nichtlinearen Ausgleichsaufgabein folgender Aufgabe.

Aufgabe 216 (lsqcurvefit) Gegeben sinddie vier Datenpunkte

t 0.0 1.0 2.0 3.0y 2.0 0.7 0.3 0.1

218 Copyright c© G. Gramlich

Page 219: Einführung in MATLAB

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 80 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 80: Zu Aufgabe 216

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

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

219 Copyright c© G. Gramlich

Page 220: Einführung in MATLAB

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

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

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

220 Copyright c© G. Gramlich

Page 221: Einführung in MATLAB

also geformt. Da Signale eine bestimmte Fluss-richtung haben, sind Blockdiagramme gerich-tete Graphen.

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

72.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 217 Ü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). © . . . . . . . . . . . . . . . . . . . . . . . .©

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

221 Copyright c© G. Gramlich

Page 222: Einführung in MATLAB

72.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ängekann 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 noch

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

Mein erstes Simulink Modell

Sine WaveScope

1s

Integrator

Abbildung 81: 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 [29, 30], sieheauch Abschnitt 61.

Den Wert der Simulationsdauer setzen wir von10 auf 15 (zweite Zeile von oben rechts).

222 Copyright c© G. Gramlich

Page 223: Einführung in MATLAB

72.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 Abbildung82 dargestellte Sinussignal f und die zugehö-

Abbildung 82: Ergebnis

rige Integralfunktion F auf.

72.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 62.1 numerisch undin Abschnitt 67 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 Ableitungauf. 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 83 dargestellt.

223 Copyright c© G. Gramlich

Page 224: Einführung in MATLAB

Scope

1s

Integrator

f(u)

FcnClock

Abbildung 83: Simulink-Modell

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 derDifferenzialgleichung, ist in Abbildung 63 zusehen.

Aufgabe 218 (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 84 zeigt eineSimulink-Implementierung der Differenzial-gleichung y′(t) = k. © . . . . . . . . . . . . . . . . . . . . .©

Aufgabe 219 (y′(t) = ky(t)) Konstruie-ren Sie eine (signalflussorientierte) Simulink-

y(t)

Scope

1s

Integrator

10

Constant

Abbildung 84: y′(t) = k

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? Siekann gegebenenfalls zu Kontrollzwecken ver-wendet werden.Lösung: Die Abbildung 85 zeigt eine Si-

y(t)y’(t)

Scope

1s

Integrator

−K−

Gain

Abbildung 85: 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 220 (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 = 1

224 Copyright c© G. Gramlich

Page 225: Einführung in MATLAB

und 0 ≤ t ≤ 20.Lösung: Die Abbildung 86 zeigt eine

y_t−1y_t

z

1

Unit Delay

Scope

−K−

Gain

Abbildung 86: yt = kyt−1

Simulink-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 87 zeigt das Ergebnis der

Abbildung 87: Simulation

Simulation mit der Parameterwahl k = −7/10,y0 = 1 und 0 ≤ t ≤ 20. © . . . . . . . . . . . . . . . . . . ©

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

225 Copyright c© G. Gramlich

Page 226: Einführung in MATLAB

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

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

72.9. Weitere Bemerkungen undHinweise

Weitere Informationen und Details über Simu-link finden Sie in [31].

73. 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 sprichtman 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 0

226 Copyright c© G. Gramlich

Page 227: Einführung in MATLAB

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

73.1. Sparsematrizen erzeugen

Sparsematrizen können auch direkt erzeugtwerden. Mit Hilfe der Funktion spdiags lässt

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

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.

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

227 Copyright c© G. Gramlich

Page 228: Einführung in MATLAB

die 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 221 (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 88. In der Grafik er-scheint die Anzeige nz = 298 (nz: non zeros).Dies gibt die Anzahl der von Null verschiede-nen Elemente an. Diese Information kann manauch mittels nz = length(nonzeros(A))erhalten. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

Aufgabe 222 (Sparsematrizen) Wie sieht die

0 50 100

0

20

40

60

80

100

nz = 298

Abbildung 88: Sparsematrix

Matrix 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 223 (Sparsematrizen, fill-in) In vie-len Fällen, zum Beispiel bei der Diskreti-sierung von partiellen Differenzialgleichungen

228 Copyright c© G. Gramlich

Page 229: Einführung in MATLAB

mit 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 89 und 90) erzeugtman mit

1 >> figure2 >> plot(3,1,1)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)

0 5 10 15 20

0

5

10

15

20

nz = 85

Plot der Matrix A

Abbildung 89: Plot der Matrix A

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 90: Plot der Matrizen L und U

229 Copyright c© G. Gramlich

Page 230: Einführung in MATLAB

10 >> title(’Plot der Matrix U’)

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

74. Mehrdimensionale Arrays

Arrays der Datentypen (Abschnitt 75) 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).

Die Tabelle 37 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 37: Array-Funktionen

Aufgabe 224 (Mehrdim. Arrays) VerwendenSie dreidimensionale Arrays, um die folgen-de symmetrische Matrix für verschiedene re-

230 Copyright c© G. Gramlich

Page 231: Einführung in MATLAB

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.

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

75. 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 istzum 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 Symbolic

231 Copyright c© G. Gramlich

Page 232: Einführung in MATLAB

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

75.1. Zeichenketten (char)

Zeichenketten (Strings) werden durch Hoch-kommata begrenzt

1 >> s = ’Ich bin eine Zeichenkette’2 s =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 225 (Zeichenketten) Die druckbarenZeichen des Ascii-Zeichensatzes werden durchdie ganzen Zahlen 32:127 dargestellt. Zah-len kleiner als 32 entsprechen nicht druckba-

232 Copyright c© G. Gramlich

Page 233: Einführung in MATLAB

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

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

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

233 Copyright c© G. Gramlich

Page 234: Einführung in MATLAB

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

3.1416

ABC

Abbildung 91: Die cellplot-Funktion

Aufgabe 226 (Zellenarrays) Speichern Sie dieBlockmatrix

A =

1 2 3 4 56 7 8 9 1011 12 13 14 1516 17 18 19 20

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

234 Copyright c© G. Gramlich

Page 235: Einführung in MATLAB

3 A{2,1} = [11 12 13;16 17 18];4 A{2,2} = [14 15;19 20];

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

Aufgabe 227 (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’);

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

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

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

235 Copyright c© G. Gramlich

Page 236: Einführung in MATLAB

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 228 (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 Abbildung92. Dazu habe ich folgende Skript verwendet.

Abbildung 92: wav-Datei

1 >> [y,fs] = wavread(’Beispielwav’);

2 >> soundview(y,fs)

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

77. WWW-Seiten

Die Firma MathWorks kann über das WorldWide Web (WWW) erreicht werden. Die URL-Adresse5 lautet: http://www.mathworks.

5URL: Uniform Resource Locator.

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

236 Copyright c© G. Gramlich

Page 237: Einführung in MATLAB

78. Das Matlab-Logo

Das Matlab-Logo (Abbildung 93) ist eineDarstellung des ersten Schwingungsmodus ei-nes dünnen, fest in einen L-förmigen Rahmeneingespannten Tuches6, 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. Das

Abbildung 93: Das Matlab-Logo

Matlab-Logo erhält man durch das Komman-do logo (doc logo).

79. Studentenversion

Eine Studentenversion von Matlab erhaltenSie unter https://www.academic-center.de/cgi-bin/home.

6etwa wie ein Tambourin (eine längliche, zylindrischeTrommel, die mit zwei Fellen bespannt ist).

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

81. Handbücher

Die Handbücher [13, 15, 16, 18, 19, 20, 21, 22]sind als PDF-Files unter http://www.mathworks.de/access/helpdesk/help/helpdesk.html erhältlich.

82. Progammiertips

Das Handbuch [20] 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.

83. 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 [24].

237 Copyright c© G. Gramlich

Page 238: Einführung in MATLAB

84. Ä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,Magma, Maple, Mathematica, Maxima, Mu-PAD und Reduce. Man nennt diese SystemeComputeralgebrasysteme (CA-Systeme). Wei-tere spezielle Computeralgebrasysteme sindGap, Pari/gp, Kash, Sage und Singular.

238 Copyright c© G. Gramlich

Page 239: Einführung in MATLAB

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

239 Copyright c© G. Gramlich

Page 240: Einführung in MATLAB

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.

240 Copyright c© G. Gramlich

Page 241: Einführung in MATLAB

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

241 Copyright c© G. Gramlich

Page 242: Einführung in MATLAB

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

242 Copyright c© G. Gramlich

Page 243: Einführung in MATLAB

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.: Anwendungen der Linea-ren Algebra. Mathematik-Studienhilfen.Fachbuchverlag Leipzig im Carl HanserVerlag, 2004.

[5] Gramlich, G.: Lineare Algebra. EineEinführung. Mathematik-Studienhilfen.Fachbuchverlag Leipzig im Carl HanserVerlag, 2. Auflage, 2009.

[6] Gramlich, G., Werner, W.: Nu-merische Mathematik mit Mat-lab. dpunkt.verlag, 2000. http://www.hs-ulm.de/gramlich.

[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: Data Analysis. The MathWorks,Natick, MA, USA, 2009. http://www.mathworks.de.

[14] Matlab: Getting Started Guide. TheMathWorks, Natick, MA, USA, 2009.http://www.mathworks.de.

[15] Matlab: Graphics. The MathWorks, Na-tick, MA, USA, 2009. http://www.mathworks.de.

[16] Matlab: Mathematics. The MathWorks,Natick, MA, USA, 2009. http://www.mathworks.de.

[17] Matlab: Object-Oriented Programming.The MathWorks, Natick, MA, USA,2009. http://www.mathworks.de.

[18] Matlab: Optimization Toolbox. The

243 Copyright c© G. Gramlich

Page 244: Einführung in MATLAB

MathWorks, Natick, MA, USA, 2009.http://www.mathworks.de.

[19] Matlab: Programming Fundamentals.The MathWorks, Natick, MA, USA,2009. http://www.mathworks.de.

[20] Matlab: Programming Tips. TheMathWorks, Natick, MA, USA, 2009.http://www.mathworks.de.

[21] Matlab: Statistics Toolbox. The Ma-thWorks, Natick, MA, USA, 2009.http://www.mathworks.de.

[22] Matlab: Symbolic Math Toolbox. TheMathWorks, Natick, MA, USA, 2009.http://www.mathworks.de.

[23] Meister, A.: Numerik linearer Glei-chungssysteme. Vieweg Verlag, 2005.

[24] Moler, C.: Numerical Computing withMatlab. Society for Industrial andApplied Mathematics, Philadelphia, PA,USA, 2004.

[25] Nitschke, M.: Geometrie. Mathematik-Studienhilfen. Fachbuchverlag Leipzigim Carl Hanser Verlag, 2005.

[26] Rieder, A.: Keine Probleme mit InversenProblemen. Vieweg Verlag, 2003.

[27] Saad, Y.: Iterative Methods for Sparse Li-near Systems. Society for Industrial andApplied Mathematics, Philadelphia, PA,USA, 2. Auflage, 2003.

[28] Schott, D.: Ingenieurmathematik mitMatlab. Fachbuchverlag Leipzig im CarlHanser Verlag, 2004.

[29] Shampine, L., Gladwell, I., Thompson,S.: ODEs with Matlab. Cambridge,2003.

[30] Shampine, L. F., Reichelt, M. W.: TheMATLAB ODE suite. SIAM J. SCI. Com-puting, (18):1–22, 1997.

[31] Simulink: Simulation and Model-BasedDesign. The MathWorks, Natick, MA,USA, 2009. http://www.mathworks.de.

[32] Smith, B., Boyle, J., Dongarra, J., Gar-bow, B., Ikebe, Y., Kleme, V., Moler,C.: Matrix Eigensystem Routines-EispackGuide. Springer Verlag, 1976.

[33] Weigand, H., Weth, T.: Computer im Ma-thematikunterrricht. Spektrum Akademi-scher Verlag, 2002.

244 Copyright c© G. Gramlich

Page 245: Einführung in MATLAB

Stichwortverzeichnis

’, 44*, 10, 15, 29, 32, 48+, 29, 32, 48, 50-, 29, 32, 48, 50-all, 27-realmin, 34.*, 50.+, 50./, 15, 50.ˆ, 50.\, 50/, 15, 29, 32:, 42, 241ˆ, 29, 48\, 92, 99, 106, 109, 112, 113, 213, 230, 241

abs, 33acos, 39acosd, 38acsc, 39Albrecht Durer, 12all, 241all(any(B)), 54angle, 33ans, 29, 32, 241any, 241any(all(B)), 54any(B(1:2,1:3)), 54any(B), 54Ascii, 25asec, 39asin, 39asind, 38atan, 39atan2, 38

Axiom, 238axis, 70, 242axis equal, 70axis square, 70

backsub, 110, 111bar, 72, 242bar3, 72bar3h, 72barh, 72Basis, 201Basislösung, 213bench, 29Bessel, 38bicg, 123bicgstab, 123binomial, 201binopdf, 158Blas, 92blkdiag, 52box off, 62box on, 62bvp4c, 154–157, 242bvpinit, 155

C/C++, 17, 38, 78, 83cart2pol, 71cart2sph, 71cat, 230cd, 28ceil, 163ceil(x), 39cell, 230–232, 242cellplot, 234cgs, 123

245

Page 246: Einführung in MATLAB

char, 115, 230–232, 234, 242chol, 118, 119Cholesky, 118cholinc, 123Cholseky, 118circshift, 53class, 232clc, 27, 242clear, 242clear global, 88CleveMoler, 2, 237clf, 242close, 242coeff, 191colorbar, 65colormap, 65colspace, 97, 106combinat, 161compan, 45compose, 177computer, 28, 32, 34cond, 116, 241condest, 116contour, 242conv, 132, 135convert, 191corrcoef, 158cos, 39, 128cosd, 38cot, 39cov, 131, 158cross, 50, 96, 107csc, 39cumprod, 53cumsum, 53cumtrapz, 149, 150cylinder, 76, 77

dblquad, 147, 148, 150deconv, 133, 135degree, 190, 191delete, 28demo, 242demos, 202Derive, 238det, 101, 106, 107diag, 45, 52, 106, 107, 230, 241diag(rot90(B)), 53diary, 242diary off, 25diff, 53, 185digits, 199dir, 28, 242disp, 56, 242disttool, 158doc, 22, 26, 27, 241, 242doc audiovideo, 235, 236doc datatypes, 36, 232doc demo, 26doc demos, 26doc elfun, 26, 33, 38doc elmat, 32, 43doc funfun, 59, 152doc gallery, 123doc general, 84doc graph2d, 63doc graph3d, 63doc graphics, 76doc iofun, 58doc lang, 32, 81, 84doc logo, 237doc ops, 42, 43, 79doc optim, 142, 202, 213doc polyfun, 135doc sim, 226doc sparfun, 124, 228

246 Copyright c© G. Gramlich

Page 247: Einführung in MATLAB

doc specfun, 38doc specgraph, 63doc stats, 158doc strfun, 232doc symbolic, 172, 201doc uicontrol, 76doc vissuite, 74dot, 96, 107double, 3, 9, 31, 33, 35, 36, 115, 230, 231,

234, 242dsolve, 150, 152, 193

echo off, 82echo on, 82edit, 84, 242eig, 84, 101, 102, 104–107, 122, 125, 228,

230, 241eigs, 2, 104, 125, 228eigshow, 103, 104Eispack, 16ellipsoid, 76end, 130, 241eps, 32, 34, 113, 121, 241eps*realmin, 34error, 241Euklid, 37Euler, 180, 199, 200, 238evalin, 172Excel, 23, 25exist, 28, 88, 92exit, 19exit, quit, 242exp, 39, 128expand, 172expm, 52, 106, 107, 126eye, 44, 107, 227, 241ezmesh, 63, 68ezplot, 63, 64, 66, 69, 127, 128, 242

ezplot3, 66ezsurf, 68

factor, 191factorial, 159, 161feval, 128, 172fft, 143, 242fftw, 145Fibonacci, 172filebrowser, 22find, 241find(B), 54finite(B(:,3)), 54finverse, 178fix(x), 39fliplr, 52, 53fliplr(A), 53flipud, 11, 52floor, 163floor(x), 39fminbnd, 131, 142, 242fmincon, 208–212fminsearch, 142fopen, 58for, 79, 80, 241format, 31, 56format bank, 31format long, 31format short, 31Fortran, 17, 83, 113Fourier, 143–145, 196–198fourier, 198fplot, 59, 63, 64, 86, 242fprintf, 57, 58, 242fread, 58Frobenius, 115fscanf, 58fsolve, 139, 202

247 Copyright c© G. Gramlich

Page 248: Einführung in MATLAB

full, 125, 226function, 40, 83, 84function_handle, 231, 232funm, 52funtool, 191fwrite, 58fzero, 59, 138, 139, 179

Galilei, 9gallery, 45Gap, 238Gauss, 112, 193Gauss-Jordan, 109Gauss, 238gausselim, 109–112gaussjord, 109, 112gcd, 175gemres, 123geomean, 158geopdf, 158get, 76getVar, 172global, 88gmres, 123, 124grid, 60, 242gsvd, 131guide, 76

Hadamard, 45hadamard, 45, 131handel, 235Hankel, 38, 45hankel, 45Hdf, 25Heaviside, 85heaviside, 85help, 25–27, 241, 242Hermite, 118, 122, 123, 125

Hesse, 187Higham, 123Highams, 45hilb, 45, 92Hilbert, 45, 92, 116, 122HiQ, 238hist, 72, 242hold, 242Horner, 87horner, 190, 191hostid, 28humps, 64, 138, 145, 149

i, 32, 241IDL, 238Ieee, 31, 33, 34if, 79, 81, 241ifft, 143imag, 33image, 75, 76imagesc, 75, 76imfinfo, 75, 76imread, 75, 76imwrite, 75, 76Inf, 32, 34, 35inf, 32, 241input, 56, 242inputname, 84int, 150, 188int16, 35int32, 35int8, 35, 36interp1, 137, 242interp2, 65intmax, 36intmin, 36inv, 93, 105–107, 113, 213, 230inverse, 27

248 Copyright c© G. Gramlich

Page 249: Einführung in MATLAB

invhilb, 45ipermute, 230isa, 232iscount, 178isempty, 241isequal, 241iskeyword, 88isvarname, 32

j, 32, 241Jacobi, 187, 188jacobian, 186, 187Java, 17, 38Jordan, 106jordan, 106

Kash, 238kron, 51Kronecker, 51

Lapack, 92, 113Laplace, 189, 198, 222laplace, 189, 198legend, 242Leibniz, 184length, 241license, 28limit, 180, 181LinearAlgebra, 201Linpack, 16linprog, 203, 204linsolve, 106linspace, 42, 157, 241load, 21, 45, 242log, 39log10, 39log2, 39loglog, 70logm, 52

logo, 237logspace, 42lookfor, 26, 27, 84, 242lookfor complex, 33ls, 28lsqcurvefit, 218, 219lsqlin, 207lsqnonlin, 218lsqnonneg, 207lsqr, 123lu, 107, 117, 229, 241luinc, 123

Macsyma, 238mad, 158magic, 10, 45Magma, 238Maple, 12, 109, 159–161, 172, 175, 178,

191, 193, 195, 199–201, 238maple, 109, 172, 175, 201maple(’with(combinat)’), 201Mathcad, 238Mathematica, 238Matlab, 87, 206–208matlabrc, 29matlabroot, 28max, 37, 53, 54, 241Maxima, 238mean, 53, 82, 158, 165, 241median, 53, 82, 158mesh, 63, 157, 242meshgrid, 63mfun, 199mhelp, 190mhelp Basis, 201mhelp binomial, 201mhelp combinat, 162, 201mhelp LinearAlgebra[Basis], 202

249 Copyright c© G. Gramlich

Page 250: Einführung in MATLAB

mhelp(’LinearAlgebra,Basis’), 202min, 53, 54, 241minres, 123mode, 158movie, 76mtaylor, 191multinomial, 160MuPAD, 172, 238mupad, 172

namelengthmax, 31NaN, 32, 34, 85, 241nargchk, 84nargin, 84, 242nargout, 84, 242nchoosek, 159ndgrid, 230ndims, 230norm, 37, 114, 115, 241normest, 115normpdf, 129, 158null, 97, 106, 107, 121num2str, 232, 242

Octave, 238ode113, 153ode15i, 152, 153ode15s, 153ode23, 153ode23s, 153ode23t, 153ode23tb, 153ode45, 59, 131, 151–153, 222, 224, 242odeset, 142ones, 44, 227, 241optimset, 138, 139, 142optimset(’fminbnd’), 142optimset(’fminsearch’), 142

orth, 97, 107, 121

Pari/gp, 238Pascal, 17, 45, 83, 233pascal, 45patch, 77path, 28Path Browser, 28pathtool, 28pcg, 123, 124pcm, 124pdepe, 156, 157pdsolve, 193, 195peaks, 65perms, 159, 161permute, 230pi, 31, 32, 241pie, 72piecewise, 178pinv, 122, 213pinv(A)*b, 108plot, 15, 59, 61–64, 242plot3, 62plotyy, 71pol2cart, 71polar, 71poly, 102, 106, 107, 132, 135polyder, 133, 135polyfit, 135, 213, 214, 242polyint, 134, 135polyval, 134, 135pretty, 172print, 75, 242private, 130, 131prod, 53, 159, 161, 241PV-WAVE, 238pwd, 28

250 Copyright c© G. Gramlich

Page 251: Einführung in MATLAB

qmr, 123qr, 107, 119, 241quad, 40, 59, 145, 147, 148, 150quad, quadl, 131quadl, 145, 147, 148, 150, 242quadv, 150quit, 19quiver, 72, 73quiver3, 73

rand, 10, 44, 162, 163, 165, 227, 230, 241rand(n), 163randn, 44, 162, 163, 165, 230, 241randtool, 166range, 158rank, 98, 106, 107, 121, 130rcond, 113, 116real, 33realmax, 34realmin, 34Record, 233Reduce, 238Reichelt, 153repmat, 241reshape, 52, 241reshape(A,4,3), 53RLaB, 238roots, 135, 139, 141, 242Rosenbrock, 153rosser, 45rot90, 52rot90(A,3), 53rot90(B), 52round, 40round(x), 39rref, 92, 106, 107, 109–113rsolve, 193Runge-Kutta, 151, 153

Runge-Kutte, 153

Sage, 238save, 21, 242saveas, 75Scilab, 238sdvs, 125sec, 39semilog, 242semilogx, 70semilogy, 70set, 76setVar, 172Shampine, 153shiftdim, 230sim, 226simplify, 172simulink, 220sin, 26, 39, 59, 92, 128sind, 38single, 35, 36Singular, 238size, 44, 45, 84, 241solve, 109, 112, 141, 179, 191, 233sort, 53, 54, 82, 241soundsc, 235sparse, 226, 227, 242spdiags, 227speye, 227sph2cart, 71sphere, 76, 77spline, 137, 233, 242spones, 227sprand, 227sprandn, 227sprintf, 57, 242spy, 229, 242sqrt, 25, 33, 39, 41

251 Copyright c© G. Gramlich

Page 252: Einführung in MATLAB

sqrtm, 52squeeze, 230startup, 29std, 53, 82, 158, 241stem, 72str2num, 232struct, 230–233, 242subplot, 62, 242subs, 172, 176, 177, 191sum, 53, 241surf, 63, 242svd, 92, 106, 107, 228, 241svds, 125, 228switch, 79, 81switch, case, 241sym, 231, 234symmlq, 123symsum, 183

Toplitz, 45tabulate, 158tan, 39Taylor, 191, 192taylor, 190taylortool, 191, 192text, 242tic, 125tic, toc, 242title, 60, 62, 242toc, 125toeplitz, 45trapz, 148, 150tril, 52, 106, 107, 241triplequad, 148, 150triu, 52, 106, 107, 241triu(B), 53type, 28, 92, 177, 242

uiimport, 25uint16, 35uint32, 35uint8, 35, 36unidpdf, 158unifpdf, 158

vander, 45Vandermonde, 45var, 53, 131, 158, 165varargin, 131, 233varargout, 131, 233vectorize, 56, 90ver, 29version, 29vpa, 199

Wathen, 123wav, 236wavread, 236what, 28, 242whatsnew, 29which, 28, 92, 242while, 79, 80, 241who, 21, 242whos, 9, 21whos global, 88why, 131Wilkinson, 45wilkinson, 45

xlabel, 62, 242xlim, 242

ylabel, 62, 242ylim, 242

zeros, 44, 80, 107, 227, 230, 241zlabel, 62

252 Copyright c© G. Gramlich