users.fmi.uni-jena.dekaiserd/matlab/2018/einfmatlab.pdfusers.fmi.uni-jena.de

243

Upload: doankhuong

Post on 10-Aug-2019

227 views

Category:

Documents


0 download

TRANSCRIPT

Aus Sicht eines Mathematikers

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

Hochschule UlmFachbereich Grundlagen

http://www.hs-ulm.de/gramlich

Ulm, 8. September 2006

Vorwort

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

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

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

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

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

1Matlab R© ist eingetragenes Warenzeichen von

The MathWork Inc.

genschaften von Matlab behandelt. Da-bei zeige ich, wie und wozu man Funk-tionen aus Matlab nutzen kann, erkläreaber nicht die Mathematische Theorie unddie Algorithmen, die sich dahinter verber-gen. Auch gehe ich davon aus, dass Siegrundlegende Kenntnisse im Programmie-ren und mit dem Umgang wenigstens einesBetriebssystems haben.

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

1978: Klassisches MatlabFORTRAN-Version

1984: Matlab 1C-Version

1985: Matlab 230% mehr Funktionen und Kommandos,Dokumentation

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

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

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

2000: Matlab 6 (R12)

2 Copyright c© G. Gramlich

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

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

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

Nicht näher gehe ich auf die Themen: Ob-jektorientiertes Programmieren mit Mat-lab, Java-Schnittstellen, GUI (GraphicalUser Interface) Werkzeuge und die Publi-kationstools wie HTML, XML, LATEX,usw.ein. Dafür �nden Sie aber einen Zu-gang zum symbolischen Rechnen mitMat-lab, zu Optimierungs- und Statistikfunk-tionen, sowie eine Einführung in Simu-link (Symbolic-Toolbox,Optimization Tool-box, Statistics Toolbox, Simulink). Im An-hang �nden Sie ein kleines Glossar, so-wie eine Au�istung wichtiger Matlab-Funktionen.

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

MakeIndex erzeugt. Alle Bilder habe ichmit Matlab erstellt.

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

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

Nun viel Freude und Erfolg mit Matlab!

Ulm, 8. September 2006 Günter Gramlich

3 Copyright c© G. Gramlich

Inhaltsverzeichnis

1 Einführung 91.1 Erste Schritte . . . . . . . . . 91.2 Magische Quadrate . . . . . . 101.3 Gra�k . . . . . . . . . . . . . 15

2 Allgemeines 16

3 Was macht den Erfolg vonMatlab aus? 19

4 Starten und beenden 20

5 Die Arbeitsober�äche 205.1 Das Command Window . . . . 215.2 Command History . . . . . . . 215.3 Der Workspace Browser . . . . 215.4 Current Directory . . . . . . . 22

6 Der Help Browser 23

7 Der Array Editor 23

8 Der Editor/Debugger 24

9 Plots 25

10 Der Import Wizard 26

11 Matlab unterbrechen 26

12 Lange Eingabezeilen 26

13 Eine Sitzung aufzeichnen 26

14 Das help-Kommando 26

15 Das doc-Kommando 27

16 Demos 27

17 Das lookfor-Kommando 28

18 Alle Funktionen? 28

19 Wichtige Funktionen? 29

20 Der Path Browser 29

21 Den Datenträger verwalten 29

22 Wie man weitere Systeminfor-mationen erhält 29

23 Neuigkeiten und Versionen 30

24 Voreinstellungen 30

25 Einfaches Rechnen 30

26 Welche arithmetische Operati-on hat Vorang? 31

27 Zahlen und Formate 31

28 Variablen und Konstanten 33

29 Komplexe Zahlen 33

30 Ieee-Arithmetik und double 35

31 Nicht double-Datentypen 36

32 Merkmale von Matlab 3832.1 Keine Deklaration notwendig . 3832.2 Variable Argumentenliste . . . 3832.3 Komplexe Arrays und Arith-

metik . . . . . . . . . . . . . . 39

33 Mathematische Funktionen 4033.1 Rundungsfunktionen . . . . . 41

4 Copyright c© G. Gramlich

33.2 Verwendung mathematischerFunktionen in Matlab . . . . 42

34 Vektoren 42

35 Vektorenoperationen 44

36 Matrizen 4536.1 Matrizen erzeugen . . . . . . . 4536.2 Der Doppelpunkt . . . . . . . 4836.3 Matrizen- und Arrayopera-

tionen . . . . . . . . . . . . . 5036.4 Matrizenmanipulationen . . . 5436.5 Datenanalye . . . . . . . . . . 55

37 Vektorielle Programmierung 58

38 Ein- und Ausgabe 5838.1 Benutzereingabe . . . . . . . . 5938.2 Bildschirmausgabe . . . . . . 5938.3 Dateien lesen und schreiben . 60

39 Function Functions 61

40 Gra�k 6240.1 2D-Gra�k . . . . . . . . . . . 6240.2 3D-Gra�k . . . . . . . . . . . 6540.3 Funktionsdarstellungen . . . . 6640.4 Parametrisierte Kurven . . . . 6940.5 Parametrisierte Flächen . . . . 7140.6 Implizite Kurven . . . . . . . 7240.7 Implizite Flächen . . . . . . . 7240.8 Koordinatenachsen skalieren . 7240.9 Zwei y-Achsen . . . . . . . . . 7440.10 Koordinatentransformationen 7440.11 Spezielle Gra�kfunktionen . . 7540.12 Vektorfelder visualisieren . . . 7540.13 Gra�ken importieren, expor-

tieren und drucken . . . . . . 76

40.14 Animationen . . . . . . . . . . 7840.15 Handle Graphics . . . . . . . . 7840.16 Graphical User Interface (GUI) 79

41 Vergleichsoperatoren, Ver-gleichsfunktionen 79

42 Logische Operatoren und logi-sche Funktionen 79

42.1 Logische Operatoren . . . . . 7942.2 Logische Funktionen . . . . . 80

43 Steuerstrukturen 8043.1 for-Schleife . . . . . . . . . . 8043.2 while-Schleife . . . . . . . . . 8143.3 if-Anweisung . . . . . . . . . 8243.4 switch-Anweisung . . . . . . . 82

44 m-Files 8244.1 Script-Files . . . . . . . . . . . 8244.2 Function-Files . . . . . . . . . 8344.3 Namen von m-Files . . . . . . 8544.4 Editieren von m-Files . . . . . 8544.5 Zur Struktur eines m-Files . . 8544.6 Blockkommentare . . . . . . . 8644.7 Übungsaufgaben . . . . . . . . 86

45 Globale und lokale Variablen 89

46 Namenstest 89

47 Wie man e�ziente Programmeschreibt 89

48 Lineare Algebra (Teil 1) 9348.1 Lineare Gleichungssysteme

und Matrizen . . . . . . . . . 9348.2 Vektoren in der Ebene und

im Raum . . . . . . . . . . . . 97

5 Copyright c© G. Gramlich

48.3 Analytische Geometrie vonGeraden und Ebenen . . . . . 98

48.4 Reelle Vektorräume und Un-terräume . . . . . . . . . . . . 98

48.5 Determinanten . . . . . . . . . 10248.6 Eigenwerte und Eigenvektoren 10348.7 Lineare Abbildungen und

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

Lineare Algebra im Überblick 10748.9 Lineare Gleichungssysteme (2) 10948.9.1 Quadratische Systeme . . . . . 10948.9.2 Überbestimmte Systeme . . . 11048.9.3 Unterbestimmte Systeme . . . 11048.10 Lineare Gleichungssysteme (3) 111

49 Lineare Algebra (Teil 2) 11549.1 Normen . . . . . . . . . . . . 11549.2 Konditionszahlen . . . . . . . 11749.3 Lineare Gleichungssysteme (4) 11849.4 Inverse . . . . . . . . . . . . . 11849.5 Determinante . . . . . . . . . 11849.6 Pseudoinverse . . . . . . . . . 11949.7 LU-Faktorisierung . . . . . . . 11949.8 Cholesky-Faktorisierung . . 12049.9 QR-Faktorisierung . . . . . . . 12049.10 Singulärwertzerlegung . . . . . 12249.11 Eigensysteme . . . . . . . . . 12349.12 Iterative Methoden . . . . . . 12449.12.1 Iterative Methoden für linea-

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

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

gulärwertsysteme . . . . . . . 12649.13 Funktionen einer Matrix . . . 126

50 Mehr zu Funktionen 128

50.1 Function-Handles . . . . . . . 12850.2 Anonymous Functions . . . . 12950.3 Subfunctions . . . . . . . . . . 13050.4 Nested Functions . . . . . . . 13150.5 Beispielhafte Funktionen . . . 131

51 Lineare Ausgleichsaufgaben 132

52 Polynome 13252.1 Darstellung von Polynomen . 13252.2 Nullstellen von Polynomen . . 13252.3 Multiplikation von Polynomen 13352.4 Addition und Subtraktion

von Polynomen . . . . . . . . 13352.5 Division von Polynomen . . . 13452.6 Ableiten von Polynomen . . . 13552.7 Integrieren von Polynomen . . 13552.8 Auswerten von Polynomen . . 13552.9 Zusammenfassung . . . . . . . 136

53 Polynominterpolation 136

54 Polynomapproximation 137

55 Kubische Splineinterpolation 138

56 Stückweise lineare Interpolati-on 138

57 Nichtlineare Gleichungen (1) 139

58 Optimierung (Teil 1) 143

59 FFT 144

60 Integration 14660.1 Mehrfachintegrale . . . . . . . 14860.2 Tabellarische Daten . . . . . . 149

6 Copyright c© G. Gramlich

60.3 Numerische uneigentliche In-tegration . . . . . . . . . . . . 151

60.4 Zusammenfassung . . . . . . . 151

61 Di�erenzialgleichungen 15161.1 Anfangswertaufgaben . . . . . 15261.2 Randwertaufgaben . . . . . . 15561.3 Partielle Di�erenzialglei-

chungen . . . . . . . . . . . . 157

62 Statistik 159

63 Kombinatorik 16063.1 Fakultäten, Binomial- und

Polynomialzahlen . . . . . . . 16063.2 Permutationen ohne Wieder-

holung . . . . . . . . . . . . . 16263.3 Variationen ohneWiederholung16263.4 Kombinationen ohneWieder-

holung . . . . . . . . . . . . . 16263.5 Permutationen mit Wieder-

holung . . . . . . . . . . . . . 16363.6 Variationen mit Wiederholung 16363.7 Kombinationen mit Wieder-

holung . . . . . . . . . . . . . 16363.8 Weitere Funktionen . . . . . . 163

64 Zufallszahlen 16364.1 Gleichverteilte Zufallszahlen . 16464.2 Normalverteilte Zufallszahlen . 16564.3 Im Vergleich: Gleich- und

normalverteilte Zufallszahlen . 16664.4 Andere Verteilungen . . . . . 168

65 Stochastische Simulationen 16865.1 Näherung für π . . . . . . . . 16965.2 Zum Ziegenproblem . . . . . . 17165.3 Das Geburtstagsparadox . . . 172

65.4 Bestimmte Integrale . . . . . . 173

66 Symbolisches Rechnen 17366.1 Erste Schritte . . . . . . . . . 17466.2 Wie manMaple-Funktionen

verwendet . . . . . . . . . . . 17766.3 Mathematische Funktionen . . 17766.4 Algebraische Gleichungen . . . 18166.5 Grenzwerte . . . . . . . . . . . 18266.6 Endliche und unendliche

Summen . . . . . . . . . . . . 18566.7 Di�erenziation . . . . . . . . . 18766.8 Partielle Di�erenziation . . . . 18866.9 Der Gradient . . . . . . . . . . 18966.10 Die Hesse-Matrix . . . . . . . 18966.11 Die Jacobi-Matrix . . . . . . 18966.12 Integration . . . . . . . . . . . 19066.13 Polynome . . . . . . . . . . . 19366.14 Taylor-Polynome . . . . . . 19366.15 Die Funktionen funtool und

taylortool . . . . . . . . . . 19466.16 Mehrdimensionale Taylor-

Polynome . . . . . . . . . . . 19466.17 Lineare Algebra . . . . . . . . 19566.18 Di�erenzengleichungen . . . . 19566.19 Di�erenzialgleichungen . . . . 19666.20 Die kontinuierliche Fouri-

er-Transformation . . . . . . 19866.21 Laplace-Transformation . . . 20166.22 Spezielle mathematische

Funktionen . . . . . . . . . . . 20166.23 Variable Rechengenauigkeit . . 20166.24 Überblick über alle symboli-

schen Funktionen . . . . . . . 20366.25 Weitere Bemerkungen und

Hinweise . . . . . . . . . . . . 204

67 Nichtlineare Gleichungen (2) 204

7 Copyright c© G. Gramlich

68 Optimierung (Teil 2) 20568.1 Lineare Optimierung . . . . . 20568.2 Quadratische Optimierung . . 20768.3 Überblick über alle Funktio-

nen zur Optimierung . . . . . 208

69 Nichtlineare Ausgleichsaufga-ben 208

70 Simulink 20970.1 Erste Schritte . . . . . . . . . 21070.2 Konstruktion eines Blockdia-

gramms . . . . . . . . . . . . . 21070.3 Weitere Arbeitsschritte . . . . 21170.4 Ein erstes Beispiel . . . . . . . 21170.4.1 Konstruktion des Blockdia-

gramms . . . . . . . . . . . . . 21170.4.2 Weitere Arbeitsschritte . . . . 21270.4.3 Simulation . . . . . . . . . . . 21370.5 Beispiele . . . . . . . . . . . . 21370.6 Vereinfachungen . . . . . . . . 21570.7 Kommunikation mit Matlab 21670.8 Umgang mit Kennlinien . . . 21670.9 Weitere Bemerkungen und

Hinweise . . . . . . . . . . . . 216

71 Dünn besetzte Matrizen 21671.1 Sparsematrizen erzeugen . . . 21771.2 Mit Sparsematrizen rechnen . 218

72 Mehrdimensionale Arrays 220

73 Datentypen (Klassen) 22273.1 Zeichenketten (char) . . . . . 22373.2 Zellen- und Strukturenarrays . 224

74 Audiosignale (Töne, Musik) 226

75 WWW-Seiten 227

76 Das Matlab-Logo 228

77 Studentenversion 228

78 Cleve's Corner 228

79 Handbücher 228

80 Progammierungstips 228

81 Literatur 228

82 Ähnliche Systeme 228

A Glossar 230

B Die Top Matlab-Funktionen 232

Literatur 234

Stichwortverzeichnis 236

8 Copyright c© G. Gramlich

1 Einführung

It is probably fair to say that one of thethree or four most important developments

in numerical computation in the pastdecade has been the emergence of Matlab

as the preferred language of tens ofthousands of leading scientists and

engineers.Lloyd N. Trefethen, 1997.

�Der Fortschritt der Menschheit ist eng mitder Verwendung von Werkzeugen verbun-den. Werkzeuge wie Hammer, Zange oderBaukran verstärken menschliche Fähigkei-ten. Werkzeuge wie Fernglas, Mikroskopoder Flugzeug verleihen sogar neue Fähig-keiten. Auch Computer und Computerpro-gramme sind Werkzeuge. Sie ermöglichenes dem Menschen Berechnungen schnellerdurchzuführen, auf Knopfdruck Diagram-me zu erzeugen und Daten mit hoher Ge-schwindigkeit über das Internet zu trans-portieren. Werkzeuge sin zum einen dasErgebnis menschlichen Er�ndungsgeistes,zum anderen sind sie aber auch die Grund-lage für neue Erkenntnisse und neu Denk-und Arbeitsweisen. So ermöglichte erst dieEr�ndung des Rades den einfachen Trans-port gröÿerer Güter über weitere Entfer-nungen, mit dem Fernrohr entdeckte Ga-liei die Jupitermonde und mit dem Com-puter lassen sich Berechnungen durchfüh-ren, die jenseits der Möglichkeiten von Pa-pier und Beistift liegen. Werkzeuge habenaber auch eine didaktische Dimension, daihr Einsatz geplant und der Umgang mit ih-nen gelernt und gelehrt werden muss. Dar-

über hinaus ziehen neue Werkzeuge auchneue Verfahren, Arbeits- und Denkweisennach sich�. ([27])

1.1 Erste Schritte

Um ihnen ein Gefühl dafür zu geben, wieMatlab arbeitet, starten wir gleich mit einpaar Beispielen. Nähere Erklärungen undweitere Informationen erhalten Sie dann inden folgenden Abschnitten.

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

>> x = 3;

erzeugt die Variable x und ordnet ihr denWert 3 zu. Das Semikolon am Ende der An-weisung unterdürckt die Ausgabe im Com-mand Window. Nach Voreinstellung ist x

vom Datentyp double und belegt acht ByteSpeicherplatz. Diese Informationen könnenmit dem Kommando whos erfragen:

>> whos

Name Size Bytes Class

x 1x1 8 double array

Grand total is 1 element ...

Auÿerdem hat die Variable x die Size (Grö-ÿe, Ordnung) 1x1 was bedeutet, dass sie einSkalar ist. Ein Skalar ist ein Array mit einerZeile und einer Spalte.

Zeichenketten (Strings) werden in Hoch-kommas erzeugt.

9 Copyright c© G. Gramlich

>> s = 'Ich bin ein String';

Ein Zeichen benötigt zwei Byte Speicher-platz. Entsprechend ergeben sich bei 18 Zei-chen 36 Bytes.

Matrizen (zweidimensionale Arrays) wer-den mit eckigen Klammern erzeugt.

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

A =

1 2 3

4 5 6

Spalten werden durch Leerzeichen oderKommas getrennt, Zeilen durch Semiko-lons. Gibt man A(1,2) ein, so spricht mandas Matrixelement 2 an, denn der erste In-dex bezieht sich auf die Zeile während derzweite Index sich auf die Spalte bezieht.Dies entspricht ganz der mathematischenNotation. Mit dem Doppelpunkt kann manauch ganze Zeilen oder Spalten einer Ma-trix ansprechen.

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

ans =

1 2 3

ans =

2

5

In diesem Beispiel die erste Zeile und diezweite Spalte der Matrix A.

Es gibt inMatlab eingebaute Funktionen,die Ihnen viel Arbeit abnehmen. So gibtes zum Beispiel Funktionen, um Matrizenaufzubauen, ohne sie mühsam eingeben zumüssen. Ein Beispiel ist die Funktion rand.

Diese Funktion erzeugt eine Zufallsmatrixmit Elementen zwischen 0 und 1. Die Grö-ÿe der Matrix bestimmen Sie.

>> B = rand(3)

B =

0.4447 0.9218 0.4057

0.6154 0.7382 0.9355

0.7919 0.1763 0.9169

Mit dem Operator * können Sie die Matri-zen A und B nun im Sinne der Matrizenalge-bra (Lineare Algebra) multiplizieren, wennSie wollen, denn die Mulitplikation ist de�-niert.

Neben Matrizen und mehrdimensionalenArrays (mehr als zwei Indizes) unterstütztMatlab Zellenvariablen und Strukturva-riablen (Abschnitt 73). In eine Zellenvaria-ble kann man Variablen mit verschiedenenDatentypen zusammenpacken.

>> Z = {x,s}

Z =

[3] 'Ich bin ein String'

Die Zellenvariable Z besteht aus einem nu-merischen Skalar und einem String. Zellen-variablen können mit geschweiften Klam-mern erzeugt werden.

1.2 Magische Quadrate

Magische Quadrate sind interessante Matri-zen. Mit

>> help magic

erhalten wir den folgenden Text:

10 Copyright c© G. Gramlich

MAGIC(N) is an N-by-N matrix

constructed from the integers

1 through N^2 with equal row,

column, and diagonal sums.

Produces valid magic squares

for all N > 0 except N = 2.

Wir erzeugen das magische Quadrat derOrdnung drei.

>> A = magic(3)

A =

8 1 6

3 5 7

4 9 2

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

ans =

15 15 15

Das Kommando sum(A') transponiert (Zei-len und Spalten vertauschen) die Matrix A

zunächst, berechnet dann die Spaltensum-men und bestätigt, dass auch die Zeilen-summen gleich 15 sind:

ans =

15 15 15

Funktionen dürfen geschachtelt werden!Auch die Summe der Diagonalelemente ist15:

>> sum(diag(A))

ans =

15

Die Gegendiagonale hat auch die Summe15. Die Gegendiagonale ist für die Linea-re Algebra weniger interessant, deshalb istderen Ansrechbarkeit auch trickreicher.

>> sum(diag(flipud(A)))

ans =

15

Die Funktion flipud vertauscht die Zeilenvon oben nach unten. Warum ist die Sum-me gleich 15? Die Anwort ist: Die Summeder ersten neun ganzen Zahlen ist 45 undda jede Spaltensumme gleich sein muss, gilt45/3 = 15. Wieviele magische Quadatrateder Ordnung drei gibt es? Antwort: Acht!Es gibt acht Drehungen und Spiegelungender Matrix A. Genauso viele Möglichkeiten,wie eine Folie auf den Overhead Projektorzu legen. Hier sind sie:

8 1 6 8 3 4

3 5 7 1 5 9

4 9 2 6 7 2

6 7 2 4 9 2

1 5 9 3 5 7

8 3 4 8 1 6

2 9 4 2 7 6

7 5 3 9 5 1

6 1 8 4 3 8

4 3 8 6 1 8

9 5 1 7 5 3

2 7 6 2 9 4

Man kann sie wie folgt erzeugen.

11 Copyright c© G. Gramlich

for k=0:3

rot90(A,k)

rot90(A',k)

end

Nun ein etwas Lineare Algebra. Es ist

>> det(A)

ans =

-360

und die Inverse ist

>> X = inv(A)

X =

0.1472 -0.1444 0.0639

-0.0611 0.0222 0.1056

-0.0194 0.1889 -0.1028

Diese sieht vertrauter aus, wenn wir die Ma-trixelemente als Brüche schreiben:

>> format rat

>> X

X =

53/360 -13/90 23/360

-11/180 1/45 19/180

-7/360 17/90 -37/360

Jetzt kann man die Determinante im Nen-ner erkennen. Mit format short könnenwir wieder auf die Defaultausgabe zurück-schalten.

Die Norm einer Matrix, die Eigenwerte unddie singuären Werte sind wichtige Gröÿeneiner Matrix. Hier sind sie für das magischeQuadrat der Ordnung drei:

>> r = norm(A)

r =

15.0000

>> e = eig(A)

e =

15.0000

4.8990

-4.8990

>> s = svd(A)

s =

15.0000

6.9282

3.4641

Wir sehen, dass der magische Summenwert15 in allen drei Gröÿen vorkommt.

Bis jetzt haben wir alle unsere Berech-nungen in Gleitpunktarithmetik durchge-führt. Diese Arithmetik wird im wissen-schaftlichen und ingenieurmäÿigen Rechnenam meisten verwendet, insbesondere für�groÿe� Matrizen. Für eine (3, 3)-Matrixkönnen wir die Berechnungen leicht symbo-lisch wiederholen. Dabei verwenden wir dieSymbolic Toolbox, die auf Maple basiert,siehe Abschnitt 66. Die Anweisung

>> A = sym(A)

A =

[ 8, 1, 6]

[ 3, 5, 7]

[ 4, 9, 2]

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

sum(A), sum(A'), det(A), inv(A),

eig(A), svd(A)

produzieren die entsprechenden symboli-schen Resultate.

12 Copyright c© G. Gramlich

Ein Beispiel eines magischen Quadratsder Ordnung vier �ndet sich in der Re-naissanceradierung Melancholie des deut-schen Künsters Albrecht Dürer. DieseRadierung steht uns in Matlab elektro-nisch zur Vefügung. Die Anweisungen

>> load durer

>> whos

ergeben die Ausgabe

Name Size Bytes Class

X 648x509 2638656 double

caption 2x28 112 char

map 128x3 3072 double

Grand total is 330272 elements ...

Hierbei ist X die Bildmatrix des Grauwert-bildes und in der Variablen map ist dieGraustufenskalierung enthalten. Das Bildwird mit den Anweisungen

>> image(X)

>> colormap(map)

>> axis image

erzeugt, siehe Abbildung 1. Betrachtet mandas Bild genauer, so stellt man fest, dasssich in ihm tatsächlich ein magisches Qua-drat be�ndet. Zoomen Sie mit der Lupe inden rechten oberen Teil des Bildes und Siekönnen das magische Quadrat der Ordnungvier gut erkennen. Mit den Anweisungen

>> load detail

>> image(X)

>> colormap(map)

100 200 300 400 500

100

200

300

400

500

600

Abbildung 1: Radierung von A. Dürer

>> axis image

erhalten wir in einer höheren Au�ösung denrechten oberen Teil des Bildes mit dem ma-gischen Quadrat, siehe Abbildung 2. Die

100 200 300

50

100

150

200

250

300

350

Abbildung 2: Ausschnitt der Radierung

Anweisung

>> A = magic(4)

erzeugt das folgende magische Quadrat derOrdnung vier

A =

16 2 3 13

13 Copyright c© G. Gramlich

5 11 10 8

9 7 6 12

4 14 15 1

Die Aufrufe sum(A), sum(A'),sum(diag(A)) und sum(diag(flipud(A)))liefern jeweils den Wert 34 und zeigen so-mit, dass A ein magisches Quadrat ist.

Dieses magische Quadrat ist aber nicht dasGleiche wie in Dürers Radierung. Wirbrauchen aber nur die zweite und dritteSpalte vertauschen. Das geht so:

>> A = A(:,[1 3 2 4])

A =

16 3 2 13

5 10 11 8

9 6 7 12

4 15 14 1

Dürer hat wahrscheinlich dieses magischeQuadrat gewählt, weil es in der Mitte derletzten Zeile die Zahl 1514 enthält, was dasJahr ist, in dem er diese Zeichnung getanhat.

Es stellt sich heraus, dass es 880 magischeQuadrate der Ordnung vier und 275 305 224magische Quadrate der Ordnung fünf gibt.Es ist bisher ein ungelöstes mathematischeProblem, die Anzahl der verschiedenen ma-gischen Quadrate der Ordnung 6 oder grö-ÿer anzugeben.

Die Determinante von A ist null. Deshalbhat die Matrix A auch keine Inverse. Dasheiÿt, es gibt magische Quadrate, die sin-gulär sind. Welche? Der Rang einer qua-dratischen Matrix ist die Anzhal der linearunabhängigen Spalten (oder Zeilen). Eine

(n, n)-Matrix ist genau dann singulär, wennder Rang kleiner n ist. Die Anweisungen

for n=1:24

r(n) = rank(magic(n));

end

[(1:24)' r']

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

1 1

2 2

3 3

4 3

5 5

6 5

7 7

8 3

9 9

10 7

11 11

12 3

13 13

14 9

15 15

16 3

17 17

18 11

19 19

20 3

21 21

22 13

23 23

24 3

Schauen Sie sorgfältig auf die Tabelle. Igno-rieren Sie den Fall n = 2, denn dann liegtkein magisches Quadrat vor. Können Sie

14 Copyright c© G. Gramlich

Strukturen erkennen? Mit Hilfe eines Säu-lendiagramms erkennt man die Strukturenbesser. Die Anweisungen

>> bar(r)

>> title('Rang magischer Quadrate')

erzeugen das Bild in Abbildung 3. Die Be-

0 5 10 15 20 250

5

10

15

20

25Rang magischer Quadrate

Abbildung 3: Rang magischer Quadrate

obachtungen 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 Matrixden Rang drei. Diese Matrizen sind also�stark� singulär.

• Ist n = 6, 10, 14, . . ., so hat die Matrixden Rang n/2 + 2. Auch diese Matrizensind singulär, nicht aber so stark wie dievorhergehende Klasse.

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

1.3 Gra�k

Matlab verfügt über mächtige Gra�k-fähigkeiten. Dieser Abschnitt zeigt ersteSchritte, siehe Abschnitt 40 für weitere Ein-zelheiten.

Die Funktion plot verfügt über viele gra-�sche Möglichkeiten; sie eine der grundle-genden Gra�kfunktionen in Matlab. Sindx und y zwei Vektoren der gleichen Länge,so ö�net der Befehl plot(x,y) ein Gra�k-fenster (Figure) und zeichnet die Elementevon x gegen die Elemente von y, das heiÿter verbindet die Punkte (x(i),y(i)) durchgerade Linien. Es entsteht ein Polygonzug.Der erste Vektor x bildet die Koordinatenentlang der x-Achse und der zweite Vektory die Koordinaten entlang der y-Achse.

Die Anweisungen

>> k = 1; r = 0.6; y0 = 0.01;

>> x = linspace(0,20);

>> y = k./(1+(k/y0-1)*exp(-r*x));

>> plot(x,y), grid,

zeichnen den Graf der logistischen Wach-tumstumsfunktion von 0 bis 20 mit denParametern k = 1 (Tragfähigkeit), r =0.6 (Wachstumsrate) und der Anfangsbe-dingung y0 = 0.01 (Anfangsbestand), sie-he Abbildung 4. Die darin vorkommendenRechenoperationen ./, * und / werden inAbschnitt 36.3 erklärt.

15 Copyright c© G. Gramlich

0 5 10 15 200

0.2

0.4

0.6

0.8

1

Abbildung 4: Logistisches Wachstum

2 Allgemeines

Matlab ist ein sehr leistungsfähiges Soft-waresystem für alle Arten von Berech-nungen. Der Name Matlab kommt vonMatrix Laboratory und verweist auf diezwei Überlegungen, die bei der Entwicklungeine Rolle gespielt haben. Grundelementesind Matrizen und ihre Manipulation, diein numerischen Verfahren optimal einge-setzt werden können, gleichzeitig verfolgtman über Laboratory den Gedanken derEntwicklung und Erweiterung.Matlab istein interaktives Matrix-orientiertes Softwa-resystem, in dem sich Probleme und Lösun-gen in vertrauter mathematischer Schreib-weise darstellen lassen.

Mittlerweile gibt es auÿer Matrizenbzw. zweidimensionalen Feldern (Arrays)weitaus komplexere Datenstrukturen. AlleDatenstrukturen lassen sich unter demOberbegri� des mehrdimensionalen Arrayseinordnen. Aus Matlab ist sozusagennun ein Arrlab (Array Laboratory) ge-

worden. Das numerische zweidimensionaleArray, also die klassische Matrix, ist indiesem Konzept nur noch ein Spezialfall,aber natürlich ein sehr wichtiger.

Typische Anwendungen sind:

• Numerische Berechnungen aller Art.

• Entwicklung von Algorithmen.

• Modellierung, Simulation und Entwick-lung von Prototypen technischer undwirtschaftlicher Probleme.

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

• Wissenschaftliche und technische Dar-stellungen.

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

In den siebziger Jahren wurde in den USAeine intensive Aktivität zur Entwicklunghochqualitativer Software gestartet, dasNATS-Projekt. 1976 lag als Ergebnis dieserBemühungen das Softwarepaket Eispackzur Lösung algebraischer Eigenwertpro-bleme vor [26]. Im Jahr 1975 begannendie Arbeiten an einem e�zienten undportablen Softwarepaket zur Lösung linea-rer Gleichungssysteme. Das Ergebnis wardas Softwarepaket Linpack [2]. Linpackund Eispack gewährleisteten lange Zeitdie zuverlässige und portable Lösung vonProblemen der Linearen Algebra. Um diesebeiden Pakete leichter handhabbar zu ma-chen, wurde Matlab geschrieben. Damitbestand auch die Möglichkeit, ausgereifteSoftware e�zient in der Lehre � zunächst

16 Copyright c© G. Gramlich

in der (Numerischen) Linearen Algebra,später und jetzt in vielen anderen Berei-chen � einzusetzen. Zur Geschichte vonMatlab siehe http://www.mathworks.

com/company/newsletters/news_notes/

clevescorner/dec04.html.

Der Einsatz von Matlab lohnt sich. Ne-ben den sonst üblichen Lehrbuchbeispielenkönnen kompliziertere und praxisbezogeneAufgaben schon im Ausbildungsprozess be-arbeitet werden. Matlab erhöht die Leis-tungsfähigkeit, Probleme aus Wirtschaft,Technik und Natur zu lösen, und erhöhtdie Motivation sich mit Mathematik zu be-schäftigen.

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

mathworks.de.

Die drei Hauptkomponenten von Matlabsind:

• Berechnung

• Visualisierung

• Programmierung

Berechnung. Matlab verfügt über einenumerische � qualitativ hochwertige � Pro-grammsammlung. Dem Benutzer bleibt esdadurch erspart, Standardalgorithmen neuprogrammieren zu müssen. Er kann aufgrundlegende, gut ausgetestete Programmezurückgreifen und darauf aufbauend eigeneAlgorithmen realisieren.Visualisierung. Matlab verfügt übermoderne Visualisierungsmöglichkeiten. Da-durch ist der Benutzer in der Lage, Daten

auf verschiedene Art und Weise darzustel-len.Programmierung. Matlab verfügt übereine eigene höhere Programmiersprache.Der Benutzer hat somit die Möglichkeit,die Funktionalität von Matlab durch ei-gene Programme beliebig zu erweitern. Dieskann dadurch geschehen, dass er Matlab-Programme schreibt � sogenannte m-Files �oder C/C++, Fortran bzw. Java-Codeseinbindet. Dadurch stellt Matlab ein o�e-nes System dar.

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

Im Verlauf mehrerer Jahre und durchBeiträge vieler Benutzer hat sich Matlabzu seinem heutigen Umfang entwickelt. InHochschulen ist Matlab das bevorzugteLehrmittel für Grund- und Aufbaukursein Mathematik, Ingenieurswissenschaften,Naturwissenschaften und Wirtschafts-wissenschaften. In der Industrie �ndetMatlab immer mehr Zuwachs in For-schung, Entwicklung, Datenauswertungund Visualisierungen aller Art. FolgendePunkte tragen auÿerdem zum Erfolg vonMatlab bei:Syntax. Matlab besitzt eine benutzer-

17 Copyright c© G. Gramlich

freundliche, intuitive Syntax, die kurz undeinfach ist. Sie lehnt sich stark an diemathematischen Schreibweisen an. Aucheinen umgekehrten Prozess kann manbeobachten. Matlab nimmt Ein�uÿ aufmathematische Beschreibungen, siehe zumBeispiel [3].Toolboxen. In Form von sogenanntenToolboxen lässt sich der Funktionsum-fang von Matlab auf vielen Gebietenerweitern. Unter anderem stehen folgen-de Toolboxen zur Verfügung: ExtendedSymbolic Math Toolbox, Financial Toolbox,Image Processing Toolbox, Neural NetworkToolbox, Optimization Toolbox, PartialDi�erential Equation Toolbox, Signal Pro-cessing Toolbox, Spline Toolbox, StatisticsToolbox und Wavelet Toolbox. Darüberhinaus stellt Matlab eine Schnittstellezur numerischen Programmbibliothek Nag(http://www.nag.com) bereit.Matrizen. Grundlage von Matlab sindreelle und komplexe (einschlieÿlich dünnbesetzter) Matrizen. Die Einführung einerMatrix als grundlegendes Datenelementhat sich nicht nur in der (numerischen)Mathematik, sondern auch in vielen ande-ren rechnerorientierten Bereichen als sehrvorteilhaft herausgestellt.Symbolisches Rechnen. Durch die(Extended) Symbolic Math Toolbox ist esinnerhalb der Matlab-Umgebung mög-lich, symbolisch zu rechnen. Dadurch kannder Benutzer symbolische und numerischeBerechnungen miteinander verknüpfen. InAbschnitt 66 wird diese Toolbox genauerbeschrieben.Prototyprealisierung. In der Praxis

kommt es vor, dass man � aus den ver-schiedensten Gründen heraus � daraufangewiesen ist, Algorithmen in anderenProgrammiersprachen, wie zum BeispielC/C++, Fortran, Pascal oder Java,zu implementieren. Aber auch dann ist esvorteilhaft, einen Prototyp des Verfahrensin Matlab zu realisieren, da dies meistsehr schnell möglich ist, bevor man denAlgorithmus überträgt bzw. automatischübertragen lässt (Zum Beispiel mit Hilfedes Matlab C/C++ Compilers).Handle Graphics (Gra�ken bearbei-ten). Das Matlab-Gra�ksystem umfasstHochsprachenbefehle für die Darstellungvon zwei- und dreidimensionalen Daten-strukturen, für die Bildverarbeitung, fürTrickbewegungen und Präsentationsgra�-ken. Hierzu gehören auch einfache Befehle,mit denen sich Gra�ken kundenspezi�schgestalten oder auch vollständig gra�scheBenutzerschnittstellen für eigene Applika-tionen aufbauen lassen.Bibliothek von mathematischenFunktionen. Matlab verfügt über eineumfangreiche Sammlung von mathemati-schen Algorithmen und Funktionen. DieseFunktionalität reicht von elementarenFunktionen über Eigenwertberechnun-gen bis hin zur schnellen Fourier-Transformation.Application Program Interface (API).Diese Anwenderschnittstelle ermöglicht dieErstellung von Programmen in C/C++und Fortran, um sie dann in Matlabeinzubinden.Simulink. Simulink � ein Partnerpro-gramm zu Matlab � ist ein blockorien-

18 Copyright c© G. Gramlich

tiertes, interaktives System zur Simulationlinearer und nichtlinearer dynamischerSysteme. Es handelt sich um ein maus-gesteuertes Gra�kprogramm, das einModell eines technischen, natürlichen oderwirtschaftlichen Systems, das als Blockdia-gramm auf dem Bildschirm darzustellenist, unter dynamischen Einwirkungennachbildet. Es kann für lineare, nichtli-neare, zeitkontinuierliche oder zeitdiskreteProzesse eingesetzt werden. Grundlage sindMatlab-Funktionen zur Lösung gewöhn-licher Di�erenzialgleichungen (DGL-Löser,ODE-Löser).Blocksets sind Ergänzungen zu Simu-link, die weitere Bausteinbibliotheken fürSpezialanwendungen bereitstellen.Stateflow ist eine Erweiterung von Si-mulink zur Simulation ereignisorientierterModelle (Endliche Zustandsautomaten,Finite State Machines).Real-time Workshop ist ein Programm,mit dem sich aus den Blockdiagrammen einC-Code bilden lässt, der von einer Vielzahlvon Echtzeitsystemen abgearbeitet werdenkann.

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

3 Was macht den Erfolg vonMatlab aus?

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

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

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

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

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

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

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

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

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

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

19 Copyright c© G. Gramlich

Wir geben hier nur eine Einführung indie Mächtigkeit von Matlab. Für aus-führlichere Darstellungen bezüglich Mat-lab und Mathematik (numerisch und sym-bolisch) verweise ich Sie auf unser Buch [7]bzw. auf [9] und [23] und natürlich auf dieMatlab-Dokumentationen [14, 15, 16, 17].

4 Starten und beenden

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

5 Die Arbeitsober�äche

Wir geben eine Übersicht über die Mat-lab Arbeitsober�äche (Desktop) und ihrereinzelnen Elemente: den Help Browser, Ar-rayeditor und Editor/Debugger.

Nach dem Start ö�net sich die MatlabArbeitsober�äche, die auch als Desktop be-zeichnet wird, siehe Abbildung 5. Die Ar-beitsober�äche von Matlab besteht aus

Abbildung 5: Die Arbeitsober�äche

dem Command Window zur Befehlseinga-be, dem Current Directory mit dem In-hlatsverzeichnis, dem Workspace mit denVariablen des Speicherbereiches des Com-mand Windows, der Command History,verschiedener Menüzeilen sowie dem StartButton. Die einzelnen Komponenten kön-nen in ihrer Positionierung und Gröÿe mitder Maus verändert und durch Festhaltender Namensliste mit der linken Maustas-te umgruppiert werden. Mit der Dock-Eigenschaft lassen sich die einzelnen Kom-ponenten abkoppeln und in unabhängigeFenster wandeln. Figure Windows, Edi-tor/Debugger und Arrayeditor lassen sichan das Command Window ankoppeln undso ein gröÿeres Dokument erzeugen. Da-bei bestehen unterschiedliche Möglichkei-ten der Anordnung, beispielsweise neben-einander oder hintereinander. Probieren Siees aus! Für häu�g sich wiederholende Auf-gaben lassen sich eigene Shortcuts de�nie-ren und in die Liste der Shortcuts einfügen.

Der Start Button erlaubt den direkten Zu-gri� auf unterschiedliche Funktionalitäten,

20 Copyright c© G. Gramlich

nicht nur unter Matlab, sondern auchauf Funktionalitäten von Toolboxen, Simu-link, Stateflow und Blocksets. Hier be-�ndet sich auch ein einfacher Zugang zuden erwähnten Shortcuts oder interessantenMatlab Seiten, Hilfeseiten und Demos, umnur eine kleine Auswahl zu nennen.

5.1 Das Command Window

Das Command Window dient dem Aufrufvon Matlab Befehlen, Erzeugen von Va-riablen und dem Anzeigen von Ergebnissen.Die Eingabe erfolgt hinter dem MatlabPrompt

>>

Befehle können auch abgekürzt werden undmit der Tab-Taste ergänzt werden. Zu frü-heren Eingaben kann mit den Kursortas-ten zurückgeblättert werden. Erzeugte Va-riablen werden im Workspace Window auf-gelistet, Befehle in der Kommando History.

5.2 Command History

Im Command History werden die ein-gegebene Befehle zur Wiederverwendungnach dem Datum geordnet abgespeichert.Durch Doppelklick können diese Befehle di-rekt ausgeführt werden und mit der lin-ken Maustaste in das Command Windowzur erneuten Bearbeitung verschoben wr-den. Die linke Maustaste geneinsam mit derSift- oder Steuerungstaste erlaubt die Aus-wahl von Gruppen der im History Windowgespeicherten Kommandos. Mit der rechten

Maustaste ö�net sich ein Fenster, das dasKopieren der ausgewählten Befehle, das di-rekte Erzeugen von m-Files und Shortcutsoder das Löschen aus der Command Histo-ry erlaubt.

5.3 Der Workspace Browser

Der Workspace Browser zeigt die aktu-ellen Variablen des Base-Speicherbereichs(Command Window) oder beim Debuggendie des zugehörigen Funktionsspeicherau-mes an. Die Variablen sind alphabetischgeordnet, können aber auch durch Ankli-cken der Spaltenüberschriften nach den da-mit verküpften Eigenschaften umgeordnetwerden.

Die Menüleiste des Workspace Browser bie-tet mit dem Plot-Zeichen einen bequemenZugang zu gra�sch gesteuertem Plotten ei-ner oder mehrerer Variablen.

Ist der Workspace Browser im Vorder-grund, weist die Desktop-Menüleiste zu-sätzlich das Menü Graphics auf. Wählt mandort Plot Tools, so ö�net sich die Figure-Umgebung mit Figure Palette, Plot Brow-ser, Property Editor und Figure Toolbar.Unter der Figure Palette sind alle Varia-blen des Workspace aufgelistet und könnendamit auch direkt geplottet werden.

Der Workspace Browser stellt eine gra-�sche Darstellung des whos Kommandosdar. Mit dem Befehl who kann man her-aus�nden, welche Variablen momentan imWorkspace gespeichert sind. Um Daten zusichern kann man die Funktion save ver-wenden. Mit load kann man gespeicherte

21 Copyright c© G. Gramlich

Daten in den Workspace laden. Die Tabelle1 zeigt weitere Funktionen zum Verwaltendes 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)Angenommen Sie möchten die Variablen a

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

Aufgabe 2 (Workspace verwalten)Schreiben Sie einen Daten�le mit dem Na-men data.in, der die folgenden Daten ent-hält:

1.0 5.0

2.1 6.3

3.2 6.9

3.9 8.1

5.1 9.1

Erzeugen Sie im Matlab Workspace ei-ne Matrix A mit diesen Daten. ÄndernSie die zweite Zeile von A zu 2.0 und 6.2

und schreiben Sie die modi�zierte Matrix A

in einen ASCII-Daten�le mit dem Namendata.out.Lösung: Das Einlesen erfolgt mittels

>> A = load('data.in');

Die Manipulation der Matrix A erfolgtdurch

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

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

>> fprintf('data.out',...

'%1.1f %1.1f\n',A')

oder alternativ mit

>> save data.out A -ASCII

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

5.4 Current Directory

Der Current Directory Browser hat gegen-über den Vorgängerversionen an Funktio-nalität hinzugewonnen und geht weit überdas reine Au�isten der Dateien des aktuel-len Verzeichnisses hinaus. Durch Anwählenkann direkt in Unterverzeichnisse gesprun-gen werden.

Unter View kann eine Auswahl der aufge-listeten Files nach ihrer Filekennung erfol-gen. Files werden durch Doppelklicken aus-geführt. Dah heiÿt beispielsweise zu m-Filesoder Text�les ö�net sich der Editor, �g-Files werden dargestellt, bei mat-Files wer-den die Daten geladen und html-Files im

22 Copyright c© G. Gramlich

Web Browser dargestellt.

Das Menü Find Files (Fernglassymbol) ö�-net eine gra�sche Umgebung zum Suchenanch Dateien oder Begri�en in Dateien.

Mit filebrowser wird der Current Direc-tory Browser aus dem Command Windowheraus aktiviert.

6 Der Help Browser

Matlab verfügt über ein sehr umfangrei-ches Hilfe- und Dokumentationsfenster, denHelp Browser, siehe Abbildung 6. Der Help

Abbildung 6: Der Help Browser

Browser kann aus dem Desktop entwederunter dem Menüpunkt Help oder über das?-Symbol oder mit dem Befehl doc geö�-net werden. Der Help Browser besteht ausdem Navigator und auf der rechten Seiteaus dem eigentlichen Hilfetext. Im Naviga-tor stehen die Kartenreiter Contents, Index,Search und Demos zur Auswahl. Das Dock-symbol erlaubt wieder das Anbinden an dasDesktop-Fenster.

Unter Contents verbirgt sich eine voll-ständige Dokumentation aller installiertenProdukte bestehend aus den User Gui-des. Zu den User Guides gehört auch einevollständige Funktionsübersicht der einzel-nen Matlab Funktionen/Kommandos, diestets aus einer Übersicht der erlaubte Syn-tax, aus einer ausführlichen Beschreibung,gegebenenfalls ergänzenden Hinweisen, ei-nem Beispielteil und einem Verweis auf ver-wandte Matlab Funktionen/Kommandossowie in einigen Fällen ergänzende Litera-turangaben besteht. Unter Contens �ndetsich auch das Kapitel Printable Dokumen-tation, das direkt auf die MathWorks Inter-netseite mit den pdf-Dokumenten verweist.

Der Kartenreiter Index stellt ein alpha-betisch geordnetes Register zur Verfügungund Search ein Suchfenster. Die Tre�erwerden im Navigatorteil aufgelistet unddurch anklicken im rechten Textfenster dar-gestellt. Dabei wird unter allen installier-ten Produkten gesucht. Soll die Suche aufbetsimmte Toolboxen oder Blocksets einge-schränkt werden, so kann unter den Prefe-rences im Menü File ein Produkt�lter ge-nutzt werden.

Unter Demos werden Beispiele zu verschie-denen Funktionalitäten bereit gehalten.

7 Der Array Editor

Der Array Editor dient dem Visualisierenund interaktiven Editieren von Workspace-Variablen und wird durch Klicken aufdie Variable im Workspace geö�net, sie-

23 Copyright c© G. Gramlich

he Abbildung 7. Alternativ kann der Ar-

Abbildung 7: Der Array Editor

ray Editor mittels openvar('VarName')

aus dem Command Window geö�net wer-den. VarName ist der Name der Varia-blen. Im Gegensatz zu älteren Versio-nen lassen sich ab dem Release 7 auchZellen- und Strukturvariablen (siehe Ab-schnitt 73) im Array Editor bearbeiten.Der Array Editor lässt sich wie bereitserwähnt am Matlab Desktop andocken.Spalten im Editor lassen sich kopieren, lö-schen und teilen. Exceldaten lassen sichunter Windows-Betriebssystemen mit Co-py und Paste in den Array Editor ko-pieren. Das Plot-Symbol erlaubt gra�schunterstützt das Plotten von Daten, da-bei steht ein umfangreicher Auswahlkatalogmit Linienplots, Histogrammen, Höhenlini-enplots, 3D-Gra�ken usw. zur Verfügung.Neue Variablen lassen sich mausgesteuertaus bestehenden Daten erzeigen.

8 Der Editor/Debugger

Der Matlab Editor und Debugger, sie-he Abbildung 8 dient dem Schreiben von

Abbildung 8: Der Editor/Debugger

Matlab Scripts und Functions sowie demgra�sche Debuggen. Der Editor hebt dabeiMatlab Schlüsselwörter oder Kommentarein unterschiedlichen Farben hervor, erkenntaber auch andere Formate wie beispielswei-se HTML. Aufgerufen wird der Editor ent-weder mit

>> editor Fname

zum Editieren des Files Fname oder aus demDesktop unter File → New → m-�le oderdurch Klicken auf eine Datei im Current Di-rectory Browser.

Unter dem Menüpunkt Edit des Editors be-�ndet sich ein Search and Replace-Fenster,mit dem Begri�e im lokalen File oder

24 Copyright c© G. Gramlich

auch auÿerhalb gesucht und gegebenenfallsdurch einen neuen Begri� ersetzt werdenkönnen.

Bei der Entwicklung eines Programms tre-ten prinzipiell zwei Fehlerarten auf: Syntax-und Laufzeitfehler. Syntaxfehler sind meistleicht zu beheben. Laufzeitfehler tretenbei einem syntaktisch korrekten Programmwährend der Ausführung auf und zeigensich entweder in einem Programmabsturzoder in o�ensichtlich falschen Resultaten.In solchen Fällen kann es notwendig sein,sich den Ablauf des Programms währendder Ausführung genauer anzusehen. DieseAufgabe übernimmt ein sogenannter De-bugger, ein Programm, mit dem andereProgramme während der Ausführung anbestimmten Stellen, so genannte Break-points, unterbrochen und untersucht wer-den können. Mit Hilfe der Menüeinträge un-ter Debug oder durch Klick auf das Icon mitdem roten Punkt können Breakpoints ge-setzt oder gelöscht werden. Der Debuggerkennt verschiedene Arten von Berakpoints,von denen wir auf den Standard-Breakpointkurz eingehen wollen.

Ein Standard-Breakpoint wird durch einenroten Punkt im Quelltext angezeigt. Erwird in die Zeile gesetzt, in der der Cursorsteht. Bei der Ausführung des Programmserfolgt dann ein automatischer Wechsel inden Editor und das Programm wird an derStelle des Breakpoints angehalten. Die bisdahin belegten Variablenwerte können an-schlieÿend bequem betrachtet werden, in-dem man mit dem Mauszeiger auf die je-weilige Variable zeigt. Die Werte werden

in einem automatisch ausgeklappten Fens-ter angezeigt (wenn in den Preferences ein-gestellt). Alternativ können die Variablenauch im Command Window oder mit Hilfedes Kontext-Menüs der reechten Maustas-te im Array Editor angezeigt werden. DieVariablenwerte können allerdings nicht nurangezeigt werden. Darüber hinaus ist esmöglich, die Werte zur Programmlaufzeitzu verändern, was zu Testzwecken sehrnützlich ist.

Meine Empfehlung ist es, sich mit demDebugger vetraut zu machen, insbesonderewenn man gröÿere Programme entwickelnwill.

Neben dem Debugger gibt es noch weitereWerkzeuge, die die Programmentwicklungunterstützen, den Code-Check mit M-Lintund den Pro�ler. Mit dem Pro�ler sind um-fangreiche Laufzeitanalysen möglich, die si-cherlich nur dem fortgeschrittenen Anwen-der von Nutzen sind. Mit dem M-Lint Pro-gramm (im Menü Tools) kann ein Berichterstellt werden, in dem der Programmie-rer zum Beispiel über nicht verwendete Va-riablen, syntaktische Fehler oder sonstigeUngereimtheiten im Code informiert wird.Dies ist auch für den Anfänger nützlich.

9 Plots

Bilder (Images) oder Abbildungen werdenim Figure Window dargestellt. Neben sei-ner Aufgabe, die Ebene für die gra�scheDarstellung bereitzustellen, bietet das Fi-gure Window noch weitere Eigenschaften.

25 Copyright c© G. Gramlich

Unter File besteht die Möglichkeit mit Ge-nerate m-File das gra�sche Layout in einemm-File abzuspeichern und so bei zukünfti-gen vergleichbaren Aufgaben auf ein vorge-fertigtes Plotlayout in Form einer MatlabFunktion zuzugreifen. Unter View wird alswichtigestes Instrument der Property Edi-tor aufgerufen, mit dem interaktiv Eigen-schaften der Gra�k verändert und sämt-liche Eigenschaften mit dem Property In-spector angesprochen werden können. In-sert erlaubt das interaktive Einfügen vonzum Beispiel Legende und Farbbalken. Un-ter Tools �nden sich Eigenschaften wie Panzum interaktiven Verschieben von Plotlini-en und insbesondere auch das Basic Fittingund Data Statistic Tool.

10 Der Import Wizard

Der Import Wizard (Zauberer) lässt sichüber den Befehl uiimport, durch Dop-pelklicken auf einen Daten�le im CurrentDirectory Window oder über File → Im-port Data ö�nen. In diesem Fall wird übereinen File Browser der entsprechende Da-ten�le ausgewählt. Der Import Wizard er-laubt das interaktive Einlesen von Ascii-Files, binären mat-Dateien, Excel-Files,wav-Dateien, Bilddateien oder Hdf-Daten,um nur Einige zu nennen. Bei formatiertenDaten kann ein geeigneter Spaltenseparatorangeklickt werden, und, falls dies nicht au-tomatisch erkannt wird, die Zahl der Kopf-zeilen vorgegeben werden. Numerische Da-ten werden dann als Array, Textdaten wiebeispielsweise Spaltenüberschriften als Zel-

lenvariablen abgespeichert.

11 Matlab unterbrechen

Mit ctrl-c können Sie Matlab jederzeitunterbrechen.

12 Lange Eingabezeilen

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

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

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

s =

2.9290

13 Eine Sitzung aufzeichnen

Das Kommando

>> diary MeineSitzung

sorgt dafür, dass der folgende Bildschirm-text komplett in der Datei MeineSitzungaufgezeichnet wird. Die Aufzeichung kön-nen Sie anhalten, wenn Sie diary off ein-geben. MeineSitzung ist nur eine Beispiel-datei; sie können selbstverständlich jedenzulässigen Dateinamen angeben.

14 Das help-Kommando

Das help-Kommando ist eine einfache Mög-lichkeit, Hilfe über eine Matlab-Funktion

26 Copyright c© G. Gramlich

im Command Window zu erhalten. Hierzugibt man help und den Funktionsnamen,das Kommando oder das Symbol ein.

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

>> help sqrt

SQRT Square root.

SQRT(X) is the square ...

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

SQRT.m not found.

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

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

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

>> help

HELP topics

matlab\general - General ...

matlab\ops - Operators ...

matlab\lang - Programming ...

matlab\elmat - Elementary ...

usw.

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

15 Das doc-Kommando

Eine konfortablere Hilfe erhalten Siemit dem doc-Kommando. Beispielswei-se erhalten Sie mit doc sin eine html-Dokumentation über die sin-Funktion. Mitdoc elfun bekommen Sie eine Liste allerelementaren mathematischen Funktionen,die in Matlab realisiert sind.

16 Demos

Durch den Aufruf

>> demo

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

27 Copyright c© G. Gramlich

17 Das lookfor-Kommando

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

>> help inverse

folgende:

inverse.m not found.

Aber der Aufruf

>> lookfor inverse

liefert � in Abhängigkeit der installiertenToolboxen � folgendes:

INVHILB Inverse Hilbert matrix.

IPERMUTE Inverse permute array ...

ACOS Inverse cosine.

ACOSH Inverse hyperbolic cosine.

ACOT Inverse cotangent.

ACOTH Inverse hyperbolic ...

ACSC Inverse cosecant.

ACSCH Inverse hyperbolic cosecant.

ASEC Inverse secant.

ASECH Inverse hyperbolic secant.

ASIN Inverse sine.

ASINH Inverse hyperbolic sine.

ATAN Inverse tangent.

ATAN2 Four quadrant inverse ...

ATANH Inverse hyperbolic tangent.

ERFCINV Inverse complementary ...

ERFINV Inverse error function.

INV Matrix inverse.

PINV Pseudoinverse.

IFFT Inverse discrete Fourier

transform.

usw...

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

>> lookfor inverse -all

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

Aufgabe 3 (lookfor-Kommando)Mit welchem Befehl wird das CommandWindow (Kommandofenster) gelöscht?Lösung: Mit dem Aufruf

>> lookfor command

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

18 Alle Funktionen?

Alle Matlab-Funktionen �nden Sie imHelp Browser. Geben Sie doc ein, dann�nden Sie unter Help Navigator ContentsMatlab in Function � Alphabetical List ei-ne alphabetische Au�istung aller Matlab-Funktionen und in Functions � Categorial

28 Copyright c© G. Gramlich

List alle Funktionen in Gruppen eingeteilt.

19 Wichtige Funktionen?

Wichtige und häu�g vorkommende Funk-tionen habe ich Ihnen im Anhang B abge-druckt.

20 Der Path Browser

Matlab ermittelt die Art, in der die aufge-rufenen Funktionen auszuführen sind, übereinen Suchpfad, das ist eine geordnete Lis-te von Verzeichnissen. Mit dem Kommandopath erhält man die aktuelle Liste von Ver-zeichnissen, in denen Matlab sucht. Die-ser Befehl kann auch dazu verwendet wer-den, um Verzeichnisse aus dem Suchpfadzu löschen oder anzuhängen. Mit dem PathBrowser (siehe Abbildung 9) kann der Pfad

Abbildung 9: Der PathBrowser

bequem geändert oder ausgegeben werden.Falls Sie ein Windows Betriebssystem ver-wenden, so können Sie den Path Browser

über die Schalt�äche des Command Win-dows, über Set Path im Menü File oderüber das Kommando pathtool ö�nen.

21 Den Datenträger verwalten

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

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

Tabelle 2: Den Datenträger verwalten

22 Wie man weitereSysteminformationen erhält

Die Tabelle 3 zeigt Matlab-Funktionen,

Funktion Beschreibungcomputer Typ des Rechnershostid Identi�kationsnummerlicense Lizenznummer

Tabelle 3: Systeminformationen

die man verwenden kann, um Informatio-

29 Copyright c© G. Gramlich

nen über den eigenen Computer zu erhal-ten.

23 Neuigkeiten und Versionen

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

Funktion Beschreibungbench Benchmarksver Versionenversion Versionsnummerwhatsnew Release Notes

Tabelle 4: Weitere Infos

24 Voreinstellungen

Es gibt mehrere m-Files, die die Vorein-stellungen vonMatlab festlegen und beimStart ausgeführt werden. Diese Files be�n-den sich im Unterverzeichnis local im Ver-zeichnis toolbox. Der File Contents ent-hält eine Übersicht.

Zur Startzeit führt Matlab automatischden File matlabrc aus. Dieser File setztdie Matlab Pfade, legt die Default-Gröÿeder Figures fest und setzt einige weitereStandardeinstellungen. Veränderungen soll-ten bei Bedarf nicht in dieser Datei, sondernim startup File durchgeführt werden. Die-ser ist dafür gedacht, dass Sie dort eigeneFunktionen und Kommandos de�nieren, diezur Startzeit ausgeführt werden sollen.

25 Einfaches Rechnen

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

>> 3+4

ans =

7

>> 9/3

ans =

3

>> 2^8

ans =

256

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

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

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

>> 1+2;

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

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

30 Copyright c© G. Gramlich

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

26 Welche arithmetischeOperation hat Vorang?

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

>> 2^10/10

ans =

102.4000

>> 2+3*4

ans =

14

>> -2-3*4

ans =

-14

>> 1+2/3*4

ans =

3.6667

>> 1+2/(3*4)

ans =

1.1667

Aufgabe 5 (Rechnen)Ermitteln Sie das Ergebnis von

>> 3+4/5*6

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

>> 3+4/5*6

ans =

7.8000

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

Aufgabe 6 (Rechnen)Ermitteln Sie das Ergebnis von

>> 48/3-3^2

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

>> 48/3-3^2

ans =

7

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

27 Zahlen und Formate

Matlab verarbeitet Zahlen in der üblichenDezimalschreibweise, wobei wahlweise einDezimalpunkt und ein positives oder nega-tives Vorzeichen verwendet werden können.

31 Copyright c© G. Gramlich

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

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

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

Subtraktion (-)

Tabelle 5: Vorrang-Tabelle

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

In der wissenschaftlichen Notation bezeich-net der Buchstabe e eine Skalierung umZehnerpotenzen. Zulässige Zahlen sind zumBeispiel:

4 101 0.0001

9.84757 1.5e-12 8.997

3i -3.4j 4e3i

Alle Zahlen werden intern im double-Format (Langformat) gemäÿ der Spezi�-kation durch die Gleitpunktnorm der Ie-ee abgespeichert. Matlabs Zahlenausga-be folgt mehreren Regeln. Ist das Ergeb-nis ganzzahlig, so wird eine ganze Zahlausgegeben. Wenn das Ergebnis eine reelleZahl ist, dann gibt Matlab das Resultatstandardmäÿig auf 4 Dezimalen gerundetaus. Ist das Matrixelement gröÿer als 103

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

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

Kommando Beispiel: piformat short 3.1416

format long 3.14159265358979

format bank 3.14

Tabelle 7: Zahlenausgabe in Matlab

32 Copyright c© G. Gramlich

28 Variablen und Konstanten

Ein Variablenamen muss mit einem Buch-staben beginnen und darf aus maximal 63Buchstaben, Zahlen und Unterstrichen be-stehen (Bis Release 6.1 lag der Wert nochbei 31). namelengthmax liefert die maxi-male Länge (63 Zeichen), die zur Unter-scheidung eines Namens (Variablen, Datei-en, usw.) erlaubt ist, zurück.

>> namelengthmax

ans =

63

Umlaute sind nicht erlaubt! Erlaubt sindzum Beispiel

MeineVariable Anna x1 X3

z23c1 My_Var

Nicht erlaubt sind

Meine-Variable 2Var $2 &x

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

>> isvarname('My_Var')

ans =

1

>> isvarname('2Var')

ans =

0

1 (wahr) wird zurückgegeben, falls ein gül-tiger Variablenname vorliegt, ansonsten 0(falsch). Für weitere Infos, siehe auch Ab-schnitt 46.

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

anna ANNA anNa aNna_anna

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

Achten Sie in Matlab unbedingtauf Groÿ-und Kleinschreibung!

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

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

Tabelle 8: Spezielle Variablen

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

Vermeiden Sie das Überschreibenspezieller Variablen!

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

29 Komplexe Zahlen

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

33 Copyright c© G. Gramlich

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

z1 =

3.0000 + 4.0000i

z2 =

1.0000 - 3.0000i

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

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

>> z1+z2

ans =

4.0000 + 1.0000i

>> z1*z2

ans =

15.0000 - 5.0000i

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

>> sqrt(1+2i)

ans =

1.2720 + 0.7862i

Die konjugiert komplexe Zahl zu 1 + 3i ist

>> conj(1+3i)

ans =

1.0000 - 3.0000i

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

berechnet werden. Weitere Funktionen, diebeim Rechnen mit komplexen Zahlen von

Bedeutung sein können, siehe doc elfun.

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

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

>> conj(z)

ans =

2.0000 - 2.0000i

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

phi =

45

>> a = abs(z)

a =

2.8284

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

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

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

>> real(z), imag(z)

ans =

0.5000

ans =

2.5000

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

34 Copyright c© G. Gramlich

30 Ieee-Arithmetik und double

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

Die Funktion eps (machine precision) gibtden Abstand von 1.0 zur nächst gröÿerenGleitpunktzahl zurück.

>> eps

ans =

2.2204e-016

Dieser Abstand ist 2−52, also zweimal derrelativen Rechengenauigkeit. Da Matlabden Ieee-Standard realisiert, erzeugt je-de Rechnung eine Gleitpunktzahl, womög-lich aber in einem besonderen Format. Ist

das Ergebnis einer Berechnung gröÿer alsrealmax, dann tritt ein Over�ow ein unddas Resultat ist Inf, was für unendlich (in-�nity) steht. Ist das Resultat kleiner als-realmin, so kommt -inf heraus.

>> realmax

ans =

1.7977e+308

>> -1.1*realmax

ans =

-Inf

>> 1.2*realmax

ans =

Inf

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

>> 0/0

Warning: Divide by zero.

ans =

NaN

>> inf/inf

ans =

NaN

>> 0*inf

ans =

NaN

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

>> 3+NaN

ans =

NaN

>> NaN-NaN

ans =

35 Copyright c© G. Gramlich

NaN

>> 0*NaN

ans =

NaN

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

>> realmin

ans =

2.2251e-308

>> realmin*eps

ans =

4.9407e-324

>> realmin*eps/2

ans =

0

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

>> computer

ans =

PCWIN

Aufgabe 10 (Arithmetik)Berechnen Sie:

(a) e700

(b) e710

Beschreiben Sie die Resultate.

Lösung:

(a) � exp(700)

ans =

1.0142e+304

(b) >> exp(710)

ans =

Inf

In (b) wird als Inf ausgegeben, da das Er-gebnis die gröÿte positive Gleitkommazahlin Matlab übersteigt. Diese Zahl ist

>> realmax

ans =

1.7977e+308

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

31 Nicht double-Datentypen

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

• single

• int8 und uint8

• int16 und uint16

• int32 und uint32

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

36 Copyright c© G. Gramlich

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

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

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

>> x = uint8(7)

x =

7

Hier ein paar Rechnungen:

>> x+4

ans =

11

>> x+pi

ans =

10

>> x+253

ans =

255

>> x+254

ans =

255

>> x-8

ans =

0

>> x-9

ans =

0

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

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

>> int8(3.6)

ans =

4

>> int8(3.5)

ans =

4

>> int8(3.4)

ans =

3

>> int8(-3.5)

ans =

-4

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

37 Copyright c© G. Gramlich

gativ ist. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

Mit den Funktionen intmax und intmin

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

>> intmax('int32')

ans =

2147483647

Um eine Zahl mit dem Datentyp single

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

>> a = single(5);

>> b = 5;

>> whos

Name Size Bytes Class

a 1x1 4 single array

b 1x1 8 double array

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

>> single(4.1)+double(3)

ans =

7.1000

>> whos

Name Size Bytes Class

ans 1x1 4 single array

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

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

32 Merkmale von Matlab

Matlab verfügt über drei wesentlicheMerkmale, die das System von anderenmodernen Programmierumgebungen unter-scheidet. Wir führen sie in diesem An-schnitt ein und erklären sie in den folgendenAbschnitten ausführlicher.

32.1 Keine Deklaration notwendig

Variablen müssen in Matlab nicht dekla-riert werden, bevor sie verwendet werdn.Dies gilt sowohl für Arrays als auch für Ska-lare. Darüberhinaus werden die Dimensio-nen der Arrays bei Bedarf automatisch ver-gröÿert. Durch

>> x(3) = 0

x =

0 0 0

wird ein Zeilenvektor x mit drei Nullkoor-dinaten angelegt und durch

>> x(5) = 0

x =

0 0 0 0 0

zu einem Vektor der Länge 5 erweitert. Anjetzt gibt es einen Zeilnvektor x der Länge5.

32.2 Variable Argumentenliste

Matlab verfügt über eine groÿe Samm-lung von Funktionen. Diese können keinEingabeargument oder mehrere Eingabear-gumente und kein Ausgabeargument oder

38 Copyright c© G. Gramlich

mehrere Ausgabeargumente haben. Zwsi-chen Ein- und Ausgabeargument wird deut-lich unterschieden. Die Eingabeargumentestehen rechts vom Funktionsnamen in run-den Klammern und die Ausgabeargumentestehen links vom Funktionsnamen in ecki-gen Klammern.

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

In diesem Beispiel sind a und b sindAusgabe- und x, y, z die Eingabeargumen-te. Sowohl die Eingabe- als auch die Aus-gabeargumente sind variabel, so dass unterUmständen nur ein Teil der Argumente spe-zi�ziert werden muss. Wir zeigen dies an einpaar Beispielen.

Die Funktion norm berechnet die Eu-klidische Norm (gewöhnliche Länge, 2-Norm) eines Vektors:

>> x = [3 4];

>> norm(x)

ans =

5

Eine andere Norm, die sogenannte 1-Norm(Summe der Beträge der Koordinaten),kann ebenfalls mit der Funktion norm be-rechnet werden, indem 1 als zweites Einga-beargument angegeben wird.

>> norm(x,1)

ans =

7

Wir sehen. Wird kein zweites Eingabear-gument angegeben, so wird standardmäÿigdie 2-Norm verwendet. Die Funktion max

hat mehrere Ausgabeargumente. Mit einem

Eingabe- und einem Ausgabeargument gibtmax die gröÿte Koordinate eines Vektors zu-rück.

>> max(x)

ans =

4

Gibt man ein zweites Ausgabeargument an,so wird zusätzlich der Koordinatenindexder gröÿte Koordinate mit ausgegeben.

>> [m,k] = max(x)

m =

4

k =

2

32.3 Komplexe Arrays und Arithmetik

Der fundamentale Datentyp ist inMatlabein mehrdimensionales Array bestehend auskomplexen Zahlen, wobei Real- und Imagi-närteil Gleitpunktzahlen sind, die doppeltgenau gespeichert sind. Wichtige Spezial-fälle sind Matrizen (zweidimensionale Ar-rays), Vektoren und Skalare. Die meistenBerechnungen werden in Gleitpunktarith-metik durchgeführt und das in komplexerArithmetik, wenn Daten komplex auftre-ten. Dies steht im Unterschied zu C/C++und Java, wo nur reelle Zahlen und reelleArithmetik unterstützt werden.

Matlab verfügt jedoch auch über ganzzah-lige Datentypen (siehe Abschnitte 31 und73), die jedoch hauptsächlich aus Speicher-platze�zienzgründen anstatt zu Berech-nungen verwendet werden.

39 Copyright c© G. Gramlich

33 Mathematische Funktionen

Matlab verfügt über viele mathemati-sche Funktionen, siehe doc elfun (helpelfun) für grundlegende Funktionen unddoc specfun (help specfun) für spezielleFunktionen. Zu den grundlegenden Funk-tionen gehören die

• trigonometrische Funktionen,

• Exponentialfunktionen,

• Logarithmusfunktionen,

• hyperbolische Funktionen,

• Potenzfunktionen,

• Wurzelfunktionen,

• Restbildungsfunktionen,

• Vorzeichenfunktionen,

• Rundungsfunktionen.

Unter den speziellen Funktionen �ndet manzum Beispiel die

• Besselfunktionen,

• Hankelfunktionen,

• Fehlerintegrafunktion,

• Exponentialintegralfunktion,

• Gammafunktion.

Die Tabelle 10 zeigt trigonometrische Funk-tionen. Alle trigonometrische Funktionen(mit der Ausnahme atan2) akzeptieren alsArgumente komplexe Arrays, die punktwei-se ausgewertet werden. Die Arumente wer-den im Bogenmaÿ (Radiant, rad) erwartet.Für Berechnungen in Grad (Gradmaÿ, ◦)dienen die mit einem d am Ende des Na-

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

Tabelle 10: Trigonometrische Funktionen

mens ergänzten trigonometrischen Funktio-nen: acosd, cosd, asind, sind, usw.

Die folgenden Zeilen bestätigen die Ergeb-nisse cos(π/2) = 0 und cos(90◦) = 0 inMatlab.

>> cos(pi/2)

ans =

6.1232e-017

>> cosd(90)

ans =

0

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

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

cos x 1 0 −1 0 1

und die Tabelle

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

Lösung: Hier die Bestätigung:

40 Copyright c© G. Gramlich

>> cos(x)

ans =

0.0000 -1.0000 -0.0000 1.0000

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

>> cosd(phi)

ans =

0 -1 0 1

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

Andere Funktionen sind zum Beispiel sqrt,exp oder log.

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

ans =

2

ans =

54.5982

ans =

2.8332

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

Mathematisches Symbol Matlab

ln = loge log

lb = log2 log2

lg = log10 log10

Tabelle 11: Logarithmusfunktionen

33.1 Rundungsfunktionen

In Matlab gibt es die folgenden Run-dungsfunktionen:

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

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

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

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

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

(a) round(-2.6)

(b) fix(-2.6)

(c) floor(-2.6)

(d) ceil(-2.6)

(e) floor(ceil(-2.6))

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

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

ans =

-3

ans =

-2

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

ans =

-3

ans =

41 Copyright c© G. Gramlich

-2

>> floor(ceil(-2.6))

ans =

-2

Wir zeichnen die Funktion round.

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

>> y = round(x);

>> plot(x,y)

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

33.2 Verwendung mathematischerFunktionen in Matlab

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

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

function y = f(x)

y = x.^2;

• Sie de�nieren den Funktionsterm in derKommandozeile durch einen String undVorstellung eines @-Zeichens, siehe Ab-schnitt 39. Zum Beispiel de�niert mandie quadratische Funktion f(x) = x2,x ∈ R durch

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

Achten Sie darauf, Funktionsterme gleichin vektorieller Form zu de�nieren, da die-

se meist vektoriell ausgewertet werden bzw.weil Funktionen wie zum Beispiel quad (ei-ne Funktion zur numerischen Integration,siehe Abschnitt 60) dies auch so verlangen.Funktionen mit mehreren Variablen könnenebenso erklärt werden.

Weitere Informationen �ndenSie mit doc function und doc

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

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

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

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

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

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

ans =

0

ans =

-0.0183

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

34 Vektoren

Vektoren (Zeilen- oder Spaltenvektoren)sind spezielle Matrizen. Zeilenvektoren sind(1, n)-Matrizen und Spaltenvektoren sind(m, 1)-Matrizen. Aussagen über Matrizensind demnach auch für Vektoren inter-

42 Copyright c© G. Gramlich

essant. Wir verweisen auf Abschnitt 36;dort werden Matrizen und somit auch Vek-toren ausführlich behandelt. Matrizen (undsomit Vektoren) sind grundlegende Bau-steine von Matlab.

Nehmen wir an, es sollen die Quadrat-wurzeln der Zahlen 0, 2, 4, 6, 8, 10 berechnetwerden. Hier kommt unsMatlab sehr ent-gegen. Wir fassen die x-Werte zu einem Zei-lenvektor (eindimesionales Array, Liste) zu-sammen:

>> x = [0 2 4 6 8]

x =

0 2 4 6 8

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

>> y = sqrt(x)

y =

0 1.4142 2.0000 2.4495

2.8284

erhalten werden. Die Matlab-Funktionsqrt angewendet auf einen Vektor x gibtnämlich die Anweisung: Nimm von jedemElement von x die Wurzel und schreib dasErgebnis als entsprechendes Element ei-nes neuen Vektors (hier y genannt). Manspricht von vektorielle Auswertung oder all-gemein: In Matlab kann man vektoriellprogrammieren! Diese einfache Art, einen

Befehl (hier das Wurzelziehen) elementwei-se anzuwenden, ist eine groÿe Stärke vonMatlab. Sie ermöglicht eine rasche Verar-beitung von groÿen Datenmengen. Der Vek-tor x kann kürzer eingegeben werden: x =

0:2:8. Die Schreibweise bedeutet: Beginnemit 0 und zähle 2 dazu, dann zähle wieder2 dazu, usw. bis die Grenze 8 erreicht ist.Diese Anweisung ist bei der Eingabe vonVektoren mit vielen Elementen sehr nütz-lich.

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

>> x = 29:-2:0

x =

Columns 1 through 11

29 27 25 usw.

Columns 12 through 15

7 5 3 1

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

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

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

43 Copyright c© G. Gramlich

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

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

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

>> x = 1:2:7;

>> y = log(x)

y =

0 1.0986 1.6094 1.9459

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

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

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

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

x =

1.0000 1.5000 2.0000

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

x =

10 20 30 40

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

x =

1.0000 1.1000 1.2000

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

x =

0 0.5000 1.0000

Mit der Funktion logspace ist es mög-lich, einen Vektor zu erzeugen, dessen Kom-ponenten logarithmischen Abstand haben.Allgemein ist x = logspace(a,b,n) äqui-

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

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

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

x =

0.0100 0.2154 4.6416 100.0000

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

x =

10 100 1000

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

• Wir geben die Koordinaten explizit ein.

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

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

35 Vektorenoperationen

Vektoren sind spezielle Matrizen. Für Vek-torenoperationen siehe die Abschnitte 36.3und 48.

44 Copyright c© G. Gramlich

36 Matrizen

Ein rechteckiges Zahlenschema mit m Zei-len und n Spalten heiÿt (m,n)-Matrix. Vek-toren sind spezielle Matrizen. Ist n = 1, soliegt ein Spaltenvektor vor und ist m = 1, sohandelt es sich um einen Zeilenvektor. Ska-lare sind (1, 1)-Matrizen. Es ist üblich, eineMatrix in eckige oder runde Klammern zusetzen; wir wählen die eckige Schreibweise.

Matrizen sind in Matlab (und darüber-hinaus) fundamental. In der Version 3 vonMatlab und in früheren Versionen wardie (komplexe) Matrix überhaupt der ein-zige Datentyp. Nun gibt es in Matlababer mehrere Datentypen, siehe Abschnitt73 und Matrizen sind spezielle mehrdi-mensionale numerische Arrays, siehe Ab-schnitt 72. Liegt eine Matrix vor und ste-hen nicht mathematische Operationen imVordergrund, so nennt man eine Matrix einzweidimensionales Array. Dann steht dasdatentechnische, e�ziente Arbeiten im Vor-dergrund. Steht die Mathematik im Vorder-grund, dann siehe auch die Abschnitte zurLinearen Algebra 48 und 49.

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

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

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

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

A =

1.0000 1.4142 -2.0000

7.0000 -3.0000 3.1416

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

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

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

>> x = 2:6

45 Copyright c© G. Gramlich

x =

2 3 4 5 6

Die Schrittweite muss nicht notwendiger-weise Eins sein. Im folgenden Beispiel istdie Schrittweite 0.2:>> x = 1.3:0.2:1.8

x =

1.3000 1.5000 1.7000

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

>> size(A)

ans =

2 3

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

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

A =

1 2 3

4 5 6

ans =

1 4

2 5

3 6

Nützliche und häu�g verwendete Matrizenstellt Matlab als eingebaute Funktionenzur Verfügung, siehe Tabelle 12. Um sie zuerzeugen, muss man nur die Gröÿe angeben.Die Funktion ones erzeugt eine Matrix mitlauter Einsen.

>> ones(2,3)

Funktion Bedeutungzeros Nullmatrixones Einsmatrixeye Einheitsmatrixrand Zufallsmatrixrandn Zufallsmatrix

Tabelle 12: Elementare Matrizen

ans =

1 1 1

1 1 1

Die Nullmatrix wird mit der Funktionzeros erzeugt.

>> Z1 = zeros(3,2)

Z1 =

0 0

0 0

0 0

>> Z2 = zeros(size(A))

Z2 =

0 0 0

0 0 0

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

>> eye(3)

ans =

1 0 0

0 1 0

0 0 1

Aufgabe 19 (Symmetrische Matrizen)Erzeugen Sie eine 10×10 symmetrische Ma-

46 Copyright c© G. Gramlich

trix S mit Zufallswerten zwischen 0 und 8!Lösung:

>> A = 4*rand(10);

>> A+A';

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

Diagonalmatrizen werden mit der Funktiondiag erzeugt.

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

D =

1 0 0

0 2 0

0 0 3

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

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

ans =

1 0 0 0 0

0 2 0 0 0

0 0 3 0 0

0 0 0 4 0

0 0 0 0 5

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

A =

5.5 0.4 3.19.4 5.5 3.3

−0.3 4.6 −4.30.4 −4.6 9.05.0 5.5 7.7

.

Wie kann man inMatlab die Gröÿe von Abestimmen? Geben Sie die Ordnung (Grö-

ÿe) dieser Matrix an!Lösung: Die Ordnung der Matrix A ist(5, 3). Mit der Funktion size kann man dieOrdnung in Matlab bestimmen. Die Indi-zes sind: 1, 1, 2, 2 und 5, 2. © . . . . . . . . . . . . ©

Auÿer den elementaren Matrizen stelltMatlab weitere spezielle Matrizen zurVerfügung, siehe Tabelle 13. Diese Matri-

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

Tabelle 13: Spezielle Matrizen

zen haben interessante Eigenschaften undwerden häu�g verwendet, um Algorithmenzu testen. Eine besonders interessante Ma-trix ist die Hilbert-Matrix, deren (i, j)-tesElement 1/(i+j−1) ist. Diese Matrix kanndurch hilb erzeugt werden; ihre Inverse mitinvhilb. Die Funktion magic erzeugt ma-gische Quadrate.

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

47 Copyright c© G. Gramlich

36.2 Der Doppelpunkt

Um e�zient mit Matrizen arbeiten zu kön-nen, steht der Doppelpunkt : zur Vefügung.Mit ihm lassen sich Vektoren e�zient er-zeugen. Sind i und j zwei ganze Zahlen,so wird mit i:j ein Zeilenvektor bestehendaus ganzen Zahlen von i nach jmit Schritt-weite 1 erzeugt. Soll die Schrittweite s sein,so ist die Syntax: i:s:j. Diese Konstrukti-on funktioniert auch, wenn die Zahlen nichtnotwendig ganz sind. Wir geben Beispiele.

>> 1:5

ans =

1 2 3 4 5

>> 3:-1:-2

ans =

3 2 1 0 -1 -2

>> 0:0.7:2.5

ans =

0 0.7000 1.4000 2.1000

Die folgenden Beispiele zeigen, wie man auseiner gegebenen Matrix, einzelne Elemen-te, ganze Zeilen oder Spalten sowie Unter-matrizen anspricht. Zunächst wird von derMatrix

A =

1 23 45 6

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

>> A(3,1)

ans =

5

>> A(2,:)

ans =

3 4

>> A(:,1)

ans =

1

3

5

>> A([1 2],:)

ans =

1 2

3 4

Mit dem Doppelpunkt kann man eine Ma-trix in einen �langen� Vektor umwandeln.Die Elemente werden spaltenweise aneinan-dergefügt.

>> A(:)'

ans =

1 3 5 2 4 6

Aus einem Vektor lässt sich ebenfalls ei-ne Matrix mit spezieller Struktur konstru-ieren.

>> x = [1 2 3]

x =

1 2 3

>> B = x([1 1 1 1],:)

B =

1 2 3

1 2 3

1 2 3

1 2 3

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

48 Copyright c© G. Gramlich

chen.

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

C =

1 2 3

4 5 6

>> C(:,2) = []

C =

1 3

4 6

Wir fassen zusammen:

• A(z,s): Adressiert eine (Unter-) Matrixvon A, die durch den Indexvektor z fürdie Zeilen und durch den Indexvektor s

für die Spalten bestimmt ist.

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

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

• A(:): Adressiert alle Matrixelemente vonA als einen (langen) Spaltenvektor, indemalle Spalten aneinandergefügt werden.

• A(i): Adressiert eine (Unter-) Matrixvon A, die durch den einzigen Indexvek-tor i bestimmt ist, indem A als (langer)Spaltenvektor interpretiert wird.

Aufgabe 22 (Doppelpunkt)Gegeben sei die folgende Matrix A:

A =

5.5 0.4 3.19.4 5.5 3.3

−0.3 4.6 −4.30.4 −4.6 9.05.0 5.5 7.7

.

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

−4.6 9.05.5 7.7

].

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

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

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

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

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

Aufgabe 24 (Zeile löschen)Löschen Sie von der Matrix

A =

1 2 34 5 67 8 9

die zweite Zeile.Lösung:

49 Copyright c© G. Gramlich

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

>> A(2,:) = []

A =

1 2 3

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 Ope-rationen der Matrizenalgebra (Lineare Al-gebra). Die Operatoren + und - können ein-gesetzt werden, um Matrizen miteinanderzu addieren bzw. zu subtrahieren. Der Ope-rator * mulitpliziert zwei Matrizen mitein-ander, wenn die Multiplikation de�niert ist,das heiÿt wenn die Matrizen die entspre-chenden Gröÿen haben.

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

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

2 7 5 2];

A*B

ans =

12 27 30 13

8 -4 26 12

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

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

>> A*x

ans =

1

11

Aufgabe 25 (Matrizenoperationen)Es seien A, B, C und D die folgenden de-�nierten Matrizen.

A =

1 32 43 1

B =

−1 24 −27 −1

C =[

1 5−5 3

]und

D =

4 3 −21 0 52 −1 6

.

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

(a) A + B

(b) B + C

(c) DA

(d) 2A− 3B

(e) AT

(f) C2

Lösung:

50 Copyright c© G. Gramlich

(a) >> A+B

ans =

0 5

6 2

10 0

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

(c) >> D*A

ans =

4 22

16 8

18 8

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

ans =

5 0

-8 14

-15 5

(e) >> A'

ans =

1 2 3

3 4 1

(f) >> C^2

ans =

-24 20

-20 -16

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

Sind a und b Skalare, so ist a+b die gewöhn-liche Addition, a-b die gewöhnliche Sub-traktion, a*b die gewöhnliche Multiplikati-on und a�b die gewöhnliche Potenzierung.a/b ist die gewöhnliche Division: a÷ b. Sie

wird auch als rechte Division bezeichnet,weil es auch eine linke Division a\b gibt mitder Bedeutung b÷a. Die Operatoren � und\ haben für Matrizen A und B folgende Be-deutung: A\B ist eine Lösung X der Matri-zengleichung A*X=B und A/B ist eine LösungX der Matrizengleichung X*B=A. Für weiterEinzelheiten siehe Abschnitt 48.

Matrizenaddition und -subtraktion sind ele-mentweise de�niert (im Sinne einer Array-operation). Die Multiplikation (Potenzie-rung) ist jedoch nicht elementweise de�-niert, also nicht im Sinne einer Arrayope-ration. In vielen Anwendungen (siehe zumBeispiel Abschnitt 40) ist es jedoch notwen-dig, Matrizen elementweise zu verknüpfen.Daher sind inMatlab die Operatoren *, �,\ und / auch elementweise de�niert. Damiteine Operation elementweise durchgeführtwerden kann, muss ein Punkt davorgesetztwerden, also .*, .�, .\ und ./. Die Tabelle15 fasst die Arrayoperationen (elementwei-

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

Tabelle 15: Elementweise Operationen

se Operationen) zusammen.

Unterscheiden Sie zwischenMatrizen- und Arrayoperationen.Die Matrizenoperationen sindim Sinne der Matrizenalgebra

51 Copyright c© G. Gramlich

(Lineare Algebra), während dieArrayoperationen elementweisezu verstehen sind.

Das folgende Beispiel zeigt eine Arraymul-tiplikation:

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

>> B = [7 8; 9 10; 11 12];

>> A.*B

ans =

7 16

27 40

55 72

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

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

Lösung: Es ist

>> A^2, A.^2

ans =

7 10

15 22

ans =

1 4

9 16

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

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

a = [2 -1 5 0];

b = [3 2 -1 4];

(a) c = b+a-3;

(b) c = a./b;

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

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

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

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

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

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

>> C.*D

ans =

5 12

21 32

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

Die konjugiert Transponierte der Matrix A

erhält man durch A'. Ist A eine reelle Ma-trix, so ist A' einfach die Transponierte.Die Transponierte ohne Konjugation erhältman mit A.'.

Im Spezialfall, wenn x und y Spaltenvekto-ren sind, ist x'*y das Skalarprodukt. Dieslässt sich auch mit dot(x,y) berechnen.Mit der Funktion cross kann man dasKreuzprodukt ausrechnen. Für weiter Ein-zelheiten siehe Abschnitt 48.

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

52 Copyright c© G. Gramlich

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

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

a + b a' + b

a + b' a' + b'

a - b a' - b

a - b' a' - b'

a * b a' * b

a * b' a' * b'

a \ b a' \ b

a \ b' a' \ b'

a .* b a' .* b

a .* b' a' .* b'

a .\ b a' .\ b

a .\ b' a' .\ b'

Die Funktion kron berechnet das Krone-cker-Produkt (direktes Produkt) zweierMatrizen, siehe auch [5].

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

A =

1 2 33 1 −25 −1 0

und

B =

1 3−1 5

2 −2

.

Lösung: Das direkte Produkt ist auch un-ter dem Namen Kronecker-Produkt be-

kannt und kann mit der Funktion kron be-rechnet werden.

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

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

>> kron(A,B)

ans =

1 3 2 6 3 9

-1 5 -2 10 -3 15

2 -2 4 -4 6 -6

3 9 1 3 -2 -6

-3 15 -1 5 2 -10

6 -6 2 -2 -4 4

5 15 -1 -3 0 0

-5 25 1 -5 0 0

10 -10 -2 2 0 0

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

Aufgabe 31 (Vektoren, Signale)Gegeben ist das kontinuierliche Signal (diekontinuierliche Funktion)

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

Erzeugen Sie für t = 0, 0.1, 0.2, . . . , 10 dasdazugehörige diskrete Signal (Vektor). Wie-viel Werte hat das Signal?Lösung:

>> t = 0:0.1:10;

>> sd = sin(2*pi*t).*exp(-0.3*t);

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

Wird ein Skalar inMatlab zu einer Matrixaddiert oder Subtrahiert, so wird die Zahlzu jedem Matrixelement addiert bzw. sub-trahiert. Das Gleiche gilt auch bei Mulit-plikation und Division mit einer Zahl. Bei-spiel:

53 Copyright c© G. Gramlich

>> [1 2 3; 4 5 6]/2

ans =

0.5000 1.0000 1.5000

2.0000 2.5000 3.0000

Die meisten mathematischen Funktionen,siehe Abschnitt 33, akzeptieren als Einga-beargument eine Matrix. Dann wird die-se Funktion elementweise ausgeführt. Funk-tionen einer Matrix im Sinne der LinearenAlgebra, wie zum Beispiel die Exponential-funktion, tragen am Ende des Namens einm: expm, funm, logm, sqrtm. Für die MatrixA = [2 1; 0 2] gilt:

>> sqrt(A)

ans =

1.4142 1.0000

0 1.4142

>> sqrtm(A)

ans =

1.4142 0.3536

0 1.4142

>> ans*ans

ans =

2.0000 1.0000

0 2.0000

36.4 Matrizenmanipulationen

Die Tabelle 16 zeigt Funktionen mit denenman Matrizen manipulieren kann.

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

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

Tabelle 16: Matrizenmanipulationen

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

A =

1 2 3

4 5 6

>> B = reshape(A,3,2)

B =

1 5

4 3

2 6

Die Funktionen tril und triu extrahie-ren eine Dreiecksmatrix aus einer gegebe-nen Matrix.

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

>> triu(rand(6))

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

54 Copyright c© G. Gramlich

Aufgabe 33 (Matrizenmanipulationen)Gegeben seien die folgenden Matrizen:

A =

0 −1 0 34 3 5 01 2 3 0

und

B =

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

.

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

(a) rot90(B)

(b) rot90(A,3)

(c) fliplr(A)

(d) reshape(A,4,3)

(e) triu(B)

(f) diag(rot90(B))

Aufgabe 34 (circshift)Verschieben Sie jede Zeile der Matrix

A =

1 2 34 5 67 8 9

um eine Zeile nach unten und die letzte indie erste Zeile.Lösung:

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

>> circshift(A,1)

ans =

7 8 9

1 2 3

4 5 6

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

Aufgabe 35 (fliplr)Spiegeln Sie von der Matrix

A =

1 2 34 5 67 8 9

die Spalten.Lösung:

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

>> fliplr(A)

ans =

3 2 1

6 5 4

9 8 7

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

36.5 Datenanalye

Die Tabelle 17. zeigt grundlegende Funktio-nen zur Analyse von Daten. Der einfachsteGebrauch dieser Funktionen ist, wenn dieDaten in Vektoren gegeben sind. Zum Bei-spiel:

>> x = [3 -7 -1 1 0]

x =

3 -7 -1 1 0

>> [min(x) max(x)]

ans =

-7 3

>> sort(x)

ans =

-7 -1 0 1 3

>> sum(x)

55 Copyright c© G. Gramlich

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

Tabelle 17: Datenanalye

ans =

-4

Die Funktion sort sortiert in aufsteigen-der Ordnung; absteigende Ordnung erhältman durch das Extraargument 'descent'.Sind die Vektoren komplex, so wird nachdem Absolutwert geordnet. NaNs werdenvon dem Funktionen min und max ignoriertund sort setzt sie an das Ende.

Sind die Eingabeargumente Matrizen, soarbeiten die Funktionen zur Datenanalysespaltenweise. Ist zum Beispiel

A =

0 -1 2

1 2 -4

5 -3 0

so ist

>> max(A)

ans =

5 2 2

Aufgabe 36 (Datenanalye)Gegeben seien die Vektoren

x = [0 3 -2 7];

y = [3 -1 5 7];

und die Matrix

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

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

max(x); min(A);

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

median(x); cumprod(A);

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

Lösung: Es ist

>> max(x)

ans =

7

>> min(A)

ans =

1 -1 -2

>> min(x,y)

ans =

0 -1 -2 7

>> mean(A)

ans =

3.0000 3.3333 3.0000

>> median(x)

ans =

1.5000

>> cumprod(A)

ans =

1 3 7

56 Copyright c© G. Gramlich

2 24 28

12 -24 -56

>> sort(2*x+y)

ans =

1 3 5 21

>> sort(A)

ans =

1 -1 -2

2 3 4

6 8 7

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

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

B =

1 0 40 0 38 7 0

(a) any(B)

(b) find(B)

(c) all(any(B))

(d) any(all(B))

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

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

Lösung:

>> any(B)

ans =

1 1 1

>> find(B)

ans =

1

3

6

7

8

>> all(any(B))

ans =

1

>> any(all(B))

ans =

0

>> finite(B(:,3))

ans =

1

1

1

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

ans =

1 0 1

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

Aufgabe 38 (Gröÿtes Element)Bestimmen Sie von der Matrix

A =

1 2 34 5 67 8 9

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

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

>> max(max(A))

ans =

9

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

57 Copyright c© G. Gramlich

37 Vektorielle Programmierung

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

>> x = 1.4;

>> y = x^2;

und in der Variablen y ist der Wert 1.96 ge-speichert. Will man nun aber zum Beispielin hundert verschiedenen x-Werten die ent-sprechenden y-Werte (ein Vektor mit 100Koordinaten) berechnen, so braucht manin Matlab keine Schleife, sondern kanngleichzeitig alle hundert y-Werte ausrech-nen, indem man den �.-Operator verwen-det, der die Potenzierung zweier Matrizen(Vektoren) elementweise durchführt. Hierein Beispiel mit der gleichen Funktionsglei-chung y = x2 wie oben:

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

>> y = x.^2;

In der ersten Anweisung werden hundert x-Werte (ein Vektor mit hundert Koordina-ten) erzeugt (hundert äquidistante Punk-te im Intervall [0, 3]) und in der zweitenAnweisung wird der Vektor y mit hundertKoordinaten generiert, der die entsprechen-den Funktionswerte enthält. Diese Vorge-hensweise hat den Vorteil, dass man aufSchleifen verzichten kann und auÿerdem

einen übersichtlicheren Programmcode er-hält. Eingebaute Matlab-Funktionen er-lauben als Eingabeparameter fast immerVektoren. Daher gilt:

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

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

Aufgabe 39 (Vektorielle Programmierung)Berechnen Sie e−x2

in 200 äquidistantenPunkten zwischen -3 und 3 und speichernSie die Werte in der Variablen y.Lösung: Hier ein möglicher Lösungsweg:

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

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

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

38 Ein- und Ausgabe

In diesem Abschnitt diskutieren wir, wiedurch einen Benutzer Daten eingelesen wer-den können, wie man Informationen aufdem Bildschirm ausgeben und Dateien le-sen und schreiben kann. Wie man eine gan-ze Sitzung in einer Datei auszeichnen kann,wissen wir bereits aus Abschnitt 13. WieGra�ken gespeichert und gedruckt werdenkönnen, steht in Abschnitt 40.13.

58 Copyright c© G. Gramlich

38.1 Benutzereingabe

Mit der Funktion input kann der Benutzerinteraktiv Daten eingeben.

>> x = input('Startwert: ')

Startwert: 1.5

x =

1.5000

In diesem Beispiel wartet Matlab auf dieEingabe eines Wertes durch den Benutzer.Ich habe 1.5 eingegeben und dieser Wertwird dann der Variablen x zugewiesen. DieEingabe wird als String interpretiert, wennein zweites Argument 's' angehängt wird:

>> MeinTitel = input('Titel: ','s')

Titel: Versuch 5

MeinTitel =

Versuch 5

38.2 Bildschirmausgabe

Wir wissen bereits, dass Matlab immerdann eine Ausgabe am Bildschirm macht,wenn auf das Semikolon verzichtet wird, sie-he Abschnitt 25. Auÿerdem kann mit denFunktion format die Ausgabe kontrolliertwerden. Eine noch bessere Kontrolle überdie Ausgabe erhält man aber durch die Ver-wendung weiterer Funktionen.

Als erste Funktion ist disp zu nennen. Oh-ne Namen und Gleichheitszeichen gibt dieseden Wert einer Variablen am Bildschirm an.Hier ein Beispiel:

>> disp('Die (2,2)-Hilbert-Matrix')

Die (2,2)-Hilbert-Matrix

>> disp(hilb(2))

1.0000 0.5000

0.5000 0.3333

Mehr Ausgabemöglichkeiten hat man mitder Funktion fprintf. In dem Beispiel

>> fprintf('%6.3f\n',pi)

3.142

ist das Zeichen % der Beginn einer Format-bezeichnung. 6.3f bedeutet, dass der Wertder Variablen mit der Feldgröÿe (zur Ver-fügung gestellte Gesamtbreite) 6, 3 Nach-kommastellen und in Flieÿpunktdarstellungausgegeben wird. Das Zeichen \n gibt einenZeilenvorschub an, ohne dieses die folgendeAusgabe in die aktuelle Zeile geschriebenwerden würde. Siehe doc fprintf (helpfprintf) für weitere Informationen undBeispiele.

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 einen Script-File ExpTabelleund erzeugen Sie auf dem Bildschirm diefolgende Ausgabe der Exponentialfunkti-on ex. Wählen Sie 21 äquidistante Punk-te im Intervall [0, 1]. Verwenden Sie da-zu die Funktionen disp und sprintf oderfprintf.

Werte der exp-Funktion

k exp(x(k))

----------------------

59 Copyright c© G. Gramlich

1 1.0000

2 1.0513

3 1.1052

4 1.1618

5 1.2214

6 1.2840

7 1.3499

8 1.4191

9 1.4918

10 1.5683

11 1.6487

12 1.7333

13 1.8221

14 1.9155

15 2.0138

16 2.1170

17 2.2255

18 2.3396

19 2.4596

20 2.5857

21 2.7183

Lösung: Der Inhalt des Script-Files könnteetwa wie folgt lauten:

x = linspace(0,1,21);

y = [1:21; exp(x)];

disp('Werte der exp-Funktion')

disp(' ')

disp(' k exp(x(k))')

disp(' --------------------------')

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

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

38.3 Dateien lesen und schreiben

Eine groÿe Anzahl von Funktionen stehenzur Verfügung, um formatierte Textdateienaus einer Datei zu lesen oder in eine Da-tei zu schreiben. Hierbei können Sie zwi-schen binärem und lesbarem Ascii-Formatwählen. Binärdateien haben gegenüber As-cii-Dateien die Vorteile, dass sie wenigerSpeicherplatz benötigen und schneller ge-lesen und beschrieben werden können. IhrNachteil ist, dass sie nicht einfach mit einemEditor gelesen werden können. Die Tabel-le 18 zeigt vier Funktionen. Eine komplette

Funktion Ascii binärfscanf ×fprintf ×fread ×fwrite ×

Tabelle 18: Dateien lesen und schreiben

Funktionsliste erhalten Sie mit doc iofun

(help iofun).

Wir zeigen nun an einem Beispiel, wie manDaten in einen File schreibt und lesen sieanschlieÿend wieder heraus. Bevor man miteiner Datei arbeiten kann, muss man sie mitder Funktion fopen ö�nen. Das erste Argu-ment ist der Dateiname und für das zweiteArgument hat man mehrere Möglichkeitenunter anderem die Zeichen 'r' für Lesen(read) und 'w' für Schreiben (write). Durchden Aufruf von fopen wird eine Fileidenti-�zierung zurückgegeben, die in den folgen-den Anweisungen verwendet werden kann,um den File zu spezi�zieren. Die Daten wer-

60 Copyright c© G. Gramlich

den mit der Funktion fprintf geschrieben,wobei als erstes Argument die Fileidenti�-zierung anzugeben ist. Das Script

>> fid = fopen('MeinOutput','w');

>> fprintf(fid,...

'%g m/h = %g km/h\n',[a;8*a/5]);

>> fclose(fid);

erzeugt im File MeinOutput die Zeilen

30 m/h = 48 km/h

40 m/h = 64 km/h

50 m/h = 80 km/h

die für drei Geschwindigkeiten eines Fahr-zeugs in Meilen pro Stunde die entsprechen-den Werte in Kilometer pro Stunde ange-ben.

Der File kann wie folgt zurückgelesen wer-den.

>> fid = fopen('MeinOutput','r');

>> x = fscanf(fid,...

'%g m/h = %g km/h')

x =

30

48

40

64

50

80

>> fclose(fid);

Hierbei liest die Funktion fscanf die Da-ten in dem angegebenen Format (hier %g,general �oating point number), wobei dieStrings 'm/h =' und 'g km/h' übergan-gen werden. Dies wiederholt sich so lange,bis der gesamte File gelesen wurde und die

Zahlen im Vektor x gespeichert wurden.

39 Function Functions

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

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

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

de�niert werden. Der Aufruf

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

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

Andere Function Functions sind zum Bei-spiel fzero, quad, ode45, usw. Wir wer-

61 Copyright c© G. Gramlich

den diese und andere Funktionen in denspäteren Abschnitten ausführlicher bespre-chen. Alle Function Functions sind im Ver-zeichnis funfun untergebracht, siehe doc

funfun (help funfun).

40 Gra�k

Twenty years ago, we did not interactwith computers graphically; now,

everything is graphical. In the next twentyyears an equally great change will occur aswe begin to communicate with machines by

speech.Lloyd N. Trefethen

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

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

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

40.1 2D-Gra�k

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

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

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

Tabelle 19: Abkühlung einer Flüssigkeit

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

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

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

62 Copyright c© G. Gramlich

Der Befehl

>> plot(x,y)

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

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

0 0.5 1 1.5 2 2.5 3 3.5 435

40

45

50

55

60

65

Abbildung 10: Abkühlung einer Flüssigkeit

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

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

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

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

yk = f(xk) k = 1 : n

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

Das folgende Script zeigt die Realisierung:

>> n = 20;

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

>> y = sin(x);

>> plot(x,y)

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

>> grid

>> title('Die Sinusfunktion im

Intervall [0,2\pi]')

Die Abbildung 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-Gra�k)Erzeugen Sie mit einem einzigen plot-Befehl die Graphen der Funktionstermesin(kx) über dem Intervall [0, 2π] für k =

63 Copyright c© G. Gramlich

1 : 5.Lösung: Dies kann man zum Beispiel mitden beiden folgenden Methoden erreichen.

%-Methode 1:

x = linspace(0,2*pi);

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

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

%-Methode 2:

x = linspace(0,2*pi);

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

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

plot(x,Y)

%-Methode 3:

x = linspace(0,2*pi);

plot(x,sin(x))

hold on

for k=2:5

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

end

hold off

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

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

rect(x) =

{1 |x| ≤ 0.50 sonst

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

function y = rect(x)

n = length(x);

y = zeros(n,1);

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

Die folgenden Befehle zeichnen den Graph.

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

y = rect(x);

plot(x,y)

axis([-3 3 -0.5 1.5])

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

Aufgabe 43 (2D-Gra�k)Geben Sie folgende Befehle inMatlab ein.

x = linspace(0,1,200);

y = sqrt(1-x.^2);

Stellen Sie nun den Kreis x2 + y2 = 1 gra-�sch dar ohne dabei zusätzliche Berechnun-gen anzustellen.Lösung: Die Eingabe lautete

x = linspace(0,1,200);

y = sqrt(1-x.^2);

Dabei sei zu bemerken, das x.^2 und nichtx^2 verwendet wurde. Hierbei wird durchden Punkt sichergestellt, dass das Quadrie-ren Komponentenweise erfolgt und nicht dieVektoroperation x ·x ausgefürt wird. Manwill nun den Kreis in R2 zeichnen.plot(x,y) liefert nur den Graphen im ers-ten Quadranten. Also kann man durchgeeignete Spiegelung den Graph auch inden anderen drei Quadranten zeichnen. DerKreis kann in Matlab etwa wie folgt ge-zeichnet werden:

>> plot(x,y)

>> hold on

>> plot(-x,y)

>> plot(x,-y)

>> plot(-x,-y)

64 Copyright c© G. Gramlich

>> axis equal

>> hold off

Der Befehl hold on sorgt dafür, dassdie Resultate aller plot-Befehle erhal-ten bleiben. Um die Bedeutung des Be-fehls axis equal zu verstehen können Siehelp axis verwenden. © . . . . . . . . . . . . . . . . ©

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

40.2 3D-Gra�k

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

t = -5:0.005:5;

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

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

z = t;

plot3(x,y,z), grid on

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

zlabel('z(t)')

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

'FontSize',14)

−50

0

50

−50

0

50−5

0

5

x(t)

plot3−Beispiel

y(t)

z(t)

Abbildung 12: 3D-Plot mit plot3

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

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

Will man den Graph eines Funktionstermsf(x, y) mit den beiden unabhängigen Varia-blen x, y zeichnen, so muss man die Funkti-onswerte auf einem zweidimensionalen Git-ter in der x, y-Ebene auswerten. Das Gitterkann mit der Funktion meshgrid erzeugtwerden; anschlieÿend kann man den Graphmit mesh, surf usw. zeichnen.

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

65 Copyright c© G. Gramlich

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

-2:0.1:2);

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

>> mesh(X,Y,f)

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

zlabel('f(x,y)')

Die Abbildung 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-Gra�k)Zeichnen Sie den Graph der Funktion

f(x1, x2) ={−1

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

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

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

-2:0.1:2);

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

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

>> mesh(X,Y,Z)

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

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

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

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

graph2d (help graph2d), doc graph3d

(help graph3d) und doc specgraph (helpspecgraph).

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

f(x, y) =15

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

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

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

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

mesh(X,Y,Z)

oder als Einzeiler mit ezmesh.

>> f = @(x,y) 1/5*cos(x)+...

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

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

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

40.3 Funktionsdarstellungen

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

und ezplot (easy plotting) den Graph ein-facher darstellen als mit plot. Die Funk-tion fplot verlangt den Funktionsterm in

66 Copyright c© G. Gramlich

einem m-File (Abschnitt 44) oder als Func-tion Handle (doc function_handle). DieFunktion ezplot erwartet den Funktions-term in Hochkomma oder als symbolischesObjekt, siehe Abschnitt 66.

Der Aufruf

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

plottet die Funktion

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

im Intervall [−3, 3]. Mit

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

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

f(x) =1

(x− 0.3)2 + 0.01

+1

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

Die Abbildung 14 zeigt den Graph von

−2 −1 0 1 2−20

0

20

40

60

80

100

Abbildung 14: Graph der humps-Funktion

humps im Intervall [−2, 2].

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

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

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

x = linspace(0,5);

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

plot(x,f)

%-oder:

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

%-bzw.

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

fplot(f,[0,5])

%-oder:

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

%-bzw.

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

ezplot(f,[0,5])

Der Graph ist in Abbildung 15 dargestellt.© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

0 1 2 3 4 5

−2

−1

0

1

2

3

x

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

Abbildung 15: Graph

67 Copyright c© G. Gramlich

Die Abbildung 16 zeigt vier verschiedene

−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

Darstellungen einer Funktion mit zwei Va-riablen. Es handelt sich hier um die soge-nannte peaks-Funktion, die inMatlab be-reits vorde�niert ist. Es ist die Funktion

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

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

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

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

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

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

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

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

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

Die Abbildung 17 zeigt den Graph der

−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 f(x, y) = xex2+y2, (x, y) ∈ R2,

wobei hier die Funktion colormap zumEinsatz kommt und dafür sorgt, dass derGraph (das Netz) blau ist. Die Funktioncolormap erlaubt es, Daten mit Farbtabel-len (color map) zu visualisieren. Mit derFunktion colorbar können Sie sich die ak-tuelle Farbtabelle in der entsprechenden Fi-gur anzeigen lassen. Die Figur wurde mitHilfe der Anweisungen erzeugt:

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

ezmesh(fh,40)

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 einenleicht gelblichen Hintergrund mit einemleicht grauen Rahmen. Die Figure wurdemit Hilfe der Anweisungen erzeugt:

Z = peaks;

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

68 Copyright c© G. Gramlich

−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

text_h = clabel(C,h);

set(text_h,'BackgroundColor',...

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

40.4 Parametrisierte Kurven

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

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

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

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

erzeugt man die Abbildung 19.

Die Anweisungen

−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

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

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

r3 = @(t) t;

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

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

−1

0

1

−1

0

10

5

10

15

20

x

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

y

z

Abbildung 20: Räumliche Kurve

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

69 Copyright c© G. Gramlich

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

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

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

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

t = -5:0.005:5;

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

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

z = t;

plot3(x,y,z),

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

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

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

Aufgabe 48 (Ebene Kurve)Plotten Sie die Zykloide (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.

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

[0,4*pi])

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

ylabel('y(t)')

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

Aufgabe 49 (Ebene Kurve)Zeichnen Sie die Kurve

x = sin(−t) + t

y = 1− cos(−t)

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

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

[0,4*pi])

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

Aufgabe 50 (Ebene Kurve)Zeichnen Sie die Kurve

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

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

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

[0,pi])

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

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

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

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

70 Copyright c© G. Gramlich

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

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

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

40.5 Parametrisierte Flächen

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

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

x = (a + b cos θ) cos φ

y = (a + b cos θ) sinφ

z = b sin θ

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

x = @(theta,phi) (10+...

4*cos(theta)).*cos(phi);

y = @(theta,phi) (10+...

4*cos(theta)).*sin(phi);

z = @(theta,phi) 4*sin(theta);

ezmesh(x,y,z), axis equal

colormap([0,0,1])

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

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

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

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

−10

0

10

−10−5

05

10

−202

xy

z

Abbildung 21: Ein Torus

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

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

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

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

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

−200

20

−20

0

200

20

40

x

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

y

z

0

10

20

30

40

50

Abbildung 22: Wendel�äche

steht, wenn eine Strecke um eine zu ihr or-thogonale Achse geschraubt wird. Wir neh-

71 Copyright c© G. Gramlich

men an, dass diese Achse gleich der z-Achsedes Koordinatensystems ist. Hat die Streckedie Länge l und ist φ der Winkel, den sie mitder positiven x-Achse einschliesst, so ist ei-ne Parameterdarstellung der Wendel�ächedurch

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

2π,

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

40.6 Implizite Kurven

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

subplot(2,3,1)

ezplot('x^2/15^2+y^2/9^2-1',...

[-15,15])

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

hold off; grid; pause;

subplot(2,3,2)

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

grid; pause;

subplot(2,3,3)

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

grid; pause;

subplot(2,3,4)

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

grid; pause;

subplot(2,3,5)

f = @(x,y) (x.^2+y.^2).^2-14^2*...

(x.^2-y.^2);

ezplot(f,[-15,15])

grid; pause;

subplot(2,3,6)

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

[-15,15]); grid;

40.7 Implizite Flächen

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

Abbildung 23: Implizite Fläche

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

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

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

view(34,40), grid on,

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

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

camlight, lighting gouraud,

40.8 Koordinatenachsen skalieren

Beachten Sie, dass Matlab die x- undy-Achse (und natürlich auch die z-Achseim 3D Fall) automatisch skaliert. Wollen

72 Copyright c© G. Gramlich

Sie diesen Automatismus nicht, so kön-nen Sie mit axis (doc axis) �per Hand�die Achsen begrenzen. Zum Beispiel er-zeugt axis([-4,4,-2,2]) ein Koordina-tensystem, dessen x-Achse von -4 bis 4 undderen y-Achse von -2 bis 2 begrenzt ist.Wenn Sie möchten, dass die x- und y-Achsegleich lang, also quadratisch sind, dannmüssen Sie axis square eingeben (Qua-dratische Bild�äche). Wollen Sie dagegen,dass die x- und y-Achse die gleiche Skalie-rung haben, so geht das mit dem Befehtaxis equal. Die Abbildung 24 zeigt dies

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

0

2normal

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

0

2equal

−4 −2 0 2 4−2

0

2square

Abbildung 24: Skalierungen

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

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

Aufgabe 54 (Skalierungen)Zeichnen Sie den Graph der Funktion y =3e−1/2x, x ∈ R in einem rechtwinkligen Ko-ordinatensystem von x = 0 bis x = 10, wo-bei die y-Achse logarithmisch skaliert sein

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

Tabelle 20: Logarithmische Skalierungen

soll.Lösung: Mit

>> x = linspace(0,10);

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

>> semilogy(x,y); grid;

erhalten wir die Abbildung 25. Der Graph

0 2 4 6 8 1010

−2

10−1

100

101

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

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

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

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

73 Copyright c© G. Gramlich

>> x = 1:1000;

>> y = sqrt(x);

>> loglog(x,y); grid;

erhalten wir die Abbildung 26. Der Graph

100

101

102

103

100

101

102

Abbildung 26: y =√

x, x ≥ 1

der Quadratwurzelfunktion ist wie erwarteteine Gerade. © . . . . . . . . . . . . . . . . . . . . . . . . . . ©

40.9 Zwei y-Achsen

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

Eingaben

>> x = linspace(0,10);

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

>> 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äh-rend die rechte y-Achse logarithmisch ska-liert ist.

40.10 Koordinatentransformationen

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

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

Zum Zeichnen von Polarkoordinaten ist dieFunktion polar geeignet.

74 Copyright c© G. Gramlich

40.11 Spezielle Gra�kfunktionen

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

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

Tabelle 21: Weitere Gra�kfunktionen

40.12 Vektorfelder visualisieren

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

−3 −2 −1 0 1 2 3

−2

−1

0

1

2

x

y

Abbildung 28: Vektorfeld

Das Vektorfeld wurde mit

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

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

>> axis equal

erzeugt. Jeder Vektor ist tangential zu ei-nem Kreis um den Ursprung. Die Längedes Vektors ist durch den Radius des Krei-ses gegeben. Das Vektorfeld kann als Ge-schwindigkeitsfeld eines Rades interpretiertwerden, das sich gegen den Uhrzeigersinndreht.

Aufgabe 56 (Vektorfeld)Stellen Sie das Vektorfeld

f : R2 → R2

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

dar.Lösung: Die Anweisungen

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

>> quiver(X,Y,X,Y), grid

>> axis equal

erzeugen die Abbildung 29. © . . . . . . . . . . . ©

−3 −2 −1 0 1 2 3

−2

−1

0

1

2

Abbildung 29: Vektorfeld

75 Copyright c© G. Gramlich

Die Funktion quiver3 stellt das dreidi-mensionale Analogon zur Funktion quiver

dar. Damit lassen sich also dreidimensiona-le Vektorfelder darstellen.

Aufgabe 57 (Vektorfeld)Stellen Sie mit der Funktion quiver3 dasVektorfeld

f : R3 → R3

(x, y, z) 7→ (2, 0, 1)

dar.Lösung: Die Anweisungen

>> [X,Y] = meshgrid(0:2:8,0:2:8);

>> quiver3(X,Y,zeros(5),...

2*ones(5),0,ones(5),0)

>> 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 58 (Vektorfeld)Stellen Sie mit der Funktion quiver3 dasVektorfeld

f : R3 → R3

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

dar.Lösung: Die Anweisungen

>> [X,Y,Z] = meshgrid(-8:4:8);

>> quiver3(X,Y,Z,X,Y,Z,0)

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

>> quiver3(X,Y,Z,X,Y,Z,0)

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

erzeugen die Abbildung 31. © . . . . . . . . . . . ©

−5

0

5

−5

0

5−4

−2

0

2

4

xy

Abbildung 31: Vektorfeld

40.13 Gra�ken importieren,exportieren und drucken

Zum Einlesen von Pixel-Gra�ken bietetMatlab die Funktion imread. Der Befehlimage gibt die eingelesene Gra�k in einerFigure aus. So erzeugen die folgenden Be-fehlszeilen die Figure in Abbildung 32, diedas in jpg-Format vorliegende Bild gg.jpgenthält:

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

>> image(A)

76 Copyright c© G. Gramlich

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

Abbildung 32: Das bin ich

Hat man eine Gra�k erzeugt, so will mandiese häu�g in einem bestimmten Gra�kfor-mat abspeichern und gegebenenfalls in einSatz- oder Textverarbeitungssystem einbin-den. Soll das Gra�kformat EncapsulatedPostScript sein (Dateiendung: eps), sogeht das zum Beispiel wie folgt:

%-Erzeuge eine Grafik.

surf(peaks(30));

%-Setze den Hintergrund blau.

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

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

%-Exportiere in File MyFile.eps

print -depsc2 MyFile.eps

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

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

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

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

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

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

6. Klicken Sie auf OK.

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

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

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

>> load gatlin

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

77 Copyright c© G. Gramlich

>> image(X)

>> colormap(map)

>> axis image

erzeugen die Abbildung 33 eine Fotogra-

100 200 300 400 500 600

50

100

150

200

250

300

350

400

450

Abbildung 33: Pioniere der Mathematik

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

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

50 100 150 200 250 300

50

100

150

200

Abbildung 34: Clown

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

Wir fassen die besprochenen Funktionen inTabelle 22 zusammen.

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

Tabelle 22: Gra�ken importieren usw.

40.14 Animationen

Um Animationen herzustellen und durch-zuführen, gibt es die Funktion movie, siehedoc movie (help movie).

40.15 Handle Graphics

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

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

78 Copyright c© G. Gramlich

40.16 Graphical User Interface (GUI)

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

41 Vergleichsoperatoren,Vergleichsfunktionen

Vergleichsoperatoren und Vergleichsfunk-tionen dienen dazu, zwei Matrizen element-weise hinsichtlich einer bestimmten Eigen-schaft zu vergleichen. In Abhängigkeit da-von, ob diese Eigenschaft besteht odernicht, geben sie dann einen entsprechen-den Wahrheitswert zurück, der in Bedin-gungen für Schleifen oder Verzweigungenweiterverwendet werden kann. In Matlabgibt es � wie auch in C/C++, aber andersals etwa in Pascal � keinen expliziten Da-tentyp, der die Wahrheitswerte wahr undfalsch speichern kann. Statt dessen wirdein numerischer Wert ungleich 0 als wahrund der Wert 0 als falsch betrachtet. Ver-gleichsoperatoren haben, hinter den arith-metischen, vor den logischen Operatoren,die zweithöchste Priorität bei der Abarbei-tung von Ausdrücken.

42 Logische Operatoren undlogische Funktionen

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

42.1 Logische Operatoren

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

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

Tabelle 23: Logische Operatoren

Verknüpft man zwei Matrizen mit einem lo-gischen und, so ist die entsprechende Er-gebniskomponente 1, wenn die beiden Kom-ponenten von Null verschieden sind.

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

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

>> x & y

ans =

1 0 1 0 0 1

79 Copyright c© G. Gramlich

42.2 Logische Funktionen

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

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

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

>> xor(x,y)

ans =

0 1 0 1 0 0

Darüber hinaus gibt es zusätzliche Funktio-nen, die die Existenz spezieller Werte oderBedingungen testen und ein logisches Re-sultat zurückgeben. Weitere Informationenüber logische Operatoren und Funktionen�ndet man mit doc ops (help ops).

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

(a) a < 10.0

(b) a+b >= 6.5

(c) k = 0

(d) b-k > a

(e) (a == 3*b)

(f) -k <= k+6

(g) a<10 & a>5

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

43 Steuerstrukturen

The guts of Matlab are wirtten in C.Much of Matlab ist also written inMatlab, because it's a programming

language.Cleve Moler, 1999.

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

• for-Schleifen

• while-Schleifen

• Verzweigungen mit if

• Verzweigungen mit switch

43.1 for-Schleife

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

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

>> for i=3:20

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

end

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

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

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

80 Copyright c© G. Gramlich

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

>> for k = 1:11

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

end

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

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

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

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

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

>> x = zeros(1,11);

>> for k = 1:11

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

end

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

43.2 while-Schleife

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

>> n = 1; Summe = 0;

>> while n <= 100

Summe = Summe+n;

n = n+1;

end

>> Summe

Summe =

5050

Der folgende Matlab-Code berechnet dieVektoren zk+1 = Azk mit Startvektor z0 =(1, 0) und der Markov-Matrix

A =[

0.8 0.30.2 0.7

].

Anschlieÿend werden die Zustandsvektorengezeichnet. Die Anzahl der Iterationen kön-nen Sie eingeben.

A = [0.8 0.3; 0.2 0.7];

z = [1;0]; x = z; k = 0;

kend = input('Iterationen: ');

while k < kend

z = A*z;

81 Copyright c© G. Gramlich

x = [x z];

k = k+1;

end

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.

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

disp('a ist gerade')

end

43.4 switch-Anweisung

Hat im folgenden Beispiel die Variable x

den Wert -1, so wird x ist -1 auf demBildschirm ausgegeben. Entsprechendes ge-schieht bei den anderen Fällen.

switch x

case -1

disp('x ist -1');

case 0

disp('x ist 0');

case 1

disp('x ist 1');

otherwise

disp('x ist ein anderer Wert');

end

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

44 m-Files

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

44.1 Script-Files

Ein Script-File (Kommando-File) ist ei-ne Folge von gewöhnlichen Matlab-Anweisungen. Die Anweisungen in einemScript-File werden ausgeführt, wenn manden File-Namen ohne das Kürzel angibt.Ist zum Beispiel der File-Name versuch.m,so gibt man einfach versuch ein. Variablenin einem Script-File sind global, siehe Ab-schnitt 45. Auch kann ein Script-File einenanderen m-File aufrufen. Script-Files habenkeine Ein- und Ausgabeargumente.

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

%-Script: ERSTES-SCRIPT

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

sort(Daten)

mean(Daten)

median(Daten)

std(Daten)

Dieser Script-File sortiert den Spaltenvek-

82 Copyright c© G. Gramlich

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

ans =

-2

1

2

2

3

10

12

ans =

4

ans =

2

ans =

5.0662

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

A = randn(8);

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

erzeugen eine zufällig normalverteilte 8×8-Matrix und zählen, wieviel Eigenwerte re-ell sind. Dies ist so realisiert, dass geprüft

wird, ob der Imaginärteil dem Betrag nachkleiner als 10−4 ist. Jeder Aufruf erzeugtnun eine andere Zufallsmatrix und man er-hält somit unterschiedliche Ergebnisse. Umein Gefühl dafür zu bekommen, welche derfünf Möglichkeiten am wahrscheinlichstenist, kann man folgenden Script ausführen.

%-Script-File: EIGENWERTROULETTE

n = 1000;

Anzahl = zeros(n,1);

for k=1:n

A = randn(8);

Anzahl(k) = ...

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

end

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

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

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

'EdgeColor','w')

Dieser Script-File erzeugt 1000 Zufallszah-len und zeichnet ein Histogramm der Ver-teilung der Anzahl der reellen Eigenwerte.Die Abbildung 35 zeigt ein mögliches Re-sultat. Wollen Sie sehen, wie Ihr Script-Fileden von Ihnen geschriebenen Code abarbei-tet, so geben Sie echo on ein. Mit echo off

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

44.2 Function-Files

Wenn Sie intensiver mit Matlab arbei-ten, dann werden Sie bald feststellen, dasses nicht für alle ihre Wünsche einge-baute Funktionen oder Kommandos gibt.In diesem Fall können Sie sich aber Ih-

83 Copyright c© G. Gramlich

0 2 4 6 80

100

200

300

400

500

600

Abbildung 35: Histogramm zum Script

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

Damit ein File ein Function-File ist, muss ermit dem Schlüsselwort function beginnen,dann folgen die Ausgabeargumente (in ecki-

gen Klammern), der Funktionsname undschlieÿlich die Eingabeargumente (in run-den Klammern). Die Form aller Function-Files ist

function [Out_1,...,Out_n] =

Name(In_1,...,In_m)

< Irgendwelche Anweisungen >

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

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

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

[m,n] = size(A);

if m==n

[V,D] = eig(A);

r = rank(A);

else

disp('Fehler: Die Matrix muss

quadratisch sein!')

end

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

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

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

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

die Eigenwerte und in r der Rang der Ma-trix A. V,D,r sind die Ausgabe- und A das

84 Copyright c© G. Gramlich

Eingabeargument der Funktion MatrixEig.Der von uns geschriebene Function-FileMatrixEig ruft mehrer eingebaute Mat-lab-Funktionen auf: size, eig, usw.

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

und nargout (number argument in/out),die die Anzahl der übergebenen Parame-ter enthalten. Zusätzlich stehen noch dieBefehle inputname zum Ermitteln der Va-riablennamen der Übergabeargumente undnargchk zum Überprüfen der korrekten An-zahl der übergebenen Argumente zur Verfü-gung. Siehe doc nargin, doc nargout, docinputname und doc nargchk für entspre-chende Beispiele. Für weitere Informatio-nen über Funktionen siehe doc function

(help function) und Abschnitt 50.

44.3 Namen von m-Files

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

44.4 Editieren von m-Files

Sie haben zwei Möglichkeiten, um einenm-File zu erzeugen und zu editieren. Sie

können einerseits mit einem Editor IhrerWahl arbeiten oder andererseits den eige-bauten Matlab-Editor/Debugger verwen-den. Diesen können Sie mit dem Befehledit aktivieren oder durch Anklicken derMenüoptionen File-New oder File-Open.

44.5 Zur Struktur eines m-Files

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

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

% H1-Zeile

% Help Text

% Help Text usw.

< Irgendwelche Anweisungen >

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

85 Copyright c© G. Gramlich

den Sie in [17].

44.6 Blockkommentare

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

%{

<Block>

%}

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

44.7 Übungsaufgaben

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

function [aM,gM] = Mittelwerte(x)

aM = mean(x);

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

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

Aufgabe 61 (Function-File)Schreiben Sie einen Function-File, derdie Sprungfunktion (Einheitssprungfukti-

on, Heaviside-Funktion)

h(t) =

{0 t < 01 t ≥ 0

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

function y = h(t)

y = ( t>=0 );

de�niert und mit den Anweisungen

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

erhält man die Abbildung 36.

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

0

0.5

1

1.5

Abbildung 36: Sprungfunktion

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

Aufgabe 62 (Function-File)Zeichnen Sie die Graphen der verschobenen

86 Copyright c© G. Gramlich

Sprungfunktionen h(t+T ), t ∈ R und h(t−T ), t ∈ R für T = 2 im Intervall [−4, 4].Lösung: Die Funktionen können mit demFunction-File

function y = hT(t,T)

y = ( t>=-T );

berechnet werden. Die Anweisungen

subplot(2,1,1)

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

[],[],2),

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

subplot(2,1,2)

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

[],[],-2),

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

erzeugen die Abbildung 37. © . . . . . . . . . . . ©

−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 37: Verschobene Sprungfunktio-nen

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

(a) rect(t) =

{1 |t| ≤ 0.50 sonst

(b) ramp(t) =

{0 t < 0t sonst

(c) g(t) =

0 t < 0sin(πt

2 ) 0 ≤ t ≤ 11 1 < t

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

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

function y = rect(t)

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

function y = ramp(t)

y = t.*h(t);

function y = g(t)

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

(t>=1);

Die Anweisungen

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

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

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

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

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

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

erzeugen die Abbildung 38. © . . . . . . . . . . . ©

87 Copyright c© G. Gramlich

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

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

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 Funktionf mit fplot über dem Intervall [−3, 3]!Lösung: Der folgende Function-File de�-niert die Funktion f .

function y = f(x)

y1 = x.*(x<0);

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

y3 = 4*(x>=2);

y = y1+y2+y3;

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

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

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

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

function y = f(t)

y = t.^(1/3);

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

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

>> f = @(x) 5;

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

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

Aufgabe 67 (Horner-Methode)Implementieren Sie die Horner-MethodeinMatlab. Zunächst skalar und dann vek-toriell.Lösung: Hierzu wählen wir die folgendeDarstellung des Polynoms

p(x) = a1 + a2x + a3x2 + · · ·+ anxn−1

und nennen die skalare Matlab-FunktionHorner.

function p = Horner(a,x)

n = length(a);

p = a(n);

for k=n-1:-1:1

p = p*x+a(k);

end

Für das Polynom p(x) = x2 + 3x + 2 liefertder Aufruf Horner([2,3,1],2) den Wert12=p(2).

88 Copyright c© G. Gramlich

Nun die vektorielle Version.

function p = HornerVektoriell(a,x)

n = length(a);

p = a(n)*ones(size(x));

for k=n-1:-1:1

p = x.*p+a(k);

end

Für das Polynom p(x) = x2 + 3x + 2liefert der Aufruf Horner([2,3,1],[2,3])die Werte 12=p(2) und 20 = p(3).

45 Globale und lokale Variablen

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

46 Namenstest

Mit der Funktion exist können Sie über-prüfen, ob eine Name bereits exsitiert.Mit iskeyword kann festgestellt werden, obein Schlüsselwort vorliegt. Eine Liste allerSchlüsselwörter erhält man mit

>> iskeyword

ans =

'break'

'case'

'catch'

'continue'

'else'

'elseif'

'end'

'for'

'function'

'global'

'if'

'otherwise'

'persistent'

'return'

'switch'

'try'

'while'

47 Wie man e�zienteProgramme schreibt

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

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

int s = 0;

int n;

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

{

89 Copyright c© G. Gramlich

s = s+n;

}

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

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

s = 0;

for n=1:100

s = s+n;

end

s

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

N = 1:100;

s = sum(N)

Der erste Befehl erzeugt den Zeilenvek-tor N = [1,2,...,100]. Die zweite Anwei-sung summiert die Koordinaten des Vek-tors N auf. sum ist eine eingebauteMatlab-Funktion und verträgt Vektoren als Argu-mente. Viele Matlab-Funktionen könnenVektoren oder Matrizen als Argumente ver-arbeiten. Dies lässt eine vektorielle Verar-beitung zu.

Die rationale Funktion

f(x) =(

1 + x24

1− x12 + x2

384

)8

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

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

n = 200;

x = linspace(0,1,n);

y = zeros(1,n);

for k=1:n

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

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

end

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

n = 200;

x = linspace(0,1,n);

Zaehler = 1 + x/24;

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

Quotient = Zaehler./Nenner;

y = Quotient.^8;

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

Betrachten wir den Script-File genauer.Matlab erlaubt es, einen Vektor mit ei-nem Skalar zu multiplizieren. Dies zeigtder Term x/24. Dort wird jede Koordina-te des Vektors x durch die Zahl 24 divi-diert bzw. mit 1/24 multipliziert. Das Er-

90 Copyright c© G. Gramlich

gebnis ist ein Vektor mit der gleichen Län-ge und Orientierung (Zeile oder Spalte) wieder Vektor x. Im obigen Script ist x ein Zei-lenvektor und somit ist x/24 ebenfalls einZeilenvektor. Durch die Anweisung 1+x/24

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

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

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

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

Zaehler = [1 2 3];

Nenner = [4 5 6];

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

>> vectorize('Zaehler/Nenner')

ans =

Zaehler./Nenner

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

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

(1-x/12+x�2/384))�8' und zeigen Sie gra-�sch, dass f eine Approximation im Inter-vall [0, 1] an die Exponentialfunktion e ist.Lösung: Die folgenden Zeilen lösen dieAufgabe.

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

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

x = linspace(0,1,20);

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

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

y = eval(vs,x);

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

legend('e','f')

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

Nicht alle Berechnungen sind jedoch vek-torisierbar. In diesen Fällen muss man aufSchleifen zurückgreifen. Um diese Berech-nungen jedoch schneller auszuführen, sollteman die Ausgabematrizen mit Nullen vor-besetzen (Preallokieren). Wir erläutern an

91 Copyright c© G. Gramlich

einem Beispiel, was damit gemeint ist. An-genommen es sei die Matrix

A =[

0.8 0.30.2 0.7

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

E = zeros(2,10);

for k=1:10

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

end

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

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

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

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

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

Somit gilt:

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

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

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

for x = 1:10

y = sqrt(x);

end

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

x = 1:10;

y = sqrt(x);

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

Aufgabe 70 (Programmierung)Plotten Sie die Funktion

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

im Intervall [−10, 10].Lösung: Wir nutzen die vektorielle Pro-

92 Copyright c© G. Gramlich

grammierfähigkeit von Matlab, sowie et-was Matrizenrechnung und können f so wiefolgt e�zient darstellen.

n = 200;

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

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

sin(4*x)];

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

plot(x,y)

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

−10 −5 0 5 10−20

−10

0

10

20

Abbildung 39: Graph von f

48 Lineare Algebra (Teil 1)

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

siehe auch Abschnitt 66.

48.1 Lineare Gleichungssysteme undMatrizen

Zu Matrizen siehe auch Abschnitt 36. Daslineare Gleichungssystem

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

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

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

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

>> x = A\b

ans =

1.0000

2.0000

3.0000

Alternativ können wir die Funktion rref

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

>> rref([A b])

ans =

1 0 0 1

0 1 0 2

0 0 1 3

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

>> x = inv(A)*b

x =

93 Copyright c© G. Gramlich

1.0000

2.0000

3.0000

Wir bestätigen Satz 1.9 in Matlab.

>> syms a b c d

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

>> inv(A)

ans =

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

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

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

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

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

4 9 −3−2 −3 7

x1

x2

x3

=

2810

.

A x b

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

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

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

>> x = A\b

x =

-1.0000

2.0000

2.0000

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

>> x = sym(A)\b

x =

[ -1]

[ 2]

[ 2]

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

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

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

−2x1 + 4x2 = − 6.

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

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

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

>> rref([A b])

ans =

1 -2 3

0 0 0

0 0 0

94 Copyright c© G. Gramlich

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

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

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

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

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

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

>> sym(A)\b

ans =

[ 3]

[ -2]

[ -1/3]

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

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

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

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

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

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

>> sym(A)\b

ans =

[ 3]

[ 1]

[ 2]

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

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

A =

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

, b =

4.12.44.22.44.1

,

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

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

diag([ones(4,1)],1)+...

diag([ones(4,1)],-1)

A =

4 1 0 0 0

1 4 1 0 0

0 1 4 1 0

0 0 1 4 1

0 0 0 1 4

>> b = [4.1,2.4,4.2,2.4,4.1]';

>> A\b

ans =

1.0000

0.1000

95 Copyright c© G. Gramlich

1.0000

0.1000

1.0000

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

Aufgabe 76 (Beispiel 1.24 in [4])Berechnen Sie die Inverse der Matrix

A =[

1 −23 2

]Lösung: Es ist

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

>> inv(sym(A))

ans =

[ 1/4, 1/4]

[ -3/8, 1/8]

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

Aufgabe 77 (Inverse)Finden Sie mitMatlab die Inverse der Ma-trix

S =

a b cd e fg h i

Unter welchen Bedingungen existiert diese?Bestätigen Sie mit diesem Ergebnis die In-verse in Beispiel 1.26 aus [4].Lösung: Die Inverse erhalten wir durch

>> syms a b c d e f g h i

>> S = [a b c; d e f; g h i];

>> pretty(inv(S))

[ e i - f h

[ --------- usw.

[ %1

[

[ d i - f g

[- --------- usw.

[ %1

[

[ -d h + e g

[- ---------- usw.

[ %1

%1 := a e i - a f h - d b i +

d c h + g b f - g c e

Die Inverse exisiert genau dann, wenn derNenner aei − afh − dbi + dch + gbf − gceungleich Null ist. Ein Vergleich mit

>> det(S)

ans =

a*e*i-a*f*h-d*b*i+d*c*h+g*b*f-g*c*e

zeigt, dass dies gerade die Determinantevon S ist. Setzt man für a = 1, b = 1, . . .,i = −5 nach Beispiel 1.26 in [4], so erhältman die Inverse zu 2 −17 11

−1 11 −70 3 −2

.

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

Aufgabe 78 (Symmetrische Matrizen)Angenommen Sie wollen einen Algorithmustesten, der als Eingabe eine symmetrischeMatrix benötigt. Finden Sie eine Möglich-keit eine beliebige symmetrische Matrix inMatlab zu erzeugen.Lösung: Nach den folgenden Zeilen

n = 44; %-zum Beispiel 44.Ordnung

96 Copyright c© G. Gramlich

A = rand(n);

B = A + A';

steht in der Matrix B eine symmetrischeMatrix aus R44×44. © . . . . . . . . . . . . . . . . . . . ©

48.2 Vektoren in der Ebene und imRaum

Zu Vektoren siehe auch Abschnitt 34. Vek-toroperationen lassen sich in Matlab ein-fach ausführen. Die Summe der beiden Vek-toren u = (2, 3,−1) und v = (3,−4, 2) ist(Beispiel 2.3 in [4])

>> u = [2;3;-1]; v = [3;-4;2];

>> u+v

ans =

5

-1

1

Die Länge des Vektors v = (4,−3) ist

>> norm([4;-3])

ans =

5

Das Skalarprodukt der beiden Vektorenu = (0, 0, 1) und v = (0,−2, 2) haben wirin Beispiel 2.8 ausgerechnet; hier die Bestä-tigung mit der dot-Funktion

>> u = [0;0;1]; v = [0;-2;2];

>> dot(u,v)

ans =

2

Den Winkel aus Beispiel 2.9 berechnen wirwie folgt

>> KosWinkel = dot(u,v)/...

(norm(u)*norm(v))

KosWinkel =

0.5000

>> phi = acos(KosWinkel)

phi =

1.0472

Beachten Sie, Matlab rechnet im Bogen-maÿ. Die Zeile

>> 180*phi/pi

ans =

60.0000

liefert den Winkel im Gradmaÿ. Wir be-rechnen den Projektionsvektor aus Beispiel2.12

>> p = (u'*a)/(norm(a)^2)*a

p =

2.7692

-0.6923

2.0769

Mit der cross-Funktion können wir dasKreuzprodukt berechnen. Wir bestätigendamit Beispiel 2.13

>> u = [1;2;-2]; v = [3;0;1];

>> cross(u,v)

ans =

2

-7

-6

Das dyadische Produkt abT von Vektora = (1, 2) und b = (4, 1, 4, 3) berechnet sichwie folgt

97 Copyright c© G. Gramlich

>> a = [1;2]; b = [4;1;4;3];

>> a*b'

ans =

4 1 4 3

8 2 8 6

Aufgabe 79 (Skalarprodukt)Berechnen Sie jeweils das Skalarproduktder angegebenen Vektoren:

(a) a = (1, 0); b = (0, 1)

(b) a = (1, 0, 0); b = (0, 1, 0)

(c) a = (1, 1, 1); b = (−2,−2,−2)

(d) a = (2, 2, 2); b = (3, 3, 3)

Lösung:

(a) >> dot([1,0],[0,1])

ans =

0

(b) >> dot([1,0,0],[0,1,0])

ans =

0

(c) >> dot([1,1,1],[-2,-2,-2])

ans =

-6

(d) >> dot([2,2,2],[3,3,3])

ans =

18

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

48.3 Analytische Geometrie vonGeraden und Ebenen

Wir berechnen den Normalenvektor ausBeispiel 3.12 in [4]

>> cross([1 0 2],[0 -5 8])

ans =

10 -8 -5

Mehr Geometrie und Matlab �nden Siebei [20].

48.4 Reelle Vektorräume undUnterräume

Zur Berechnung einer orthonormalen Basisdes Nullraumes und des Spaltenraumes ste-hen uns die Funktionen null und orth zurVerfügung. Die Funktion null liefert auchvon symbolischen Matrizen eine Basis; dieseist im Allgemeinen aber nicht orthogonal.Um symbolisch eine Spaltenraumbasis zuerhalten, können wir colspace verwenden.Auch hier gilt, dass diese im Allgemeinennicht orthogonal ist. Wir betrachten Zah-lenbeispiele mit der Matrix A aus Beispiel4.23.

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

>> null(A)

ans =

[ -2]

[ 1]

AuchMatlab hat t = 1 gewählt, um einenBasisvektor für den Nullraum von A zu be-stimmen. Eine (numerische) Basis der Län-ge 1 erhält man mit

98 Copyright c© G. Gramlich

>> A = [1,2; 3 6];

>> null(A)

ans =

-0.8944

0.4472

Die beiden Anweisungen

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

>> colspace(A)

ans =

[ 1]

[ 3]

liefern eine Basis des Spaltenraumes vonA. Eine Basis der Länge 1 erhält man mitorth.

>> A = [1,2; 3 6];

>> orth(A)

ans =

-0.3162

-0.9487

Wir bestätigen Satz 4.12.

>> null(A)

ans =

[ -2]

[ 1]

>> Z = rref(A)

Z =

[ 1, 2]

[ 0, 0]

>> null(Z)

ans =

[ -2]

[ 1]

und

>> colspace(A')

ans =

[ 1]

[ 2]

>> colspace(rref(A)')

ans =

[ 1]

[ 2]

Den Rang einer Matrix können wir mit derFunktion rank bestimmen. Wir berechnenden Rang der Matrix A aus Beispiel 4.26.

>> A = [1 2 4 0 1; 0 1 2 0 0;...

0 0 0 1 0; 0 0 0 0 0];

>> rank(A)

ans =

3

In Beispiel 4.28 haben wir alle vier Funda-mentalräume an Hand der Matrix A disku-tiert. Wir bestätigen nun die dort gefunde-nen Resultate, indem wir zu jedem Funda-mentalraum eine Basis berechnen.

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

>> null(A)

ans =

[ -2]

[ 1]

>> colspace(A)

ans =

[ 1]

[ 3]

>> null(A')

ans =

[ -3]

[ 1]

99 Copyright c© G. Gramlich

>> colspace(A')

ans =

[ 1]

[ 2]

Basen der Länge 1 erhalten wir wie folgt

>> A = [1,2; 3 6];

>> null(A)

ans =

-0.8944

0.4472

>> orth(A)

ans =

-0.3162

-0.9487

>> null(A')

ans =

-0.9487

0.3162

>> orth(A')

ans =

-0.4472

-0.8944

Der Spaltenraum von A und der Nullraumvon AT sind orthogonale Komplemente imRm. Hier eine Bestätigung

>> A = [1,2; 3 6];

>> orth(A)'*null(A')

ans =

-1.6653e-016

bzw. analog im Rn, nun symbolisch.

>> colspace(A')'*null(A)

ans =

0

Mit dem Backslash-Operator \ können wirlineare Ausgleichsaufgaben lösen. Wir be-stätigen damit die Lösung aus Beispiel 4.34.

>> A = [1,0; 1 1; 1 2];

>> b = [6;0;0];

>> A\b

ans =

5.0000

-3.0000

Aufgabe 80 (Lineare Unabhängigkeit)Sind die Vektoren a = (1,−2, 3), b =(5, 6,−1) und c = (3, 2, 1) linear unabhän-gig (Beispiel 4.16 in [4])?Lösung: Die folgendenMatlab-Zeilen zei-gen auf verschiedene Weisen, dass die dreiVektoren linear abhängig sind.

>> a = [1,-2,3];

>> b = [5,6,-1];

>> c = [3,2,1];

>> A = sym([a',b',c']);

>> det(A), rank(A)

ans =

0

ans =

2

>> eig(A)

ans =

0

4

4

>> svd(A)

ans =

0

(45+3*97^(1/2))^(1/2)

(45-3*97^(1/2))^(1/2)

>> rref(A)

100 Copyright c© G. Gramlich

ans =

[ 1, 0, 1/2]

[ 0, 1, 1/2]

[ 0, 0, 0]

>> null(A)

ans =

1

1

-2

>> colspace(A)

ans =

[ 1, 0]

[ 0, 1]

[ 1, -1]

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

Aufgabe 81 (Basen)Bestimmen Sie von der Matrix

A =

1 01 11 2

jeweils eine Basis der vier Fundamentalräu-me.Lösung: Hier eine symbolische Lösung. Zu-erst Basen des Nullraumes und des Spal-tenraumes, dann Basen des transponiertenNullraumes und des Zeilenraumes.

>> null(A), colspace(A)

ans =

[ empty sym ]

ans =

[ 1, 0]

[ 0, 1]

[ -1, 2]

>> null(A'), colspace(A')

ans =

[ 1]

[ -2]

[ 1]

ans =

[ 1, 0]

[ 0, 1]

Für eine numerische Lösung benützt mandie Funktionen null und orth; diese liefernsogar orthonormale Basen. © . . . . . . . . . . . . ©

Aufgabe 82 (LGS und Rang)Wie können Sie (in Matlab) entscheiden,ob ein lineares Gleichungssystem eine Lö-sung hat?Lösung: Zum Beispiel mit der Funktionrank. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 83 (LGS und Rang)Wenn ein lineares Gleichungssystem eineLösung hat, wie können Sie dann (in Mat-lab) entscheiden, ob es genau eine odermehrere gibt?Lösung: Zum Beispiel mit der Funktionrank. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 84 (Ausgleich)Berechnen Sie die Näherungslösung (imSinne der linearen Ausgleichsrechnung) vonAx = b und den orthogonalen Projektions-vektor p von b auf den Spaltenraum von Ades Systems 1 1

−1 1−1 2

[x1

x2

]=

70

−7

.

A x b

101 Copyright c© G. Gramlich

Lösung: Die folgende Zeilen geben die Lö-sungen.

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

>> b = [7; 0 ; -7];

>> x = A\b

x =

5.0000

0.5000

>> p = A*x

p =

5.5000

-4.5000

-4.0000

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

Aufgabe 85 (Ausgleich)Die Datenpunkte

ti bi

0 3.8250.2 4.5280.4 4.7460.6 4.8730.8 4.8651.0 4.813

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

f(t, x) = x1 + x2t + x3 cos(t)

angepasst werden. Zeichnen Sie die Daten-punkte und die Ausgleichsfunktion, nach-dem Sie die Lösung berechnet haben.Lösung:

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

b = [3.825 4.528 4.746 4.873...

4.865 4.813]';

A = [ones(length(t),1),t,cos(t)];

x = A\b

x =

-1.0428

3.1516

4.9265

plot(t,b,'o','MarkerSize',10)

tt = linspace(min(t),max(t));

f = x(1)+x(2)*tt+x(3)*cos(tt);

hold on

plot(tt,f)

Die Abbildung 40 zeigt die gra�sche Dar-

0 0.2 0.4 0.6 0.8 13.8

4

4.2

4.4

4.6

4.8

5

Abbildung 40: Zu Aufgabe 85

stellung. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

48.5 Determinanten

Zur Berechnung der Determinante einerMatrix steht die Funktion det zur Verfü-gung, sowohl numerisch als auch symbo-

102 Copyright c© G. Gramlich

lisch. Wir berechnen die Determinante von

A =[

a bc d

].

>> syms a b c d

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

>> det(A)

ans =

a*d-b*c

Die folgende Zeile bestätigt das Ergebnisaus Beispiel 5.10.

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

>> det(A)

ans =

-1

Aufgabe 86 (Determinanten)Berechnen Sie die Determinante von

A =

1 1 22 4 −33 6 −5

Lösung: Hier die symbolische Lösung.

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

>> det(A)

ans =

-1

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

48.6 Eigenwerte und Eigenvektoren

Die Funktion eig hift uns beim Lösen einerEigenaufgabe. Es können damit sowohl Ei-genwerte als auch Eigenvektoren berechnet

werden, sowohl numerisch als auch symbo-lisch. Wir bestätigen Beispiel 6.2.

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

>> [X,D] = eig(sym(A))

X =

[ 1, 1]

[ 1, 2]

D =

[ 2, 0]

[ 0, 3]

Das charakteristische Polynom einer Ma-trix erhalten wir mit der Funktion poly;siehe Beispiel 6.2.

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

>> poly(A)

ans =

x^2-5*x+6

Eine symmetrische Matrix ist immer diago-nalisierbar. Wir überprüfen Beispiel 6.12.

>> A = [4,2,2; 2,4,2; 2,2,4];

>> [X,D] = eig(sym(A))

X =

[ 0, 1, 1]

[ -1, -1, 1]

[ 1, 0, 1]

D =

[ 2, 0, 0]

[ 0, 2, 0]

[ 0, 0, 8]

Wir machen die Probe.

>> X*D*inv(X)

ans =

[ 4, 2, 2]

[ 2, 4, 2]

103 Copyright c© G. Gramlich

[ 2, 2, 4]

Für eine symbolische Matrix versucht dieFunktion eig ein exaktes Eigenwertsystemzu berechnen. Aus derGalois-Theorie wis-sen wir, dass dies jedoch nicht immer fürMatrizen der Ordnung 5 oder gröÿer mög-lich ist. Es sei

A =

−6 12 48 −21 −8

−29 72 27

gegeben. Wir wollen Matlab verwenden,um folgende Frage zu beantworten: Ist Areell diagonalisierbar, das heiÿt, können wireine Matrix X �nden, so dass X−1AX dia-gonalisierbar ist? Die Eigenwerte von A �n-den wir mit eig(sym(A)).Matlab antwor-tet mit:

ans =

[ 3]

[ -2]

[ -1]

Da die Eigenwerte von A alle reell und von-einander verschieden sind, kann A diagona-lisiert werden, das heiÿt, es gibt eine MatrixX mit

X−1AX =

−1 0 00 −2 00 0 3

.

Wie �ndet man X? Die Spalten von X kön-nen als Eigenvektoren zu den Eigenwerten-1,-2 und 3 gewählt werden. Gibt man

>> [X,D] = eig(sym(A))

ein, so gibtMatlab in der DiagonalmatrixD die Eigenwerte zurück und die Spaltenvon X sind dazugehörige Eigenvektoren:

X =

[ 1, 0, -4]

[ 0, 1, -2]

[ 1, -3, 1]

D =

[ -2, 0, 0]

[ 0, 3, 0]

[ 0, 0, -1]

Schlieÿlich kann man mit inv(X)*A*X über-prüfen, ob X−1AX die gewünschte Diago-nalmatrix ist. Wir erhalten das gewünschteErgebnis:

ans =

[ -2, 0, 0]

[ 0, 3, 0]

[ 0, 0, -1]

Aufgabe 87 (Eigensysteme)Gegeben ist die 4× 4 Matrix

A =

12 48 68 88

−19 −54 −57 −6822 52 66 96

−11 −26 −41 −64

.

Zeigen Sie mitMatlab, dass die Eigenwer-te von A reell und voneinander verschie-den sind. Finden Sie eine Matrix X, so dassX−1AX diagonal ist.Lösung:

>> A = [ 12 48 68 88;

-19 -54 -57 -68;

22 52 66 96;

-11 -26 -41 -64];

104 Copyright c© G. Gramlich

>> [X,D] = eig(sym(A))

X =

[ 1, -12/11, 0, -2]

[ -2, 1, 1, 2]

[ 1, -14/11, -2, -2]

[ 0, 7/11, 1, 1]

D =

[ -16, 0, 0, 0]

[ 0, -4, 0, 0]

[ 0, 0, -8, 0]

[ 0, 0, 0, -12]

>> inv(X)*A*X

ans =

[ -16, 0, 0, 0]

[ 0, -4, 0, 0]

[ 0, 0, -8, 0]

[ 0, 0, 0, -12]

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

Die Anweisung J = jordan(A) berechnetdie Jordan-Matrix von A und [V,J]

= jordan(A) zusätzlich die Ähnlichkeit-stransformation V . Die Spalten von V sinddie verallgemeinerten Eigenvektoren von A.

>> A = sym([3/2 1;-1/4 1/2]);

>> [V,J] = jordan(A)

V =

[ 1/2, 1]

[ -1/4, 0]

J =

[ 1, 1]

[ 0, 1]

In Matlab gibt es die Funktion eigshow,die das Eigenwertproblem für eine (2, 2)-Matrix visualisiert. Beim Aufruf sieht manden Einheitsvektor x = (1, 0) und mit der

Maus kann man diesen auf dem Einheits-kreis bewegen. Zur gleichen Zeit wird Axangezeigt und bewegt. Manchmal ist Axvor x, manchmal aber auch hinter x. Axkann zu x auch parallel sein. In diesem Au-genblick gilt Ax = λx und x ist ein Eigen-vektor. Der Eigenwert λ bestimmt sich ausder Länge und Richtung von Ax. Die zurVerfügung stehenden Matrizen illustrierenfolgende Möglichkeiten:

1. Es gibt keine (reellen) Eigenvektoren. xund Ax sind nie parallel. Die Eigenwer-te und Eigenvektoren sind komplex. Esgibt keinen Eigenraum von R2.

2. Es gibt nur eine Gerade, auf der die Ei-genvektoren liegen. Dies ist der einzigeEigenraum von R2.

3. Es gibt Eigenvektoren mit zwei unab-hängigen Richtungen. Es gibt genauzwei Eigenräume von R2. Dies ist ty-pisch, der Standardfall.

4. Jeder Vektor ist Eigenvektor oder an-ders gesagt: Jeder eindimensionale Un-terraum von R2 ist Eigenraum.

Auch die Singulärwertzerlegung kann imFall m = n = 2 mit der Funktion eigshow

visualisiert werden. Für weitere Informatio-nen siehe [6].

Viele in der Praxis auftretenden Eigen-wertprobleme haben die Form eines verall-gemeinerten (allgemeinen) Eigenwertpro-blems: Gegeben sind zwei quadratische Ma-trix A und B. Gesucht sind Zahlen λ undVektoren x, sodass gilt

Ax = λBx.

105 Copyright c© G. Gramlich

Für B 6= E ist diese Aufgabenstel-lung eine Verallgemeinerung der herkömm-lichen Eigenwertaufgabe; für B = E redu-ziert sich das verallgemeinerte Eigenwert-problem auf die Standardeigenwertaufgabe.Verallgemeinerte Eigenwertprobleme tre-ten zum Beispiel in mechanischen Schwin-gungssystemen auf; dort ist A die Stei�g-keitsmatrix und B die Massenmatrix.

Ist A oder B eine reguläre Matrix, dannkann man das verallgemeinerte Problem aufein gewöhnliches reduzieren, entweder so

(B−1A)x = λx.

oder so

(A−1B)x =1λ

x.

In Matlab kann auch dieses verallgemei-nerte Problem mit der Funktion eig ange-gangen werden. Die Funktion eigs berech-net ein paar Eigenwerte und Eigenvektoren,wenn gewünscht.

Aufgabe 88 (Eigensysteme)Bestimmen Sie eine orthogonale Eigenvek-torenmatrix Q, die die Matrix

A =[

3 11 3

]diagonalisiert.Lösung:

Die Matrix

Q =[−1/

√2 1/

√2

1/√

2 1/√

2

]diagonalisiert A. Man erhält sie mit derFunktion eig.

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

>> [Q,D] = eig(A)

Q =

-0.7071 0.7071

0.7071 0.7071

D =

2 0

0 4

Probe:

>> inv(Q)*A*Q

ans =

2.0000 0

0 4.0000

Die symbolische eig-Funktion liefert (nur)eine orthogonale Basis aus Eigenvektoren.© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

48.7 Lineare Abbildungen undMatrizen

Wir visualisieren lineare Abbildungen imR2. Diese können durch (2, 2)-Matrizen be-schrieben werden. Wir zeichnen ein Hausund betrachten das �neue� Haus nach linea-ren Abbildungen. Die folgende Matlab-Funktion zeichnet ein Haus in der Ebene,indem sie Datenpunkte, die in der MatrixH angegeben werden müssen, miteinanderverbindet.

function plotHaus(H)

%-Zeichnet ein Haus.

x = H(1,:)'; y = H(2,:)';

plot(x,y,'o',x,y,'r-')

106 Copyright c© G. Gramlich

axis([-10 10 -10 10]); axis square;

Die beiden Anweisungen

>> H = [-6,-6,-7,0,7,6,6,-3,-3,...

0,0,-6; -7,2,1,8,1,2,...

-7,-7,-2,-2,-7,-7]

>> plotHaus(H)

erzeugen das Bild 41.

−10 −5 0 5 10−10

−8

−6

−4

−2

0

2

4

6

8

10

Abbildung 41: Durch die Datenpunkte in H

erzeugte Haus

Um nun lineare Abbildungen zu �sehen� ,müssen wir eine lineare Abbildung als Ma-trix A de�nieren und diese mit Hmultiplizie-ren. Als Beispiel betrachten wir eine Dre-hung um 60◦ und eine Spiegelung an derx-Achse. Im ersten Fall ist

A =[

cos 60◦ − sin 60◦

sin 60◦ cos 60◦

]und im Zweiten

A =[

1 00 −1

].

Nach zweimaligem Aufruf vonplotHaus(A*H) (zuvor entsprechend A

de�nieren!) erhalten wir die Bilder 42 und

−10 −5 0 5 10−10

−8

−6

−4

−2

0

2

4

6

8

10

Abbildung 42: Nach Drehung

43.

48.8 Matlab-Funktionen für dieLineare Algebra im Überblick

Zusammenfassend habe ich in den Tabel-len 24, 25 und 26 die wichtigsten Funk-tionen aus Matlab zur Linearen Alge-bra zusammengestellt. Beachten Sie, dasszum Beispiel die Funktionen eig, inv usw.vom Overloading Gebrauch machen. Over-loading ist ein Mechanismus, der es er-laubt verschiedene Typen von Funktionsar-gumenten zu verwenden. So kann A beimAufruf von eig(A) eine symbolische odereine numerische Matrix sein.

107 Copyright c© G. Gramlich

−10 −5 0 5 10−10

−8

−6

−4

−2

0

2

4

6

8

10

Abbildung 43: Nach Spiegelung

Symbolische Funktionen

colspace Basis für Spaltenraumdet Determinantediag Diagonalmatrixeig Eigenwerte und -vektorenexpm Exponentialfunktioninv Inversejordan Jordan-Formnull Basis für Nullraumpoly Charakteristisches Polynomrank Rangrref Reduzierte Zeilenstufenformsvd Singulärwertzerlegungtril Untere Dreiecksmatrixtriu Obere Dreiecksmatrix

Tabelle 24: Lineare Algebra

Numerische Funktionen

det Determinantediag Diagonalmatrixeig Eigenwerte und -vektorenexpm Exponentialfunktioninv Inversenull Orth. Basis für Nullraumorth Orth. Basis für Spaltenraumpoly Charakteristisches Polynomrank Rangrref Reduzierte Zeilenstufenformsvd Singulärwertzerlegungtril Untere Dreiecksmatrixtriu Obere Dreiecksmatrix

Tabelle 25: Lineare Algebra

Weitere Funktionen

cross Kreuzproduktdot Skalarpordukteye Einheitsmatrixlu LU-Faktorisierungqr QR-Faktorisierungzeros Nullmatrix

Tabelle 26: Linearen Algebra

108 Copyright c© G. Gramlich

48.9 Lineare Gleichungssysteme (2)

In vielen Anwendungen muss man lineareGleichungen lösen. Daher ist es inMatlabbesonders einfach, solche zu lösen. Hierzudient der \-Operator (Backslash-Operator),siehe doc slash (help slash). Auch dieFunktion linsolve löst lineare Gleichungs-systeme. Unter Verwendung dieser Funkti-on ist es möglich, lineare Systeme e�zienterzu lösen, wenn die Struktur der Koe�zien-tenmatrix (Systemmatrix) bekannt ist, sie-he doc linsolve (help linsolve).

48.9.1 Quadratische Systeme

Ist A eine reguläre (quadratische) Matrix,so gibt es genau eine Lösung des linearenSystems Ax = b und zwar für jede rechteSeite b. Zum Beispiel ist die Matrix

A =[

1 −23 2

]regulär und daher gibt es für b = (1, 11)genau eine Lösung; diese ist x = (3, 1). InMatlab löst man dies in einem Einzeiler,nachdem man A und b eingegeben hat.

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

>> b = [1; 11];

>> x = A\b

x =

3

1

Ist die Koe�zientenmatrix A singulär, soerhält man eine Fehlermeldung, auch dannwenn b im Spaltenraum von A liegt und

es nicht nur eine, sondern unendlich vieleLösungen gibt.

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

2 4 −24 9 −3

−2 −3 7

x1

x2

x3

=

2810

.

A x b

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

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

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

>> x = A\b

x =

-1.0000

2.0000

2.0000

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

>> x = sym(A)\b

x =

[ -1]

[ 2]

[ 2]

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

109 Copyright c© G. Gramlich

48.9.2 Überbestimmte Systeme

Gibt es mehr Gleichungen als Unbekann-te, so nennt man Ax = b überbestimmt.Das System Ax = b hat in der Regel kei-ne Lösung, aber das Ersatzproblem Ax ∼= b(die lineare Ausgleichsaufgabe) ist stets lös-bar. Entweder hat das Ersatzproblem ge-nau eine oder aber unendlich viele Lösun-gen, je nachdem ob die Spalten von A li-near unabhängig sind oder nicht. Im Fall,dass es unendlich viele Lösungen gibt er-hält man durch A\b eine Basislösung. Mitpinv(A)*b erhält man den Lösungsvektorkleinster Länge.

Aufgabe 90 (Ausgleich)Berechnen Sie die Lösung des linearen Aus-gleichsproblems Ax ∼= b mit

A =

1 01 11 2

und b =

600

.

Lösung: Die eindeutige Lösung ist x =(5,−3). Diese kann auf die folgenden dreiArten berechnet werden.

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

>> b = [6; 0; 0];

>> x = A\b

x =

5.0000

-3.0000

>> x = pinv(A)*b

x =

5

-3

>> x = inv(A'*A)*A'*b

x =

5

-3

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

Aufgabe 91 (Lineare Systeme)Berechnen Sie in Matlab x = A\b und x

= pinv(A)*b mit

A =

1 22 4

−1 −2

und b =

321

.

Interpretieren Sie die Ergebnisse.Lösung: Es ist

>> x = A\b

x =

0

0.5000

und

>> x = pinv(A)*b

x =

0.2000

0.4000

Beides sind spezielle Lösungen der allge-meine Lösung x = (x1, x2) = (1 − 2t, 2),t ∈ R der linearen Ausgleichsaufgabe. x =

A\b berechnet eine Basislösung (t = 0.5)und x = pinv(A)*b die Lösung kleinsterLänge (t = 0.4). Da inv(A'*A) nicht exis-tiert, kann über diesen Weg keine Lösungberechnet werden. © . . . . . . . . . . . . . . . . . . . . .©

48.9.3 Unterbestimmte Systeme

Ein lineares System Ax = b heiÿt unterbe-stimmt, wenn weniger Gleichungen als Un-

110 Copyright c© G. Gramlich

bekannte vorliegen; in der Regel hat Ax =b dann unendlich viele Lösungen. In diesemFall wird durch A\b die Lösung kleinsterLänge berechnet, das heiÿt von allen Lö-sungen x wird diejenige ermittelt, wo dieLänge von x am kleinsten ist. Hat das Sys-tem Ax = b keine Lösung, so wird eine Ba-sislösung des Ersatzproblems Ax ∼= b be-rechnet.

Aufgabe 92 (Lineare Systeme)Berechnen Sie in Matlab x = A\b x =

pinv(A)*b und x = A'*inv(A*A')*b

A =[

1 1]

und b =[

6].

Interpretieren Sie die Ergebnisse.Lösung: Es ist

>> A = [1 1]; b = [6];

>> x = A\b, x = pinv(A)*b,

x =

6

0

x =

3.0000

3.0000

und

>> x = A'*inv(A*A')*b

x =

3

3

Dies sind spezielle Lösungen der allgemeineLösung x = (x1, x2) = (6− t, t), t ∈ R deslinearen Gleichungssystems x1+x2 = 6. x =

A\b berechnet eine Basislösung (t = 0) undx = pinv(A)*b bzw. x = A'*inv(A*A')*b

die Lösung kleinster Länge (t = 3). © . . . .©

48.10 Lineare Gleichungssysteme (3)

Lineare Gleichungssysteme lassen sich sym-bolisch in Matlab mit den Funktio-nen solve und \ lösen. Darüberhin-aus gibt es noch die Maple-Funktionengausselim und gaussjord, die mit dermaple-Funktion angesprochen werden kön-nen. Für das maple-Kommando verweiseich sie auf Abschnitt 66.2.

Der Prozess einer Matrix auf reduzier-te Zeilenstufenform zu transformieren wirdals Gauÿ-Jordan-Verfahren bezeichnet.Daher haben auch die beiden Funktionengaussjord und rref die gleiche Wirkung.Das folgende Beispiel zeigt dies:

>> maple('gaussjord',...

sym([1 1 2 9; 2 4 -3 1; 3 6 -5 0]))

ans =

[ 1, 0, 0, 1]

[ 0, 1, 0, 2]

[ 0, 0, 1, 3]

Die gausselim-Funktion transformiert dieerweiterte Matrix auf Zeilenstufenform, wo-bei die führenden Elemente nicht notwendiggleich 1 sind.

>> maple('gausselim',...

sym([1 1 2 9; 2 4 -3 1; 3 6 -5 0]))

ans =

[ 1, 1, 2, 9]

[ 0, 2, -7, -17]

[ 0, 0, -1/2, -3/2]

Die backsub-Funktion erlaubt es dann dieLösung durch Rückwärtseinsetzen zu ge-winnen:

111 Copyright c© G. Gramlich

>> maple('backsub',ans)

ans =

[ 1, 2, 3]

Wir betrachten das folgende unterbestimm-te lineare Gleichungssystem

−2x3 + 7x5 = 122x1 + 4x2 − 10x3 + 6x4 + 12x5 = 28

2x1 + 4x2 − 5x3 + 6x4 − 5x5 = −1

mit der erweierten Matrix

[A b

]=

0 0 −2 0 7 122 4 −10 6 12 282 4 −5 6 −5 −1

.

Dieses lineare Gleichungssystem hat unend-lich viele Lösungen. Mit den Parameternt ∈ R und s ∈ R können die Lösungenwie folgt parametrisiert angegeben werden:

x1 = 7− 2x2 − 3x4

x2 = t

x3 = 1x4 = s

x5 = 2

Mit rref können wir die Lösungen bestäti-gen:

>> Ab = sym([0 0 -2 0 7 12;...

2 4 -10 6 12 28; 2 4 -5 6 -5 -1])

Ab =

[ 0, 0, -2, 0, 7, 12]

[ 2, 4, -10, 6, 12, 28]

[ 2, 4, -5, 6, -5, -1]

>> rref(Ab)

ans =

[ 1, 2, 0, 3, 0, 7]

[ 0, 0, 1, 0, 0, 1]

[ 0, 0, 0, 0, 1, 2]

Die Lösungen erhalten wir auch wie folgt

>> maple('gausselim',Ab)

ans =

[ 2, 4, -10, 6, 12, 28]

[ 0, 0, -2, 0, 7, 12]

[ 0, 0, 0, 0, 1/2, 1]

>> maple('backsub',ans)

ans =

[ 7-2*_t2-3*_t1,_t2,1,_t1,2]

Dagegen liefern die Anweisungen

>> A = Ab(:,1:5)

A =

[ 0, 0, -2, 0, 7]

[ 2, 4, -10, 6, 12]

[ 2, 4, -5, 6, -5]

>> b = Ab(:,6)

b =

[ 12]

[ 28]

[ -1]

>> A\b

ans =

[ 7]

[ 0]

[ 1]

[ 0]

[ 2]

nur die Lösung x = (7, 0, 1, 0, 2). Die Para-meter t und s sind hier gleich Null gewählt.

Lösen wir das Beispiel numerisch, so er-

112 Copyright c© G. Gramlich

halten wir die spezielle Lösung x =(0, 0, 1, 7/3, 2), wie die folgende Zeile zeigt:

>> double(A)\double(b)

ans =

0

0

1.0000

2.3333

2.0000

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

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

−2x1 + 4x2 = − 6.

mit Hilfe der Funktionen gausselim undbacksub, siehe Aufgabe 72.Lösung: Die allgemeine Lösung erhaltenwir durch

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

>> b = sym([12; 9; -6]);

>> maple('gausselim',[A b])

ans =

[ 4, -8, 12]

[ 0, 0, 0]

[ 0, 0, 0]

>> maple('backsub',ans)

ans =

[ 3+2*_t1, _t1]

Demnach ist: x = (3, 0) + t(2, 1), t ∈ R dieallgemeine Lösung. Mit

>> A\b

ans =

3

0

erhalten wir die spezielle Lösung (3, 0). Hierist t = 0. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .©

Wir betrachten nun ein lineares Gleichungs-system, das keine Lösung hat. Das folgendeSystem ist überbestimmt. ÜberbestimmteSystem haben mehr Gleichungen als Varia-blen und daher in der Regel (generisch) kei-ne Lösung. Tatsächlich ist das System

2x1 − 3x2 = −22x1 + x2 = 1

3x1 + 2x2 = 1

inkonsistent. Dies können wir mit der rref-Funktion sofort überprüfen:

>> Ab = sym([2 -3 -2; 2 1 1; 3 2 1])

Ab =

[ 2, -3, -2]

[ 2, 1, 1]

[ 3, 2, 1]

>> rref(Ab)

ans =

[ 1, 0, 0]

[ 0, 1, 0]

[ 0, 0, 1]

Die letzte Zeile der erweiterten Matrix be-sagt

0x1 + 0x2 = 1.

Wir testen die anderen Funktionen, die unszur Lösung linearer Gleichung symbolischoder numerisch in Matlab zur Verfügungstehen. Das Gauÿ-Verfahren liefert

113 Copyright c© G. Gramlich

>> maple('gausselim',Ab)

ans =

[ 2, -3, -2]

[ 0, 4, 3]

[ 0, 0, -7/8]

Auch hier erkennt man an der letzten Zei-le der Matrix die Unlösbarkeit des linearenSystems, denn die Gleichung 0x1 + 0x2 =−7/8 hat keine Lösung. Das Rückwärts-einsetzen bestätigt die Beobachtung

>> maple('backsub',ans)

??? Error using ==> sym/maple

Error, (in backsub) inconsistent

system

Was liefert A\b?

>> A\b

Warning: System is inconsistent.

Solution does not exist.

> In C:\MATLAB6p1\toolbox\symbolic\

@sym\mldivide.m at line 29

ans =

Inf

Wie zu erwarten: das System ist inkonsis-tent. Auch die Funktion solve sagt, dassdie Lösungsmenge leer ist:

>> solve('2*x1-3*x2=-2',...

'2*x1+x2=1','3*x1+2*x2=1')

Warning: 3 equations in 2 variables.

> In C:\MATLAB6p1\toolbox\symbolic

\solve.m at line 110

Warning: Explicit solution could

not be found.

> In C:\MATLAB6p1\toolbox\symbolic

\solve.m at line 136

ans =

[ empty sym ]

Numerisch dagegen erhalten wir die Lösung0.6429:>> double(A)\double(b)

ans =

0.6429

Dies ist die eindeutige Lösung des dazu-gehörigen linearen Ausgleichsproblems. Fürweitere Einzelheiten hierzu verweisen wirauf [7].

Die Tabelle 27 zeigt zusammenfassend die

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

Tabelle 27: Lineare Gleichungssystemesymbolisch lösen

Funktionen, die man einsetzen kann, um li-neare Gleichungen symbolisch zu lösen. Be-achten Sie, dass es das Gleiche bedeutet, ei-ne Matrix in reduzierte Zeilenstufenform zubringen wie das Gauss-Jordan-Verfahrendurchzuführen. Die Funktion rref bzw. dasKommando \ stehen auch für numerischeBerechnungen zur Verfügung.

114 Copyright c© G. Gramlich

49 Lineare Algebra (Teil 2)

Matlab wurde ursprünglich entwickelt,um numerische Berechnungen in der Linea-ren Algebra durchzuführen. Daher ist esnicht überraschend, dass viele Funktionenzum Lösen linearer Gleichungssysteme undEigenwertaufgaben zur Verfügung stehen.Sehr viele dieser Funktionen basieren aufder Fortran-Bibliothek Lapack [1].

Lange Zeit waren reelle und komplexe Ma-trizen der einzige Datentyp inMatlab unddie meisten Funktionen können auch mit re-ellen und komplexen Matrizen aufgerufenund bearbeitet werden. Das Teilgebiet, dassich mit numerischen Methoden in der Li-nearen Algebra befasst, heiÿt NumerischeLineare Algebra. Jedes Buch über Nume-rische Mathematik behandelt auch diesesThema, siehe zum Beispiel [7], [12] und derdarin zitierten Literatur.

49.1 Normen

Eine Norm ist ein skalares Maÿ für die Grö-ÿe eines Vektors oder einer Matrix. Die p-Norm eines n-Vektors x ist de�niert durch

‖x‖p =( n∑

i=1

|xi|p)1/p

, 1 ≤ p < ∞.

Für p = ∞ ist

‖x‖∞ = max1≤i≤n

|xi|.

Die Funktion norm kann verwendet werden,um jede p-Norm auszurechnen. Der Aufrufist norm(x,p), wobei p = 2 standardmäÿig

eingestellt ist. Im Fall p=-inf wird mini |xi|berechnet.

>> x = 1:4;

>> [norm(x,1) norm(x,2) ...

norm(x,inf) norm(x,-inf)]

ans =

10.0000 5.4772 4.0000

1.0000

Die Tabelle 28 zeigt die Vektornormen

Matlab Bedeutungnorm(x)=norm(x,2) x2

norm(x,1) x1

norm(x,inf) x∞norm(x,-inf) x−∞norm(x,p) xp für p ≥ 1

Tabelle 28: Vektornormen

übersichtlich.

Aufgabe 94 (Vektornormen)Berechnen Sie für den Vektor x = (1,−2, 3)die Normen ‖x‖p für p = 1, 1.5, 2, . . . 9.5und für p = ∞.Lösung: Der Aufruf Vektornormen

p norm(x,p)

-------------------

1.0 6.0000

1.5 4.3346

2.0 3.7417

2.5 3.4586

3.0 3.3019

3.5 3.2072

4.0 3.1463

4.5 3.1056

5.0 3.0774

115 Copyright c© G. Gramlich

5.5 3.0574

6.0 3.0430

6.5 3.0325

7.0 3.0247

7.5 3.0188

8.0 3.0144

8.5 3.0111

9.0 3.0086

9.5 3.0067

Inf 3.0000

berechnet die Normen. Die FunktionVektornormen ist wie folgt realisiert.

function Vektornormen

%-Vektor x

x = [1 -2 3];

%

disp(' p norm(x,p)');

disp('-------------------');

for p = [1:0.5:9.5 inf]

disp(sprintf('%2.1f %15.4f ',...

p,norm(x,p)))

end

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

Aufgabe 95 (Vektornormen)Berechnen Sie die 1, 2 und ∞-Norm derVektoren v1 = (2, 1), v2 = (1, 0) undv3 = (1,−1).Lösung: Wir erhalten:

>> v1= [2,1];

[norm(v1,1) norm(v1,2) norm(v1,inf)]

ans =

3.0000 2.2361 2.0000

>> v2= [1,0];

[norm(v2,1) norm(v2,2) norm(v2,inf)]

ans =

1 1 1

>> v3= [1,-1];

[norm(v3,1) norm(v3,2) norm(v3,inf)]

ans =

2.0000 1.4142 1.0000

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

Die p-Norm einer Matrix ist de�niert durch

‖A‖p = maxx6=o

‖Ax‖p

‖x‖p.

Die 1- und ∞-Norm einer (m,n)-Matrix Asind (Maximale Spaltensumme)

‖A‖1 = max1≤j≤n

m∑i=1

|aij |

und (Maximale Zeilensumme)

‖A‖∞ = max1≤i≤m

n∑j=1

|aij |.

Die 2-Norm von A kann berechnet werdenals der gröÿte singuläre Wert von A, al-so max(svd(A)). Matrizennormen werdenebenfalls mit der Funktion norm berech-net. Für Matrizen funktioniert der Aufrufnorm(A,p) mit p=1,2,inf und p='fro',wobei

‖A‖F =( m∑

i=1

n∑j=1

|aij |2)1/2

die Frobenius-Norm ist. Beachten Sie: DieFunktion norm ist ein Beispiel einer Funk-tion mit einem Argument, das einen un-terschiedlichen Datentyp haben kann; hierdouble und char (String). Hier noch einBeispiel:

116 Copyright c© G. Gramlich

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

>> [norm(A,1) norm(A,2) ...

norm(A,inf) norm(A,'fro')]

ans =

6.0000 5.4650 7.0000

5.4772

Ist das Berechnen der Matrixnorm für p = 2zu aufwendig, so kann mit der Funktionnormest ein Näherungswert berechnet wer-den. Die Tabelle 29 zeigt die Matrizennor-

Matlab Bedeutungnorm(A)=norm(A,2) A2

norm(A,1) A1

norm(A,inf) A∞norm(A,'fro') AF

Tabelle 29: Matrizennormen

men übersichtlich.

Aufgabe 96 (Matrizennormen)Berechnen Sie die 1-, 2-,∞- und Frobeni-us-Norm für die Matrizen

A =[

0 1−1 0

], B =

[1 22 2

]und

C =[

1 41 2

].

Lösung: Es ist

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

>> [norm(A,1) norm(A,2) ...

norm(A,inf) norm(A,'fro')]

ans =

1.0000 1.0000 1.0000

1.4142

>> B = [1 2; 2 2];

>> [norm(B,1) norm(B,2) ...

norm(B,inf) norm(B,'fro')]

ans =

4.0000 3.5616 4.0000

3.6056

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

>> [norm(C,1) norm(C,2) ...

norm(C,inf) norm(C,'fro')]

ans =

6.0000 4.6708 5.0000

4.6904

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

49.2 Konditionszahlen

Für eine reguläre Matrix A ist

κ(A) =‖A‖‖A−1‖

≥ 1

die Konditionszahl bezüglich der Inversion.Die Zahl misst die Sensitivität der Lösungeines linearen Gleichungssystems Ax =b bezüglich Störungen in A und b. Mansagt, dass A gut oder schlecht konditioniertist, wenn κ(A) klein bzw. groÿ ist, wobei�klein� und �groÿ� vom Kontext abhängigsind. Die Kondition kann mit der Funktioncond berechnet werden, wobei die Normenp=1,2,inf,'fro' unterstützt werden. Fürp=2 sind auch rechteckige Matrizen erlaubt,wobei dann die Konditionszahl durch

κ2(A) =‖A‖2‖A+‖2

117 Copyright c© G. Gramlich

de�niert ist, wobei A+ die Pseudoinversevon A ist.

Die Konditionszahl auszurechnen ist auf-wendig. Daher gibt es in Matlab zweiFunktionen, die die Konditionszahl nähe-rungsweise berechnen: rcond und condest,siehe doc rcond und doc condest.

49.3 Lineare Gleichungssysteme (4)

Über lineare Gleichungssysteme haben wirin den vorhergehenden Abschnitten schonviel gesagt. Hier soll noch ergänzt werden,dass der \-Operator (Backslash-Operator)auch verwendet werden kann, um Matrizen-gleichungen AX = B zu lösen. Hier ist dieRechte Seite B eine Matrix mit p Spalten.In diesem Fall löst Matlab AX(:, j) =B(:, j) für j = 1 : p.

49.4 Inverse

Die Inverse einer (n, n)-Matrix ist die Ma-trix X, die den Gleichungen AX = XA =En genügt. Hierbei ist En die (n, n)-Einheitsmatrix, die inMatlab mit eye(n)erzeugt werden kann. Eine Matrix, die kei-ne Inverse hat, heiÿt singulär. Eine singu-läre Matrix kann auf mehrere Arten cha-rakterisiert werden: Die Determinante istNull oder es gibt einen Vektor v 6= o mitAv = o.

Die Inverse einer quadratischen Matrixkann mit der Funktion inv (auch symbo-lisch) berechnet werden. Zum Beispiel

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

A =

1 1 1

1 2 3

1 3 6

X =

3 -3 1

-3 5 -2

1 -2 1

>> norm(A*X-eye(3))

ans =

0

Die Inverse wird mit Hilfe der LU-Faktorisierung mit partieller Pivotisierungberechnet. Gleichzeit wird mit rcond derKehrwert der Konditionszahl berechnet.Wird festgestellt, dass A (exakt) singuläroder die rcond kleiner als eps ist, so wirdeine Warnung ausgegeben.

Beachten Sie: Die Inverse einer Matrix mussexplizit in der Praxis nur sehr selten be-rechnet werden. Zum Beispiel ist das Be-rechnen eines quadratischen lineare Glei-chungssystems Ax = b mit A\b zwei bisdreimal schneller als durch inv(A)*b. Ge-wöhnlich ist es möglich, das Berechnen derInversen einer Matrix in Termen eines li-nearen Gleichungssystems auszudrücken, sodass die explizite Inversion vermieden wer-den kann.

49.5 Determinante

Die Determinante einer quadratischen Ma-trix wird mit der Funktion det (auch sym-bolisch) berechnet. Ihre Berechnung ge-schieht über die LU-Faktoren. Für Beispiele

118 Copyright c© G. Gramlich

siehe Abschnitt 48.5.

49.6 Pseudoinverse

Die Pseudoinverse ist die Verallgemeine-rung der Inversen für Matrizen A, die sin-gulär und nicht quadratisch sind ([5]). Diemathematische Notation ist A+. Sie wirdin Matlab mit pinv berechnet. Die Pseu-doinverse wird mit Hilfe der Singulärwert-zerlegung berechnet. Beispiele ([5]):

>> A = [2 0; 0 0];

>> pinv(A)

ans =

0.5000 0

0 0

>> B = [2; 4];

>> pinv(B)

ans =

0.1000 0.2000

>> C = [2 0; 0 3; 0 0];

>> pinv(C)

ans =

0.5000 0 0

0 0.3333 0

49.7 LU-Faktorisierung

Eine LU-Faktorisierung einer quadrati-schen Matrix A ist eine Faktorisierungder Form A = LU , wobei L eine unte-re Dreicksmatrix mit Einsdiagonale und Ueine obere Dreicksmatrix sind. Nicht jedeMatrix kann in dieser Form faktorisiert wer-den, lässt man aber Zeilenvertauschungenzu, so ist dies immer möglich und solch eine

Faktorisierung existiert immer. Die Funk-tion lu berechnet eine LU-Faktorisierungmit teilweiser Pivotisierung PA = LU ,wobei P eine Permutationsmatrix ist. DerAufruf [L,U,P] = lu(A) gibt die Dreiecks-matrizen und die Permutationsmatrix zu-rück. Mit zwei Ausgabeargumenten, [L,U]= lu(A) wird U und L = PTL zurück-gegeben, das heiÿt L ist eine Dreiecksma-trix bis auf Zeilenvertauschungen. Wir ge-ben ein Beispiel.

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

[L,U,P] = lu(A)

L =

1.0000 0 0

-0.5000 1.0000 0

0.5000 1.0000 1.0000

U =

-2.0000 -5.0000 3.0000

0 -0.5000 0.5000

0 0 -2.0000

P =

0 1 0

1 0 0

0 0 1

>> [L,U] = lu(A)

L =

-0.5000 1.0000 0

1.0000 0 0

0.5000 1.0000 1.0000

U =

-2.0000 -5.0000 3.0000

0 -0.5000 0.5000

0 0 -2.0000

Die lu Funktion arbeitet auch für rechtecki-ge Matrizen. Ist A eine (m,n)-Matrix, dann

119 Copyright c© G. Gramlich

ist L eine (m,n)- und U eine (n, n)-Matrix,falls m ≥ n ist und L eine (n, n)- und Ueine (m,n)-Matrix, wenn m < n gilt.

Das Lösen eines quadratischen linearenGleichungssystems Ax = b durch x=A

ist

gleichbedeutend damit, von A eine LU-Faktorisierung zu bilden, und dann mit denFaktoren zu lösen:

[L,U] = lu(A);

x = U\(L\b);

Hier ist ein Beispiel.

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

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

>> x = A\b

x =

1.0000

2.0000

3.0000

>> [L,U] = lu(A);

>> x = U\(L\b)

x =

1.0000

2.0000

3.0000

Der Vorteil dieser Vorgehensweise ist, dassman sich Rechnungen einspart, wenn einGleichungssystem mit mehreren rechtenSeiten oder eine Matrix gleichung vorliegt,weil dann die Faktorisierung nur einmal ge-macht werden muss.

49.8 Cholesky-Faktorisierung

Jede positiv de�nite Hermitesche Matrixhat eine Cholesky-Zerlegung A = R∗R,

wobei R eine obere Dreiecksmatrix mit re-eller positiver Diagonale ist. Die Chol-seky-Faktorisierung wird mit chol berech-net: R=chol(A). Hier ein Beispiel.

>> A = pascal(3)

A =

1 1 1

1 2 3

1 3 6

>> R = chol(A)

R =

1 1 1

0 1 2

0 0 1

Und die Probe:

>> R'*R

ans =

1 1 1

1 2 3

1 3 6

Beachten Sie, dass chol nur die obereDreiecksmatrix einschlieÿlich der Diagona-len von A zur Faktorisierung verwendet. Istdie Matrix A nicht positiv de�nit, so erhältman eine Fehlermeldung. Tatsächlich ist dieFunktion chol gegeignet um zu überprüfen,ob eine Matrix positiv de�nit ist. Ist nachdem Aufruf [R,p]=chol(A) p gleich Null,so ist A positiv de�nit. Siehe doc chol fürweitere Detail zum Ausgabeargument p.

49.9 QR-Faktorisierung

Eine QR-Faktorisierung einer (m,n)-Matrix A ist eine Faktorisierung der Form

120 Copyright c© G. Gramlich

A = QR, wobei Q eine (m,m)-unitäreund R eine (m,n)- obere Dreicksmatrixist. Diese Faktorisierung wird zum Lösenlinearer Ausgleichsaufgaben und zur Kon-struktion einer orthonormalen Basisfürden Spaltenraum von A eingesetzt. DieAnweisung [Q,R] = qr(A) berechnet dieFaktorisierung. Ist m > n, so gibt dieAnweisung [Q,R] = qr(A,0) �wirtschaftli-chere� Matrizen zurück. Man spricht auchvon reduzierter QR-Zerlegung. Die MatrixQ hat nur n Spalten und die Matrix Rhat n Zeilen und n Spalten. Wir geben einBeispiel.

>> A = [1 0 0; 1 1 0; 1 1 1];

>> [Q,R] = qr(A)

Q =

-0.5774 0.8165 -0.0000

-0.5774 -0.4082 -0.7071

-0.5774 -0.4082 0.7071

R =

-1.7321 -1.1547 -0.5774

0 -0.8165 -0.4082

0 0 0.7071

Hier noch die Probe:

>> Q*R

ans =

1.0000 0.0000 -0.0000

1.0000 1.0000 0.0000

1.0000 1.0000 1.0000

Aufgabe 97 (QR-Faktorisierung)Berechnen Sie von der Matrix

A =

1 −1 11 0 01 1 11 2 4

die QR- und die reduzierte QR-Faktorisierung.Lösung: Es ist

>> [Q,R] = qr(A)

Q =

-0.5000 0.6708 0.5000

-0.5000 0.2236 -0.5000

-0.5000 -0.2236 -0.5000

-0.5000 -0.6708 0.5000

0.2236

-0.6708

0.6708

-0.2236

R =

-2.0000 -1.0000 -3.0000

0 -2.2361 -2.2361

0 0 2.0000

0 0 0

und

>> [Q,R] = qr(A,0)

Q =

-0.5000 0.6708 0.5000

-0.5000 0.2236 -0.5000

-0.5000 -0.2236 -0.5000

-0.5000 -0.6708 0.5000

R =

-2.0000 -1.0000 -3.0000

0 -2.2361 -2.2361

121 Copyright c© G. Gramlich

0 0 2.0000

In der orthogonalen Matrix Q fehlt nun dieletzte Spalte und in der Dreiecksmatrix Rdie letzte Nullzeile. © . . . . . . . . . . . . . . . . . . . .©

49.10 Singulärwertzerlegung

Die Singulärwertzerlegung (Singular ValueDecomposition, kurz: SVD) einer (m,n)-Matrix A hat die Form A = USV ∗, wobeiU eine unitäre (m,m)-Matrix, S eine reel-le (m,n)-Diagonalmatrix und V eine uni-täre (n, n)-Matrix ist. Die Diagonalelemen-te von S sind die singulären Werte si mits1 ≥ s2 ≥ · · · ≥ smin{m,n} ≥ 0. Die An-weisung [U,S,V] = svd(A) berechnet eineSingulärwertzerlegung. Gibt man nur eineAusgabevariable an, so ist dies der Vektor,der aus den singulären Wert besteht. DieAnweisung [U,S,V] = svd(A,0) liefert ei-ne reduzierte Singulärwertzerlegung (eco-nomy size), wenn m > n ist. Dann ist U ei-ne (m,n)-Matrix mit orthonormalen Spal-ten und S hat die Gröÿe (n, n). Die Anwei-sung [U,S,V] = svd(A,'econ') liefert dasgleiche Ergebnis wie [U,S,V] = svd(A,0),wenn m ≥ n ist, ist aber m < n, so hat Vdie Gröÿe (n, m) mit orthonormalen Spal-ten, und S ist quadratisch mit Ordnung m.Hier ist ein Beispiel [7]:

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

>> [U,S,V] = svd(A,'econ')

U =

-0.3583 -0.9336

-0.9336 0.3583

S =

5.7839 0

0 2.5586

V =

-0.7076 0.1952

-0.4467 -0.4497

-0.5462 0.0552

-0.0375 0.8698

Die Funktionen rank, null und orth be-rechnen den Rang, eine orthonormale Ba-sis für den Nullraum und eine orthonormaleBasis für den Spaltenraum der Argument-matrix. Alle drei Funktionen basieren aufder Singulärwertzerlegung, wobei Ein To-leranzwert proportional zu eps verwendetwird, um zu entscheiden, wann ein singulä-rer Wert als Null betrachtet werden kann.Wir geben ein Beispiel.

>> A = [1 -1 1; 1 0 0; 1 1 1;...

1 2 4];

>> [U,S,V] = svd(A)

U =

-0.1517 0.8959 -0.3525

-0.0612 0.4013 0.6207

-0.3215 0.0406 0.6671

-0.9327 -0.1861 -0.2134

0.2236

-0.6708

0.6708

-0.2236

S =

4.8956 0 0

0 1.6942 0

0 0 1.0784

0 0 0

V =

122 Copyright c© G. Gramlich

-0.2997 0.6798 0.6693

-0.4157 -0.7245 0.5498

-0.8587 0.1135 -0.4997

>> rank(A)

ans =

3

>> null(A)

ans =

Empty matrix: 3-by-0

>> orth(A)

ans =

-0.1517 0.8959 -0.3525

-0.0612 0.4013 0.6207

-0.3215 0.0406 0.6671

-0.9327 -0.1861 -0.2134

Aufgabe 98 (SVD [5])Berechnen Sie eine Singulärwertzerlegungder Matrix

A =

1 11 10 0

.

Lösung: Es ist

>> [U,S,V] = svd(A)

U =

-0.7071 -0.7071 0

-0.7071 0.7071 0

0 0 1.0000

S =

2.0000 0

0 0.0000

0 0

V =

-0.7071 0.7071

-0.7071 -0.7071

Man erkennt, dass die Matrix A den Rang1 hat; die singulären Werte sind s11 = 2und s22 = 0. © . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Die verallgemeinerte Singulärwertzerlegung(Generalized Singular Value Decompositi-on, kurz: GSVD) einer (m, p)-Matrix A undeiner (n, p)-Matrix B hat die Form A =UCX∗, B = V SX∗, C∗C + S∗S = E,wobei U und V unitär sind, X regulär,und C und D sind reelle Diagonalmatri-zen mit nichtnegativen Diagonalelementen.Die Zahlen cii/sii sind die verallgemeiner-ten singulären Werte. Diese Zerlegung wirdinMatlab wie folgt erreicht: [U,V,X,C.S]= gsvd(A,B). Siehe doc gsvd (help gsvd)für weitere Details.

49.11 Eigensysteme

Die e�ziente numerische Berechnung vonEigensystemen (Eigenwerte und Eigenvek-toren) ist ein komplexer Akt. DieMatlab-Funktion eig vereinfacht diesen Lösungs-prozess, indem sie die Anzahl der Einga-bematrizen, sowie deren Struktur und dieAusgabe berücksichtigt. Sie unterscheidetintern zwischen 16 verschiedenen Algorith-men:

• Standardproblem (eig(A)) oder verallge-meinertes Problem (eig(A,B)),

• reelle oder komplexe Matrizen A und B,

• symmetrische/Hermitesche Matrizen A

und B mit B positiv de�nit oder nicht,

• sind Eigenvektoren gewünscht odernicht.

123 Copyright c© G. Gramlich

Beispiele �ndet man in Abschnitt 48.6.

49.12 Iterative Methoden

In diesem Abschnitt besprechen wir itera-tive Methoden. Solche Verfahren werdenhauptsächlich bei groÿen und möglicherwei-se dünn besetzten (sparse) Problem einge-setzt; also immer dann, wenn direkte Ver-fahren zu ine�zient oder gar unmöglichanwendbar sind. Dünn besetzte Matrizenbehandeln wir in Abschnitt 71. Es gibtin Matlab iterative Methoden für lineareGleichungssysteme und iterative Verfahrenfür Eigensysteme.

49.12.1 Iterative Methoden für lineareGleichungssysteme

Es stehen mehrere Funktionen zur Verfü-gung, um quadratische lineare Gleichungs-systeme Ax = b iterativ zu lösen, siehe Ta-belle 30.

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

Tabelle 30: Iterative Methoden

Bis auf die Funktion minres, symmlq und

pcg sind alle Funktionen auf beliebigeMatrizen A anwendbar. Für minres undsymmlq muss A Hermitesch und für pcg

muss A Hermitesch und positiv de�nitsein. Alle Methoden verwenden Matrix-Vektor Produkte Ax bzw. A∗x und be-nötigen die Matrixelemente von A nichtexplizit. Bis auf gemres (siehe unten) ha-ben alle Funktionen den gleichen Funk-tionsaufruf. Die einfachste Form ist x =

solver(B,b), wobei solver eine Funkti-on aus Tabelle 30 ist. Alternativ kann manauf x = solver(B,b,tol) mit einem Kon-vergenztoleranzwert tol, der standardmä-ÿig auf 10−6 gesetzt ist. Konvergenz trittein, wenn norm(b-A*x) <= tol*norm(b)

erfüllt ist. Das Argument A kann eine volloder dünn besetzt (sparse) Matrix sein,oder eine Funktion, die x als Eingabe undA*x als Ausgabe hat.

Iterative Methoden benötigen gewöhnlicheine Vorkonditionierung, wenn sie e�zi-ent sein sollen. Einen guten Vorkonditionie-rer auszuwählen, ist im Allgemeinen nichtleicht und erfordert meist Kenntnisse vonder Anwendung, die dahinter steckt. DieFunktionen luinc und cholinc berech-nen unvollständige Faktorisierungen, die ei-ne Möglichkeit darstellen, Vorkonditionie-rer zu konstruieren; siehe doc luinc, doccholinc und doc bicg. Für Hintergrund-informationen zu iterativen Methoden derLinearen Algebra siehe [8], [10], [11], [18]und [22].

Um den Umgang mit iterativen Problem-lösern zu zeigen, betrachten wir ein Bei-spiel, wo die Funktion pcg Verwendung �n-

124 Copyright c© G. Gramlich

det. Die Funktion pcg realisiert eine kon-jugierte Gradientenmethode mit Vorkondi-tionierung. Für A verwenden wir eine posi-tiv de�nite symmetrische Matrix, die Wa-then-Matrix aus der Highamschen Matri-zensammlung. Es handelt sich um eine zu-fällige dünn besetzte �nite Elementematrix,siehe doc gallery.

>> A = gallery('wathen',12,12);

>> n = length(A)

n =

481

>> b = ones(n,1);

>> x = pcg(A,b);

pcg stopped at iteration 20 without

converging to the desired tolerance

1e-006 because the maximum number

of iterations was reached.

The iterate returned (number 19)

has relative residual 0.12

>> x = pcg(A,b,1e-6,100);

pcg converged at iteration 92 to a

solution with relative residual

9.8e-007

Im ersten Aufruf haben wir nur die System-matrix A und die rechte Seite b eingegebenund gesehen, dass die konjugierte Gradien-tenmethode nicht konvergiert mit standard-mäÿig eingestellten 20 Iterationen und demstandard Abbruchkriterium von 10−6. Einerneuerte Versuch führt nach 92 Iterationenzum Erfolg, wobei wir die Iterationsgren-ze auf 100 gesetzt haben. Der Toleanzwert10−6 wurde erfüllt. Für diese Matrix kannman zeigen, dass M = diag(diag(A)) einguter Vorkonditionierer ist. Übergeben wir

der Funktion pcg diese Matrix als fünftesArgument, so erreichen wir eine e�zienteReduktion in der Anzahl der Iterationen:

>> [x,flag,relres,iter] = pcg(A,...

b,1e-6,100,diag(diag(A)));

>> flag, relres, iter

flag =

0

relres =

8.2661e-007

iter =

28

Beachten Sie, dass keine Bildschirmausga-be ausgegeben wird, wenn wenn man mehrals ein Ausgabeargument im Funktionsauf-ruf angibt. Der Wert 0 der Variablen flag

gibt an, dass das Verfahren konvergiert istmit einem relativen Residuum relres =

norm(b-A*x)/nomrm(b) nach iter Itera-tionen.

Die anderen Funktionen der Tabelle 30 wer-den (bis auf gmres) genauso aufgerufen undgehandelt.

Mit doc sparfun (help sparfun) bekom-men Sie eine komplette Liste über alleFunktionen, die bezüglich Sparserechnun-gen interessant sind, so auch die Funktionenfür iterative Methoden von linearen Glei-chungssystemen.

49.12.2 Iterative Methoden fürEigensysteme

Die Funktion eigs berechnet auswählba-re Eigenwerte und Eigenvektoren des Stan-dardeigenwertproblems Ax = λx oder der

125 Copyright c© G. Gramlich

verallgemeinerten Eigenwertaufgabe Ax =λBx, wobei B eine reelle symmetrischepositiv de�nite Matrix ist. Im Gegensatzdazu berechnet die Funktion eig immerdas gesamte Eigensystem, also alle Eigen-werte und Eigenvektoren. Wie die itera-tiven Löser von linearen Gleichungssyste-men, so benötigt eigs nur Matrix-VektorProdukte, das heiÿt A kann explizit oderals eine Funktion, die Matrix-Vektor aus-führt, angegeben werden. In der einfachstenForm kann eigs wie eig aufgerufen wer-den: [V,D] = eigs(A). Dann werden diesechs gröÿten Eigenwerte und dazugehörigeEigenvektoren berechnet. Siehe doc eigs

für weitere Details. Diese Funktion ist ei-ne Schnittstelle zum ARPACK Paket, sie-he [13]. Als Beispiel berechnen wir nun diefünf gröÿten Eigenwerte einer dünn besetz-ten symmetrischen Matrix. Zum Vergleichverwenden wir die Funktion eig, welche er-wartet, dass die Matrix im Speichermodusfull vorliegt.

>> A = delsq(numgrid('N',40));

>> n = length(A)

n =

1444

>> nnz(A)/n^2 %Anteil nicht Null.

ans =

0.0034

>> tic, e_alle = eig(full(A)); toc

Elapsed time is 10.600102 seconds.

>> e_alle(n:-1:n-4)

ans =

7.9870

7.9676

7.9676

7.9482

7.9354

>> options.disp = 0; %Keine Ausgabe.

>> tic, e = eigs(A,5,'LA',options);

>> toc %LA = Largest Algebraic

Elapsed time is 1.676173 seconds.

>> e

e =

7.9870

7.9676

7.9676

7.9482

7.9354

Mit den Funktion tic und toc kann manZeitmessungen durchführen. Es ist klar,dass eigs viel schneller ist als eig und auchweniger Speicherplatz benötigt.

49.12.3 Iterative Methoden fürSingulärwertsysteme

Die Funktion, um ein paar singuläre Werteund singuläre Vektoren einer Matrix A ∈Cm×n iterativ zu berechnen, heiÿt: sdvs.Die Funktion svds verwendet dabei dieFunktion eigs, indem eigs auf die Her-mitesche Matrix[

Om AA∗ On

]angewendet wird.

49.13 Funktionen einer Matrix

Mit der Funktion expm kann man für einequadratische Matrix A die Matrixexponen-

126 Copyright c© G. Gramlich

tialfunktion eA, die durch

eA = E + A +12!

A2 +13!

A3 + · · ·

de�niert ist, berechnen. Wir geben ein Bei-spiel, siehe Beispiel 3.5 in [5].

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

>> expm(A)

ans =

-5.3074 12.6965

-25.3930 32.7820

Weitere Funktionen für Matrixfunktionen�nden Sie mit help matfun.

Aufgabe 99 (Matrixfunktionen)In dieser Aufgabe geht es um eA, wobei Aeine quadratische Matrix ist.

(a) Berechnen Sie eA numerisch und sym-bolisch für

A =[

0 −11 0

].

Vergleichen Sie die Resultate mitexp(A) bzw. exp(sym(A)). ErklärenSie den Unterschied!

(b) Berechnen Sie nun symbolisch eAt, t ∈R, und deuten Sie das Ergebnis.

(c) Ist X eine quadratische Matrix, danngilt

deXt

dt= XeXt = eXtX

und ∫eXtXdt = eXt

Bestätigen Sie diese Aussagen symbo-lisch.

Lösung:

(a) Es ist

>> A = [0 -1; 1 0]; expm(A)

ans =

0.5403 -0.8415

0.8415 0.5403

>> expm(sym(A))

ans =

[ cos(1), -sin(1)]

[ sin(1), cos(1)]

Dagegen ist aber

>> exp(A)

ans =

1.0000 0.3679

2.7183 1.0000

und

>> exp(sym(A))

ans =

[ 1, exp(-1)]

[ exp(1), 1]

In den letzten beiden Fällen werdenvon den Matrixelementen die Exponen-tialwerte ausgerechnet.

(b) Es ist mit A wie in (a) und

>> syms t

dann

>> expm(A*t)

ans =

[ cos(t), -sin(t)]

[ sin(t), cos(t)]

(c) Nach der Deklaration

127 Copyright c© G. Gramlich

>> syms X t

kann man die Aussagen durch

>> diff(expm(X*t))

ans =

exp(X*t)*X

und

>> int(expm(X*t)*X)

ans =

exp(X*t)

bestätigen.

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

Aufgabe 100 (Matrixfunktionen)Berechnen Sie die Matrix eAt, t ∈ R fürfolgenden Matrizen:

(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

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

50 Mehr zu Funktionen

Funktionen spielen in Matlab eine sehrgroÿe Rolle. Seit Matlab 7 ergaben sichdiesbezüglich einige Neuerungen. Wir wol-len deshalb in diesem Abschnitt mehr zuMatlab-Funktionen sagen. Eine erste Ein-führung �ndet man in Abschnitt 44.

50.1 Function-Handles

In viele Anwendungen muss man ei-ner Funktion als Argument eine ande-re Funktion übergeben. In Abschnitt 39haben wir Beispiele betrachtet. Gewöhn-lich macht man dies mit einem Function-Handle. Ein Function-Handle ist ein Mat-lab-Datentyp, der alle notwendigen Infor-mationen enthält, um eine Funktion auszu-werten. Ein Function-Handle wird erzeugt,indem man das @-Zeichen vor einen Funk-tionsnamen stellt.

Wir zeigen die Funktionsweise mit derFunktion ezplot, die den Graph einer Ma-thematischen Funktion f standardmäÿigüber dem Intervall [−2π, 2π] zeichnet. Ist

128 Copyright c© G. Gramlich

nun zum Beispiel fun eine m-Function, sogeschrieben wie es die Funktion ezplot ver-langt, dann funktioniert

ezplot(@fun)

fun kann aber auch eineMatlab-Funktionsein, wie zum Beispiel sin, cos oder exp.Der Aufruf

ezplot(@cos)

zeichnet die Kosinusfunktion im Intervall[−2π, 2π].

Function-Handles wurden in Matlab 6eingeführt und ersetzen die frühere Syntax,nach der ein Funktionsname als eine Zei-chenkette (String) übergeben werden sollte,also zum Beispiel ezplot('cos').

Die Idee des nächsten Beispiels ist es, denDi�erenzenquotient

f(x + h)− f(x)h

in einer Matlab-Funktion zu realisieren,um diesen dann für �kleines� h als Nähe-rung für den Di�erenzialquotient f ′(x) zuberechnen. Die m-Function

function y = Differenzenq(f,x,h)

if nargin < 3

h = sqrt(eps);

end

y = (f(x+h) - f(x))/h;

ist eine Implementierung des Di�erenzen-quotienten von f an der Stelle x. Gebenwir nun

>> Differenzenq(@sqrt,0.3)

ans =

0.9129

ein, so erhalten wir 0.9129 als Näherung fürf ′(0.3), wobei hier f(x) =

√x ist. Stan-

dardmäÿig haben wir h ≈ 1.5 · 10−8 ge-wählt. Soll h gröÿer oder kleiner sein, sokann dies im dritten Argument eingestelltwerden. Dieses Beispiel zeigt, die Funkti-onsweise eines Function-Handles. Wir über-geben den Function-Handle als Argumentund diese wird an den entsprechenden Stel-len ausgewertet. Diese direkte Auswertungist neu inMatlab 7. In früheren Versionenmusste hier mit der Funktion feval gear-beitet werden.

Weitere Informationen �nden Sie mit doc

function_handle.

50.2 Anonymous Functions

Anonymous Functions wurde in Matlab7 eingeführt. Anonymous Functions stelleneinen Weg dar, eine �one line�-Funktion zuerzeugen, ohne einen m-File schreiben zumüssen. In Abschnitt 39 haben wir dies be-reits zum ersten Mal gezeigt.

>> f = @(x) exp(x)-2

>> f(1)

ans =

0.7183

Hier ist f ein Function-Handle zu der An-onymous Function. Dem @-Zeichen, welchesein Function-Handle konstruiert, folgt inrunden Klammern eine Liste von Einga-beargumenten und dannach folgt eine ein-fache Matlab-Anweisung. Als Function-

129 Copyright c© G. Gramlich

Handle kann die Anonymous Function danneiner anderen Funktion übergeben werden.

Der Ausdruck einer Anonymous Functionkann auch Variable haben, die nicht in derArgumentenliste vorkommen. So de�niertdie Anweisung

>> a = 2; b = 3;

>> g = @(x,y) a*x^2+b*exp(x);

den Mathematischen Funktionstermg(x, y) = ax2 + bex mit a = 2 und b = 3.

Die Anweisungen und Ausgaben

>> g(3,4)

ans =

78.2566

>> a = 10;

>> g(3,4)

ans =

78.2566

zeigen, dass die Variablenwerte so lange gül-tig bleiben, bis man die Anonymous Func-tion neu konstruiert.

Aufgabe 101 (Anonymous Functions)Die Dichtefunktion f einer normalverteiltenZufallsvariablen ist die parameterabhängigeFunktion

f(x, µ, σ) =1

σ√

2πe−

(x−µ)2

2σ2 , x ∈ R

wobei µ und σ > 0 reelle Parameter(Erwartungwert und Standardabweichung)sind. Diese Funktion ist in der Statistics-Toolbox unter dem Namen normpdf im-plementiert. Zeichnen Sie die Graphen derFunktionen f(·, 0, 1) und f(·, 0, 2) im Inter-

vall [−4, 4].Lösung: Die Anweisungen

mu = 0; sigma = 1;

f = @(x) normpdf(x,mu,sigma);

fplot(f,[-4,4]), hold on,

sigma = 2;

f = @(x) normpdf(x,mu,sigma);

fplot(f,[-4,4]),

erzeugen die Abbildung 44. © . . . . . . . . . . . ©

−4 −2 0 2 40

0.1

0.2

0.3

0.4

µ = 0σ = 2

µ = 0σ = 1

Abbildung 44: Normalverteilungen

50.3 Subfunctions

Eine Function m-File kann weitere Funktio-nen beinhalten, die man subfunctions (Un-terfunktionen) nennt. Diese können in ei-nem m-File in irgendeiner Reihenfolge nachder Hauptfunktion (main function, primaryfunction) stehen. Subfunctions sind nur derHauptfunktion und den anderen im m-Filebe�ndlichen Subfunctions sichtbar.

Wie Subfunctions verwendet werden kön-nen, zeigen wir in den folgenden Abschnit-ten, siehe zum Beispiel 61.2.

130 Copyright c© G. Gramlich

50.4 Nested Functions

Man kann eine und mehr Funktionen in ei-ner Funktion schachteln. Es muss darauf ge-achtet werden, dass die end-Anweisung amEnde der eingebauten und der Hauptfunk-tion steht. Es gehört zum guten Stil, dieeingebaute Funktion einzurücken.

Nested Functions haben zwei Haupteigen-schaften:

• Eine Nested Function hat Zugri� zumWorkspace aller Funktionen in welche sieeingebaut ist.

• Ein Function-Handle einer Nested Func-tion speichert alle Informationen, um zudieser Zugang zu haben, und darüberhin-aus alle Variablen der Funktionen, die dieNested Funktion beinhalten.

Ein Beispiel einer Nested Function zeigt dasfolgende Listing:

function RationalBsp(x)

a = 1; b = 2; c = 1; d = -1;

Differenzenq(@Rational,x)

function r = Rational(x)

r = (a+b*x)/(c+d*x);

end

end

Das Beispiel zeigt, wie eine parameterab-hängige Funktion einer anderen Funkti-on übergeben werden kann. Die FunktionRational ist parameterabhängig und wirdder Funktion Differenzenq übergeben. DieVariablen a, b, c und d des Workspace derHauptfunktion RationalBsp sind der Funk-tion Rational bekannt und die Werte wer-

den der Funktion Differenzenq ordungs-gemäÿ weitergereicht:

>> RationalBsp(2)

ans =

3.0000

Das Ergebnis ist korrekt, denn für den ge-brochen rationalen Funktionsterm f(x) =(1 + 2x)/(1 − x) gilt f ′(x) = 3/(1 − x)2,also f ′(2) = 3.

Nested Functions sind neu seit Matlab 7.

50.5 Beispielhafte Funktionen

Der wahrscheinlich beste Weg gute Mat-lab-Funktionen zu schreiben, besteht dar-in, sich Beispiele von vorbildlich geschrie-benen Funktionen anzusehen und sich dar-an zu orientieren. Solche Funktionen wer-den natürlich mit Matlab mitgeliefert.Schauen Sie sich diese an! Mit type

<Funktionsname> bekommen Sie ein Lis-ting und mit edit <Funktionsname> kön-nen Sie die Funktion in den Matlab-Editorladen. Hier sind ein paar Beispiele:

• cov: Verwendung von varargin

• var: Überprüfung der Argumente

• hadamard: Aufbau einer Matrix

• why: Subfunctions

• fminbnd: Schleifenkonstruktionen

• quad, quadl: Rekursive Funktionen

• gsvd: Subfunctions

• ode45: Verwendung von varargin undvarargout

131 Copyright c© G. Gramlich

51 Lineare Ausgleichsaufgaben

Lineare Ausgleichsaufgaben können mitMatlab auf mehrere Arten gelöst wer-den. Zum Einem ist da der \-Operator(Backslash-Operator), siehe Abschnitt 48.4und Abschnitt 48.9.2.

Lineare Ausgleichsprobleme mit polyno-mialer Modellfunktion können alternativmit der Funktion polyfit und interaktivaus jeder Figure unter Tools Basic Fittinggelöst werden. Siehe auch Abschnitt 54.

Nichtlineare Ausgleichsaufgaben werden inAbschnitt 69 besprochen.

52 Polynome

Polynome haben in der Mathematik ei-ne groÿe Bedeutung. Im wissenschaftlichenRechnen benutzt man sie, um komplizier-tere Funktionen durch einfachere anzunä-hern. Polynome lassen sich einfach di�eren-zieren und integrieren, und man weiÿ, wieman numerische Näherungen für die Null-stellen �ndet. Numerische Schwierigkeitenkönnen auftreten, wenn man mit Polyno-men höherer Ordnung arbeitet.

InMatlab gibt es eine Reihe von Funktio-nen, die es ermöglichen, e�zient mit Po-lynomen zu arbeiten. Zum symbolischenRechnen mit Polynomen siehe Abschnitt66.13.

52.1 Darstellung von Polynomen

Polynome werden in Matlab durch einenZeilenvektor repräsentiert, wobei die Ko-ordinaten die Koe�zienten des Polynomsdarstellen. Die Reihenfolge ist absteigendfestgelegt, das heiÿt die erste Koordinatedes Vektors ist der Koe�zient des Monomshöchster Ordnung und die letzte Kooor-dinate ist der Koe�zient des konstantenTerms des Polynoms. Zum Beispiel reprä-sentiert der Zeilenvektor [1 -8 2 1 12]

das Polynom p1(x) = x4−8x3+2x2+x−12;[2 0 1] stellt das Polynom p2(x) = 2x2+1dar. Beachten Sie, dass Nullkoe�zientenmitgeführt werden müssen.

>> p1 = [1 -8 2 1 -12]

p1 =

1 -8 2 1 -12

>> p2 = [2 0 1]

p2 =

2 0 1

52.2 Nullstellen von Polynomen

Ist ein Polynom als Zeilenvektor dargestellt,so erlaubt die Funktion roots, die Null-stellen des Polynoms zu berechnen, dasheiÿt diejenigen Werte zu bestimmen, fürdie das Polynom den Wert Null annimmt.roots(p2) berechnet die Nullstellen desPolynoms 2x2+1, gibt sie als Spaltenvektorzurück und weist diese der Variablen r zu.

>> r = roots(p2)

r =

0 + 0.7071i

132 Copyright c© G. Gramlich

0 - 0.7071i

Kennt man die Nullstellen eines Polynoms,nicht aber das Polynom selbst, so kann manmit der Funktion poly das Polynom kon-struieren. Da ein Polynom aber durch seineNullstellen nur bis auf ein Vielfaches ein-deutig bestimmt ist, wähltMatlab das Po-lynom mit Koe�zient 1 im höchsten Mo-nom.poly(r) berechnet aus den Nullstellen in r

das Polynom x2 + 1/2.

>> poly(r)

ans =

1.0000 0 0.5000

Aufgabe 102 (Polynomfunktionen)Bestimmen Sie die reellen Nullstellen fol-gender Polynome. Zeichnen Sie diese Poly-nome dann in einem geeigneten Intervall,um diese Nullstellen geometrisch überprü-fen zu können (x ∈ R).

(a) g1(x) = x3 − 5x2 + 2x + 8

(b) g2(x) = x2 + 4x + 4

(c) g3(x) = x5 − 3x4 + 4x3 − 4x + 4

Lösung:

>> roots([1 -5 2 8])

ans =

4.0000

2.0000

-1.0000

>> roots([1 4 4])

ans =

-2

-2

>> roots([1 -3 4 0 -4 4])

ans =

-1.0000

1.0000 + 1.0000i

1.0000 - 1.0000i

1.0000 + 1.0000i

1.0000 - 1.0000i

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

52.3 Multiplikation von Polynomen

Mit der Funktion conv kann man Polyno-me miteinander multiplizieren. Das Poly-nom p1(x) = x2 + 2x − 3 multipliziert mitdem Polynom p2(x) = 2x3 − x2 + 3x − 4ergibt das Polynom p3(x) = p1(x) · p2(x) =2x5 + 3x4 − 5x3 + 5x2 − 17x + 12

>> p1 = [1 2 -3];

>> p2 = [2 -1 3 -4];

>> p3 = conv(p1,p2)

p3 =

2 3 -5 5 -17 12

52.4 Addition und Subtraktion vonPolynomen

In Matlab gibt es keine Funktion zur Ad-dition zweier Polynome. Haben die Polyno-me den gleichen Grad, werden die entspre-chenden Zeilenvektoren addiert. Das Poly-nom p1(x) = x2 + 2x − 3 addiert mit demPolynom p4(x) = −x2 + 3x − 4 ergibt dasPolynom p5(x) = p1(x) + p4(x) = 5x− 7

>> p1 = [1 2 -3];

>> p4 = [-1 3 -4];

>> p5 = p1+p4

133 Copyright c© G. Gramlich

p5 =

0 5 -7

Dies setzt jedoch Vektoren gleicher Län-ge, das heiÿt Polynome gleichen Grades,voraus. Will man Polynome unterschiedli-chen Grades addieren, so muss man denZeilenvektor zum Polynom kleineren Gra-des durch Nullen au�üllen. Das Polynomp1(x) = x2 + 2x − 3 addiert zu dem Po-lynom p2(x) = 2x3 − x2 + 3x − 4 ergibtp6(x) = p(1) + p2(x) = 2x3 + 5x− 7

>> p1 = [1 2 -3];

>> p2 = [2 -1 3 -4];

>> p6 = [0 p1]+p2

p6 =

2 0 5 -7

Die folgende Matlab-Funktion automati-siert diesen Prozess.

function p1undp2 = addpoly(p1,p2)

%----------------------------------

%-Addiert zwei Polynome

%----------------------------------

if nargin < 2

error('Zu wenig Argumente.')

end

%-Stellt sicher, dass p1 und p2

%-Zeilenvektoren sind.

p1 = p1(:)';

p2 = p2(:)';

lp1 = length(p1); %Länge von p1.

lp2 = length(p2); %Länge von p2.

p1undp2 = [zeros(1,lp2-lp1) p1]+

[zeros(1,lp1-lp2) p2];

Um die Funktion addpoly zu verstehen, be-trachte man die folgenden Zeilen:

>> addpoly(p1,p2)

ans =

2 0 5 -7

Das Ergebnis ist das gleiche wie oben. DieseMatlab-Funktion addpoly kann auch da-zu verwendet werden, um Polynome zu sub-trahieren. Dies zeigen die folgenden Mat-lab-Zeilen:

>> p7 = addpoly(p1,-p2)

p7 =

-2 2 -1 1

p1(x) = x2 + 2x − 3 minus p2(x) = 2x3 −x2 + 3x − 4 ergibt das Polynom p7(x) =−2x3 + 2x2 − x + 1.

52.5 Division von Polynomen

Mit der Funktion deconv kann man Po-lynome dividieren. Das Polynom p2(x) =2x3− x2 + 3x− 4 dividiert durch das Poly-nom p1(x) = x2 + 2x − 3 ergibt das Poly-nom q(x) = 2x − 5 mit dem Restpolynomr(x) = 19x− 19.

>> p2 = [2 -1 3 -4];

>> p1 = [1 2 -3];

>> [q,r] = deconv(p2,p1)

q =

2 -5

r =

0 0 19 -19

134 Copyright c© G. Gramlich

52.6 Ableiten von Polynomen

Die Matlab-Funktion polyder di�eren-ziert ein Polynom. Die Ableitung des Po-lynoms p2(x) = 2x3−x2 +3x−4 ergibt dasPolynom p′2(x) = 6x2 − 2x + 3.

>> p2 = [2 -1 3 -4];

>> dp2 = polyder(p2)

dp2 =

6 -2 3

52.7 Integrieren von Polynomen

Die Matlab-Funktion polyint integriertein Polynom. Die Integration des Polynomsp(x) = 6x2 − 2x + 3 ergibt das Polynomq(x) = 2x3 − x2 + 3x + c. Die Konstante cwird Null gesetzt.

>> p = [6 -2 3];

>> q = polyint(p)

q =

2 -1 3 0

52.8 Auswerten von Polynomen

Polynome können mit der Funktionpolyval ausgewertet werden. Die folgen-den Kommandos berechnen p(2.5) für dasPolynom p(x) = 4x3 − 2x2 + x− 7.

>> p = [4 -2 1 -7];

>> px = polyval(p,2.5)

px =

45.5000

Die folgenden Befehle berechnen 100 Poly-nomwerte für das Polynom p(x) = 4x3 −

2x2 + x − 7 zu 100 verschiedenen äquidi-stanten Werten im Intervall von −1 bis 4.

>> p = [4 -2 1 -7];

>> x = linspace(-1,4);

>> px = polyval(p,x);

Aufgabe 103 (Polynomfunktionen)Gegeben seien die folgenden Polynomfunk-tionsterme

f1(x) = x3 − 3x2 − x + 3

f2(x) = x3 − 6x2 + 12x− 8

f3(x) = x3 − 8x2 + 20x− 16

f4(x) = x3 − 5x2 + 7x− 3f5(x) = x− 2

Zeichnen Sie die Polynome im Intervall[0, 4]. Benutzen Sie eingebaute Matlab-Funktionen, um folgende Polynome in denPunkten 0 und 1 auswerten zu können.

(a) f2(x)− 2f4(x)

(b) 3f5(x) + f2(x)− 2f3(x)

(c) f1(x)f3(x)

(d) f4(x)/(x− 1)

Lösung: Das folgende Script löst die Auf-gabe.

p1 = [1 -3 -1 3];

p2 = [1 -6 12 -8];

p3 = [1 -8 20 -16];

p4 = [1 -5 7 -3];

p5 = [0 0 1 -2];

pa = p2-2*p4;

pb = 3*p5+p2-2*p3;

pc = conv(p1,p3);

135 Copyright c© G. Gramlich

pd = deconv(p4,[1 -1]);

x = linspace(0,4);

ypa = polyval(pa,x);

ypb = polyval(pb,x);

ypc = polyval(pc,x);

ypd = polyval(pd,x);

plot(x,ypa,x,ypb,x,ypc,x,ypd)

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

52.9 Zusammenfassung

In Matlab gibt es eine Reihe von nütz-lichen Funktionen, die dem Anwender dasArbeiten mit Polynomen erleichtern. Dieskommt vor allem dann zum Tragen, wennInterpolations- und Approximationsaufga-ben behandelt werden. Die Tabelle 36 fasstdie Funktionen nochmals zusammen, siehedoc polyfun (help polyfun).

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

Tabelle 31: Polynome in Matlab

53 Polynominterpolation

Gegeben sind n Punkte in der Ebene R2,�nde ein Polynom minimalen Grades, das

durch alle Punkte geht. Ein solches Poly-nom hat höchstens den Grad n − 1 undist eindeutig bestimmt; man nennt es dasInterpolationspolynom. Mit der Matlab-Funktion polyfit ist es bequem möglich,dieses Polynom zu berechnen. Als Beispielbetrachten wir die drei Punkte (−2,−27),(0,−1) und (1, 0). Gesucht ist also ein qua-dratisches Polynom p2(t, x) = x1 + x2t +x3t

2, das die drei gegebene Punkte interpo-liert. Die folgendenMatlab-Zeilen berech-nen das Polynom und stellen das Problemgra�sch dar.

t = [-2 0 1];

y = [-27 -1 0];

x = polyfit(t,y,length(t)-1);

ti = linspace(min(t),max(t));

yi = polyval(x,ti);

plot(ti,yi,t,y,'ro'), grid on

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

−25

−20

−15

−10

−5

0

5

Abbildung 45: Polynominterpolation

Lässt man sich den Zeilenvektor x ausge-ben, so �ndet man darin die gewünschtenKoe�zienten des quadratischen Polynom;man erhält p2(t) = −1 + 5t− 4t2.

136 Copyright c© G. Gramlich

54 Polynomapproximation

Die Funktion polyfit kann auch verwen-det werden, um Daten durch Polynomezu approximieren. Gegeben sind m Punkte(ti, yi), i = 1, 2, . . . ,m und gesucht ist einParametervektor x ∈ Rn, sodass die poly-nomiale Modellfunktion p(t, x) = x1+x2t+x3t

2 + · · · + xntn−1 die gegebenen Punkte�bestmöglichst� approximiert, wobei best-möglichst im Sinne kleinster Fehlerquadra-te zu verstehen ist:

Minimiere∑m

i=1(yi − p(ti,x))2.x ∈ Rn

Da die gesuchten Parameter xi in der Mo-dellfunktion linear vorkommen, liegt eine li-neare Ausgleichsaufgabe vor. Als Beispielbetrachten wir folgende Aufgabe. Ange-nommen es liegen die folgenden Messdatenvor

Da diese Daten nahezu auf einer paraboli-schen Kurve liegen, entscheiden wir uns da-für, ein quadratisches Polynom durch diesePunkte zu legen. Die folgenden Matlab-Zeilen zeigen, wie man das Polynom zwei-ten Grades �ndet und wie man die Ergeb-nisse gra�sch darstellen kann.

t = [0.0:0.5:10];

y = [2.9 2.7 4.8 5.3 7.1 7.6 7.7...

7.6 9.4 9.0 9.6 10.0 10.2 9.7...

8.3 8.4 9.0 8.3 6.6 6.7 4.1];

x = polyfit(t,y,2);

ti = linspace(min(t),max(t));

yi = polyval(x,ti);

plot(ti,yi,t,y,'ro'), grid on

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

0 2 4 6 8 10−20

0

20

40

60

80

100

120

data 1 linear quadratic cubic 4th degree

Abbildung 46: Polynomapproximation

137 Copyright c© G. Gramlich

Lässt man sich den Zeilenvektor x ausge-ben, so �ndet man darin die gewünsch-ten Koe�zienten des quadratischen Poly-nom; man erhält p2(t) = 2.1757+2.6704t−0.2384t2. Diese Polynom ist das beste Poly-nom zweiten Grades in dem Sinne, dass esdie Summe der Fehlerquadrate minimiert.

Die Polynomapproximation bzw. Aus-gleichsaufgabe ist in der Statistik vonbesonderer Bedeutung und wird dortunter dem Namen Regressionsrechnung(Engl.:data �tting) studiert.

55 Kubische Splineinterpolation

Für viele Anwendungen ist die Polynomin-terpolation ungeeignet, insbesondere dann,wenn der Grad des Interpolationspoly-noms �groÿ� gewählt werden muss. Abhilfescha�t in diesem Fall eine stückweise po-lynomiale Interpolation, insbesondere einekubische Splineinterpolation. In Matlabkann man ein kubisches Splineinterpolati-onspolynom mithilfe der Funktion spline

berechnen. Ein kubischer Spline ist einstückweises kubisches Polynom, das zwei-mal stetig di�erenzierbar ist. Das folgendeBeispiel zeigt eine kubische Splineinterpola-tion im Vergleich zu einer ungeeigneten Po-lynominterpolation anhand von neun Da-tenpunkte, die zur Quadratwurzelfunktiongehören. Während das Interpolationspoly-nom achten Grades zu Ozillationen führt,ist eine kubische Splineinterpolation gutgeignet die gegebenen Punkte zu interpo-lieren.

%-Daten.

t = [0 1 4 9 16 25 36 49 64];

y = [0 1 2 3 4 5 6 7 8];

%-Polynominterpolation.

x = polyfit(t,y,length(t)-1);

ti = linspace(min(t),max(t));

yi = polyval(x,ti);

%-Kubische Splineinterpolation.

ys = spline(t,y,ti);

plot(ti,yi,t,y,'ro',ti,ys),

grid on, axis([0,64,0,10]),

legend('Polynom','Daten','Spline')

0 10 20 30 40 50 600

1

2

3

4

5

6

7

8

9

10

PolynomDatenSpline

Abbildung 47: Kubische Splineinterpolati-on

56 Stückweise lineareInterpolation

Angenommen es sind m Punkte (ti, yi) ge-geben. Setzt man t = (t1, t2, . . . , tm) undy = (y1, y2, . . . , ym) und führt plot(t,y)

aus, so werden diese m Punkte geradli-nig verbunden, das heiÿt man sieht den

138 Copyright c© G. Gramlich

Graph einer stückweisen (a�n) linearen In-terpolationsfunktion. Mithilfe der Funktioninterp1 kann man stückweise lineare In-terpolationsfunktionen berechnen. Wir zei-gen dies an einen Beispiel. Angenommenes soll die stückweise lineare Interpolati-onsfunktion zu den Punkten (ti, yi) mitt = linspace(0,3,10) und y = humps(t)

berechnet werden, so kann man das mitden folgenden Zeilen erreichen. BeachtenSie, dass humps eine eingebaute Matlab-Funktion ist, deren Funktionsterm gegebenist durch hums(t) = 1/

((t− 0.3)2 + 0.01

)+

1/((t− 0.9)2 + 0.04

)− 6.

t = linspace(0,3,10);

y = humps(t);

tt = linspace(min(t),max(t));

yi = interp1(t,y,tt);

plot(tt,yi,t,y,'ro',tt,humps(tt)),

grid on,

legend('Interpolationsfunktion',...

'Punkte','humps'),

0 0.5 1 1.5 2 2.5 3−20

0

20

40

60

80

100

InterpolationsfunktionPunktehumps

Abbildung 48: Lineare Interpolation

57 Nichtlineare Gleichungen (1)

In Matlab gibt es die eingebaute Funk-tion fzero zur Lösung einer nichtlinearenGleichung in einer Variablen. Der Algorith-mus ist eine Kombination aus dem Inter-vallhalbierungsverfahren, der Sekantenme-thode und der inversen quadratischen In-terpolation. Dieses hybride Verfahren hateine lange und interessante Geschichte, sie-he [7]. Es ist ein guter Algorithmus, aberleider nur für skalarwertige Funktionen miteiner skalaren Variablen einsetzbar. Denm-File fzero �ndet man im VerzeichnisToolbox/MATLAB/funfun.

Die Buckelfunktion humps hat zwei Null-stellen, siehe Abbildung 14. Wir berechnendiese mit fzero.

>> fzero(@humps,1)

ans =

1.2995

>> fzero(@humps,0)

ans =

-0.1316

Das zweite Argument des Funktionsaufru-fes gibt jeweils den Startpunkt des itera-tiven Verfahren an, x0 = 1 bzw. x0 = 3.Wir wollen fzero noch an der nichtlinea-ren Gleichung x2 − 4 sin(x) = 0 illustrie-ren. Die Gleichung hat die beiden Nullstel-len: x1 = 0 und x2 ≈ 1.9. Man erhält diesedurch zum Beispiel durch

>> f = @(x)x^2-4*sin(x);

>> x1 = fzero(f,1)

x1 =

139 Copyright c© G. Gramlich

-1.2470e-026

bzw.

>> x2 = fzero(f,3)

x2 =

1.9338

Sie können sich die einzelnen Iterations-schritte auch ausgeben lassen, indem Sie dieentsprechende Option mit der optimset-Funktion setzen. Dies geht wie folgt:

>> options = optimset('Display',...

'iter');

>> x2 = fzero(f,1,options);

Mit der Matlab-Funktion optimset kön-nen Sie verschiedene Parameter (zumBeispiel Genauigkeitswerte) von Optimie-rungsfunktionen setzen. Da das Lösennichtlinearer Gleichungen eng verwandt istmit dem Lösen von Optimierungsproble-men wird auch der Name optimset ver-ständlich.

Parameterabhängige nichtlineare Gleichun-gen können Sie ebenfalls mit fzero lösen.Gleichungen mit Polynomfunktionen kön-nen Sie e�zient mit der Funktion roots

lösen. Nichtlineare Gleichungen mit mehrals zwei Variablen sind mit der Funktionfsolve anzugehen, siehe Abschnitt 67. Die-se Funktion gehört aber zur OptimizationToolbox und ist deshalb nur dann verwend-bar, wenn diese installiert ist.

Aufgabe 104 (Nichtlineare Gleichungen)Berechnen Sie mit fzero die Lösung der

nichtlinearen Gleichung

e−x = x

Lösung: Die Lösung �ndet man wie folgt:

>> f = @(x)exp(-x)-x;

>> x = fzero(f,2)

x =

0.5671

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

Aufgabe 105 (Nichtlineare Gleichungen)Berechnen Sie mit fzero die Lösung dernichtlinearen Gleichung

ex + 2x = 0

Die Abbildung 49 zeigt die Geometrie.

−2 −1 0 1 2−5

0

5

10

x

exp(x)+2 x

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

Lösung: Die Lösung �ndet man wie folgt:

>> f = @(x) exp(x)+2*x;

>> x = fzero(f,3)

x =

-0.3517

140 Copyright c© G. Gramlich

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

Aufgabe 106 (Nichtlineare Gleichungen)Finden Sie die positiven Nullstellen der fol-genden Funktionen:

(a) f1(x) = 1/2ex/3 − sin(x)

(b) f2(x) = log(x + 1)− x2

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

Lösung:

(a) Man zeichnet zunächst den Graphender Funktion (s. Abbildung 50) mit

>> f = @(x) 1/2*exp(x/3)-sin(x);

>> fplot(f,[0 10])

>> xlabel('x'),ylabel('f(x)')

>> grid on

0 2 4 6 8 10−5

0

5

10

15

x

f(x)

Abbildung 50: Graph der Funktion f1 imIntervall [0,10]

Die Nullstelle liegt o�ensichtlich im In-tervall [0,1]. Mit

>> fzero(f,[0,1])

ans =

0.6772

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

(b) Wir zeichnen zunächst den Graphender Funktion (s. Abbildung 51) mit

>> f = @(x) log10(x+1)-x^2;

>> fplot(f,[0 1])

>> xlabel('x'),ylabel('f(x)')

>> grid on

0 0.2 0.4 0.6 0.8 1−0.8

−0.6

−0.4

−0.2

0

0.2

x

f(x)

Abbildung 51: Graph der Funktion f2 imIntervall [0,1]

Die Nullstelle liegt o�ensichtlich im In-tervall [0.3,0.5]. Mit

>> fzero(f,[0.3,0.5])

ans =

0.3696

sieht man, dass die Nullstelle im Punktx = 0.3696 liegt.

(c) Statt des @-Befehls kann man auch einm-File verwenden, das die entsprechen-de Funktion enthält. Dazu legt man einm-File unter dem Namen f3.m an, dassfolgenden Inhalt hat:

141 Copyright c© G. Gramlich

function y = f3(x)

y = exp(x)-5*x.^2;

Mit Hilfe des Graphen der Funktion,der durch

>> fplot(@f3,[0 6])

>> xlabel('x'),ylabel('f(x)')

>> grid on

erzeugt werden kann (s. Abbildung 52),erkennt man, dass die beiden Nullstel-

0 1 2 3 4 5 6−50

0

50

100

150

200

250

x

f(x)

Abbildung 52: Graph der Funktion f3 imIntervall [0,6]

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

>> fzero(@f3,[0,1])

ans =

0.6053

und

>> fzero(@f3,[4,5])

ans =

4.7079

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

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

Aufgabe 107 (Exponentialgleichung)Berechnen Sie in Matlab die Lösung von

(0.5)x = x

Lösung: Erste Möglichkeit

>> solve('0.5^x=x')

ans =

.64118574450498598448620048211482

Die Funktion solve ist eine symbolischeFunktion, das heiÿt es wird versucht, einesymbolische Lösung zu �nden. Dies ist abernicht möglich, daher schaltet solve auf einnumerisches Verfahren um und liefert einenumerische Lösung.

Zweite Möglichkeit:

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

>> fzero(f,[0,1])

ans =

0.6412

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

Aufgabe 108 (Logarithmusgleichung)Berechnen Sie in Matlab die Lösung von

log0.5 x = x

Lösung: Erste Möglichkeit:

>> solve('log(x)/log(0.5)-x')

ans =

.64118574450498598448620048211482

142 Copyright c© G. Gramlich

oder

>> solve('ln(x)/ln(0.5)-x')

ans =

.64118574450498598448620048211482

Die Funktion solve ist eine symbolischeFunktion, das heiÿt es wird versucht, einesymbolische Lösung zu �nden. Dies ist abernicht möglich, daher schaltet solve auf einnumerisches Verfahren um und liefert einenumerische Lösung.

Zweite Möglichkeit:

>> f = @(x) log(x)/log(0.5)-x;

>> fzero(f,[0.1,1])

ans =

0.6412

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

Aufgabe 109 (Polynomgleichungen)Berechnen Sie mit roots die Lösung der Po-lynomgleichung

x3 + 6x2 − 11x− 6 = 0

Lösung: Die drei Lösungen �ndet man wiefolgt:

>> roots([1 6 -11 -6])

ans =

-7.3803

1.8256

-0.4453

©. . . . . . . . . .© Alle drei Lösungen sind reell.

58 Optimierung (Teil 1)

Matlab besitzt zwei Funktionen, um zuoptimieren: fminbnd und fminsearch. Mitfminbnd kann man ein lokales Minimumeiner reellwertigen Funktion einer reel-len Variablen aus�ndig machen und mitfminsearch kann man eine reellwertigeFunktion mehrerer Variablen minimieren.

Das Kommando x = fminbnd(fun, x1,

x2) versucht von der Funktion fun überdem Intervall [x1, x2] ein lokales Minimumzu �nden. Im Allgemeinen hat eine Funkti-on mehrere Minima. In Matlab gibt es je-doch keine Funktion, dieses schwierige Pro-blem zu lösen, nämlich ein globales Mini-mum zu �nden.

Wollen Sie eine Funktion f maximierenstatt minimieren, dann können Sie −f mi-nimieren, da Maxxf(x) = −Minx(−f(x))ist.

Als Beispiel betrachten wir das eindimen-sionale (univariate) Optimierungsproblem:

Minimiere sinx− cos xx ∈ [−π, π]

Die Lösung erhalten wie folgt:

>> f = @(x)sin(x)-cos(x);

>> [x,fWert] = fminbnd(f,-pi,pi)

x =

-0.7854

fWert =

-1.4142

Wie bei der Funktion fzero können Sie Op-tionen in einer Strukturvariablen durch dieoptimset-Funktion spezi�zieren. Der von

143 Copyright c© G. Gramlich

fminbnd verwendete Algorithmus ist eineKombination des goldenen Schnittes undparabolischer Interpolation.

Mit der Funktion fminsearch ist esmöglich, ein lokales Minimum einerreellwertigen Funktion von n ≥ 1Variablen zu berechnen. Die Syntaxist ähnlich wie die von fminbnd: x =

fminsearch(fun,x0,options), auÿer dassdas zweite Argument x0 ein Startvektor istanstatt eines Intervalls. Die quadratischeFunktion f(x1, x2) = x2

1 + x22 − x1x2,

(x1, x2) ∈ R2 hat in x∗ = (0, 0) eineMinimalstelle, denn es ist:

>> f = @(x)x(1)^2+x(2)^2-x(1)*x(2);

>> x = fminsearch(f,ones(2,1))

x =

1.0e-004 *

-0.4582

-0.4717

Das Verfahren hinter der Funktionfminsearch basiert auf dem Nelder-Mead Simplexverfahren, eine direkteSuchmethode, die ohne Ableitungsinforma-tionen auskommt.

Es ist möglich, dass das Verfahren zu kei-nem lokalen Minimum gelangt oder sehrlangsam konvergiert. Dagegen hat es denVorteil, robust gegenüber Funktionsunste-tigkeiten zu sein.

Weitere verfeinerte Algorithmen �nden Siein der Optimization Toolbox, siehe doc

optim (help optim).

Aufgabe 110 (Optimierung)Lösen Sie das Problem

Minimiere ex1−x2 + x21 + x2

2.x ∈ R2

Geben Sie die Lösung auf vier Nachkom-mastellen an.Lösung: Die Lösung ist x∗ = (x∗1, x

22) ≈

(−0.2836, 0.2836) mit f(x1, x2) ≈ 0.7281.Mit der Matlab-Funktion fminsearch ge-winnt man die Lösungen wie folgt. Manschreibe eine m-File, in dem man die Ziel-funktion de�niert

function f = myf(x)

f = exp(x(1)-x(2))+x(1).^2+...

x(2).^2;

und ruft dann die fminsearch Funktionauf.

>> fminsearch(@myf,[1;1])

ans =

-0.2836

0.2835

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

59 FFT

Die diskrete Fourier-Transformation isteine unitäre lineare Abbildung von Cn nachCn, wobei einem Vektor x ∈ Cn der Vektory = F nx zugeordnet wird. Hierbei ist F n

die unitäre Matrix aus Cn×n, die die uni-täre Abbildung beschreibt. Für n = 4 hat

144 Copyright c© G. Gramlich

diese die Form

F n =

1 1 1 11 ω ω2 ω3

1 ω2 ω4 ω6

1 ω3 ω6 ω9

, ω = e−2πi/4.

Die schnelle Fourier-Transformation(Fast Fourier Transform = FFT) ist eine�zientes Verfahren um den Bildvektor yanstatt der obigen Matrix-Vektor Multi-plikation zu berechnen. Die Funktion fft

realisiert diese Methode und wird mit y =

fft(x) aufgerufen. Die E�zienz von fft

hängt vom Wert n ab; Primzahlen sindschlecht, zerlegbare Zahlen sind besserund Vielfache von 2 sind am Besten. Dieinverse FFT, x = n−1F ny, wird durch dieFunktion ifft ausgeführt: x = ifft(y).Wir geben ein Beispiel:

>> y = fft([1 1 -1 -1]')

y =

0

2.0000 - 2.0000i

0

2.0000 + 2.0000i

>> x = ifft(y)

x =

1

1

-1

-1

Aufgabe 111 (FFT, �Konstante�)Berechnen Sie die diskrete Fourier-Transformation des Vektors x = (1, 1, 1, 1).Machen Sie sich jedoch erst klar, was her-aurauskommen sollte.Lösung: Es ist

>> y = fft([1 1 1 1])

y =

4 0 0 0

Die Abbildung 53 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 53: Zu Aufgabe 111

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

Aufgabe 112 (FFT, �Kosinus�)Berechnen Sie die diskrete Fou-rier-Transformation des Vektorsx = (1, 0,−1, 0). Überlegen Sie jedochzuerst, was herauskommen sollte.Lösung: Es ist

>> y = fft([1 0 -1 0])

y =

0 2 0 2

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

Es existieren in Matlab auch Funktionenfür mehrdimensionale diskrete Fourier-Transformationen und ihre Inversen: sie-he doc fft2 (help fft2), doc fftn (help

145 Copyright c© G. Gramlich

fftn), doc ifft2 (help ifft2) und doc

ifftn (help ifftn).

Die FFT-Algorithmen in Matlab werdendurch das Softwarepaket FFTW (the "Fas-test Fourier Transform in the West") rea-lisiert. Dieses Paket ist ein Beispiel eineradaptiven Software in dem Sinne, dass die-se dafür sorgt, dass die Ausführungszeit amschnellsten ist, unabhängig davon auf wel-cher Computerumgebung man sich geradebe�ndet. Die Funktion fftw stellt Parame-ter zur Verfügung um diesen Prozess zu tu-nen, siehe doc fftw (help fftw).

Bemerkungen zur kontinuierlichen Fou-rier-Transformation �ndet man im Ab-schnitt 66.20.

60 Integration

Unter numerischer Integration verstehtman die Berechnung einer Approxima-tion an bestimmte Integrale der Form∫ ba f(x)dx. Matlab stellt die beiden Funk-tionen quad und quadl als adaptive Inte-grationsfunktionen zur Verfügung. Sie be-rechnen eine Näherung an das bestimmtesIntegral

∫ ba f(x)dx. Hierbei müssen die In-

tegrationsgrenzen a und b endlich sein undder Integrand f(x) darf im Intervall [a, b]keine Singularitäten besitzen.

Wir diskutieren die Funktion quad; quadlfunktioniert analog. Ein Aufruf der Form

quad(fun,a,b)

berechnet das bestimmte Integral. Der Inte-grand fun kann sowohl in einem m-File als

auch als @-Funktion de�niert werden. Ermuss jedoch in vektorisierter Form vorlie-gen, so dass ein Vektor zurückgegeben wer-den kann, wenn das Argument x von f einVektor ist.

Wegen

>> quad(@humps,0,1)

ans =

29.8583

ist der Flächeninhalt unter dem Graph vonhumps im Intervall [0, 1] ungefähr gleich 30.Die Abbildung 54 zeigt die Geometrie in

0 0.2 0.4 0.6 0.8 10

20

40

60

80

100

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

Form von Graph und Flächeninhalt. DieAbbildung wurde dabei mit folgenden An-weisungen erstellt:

>> x = linspace(0,1);

>> y = humps(x);

>> area(x,y,'FaceColor','r',...

'LineWidth',2,'EdgeColor','b');

Das bestimmte Integral∫ 1

0xxdx

146 Copyright c© G. Gramlich

kann vonMatlab nicht exakt (symbolisch)berechnet werden.

>> syms x

>> f = x^x;

>> int(f,0,1)

Warning: Explicit integral could

not be found.

> In sym.int at 58

ans =

int(x^x,x = 0 .. 1)

Das Integral wird unverändert als nichtbe-rechenbar ausgegeben. Wir können das In-tegral aber numerisch berechnen. Es ist:

>> quad(@(x)x.^x,0,1)

ans =

0.7834

Die Abbildung 55 zeigt die dazugehörige

0 0.2 0.4 0.6 0.8 10

0.2

0.4

0.6

0.8

1

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

Geometrie.

Aufgabe 113 (Numerische Integration)Berechnen Sie die Länge der Zykloide

f : R → R2

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

von t = 0 bis t = 2π.Lösung: Es ist f ′(t) = (1− cos t, sin t) undsomit gilt

Lf =∫ 2π

0|f ′(t)|dt

=∫ 2π

0

√(1− cos t)2 + sin2 t dt

und damit in Matlab

>> f = @(t)sqrt((1-cos(t)).^2+...

sin(t).^2);

>> quad(f,0,2*pi)

ans =

8.0000

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

Aufgabe 114 (Numerische Integration)Berechnen Sie ∫ 4

2x ln(x)dx.

Lösung: Ist die Funktion

function f = fxlog(x)

f = x.*log(x);

de�niert, so erhält man nach Eingabe von

>> quad(@fxlog,2,4)

ans =

6.7041

147 Copyright c© G. Gramlich

eine Approximation an das zu berechnendeIntegral.

Beachten Sie die Array-Multiplikation .* inobiger Funktion fxlog, damit die Funktionfür vektorwertige Eingabeargumente kor-rekt funktioniert. © . . . . . . . . . . . . . . . . . . . . . ©

Die Funktion quad basiert auf der Simp-son-Regel, welche eine Newton-Cotes 3-Punkt Regel ist, das heiÿt sie ist für Po-lynome bis zum Grad 3 exakt. Die Funk-tion quadl setzt eine genauere Gauÿ-Lobatto 4-Punkt Regel mit einer 7-PunktKronrod Erweiterung ein. Somit ist diesefür Polynome bis zum Grad 5 bzw. 9 genau.Beide Funktionen arbeiten adaptiv. Sie un-terteilen das Integrationsintervall in Teil-intervalle und verwenden über jedem Teil-intervall die zugrundeliegende Integrations-regel. Die Teilintervalle werden aufgrunddes lokalen Verhaltens des Integranden ge-wählt, wobei das kleinste Intervall dort aus-gesucht wird, wo der Integrand sich ammeisten ändert. Eine Warnung wird ausge-geben, wenn die Teilintervalle zu klein wer-den oder falls zu viele Funktionsauswertun-gen gemacht werden müssen, worauf oft ge-schlossen werden kann, dass der Integrandeine Singularität besitzt.

60.1 Mehrfachintegrale

Man spricht von einem zweifachen Integral(Doppelintegral) wenn es die Form∫ ∫

Df(x, y)dxdy

hat. Hierbei ist D ein beschränktes Gebietim zweidimensionalen Raum R2. Ein drei-faches Integral (Dreifachintegral) liegt vor,wenn die Gestalt∫ ∫ ∫

Gf(x, y, z)dxdydz

hat, wobei G ein beschränktes Gebiet imdreidimensionalen Raum R3 ist. Analogsind vier- und mehrfache Integrale de�niert.Die Berechnung mehrfacher Integrale lässtsich auf die Berechnung mehrerer einfacherIntegrale zurückführen.

Doppelintegrale können mit dblquad nume-risch berechnet werden. Angenommen wirwollen das Integral∫ 6

y=4

∫ 1

x=0(y2ex + x cos y)dxdy

approximieren, dann können wir wie folgtverfahren. Zunächst de�nieren wir den In-tegranden, der nun ein Funktionsterm vonzwei unabhängigen Variablen ist.

function out = fxy(x,y)

out = y^2*exp(x)+x*cos(y);

Dann geben wir ein:

>> dblquad(@fxy,0,1,4,6)

ans =

87.2983

Die Funktion, die dblquad im ersten Ar-gument übergeben wird, muss einen Vek-tor x und einen Skalar y vertragen kön-nen. Zurückgegeben wird ein Vektor. Zu-sätzliche Argumente für dblquad sind mög-lich, um die Toleranz und die Integrations-

148 Copyright c© G. Gramlich

methode zu bestimmen. Standardmäÿig istdies quad.

Aufgabe 115 (Doppelintegral)Berechnen Sie das Integral

∫ 2

y=0

∫ 1

x=0(x2)dxdy

Lösung: Es ist

>> dblquad(@(x,y) x.^2,0,1,0,2)

ans =

0.6667

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

Dreifachintegrale können mit triplequad

berechnet werden.

>> triplequad(@(x,y,z)...

(y*sin(x)+z*cos(x)),0,pi,0,1,-1,1)

ans =

2.0000

Aufgabe 116 (Dreifachintegral)Berechnen Sie das Integral

∫ 1

z=−1

∫ 1

y=0

∫ π

x=0(x3)dxdydz

Lösung: Es ist

>> triplequad(@(x,y,z) x.^3,...

0, pi, 0, 1, -1, 1)

ans =

48.7045

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

60.2 Tabellarische Daten

Eine weitere Integrationsroutine ist trapz,welche wiederholt die Trapezregel anwen-det. Sie unterscheidet sich von quad undquadl dadurch, dass die Eingabeargumen-te Vektoren xi, f(xi) und nicht der analyti-sche Funktionsterm f(x) ist. Deshalb kanndie Funktion auch nicht adaptiv arbeiten.Wir zeigen die Funktionsweise an einemBeispiel. Der exakte Wert von

∫ π0 sinx dx

ist 2. Wir bestätigen dies mit der Funkti-on trapz. Hierzu diskretisieren wir das In-tervall [0, π] gleichmäÿig und berechnen diedazugehörigen Sinusfunktionswerte, damitdie Eingabeargumente tabellarisch vorlie-gen.

>> x = 0:pi/50:pi;

>> y = sin(x);

Als Näherung erhalten wir somit

>> trapz(x,y)

ans =

1.9993

Wir zeigen noch ein Beispiel für eine nichtgleichmäÿige Diskretisierung des Intervalls[0, π]

>> x = sort(rand(1,101)*pi);

>> y = sin(x);

>> trapz(x,y)

ans =

1.9983

Im allgemeinen sind jedoch die Funktionenquad und quadl vorzuziehen, wenn der In-tegrand analytisch verfügbar ist.

149 Copyright c© G. Gramlich

Steht der Integrand f in tabellarischerForm (ti, f(ti)), i = 1, 2, . . . ,m zur Ver-fügung und ist man an der tabellarischenForm der Integralfunktion Jt1 mit

Jt1(x) =∫ x

t1

f(t)dt

interessiert, so kann man die Matlab-Funktion cumtrapz verwenden. Das be-stimmte Integral von t1 bis zu irgendeinemPunkt x = ti wird dann durch die Trapez-regel berechnet. Der Aufruf

z = cumtrapz(t,f)

liefert einen Vektor z zurück, der die glei-che Länge wie t hat und in dem die Wer-te Jt1(x = ti) für i = 1, 2, . . . ,m stehen.Das folgende Beispiel zeigt die Funktions-weise der Funktion cumtrapz an der humps-Funktion.

>> t = linspace(-1,2);

>> f = humps(t);

>> z = cumtrapz(t,f);

Die Abbildung 56 zeigt den Graph derhumps-Funktion und den Graph der dazuge-hörigen Integralfunktion, die mit cumtrapzberechnet wurde. Die Abbildung wurde ein-fach mit

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

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

erzeugt.

Aufgabe 117 (Integration)Zeichnen Sie den Graph der Integralfunkti-

on F−3 von f(t) = 1/√

2πe−t2/2, t ∈ R im

−1 −0.5 0 0.5 1 1.5 2−20

0

20

40

60

80

100fF

−1

Abbildung 56: humps-Funktion und Inte-gralfunktion im Intervall[−1, 2]

Intervall von −3 bis 3, und in dieselbe Fi-gur auch den Graph von f . Kennen Sie dieBedeutung der Funktionen f und F−∞.Lösung: Die Abbildung 57 zeigt die Gra-

−3 −2 −1 0 1 2 30

0.2

0.4

0.6

0.8

1

fF

−∞

Abbildung 57: Die Graphen zu Aufgabe117

phen. f ist die Dichtefunktion und F−∞ist die Verteilungsfunktion der Standard-normalverteilung aus der Statistik. Der da-zugehörige Matlab-Code ist

>> t = linspace(-3,3,500);

150 Copyright c© G. Gramlich

>> f = 1/sqrt(2*pi)*exp(-t.^2/2);

>> z = cumtrapz(t,f);

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

>> legend('f','F_{-\infty}')

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

60.3 Numerische uneigentlicheIntegration

Die numerische Integration kann auch beiuneigentlicher Integration eingesetzt wer-den, zum Beispiel etwa für

∫∞0 f(x)dx. Eine

Möglichkeit besteht darin, einen Punkt αzu �nden, so dass der Wert von

∫∞α f(x)dx

im Vergleich zu∫ α0 f(x)dx vernachläs-

sigt werden kann; man beschränkt sichdann auf die Berechnung des letzten In-tegrals mit einer bekannten Quadraturfor-mel. Wir zeigen die Idee an dem Beispiel∫∞1 1/x5dx = 1/4, siehe auch Aufgabe 159.

Statt∫∞1 1/x5dx berechnen wir

∫ 71 1/x5dx.

Wir erhalten

>> quad(@(x) 1./x.^5,1,7)

ans =

0.2499

was für∫∞1 1/x5dx = 1/4 eine sehr gute

Näherung darstellt.

60.4 Zusammenfassung

Zusammenfassend können wir sagen: Mat-lab stellt zur numerischen Berechnung vonIntegralen mehrere Funktionen zur Verfü-gung. Liegt die zu integrierende mathe-matische Funktion f in analytischer Form

vor, so kann der Funktionsterm in ei-nem m-File oder als anonyme Funktionde�niert werden. Die Matlab-Funktionenquad, quadl, quadv, dblquad, triplequadund alle Funktionen zur numerischen Lö-sung von Di�erenzialgleichungen, siehe Ab-schnitt 61, können dann eingesetzt wer-den. Die Funktion quadv ist eine vektorri-elle Form der Funktion quad. Liegt der In-tegrand tabellarisch vor, so sind die Funk-tionen trapz und cumtrapz zu verwenden.Zur symbolischen Berechnung von Integra-len stehen die Funktionen int und dsolve

zur Verfügung, siehe Abschnitt 66.12 und66.19.

61 Di�erenzialgleichungen

Eine Gleichung zur Bestimmung einerFunktion heiÿt Di�erenzialgleichung, wennsie mindestens eine Ableitung der gesuch-ten Funktion enthält. Die Ordnung derin der Di�erenzialgleichung vorkommendenhöchsten Ableitung der gesuchten Funkti-on heiÿt Ordnung der Di�erenzialgleichung.Hängt die in der Di�erenzialgleichung ge-suchte Funktion nur von einer Variablen ab,so nennt man die Di�erenzialgleichung ge-wöhnlich. Enthält die Di�erenzialgleichungpartielle Ableitungen, so heiÿt sie partiell.Zum Beispiel ist die Bestimmungsgleichungfür die reellwertige Funktion y einer Varia-blen t

y′(t) = ay(t)

eine gewöhnliche Di�erenzialgleichung.Hierbei ist a 6= 0 eine reelle Konstante. Die

151 Copyright c© G. Gramlich

Gleichung

utt(x, t) = c2uxx(x, t)

ist eine partielle Di�erenzialgleichung. Ge-sucht ist die reellwertige Funktion u mitden beiden unabhängigen Variablen x undt, wobei c 6= 0 eine reelle Konstante ist. Sie-he Abschnitt 66.19 für symbolisches Lösenvon Di�erenzialgleichungen.

61.1 Anfangswertaufgaben

In Matlab gibt es mehrere Funktionen,um Anfangswertaufgaben von gewöhnli-chen Di�erenzialgleichungen numerisch zulösen. Anfangswertaufgaben haben folgen-de Form

AWA :

{ddty(t) = f(t, y(t))y(t0) = y0

t0 ≤ t ≤ tf

wobei t eine reelle Variable, y eine unbe-kannte vektorwertige Funktion und die ge-gebene Funktion f ebensfalls vektorwertigist. Konkret kann man sich t als die Zeitvorstellen. Die Funktion f bestimmt die ge-wöhnliche Di�erenzialgleichung und zusam-men mit der Anfangsbedingung y(t0) = y0

wird die Anfangswertaufgabe de�niert. Dereinfachste Weg solch ein Problem in Mat-lab zu lösen, besteht darin, eine Funkti-on zu schreiben, die f auswertet und danneinen der Matlab-Löser aufzurufen. Diegeringste Information, die man dem Lösermitteilen muss, ist der entsprechende Funk-tionsname, das Intervall [t0, tf ] wo man dieLösung sucht und die Anfangsbedingungy0. Zusätzlich können weitere extra Ein-

und Ausgabeargumente optional angegebenwerden, die mehr über das mathematischeProblem aussagen und wie es gelöst wer-den soll. Jeder einzelne Löser ist in speziel-len Situationen besonders e�zient, jedochkönnen sie prinzipiell gegeneinander ausge-tauscht werden. Im nächsten Anschnitt zei-gen wir Beispiele, die den Löser ode45 illus-trieren. Diese Funktion realisiert ein adap-tives Runge-Kutta Verfahren und ist fürdie meisten Probleme e�zient.

Um das skalare (m = 1) Anfangswertpro-blem (0 ≤ t ≤ 3)

AWA :

{ddty(t) = −y(t)− 5e−t sin(5t)y(0) = 1

mit ode45 zu lösen, kreieren wir als erstesden m-File rSeite.m, der die rechte Seiteder Di�erenzialgleichung de�niert.

function dy = rSeite(t,y)

dy = -y-5*exp(-t)*sin(5*t);

Danach machen wir folgende Eingabe

tspan = [0,3]; y0 = 1;

[t,y] = ode45(@rSeite,tspan,y0);

plot(t,y,'-'), grid,

xlabel t, ylabel y(t)

Dies erzeugt die Abbildung 58 (BeachtenSie, dass wir beim Setzen der x- und y-Labels die Kommando/Funktionsdualitätausgenutzt haben). Die Eingabeargumentevon ode45 sind die Funktion rSeite, der 2-Vektor tspan, der die Zeitspanne der Simu-lation spezi�ziert und der Anfangswert y0.Zwei Argumente t und y werden zurück-gegeben. Die t-Werte liegen alle im Inter-

152 Copyright c© G. Gramlich

0 0.5 1 1.5 2 2.5 3−1

−0.5

0

0.5

1

t

y(t)

Abbildung 58: Skalares Anfangswertpro-blem

vall [0, 3] und y(i) approximiert die Lösungzur Zeit t(i). Die Werte t(2:end-1) wer-den von der Funktion ode45 automatischgewählt. In den Bereichen, wo sich die Lö-sungsfunktion rapid ändert, werden mehrPunkte ausgewählt. Für weitere Informa-tionen siehe doc funfun (help funfun).

Mit der Funktion ode15i kann man An-fangswertaufgaben, deren Di�erenzialglei-chung in impliziter Form vorliegt, nu-merisch lösen. Wir betrachten ein ska-lares Problem. Die Eingabe ist ent-sprechend den anderen ODE-Funktionen:ode15i(odefun,tspan,y0,yp0). Das ers-te Argument spezi�ziert die Funktionf(t, y, y′), das Zweite und Dritte den Simu-lationsbereich (Integrationsintervall) [t0, tf ]bzw. den Anfangswert y(t0) und das vierteArgument den Anfangswert der Ableitung,das heiÿt y′(t0). Als Beispiel betrachten wirdas Anfangswertproblem

AWA :

{y′(t)y(t) + t = 0y(0) = 1

im Intervall [t0, tf ] = [0, 0.9]. In die-sem Problem liegt die Di�erenzialgleichungy′(t)y(t) + t = 0 in impliziter Form vor; sieist von erster Ordnung. Ich habe diese Dif-ferenzialgleichung gewählt, weil deren ana-lytische Lösung bekannt ist und man dieseso mit dem numerischen Ergebnis verglei-chen kann. Die allgemeine implizite Lösungvon y′(t)y(t) + t = 0 ist die Kreisgleichungt2 + y2 = c, c ≥ 0. Wir bestätigen die-ses Ergebnis symbolisch mit der Funktiondsolve, siehe Abschnitt 66.19.

>> dsolve('Dy*y+t=0','t')

ans =

(-t^2+C1)^(1/2)

-(-t^2+C1)^(1/2)

Mit der Anfangsbedingung y(0) = 1 ergibtsich die Konstante zu 1 und die Lösung ist

y(t) =√

1− t2.

Hier die Bestätigung:

ytrue = dsolve('Dy*y+t=0',...

'y(0)=1','t')

ytrue =

(-t^2+1)^(1/2)

Wir lösen die Anfangswertaufgabe nun nu-merisch mit ode15i. Die Funktion f de�-nieren wir im m-File fuerode15i wie folgt:

function res = fuerode15i(t,y,yp)

res = yp*y+t;

Dann ergibt sich die numerische Lösungdurch die Anweisungen:

y0 = 1; yp0 = 0;

t0 = 0; tf = 0.9;

153 Copyright c© G. Gramlich

[t,y] = ode15i(@fuerode15i,...

[t0 tf],y0,yp0);

Die Abbildung 59 zeigt die numerische

0 0.2 0.4 0.6 0.80.4

0.5

0.6

0.7

0.8

0.9

1

t

y

symbolischnumerisch

Abbildung 59: Implizites Anfangswertpro-blem

und symbolische (analytische) Lösung derimpliziten Anfangswertaufgabe. Die Abbil-dung wurde mit den Anweisungen

ezplot(ytrue,[0,0.9])

hold on

plot(t,y,'ro')

erzeugt. Für weitere Informationen siehedoc ode15i (help ode15i).

Die folgende Aufzählung gibt eine komplet-te Übersicht über alle AWA-Löser in Mat-lab. Dazu wird angegeben für welchen Pro-blemtyp der Löser geeignet ist und welchesVerfahren dahinter steht.

• ode45 für nicht steife Di�erenzial-gleichungen. Verfahren: Runge-Kutte-Verfahren der Ordnungen 4 und 5

• ode23 für nicht steife Di�erenzial-gleichungen. Verfahren: Runge-Kutte-Verfahren der Ordnungen 2 und 3

• ode113 für nicht steife Di�erenzialglei-chungen. Verfahren: Explizites linearesMehrschrittverfahren der Ordnungen 1bis 13

• ode15s für steife Di�erenzialgleichun-gen. Verfahren: Implizites lineares Mehr-schrittverfahren der Ordnungen 1 bis 5

• ode15i für implizite Di�erenzialgleichun-gen. Verfahren: Implizites lineares Mehr-schrittverfahren der Ordnungen 1 bis 5

• ode23s für steife Di�erenzialgleichungen.Verfahren: Modi�ziertes Rosenbrock-Verfahren der Ordnungen 2 und 3

• ode23t für mäÿig steife Di�erenzialglei-chungen. Verfahren: Implizite Trapezre-gel der Ordnungen 2 und 3

• ode23tb für steife Di�erenzialgleichun-gen. Verfahren: Implizites Runge-Kutta-Verfahren der Ordnungen 2 und3

Nicht alle schwierigen Probleme sind steif,aber alle steifen Probleme sind schwierig fürODE-Löser, die nicht für steife Problemeausgelegt sind.

Die Entwickler dieser Algorithmen, Sham-pine undReichelt haben Ergebnisse ihrerArbeit in [24] dargestellt. Die Funktionensind so konstruiert, dass man sie gegenein-ander leicht austauschen kann. So ist es zumBeispiel leicht möglich den ode45-Löser ausden obigen Beispielen durch einen anderenLöser auszutauschen. Aus [24] entnehmenwir:

The experiments reported here and otherswe have made suggest that except in special

154 Copyright c© G. Gramlich

circumstances, ode45 should be the codetried �rst. If there is reason to believe theproblem to be sti�, or if the problem turnsout to be unexpectedly di�cult for ode45,

the code ode15s code should be tried.

61.2 Randwertaufgaben

Treten in den Bedingungsgleichungen zureindeutigen Charakterisierung der Lösungeiner Di�erenzialgleichung die Funktions-und Ableitungswerte der gesuchten Funk-tion nicht nur �wie bei Anfangswertproble-men (AWP)� an einer einzigen, sondern anzwei Stellen auf, und ist man nur an ei-ner Lösung auf dem Intervall zwischen die-sen beiden Stellen interessiert, so sprichtman von einer Randwertaufgabe (RWA)(Randwertproblem (RWP); englich: Boun-dary Value Problem (BVP)).

Die Funktion bvp4c realisiert eineKollokationsmethode, um Zweipunkt-Randwertaufgaben zu lösen. Diese Systemekönnen in folgender Form geschriebenwerden:

RWA :

{ddxy(x) = f(x,y(x))g(y(x0),y(xf )) = 0

x0 ≤ x ≤ xf

Hier ist, wie auch bei Anfansgwertauf-gaben, y eine unbekannte vektorwertigeFunktion und f eine gegebene vektorwer-tige Funktion von x und y. Die Lösungwird auf dem Intervall [x0, xf ] erwartet unddie gegebene Funktion g spezi�ziert die Ne-benbedingungen. Bei Randwertaufgaben istes üblich, die unabhängige Variable mitx statt mit t zu bezeichnen, weil sie bei

Anwendungen meist eine Ortsvariable ist.Dies ist auch konsistent mit der Matlab-Dokumentation. Das Lösen von Randwert-aufgaben ist im Allgemeinen anspruchsvol-ler als das Lösen von Anfangswertaufga-ben. Insbesondere ist es nicht ungewöhn-lich, dass eine Randwertaufgabe mehrereLösungen hat. Daher ist es beim Aufrufvon bvp4c notwendig, eine Schätzung fürdie Lösungsfunktion mitanzugeben.

Als Beispiel betrachten wir die Zweipunkt-Randwertaufgabe:

RWA :

{u′′ = 6x

u(0) = 0 u(1) = 10 ≤ x ≤ 1.

Diese ist analytisch lösbar und hat die ein-deutige Lösung

u(x) = x3.

Dies sieht man so. Die allgemeine Lösungder Di�erenzialgleichung u′′ = 6x ist

u(x) = x3 + c1x + c2.

Die Randbedingungen bestimmen dann dieKonstanten c1 und c2

0 = u(0) = c2 ⇒ c2 = 01 = u(1) = 1 + c1 ⇒ c1 = 0

Wir verwenden nun bvp4c, um diese Lö-sung zu bestätigen. Im einfachsten Fallhat bvp4c drei Funktionsargumente: Ei-ne Funktion, in der das Di�erenzialglei-chungssystem de�niert ist, eine Funktion

155 Copyright c© G. Gramlich

mit den Randbedingungen und eine drit-te Funktion, die ein Startgitter sowie eineAnfangsvermutung für die Lösungsfunktionauf diesem Gitter beinhaltet. Das Di�eren-zialgleichungssystem wird genauso gehand-habt wie bei den Anfangswertproblemen,nämlich als System erster Ordnung. Es istdaher als erstes notwendig, die Di�eren-zialgleichung zweiter Ordnung in ein Sys-tem erster Ordnung umzuschreiben. Wirschreiben gleich das ganze Randwertpro-blem zweiter Ordnung in ein System ers-ter Ordnung. Mit den De�nitionen y1(x) =u(x) und y2(x) = u′(x) erhalten wir dieRandwertaufgabe erster Ordnung:

RWA :

y′1(x) = y2(x)y′2(x) = 6x

y1(0) = 0, y1(1) = 1

0 ≤ x ≤ 1

Das Di�erenzialgleichungssystem wird nunin der Funktion odes de�niert

function dydx = odes(x,y)

dydx = [y(2);6*x];

Die Randbedingungen werden durch eineResiduenfunktion ausgedrückt. Die beidenRandbedingungen y1(0) = 0, y1(1) = 1werden dann wie folgt (zum Beispiel in derFunktion bcs) programmiert:

function res = bcs(yx0,yxf)

res = [yx0(1);yxf(1)-1];

Als Startlösungsfunktionen wählen wir dieNullfunktion.

function yinit = guess(x)

yinit = [0;0];

Die folgenden Matlab-Zeilen berechnetdie Lösung und stellt sie gra�sch dar.

solinit = bvpinit(linspace(0,1,5),...

@guess);

sol = bvp4c(@odes,@bcs,solinit);

xint = linspace(0,1);

sxint = deval(sol,xint);

plot(xint,sxint(1,:))

Der Aufruf der Funktion bvpinit kreiertdie Struktur solinit, welche die Datenbeinhaltet, die durch Auswerten von guess

an fünf äquidistanten Punkten von 0 bis 1berechnet werden; in diesem Fall alle Null.

Im Allgemeinen hat ein Aufruf von bvp4c

die Form:

sol = bvp4c(@odefun,@bcfun,solinit,

options,p1,p2,...)

In odefun wird das Di�erenzialgleichungs-system ausgewertet, in bcfun werden dieRandbedingungen ausgewertet, solinit

beschreibt den Anfangszustand, in options

können Optionen übergeben werden unddie Eingabeargumente p1, p2 erlauben zu-sätzliche Parameter.

Zusammenfassend sind für die Durchfüh-rung folgende Schritte empfehlenswert:

1. Schreiben Sie das Problem als Rand-wertproblem erster Ordnung.

2. Schreiben Sie eine Matlab-Funktion,in der das System erster Ordnung de-�niert ist.

3. Schreiben Sie eine Funktion für dieRandbedingungen.

4. Schreiben Sie eine Funktion für die

156 Copyright c© G. Gramlich

Startnäherung.

5. Rufen Sie den RWA-Löser bvp4c auf.

6. Zeigen Sie die Resultate.

Aufgabe 118 (Randwertaufgaben)Wir betrachten die Randwertaufgabe

RWA :

{y′′ = −y

y(0) = 3, y(π/2) = 70 ≤ x ≤ π/2.

(a) Zeigen Sie, dass

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

die eindeutige Lösung ist.

(b) Bestätigen sie (a), indem Sie die Lö-sung mit der Funktion bvp4c nume-risch berechnen.

Lösung:

(a) Die allgemeine Lösung der Di�erenzial-gleichung ist

y(x) = c1 sin(x) + c2 cos(x).

Die unbekannten Konstanten c1 und c2

können dann aus den Randbedingun-gen bestimmt werden:

3 = y(0) = c1 sin(0) + c2 cos(0) = c2

und

7 = y(π/2) = c1 sin(π/2)+c2 cos(π/2)= c1.

Die Lösung der Randwertaufgabe istsomit

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

(b) Die numerische Lösung mit der Mat-lab-Funktion bvp4c erledigt der fol-gende Function-File:

function RWA

solinit = bvpinit(linspace(0,...

pi/2,5),@guess);

sol = bvp4c(@odes,@bcs,solinit);

xint = linspace(0,pi/2);

sxint = deval(sol,xint);

plot(xint,sxint(1,:),'r')

%----------------------------------

% Subfunctions.

%----------------------------------

function dydx = odes(x,y)

dydx = [y(2);-y(1)];

%----------------------------------

function res = bcs(ya,yb)

res = [ya(1)-3;yb(1)-7];

%----------------------------------

function yinit = guess(x)

yinit = [0;0];

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

61.3 Partielle Di�erenzialgleichungen

Mit der Funktion pdepe kann man partiel-le Di�erenzialgleichungen lösen. Matlabspdepe löst eine Klasse von parabolischenbzw. elliptischen partiellen Di�erenzialglei-chungssysteme (PDE: Partial Di�erentialEquation). Die allgemeine Klasse hat dieForm:

c(x, t, u,ux)ut =x−m(xmf(x, t, u,ux))x + s(x, t, u,ux),

157 Copyright c© G. Gramlich

wobei u die gesuchte Funktion ist. Sie hängtvon den Variablen x (Raumvariable) undt (Zeitvariable) ab und kann vektorwertigsein. Für die unabhängigen Variablen x undt gilt: x0 ≤ x ≤ xf und t0 ≤ t ≤ tf . DieZahl m kann die Werte 0, 1 oder 2 haben,je nachdem, ob keine, Zylinder- oder Ku-gelsymmetrie vorliegt. Die Funktion c istmatrixwertig und die Fluÿ- bzw. Quellen-funktionen f , s sind vektorwertig. Anfangs-und Randbedingungen müssen in folgenderForm zur Verfügung gestellt werden. Fürx0 ≤ x ≤ xf und t = t0 muss die Lösunggleich u0(x) sein, wobei die Funktion u0 ge-geben ist. Für x = x0 und t0 ≤ t ≤ tf mussdie Lösung dem Gleichungssystem

px0(x, t, u) + qx0(x, t)f(x, t, u,ux) = 0

genügen, wobei die Funktionen px0 und qx0

gegeben sind. Ähnlich muss für x = xf undt0 ≤ t ≤ tf

pxf(x, t, u) + qxf

(x, t)f(x, t, u,ux) = 0

gelten, wobei die Funktionen pxfund qxf

gegeben sind. Für weitere Details siehe docpdepe (help pdepe).

Ein Aufruf von pdepe hat die allgemeineForm

sol = pdepe(m,@pdefun,@pdeic,...

@pdebc,xmesh,tspan,...

options,p1,p2,...);

was der Syntax von bvp4c gleicht.

Als Beispiel betrachten wir die eindimen-sionale Wärmeleitungsgleichung

ut(x, t) = uxx(x, t)

für 0 ≤ x ≤ 1 und 0 ≤ t ≤ 0.5 mit derAnfangsbedingung

u(x, 0) = sin(πx)

und den Randbedingungen

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

Dieses Problem ist mit pdepe lösbar, da esdie von pdepe erlaubte Form besitzt. Es istm = 0, c(x, t, u) = 1, f(x, t, u, ux) = ux

und s(x, t, u, ux) = 0. Für x = x0 sindp(x, t, u) = u und q(x, t, u) = 0 die Rand-bedingungen, und für x = xf haben wirp(x, t, u) = u und q(x, t, u) = 0. Die Functi-on pdeWaerme realisiert die Lösung des Pro-blems.

function pdeWaerme

%Löst die eindimensionale Wärme-

%leitungungsgleichung mit den

%angegebenen Anfangs- und Rand-

%bedingungen.

m = 0;

t0 = 0;

tf = 0.5;

x0 = 0;

xf = 1;

xmesh = linspace(x0,xf,40);

tspan = linspace(t0,tf,20);

sol = pdepe(m,@pdefun,...

@pdeic,@pdebc,xmesh,tspan);

u = sol(:,:,1);

mesh(xmesh,tspan,u)

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

zlabel('u')

%----------------------------------

%Subfunctions.

%----------------------------------

158 Copyright c© G. Gramlich

function [c,f,s] =

pdefun(x,t,u,DuDx)

%Differenzialgleichung.

c = 1;

f = DuDx;

s = 0;

%----------------------------------

function u0 = pdeic(x)

%Anfangsbedingungen.

u0 = sin(pi*x);

%----------------------------------

function [px0,qx0,pxf,qxf] =

pdebc(x0,u0,xf,uf,t)

%Randbedingungen.

px0 = u0;

qx0 = 0;

pxf = uf;

qxf = 0;

Hierbei haben wir die Funktion linspace

verwendet, um ein Gitter zwischen x0 undxf , sowie eines zwischen t0 und tf zu erzeu-gen. Um die Lösung zu plotten, haben wirmesh verwendet. Die Abbildung 60 zeigt das

0

0.5

1

0

0.50

0.5

1

xt

u

Abbildung 60: Lösung der PDE

Ergebnis.

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

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

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

0 ≤ x ≤ 1, t ≥ 0

ist.Lösung: Leiten wir u(x, t) = e−π2t sin(πx)nach t ab, so erhalten wir die linke Seite derDi�erenzialgleichung

ut(x, t) = −π2 sin(πx)e−π2t.

Leiten wir u(x, t) = e−π2t sin(πx) zweimalnach x ab, so erhalten wir die rechten Seiteder Di�erentialgleichung

uxx(x, t) = −π2 sin(πx)e−π2t.

Da beide Seiten für alle x und t gleich sind,ist alles gezeigt. © . . . . . . . . . . . . . . . . . . . . . . .©

62 Statistik

Vorhersagen sind schwierig � vor allemüber die ZuknnftNiels Bohr.

Mit der Statistics Toolbox stehen Ihnen Sta-tistikfunktionen zur Verfügung. Die Tabelle32 zeigt ein paar grundlegende Funktionenfür die beschreibende Statistik. Ein paar

159 Copyright c© G. Gramlich

Beschreibende Statistik

corrcoef Korrelationsmatrixcov Kovarianzmatrixgeomean Geometrischer Mittelwertmad Mittlere absolute Abw.mean Arithmetischer Mittelwertmedian Zentralwert (Median)mode Häu�gster Wertrange Spannweitestd Standardabweichungtabulate Häu�gkeitstabellevar Varianz

Tabelle 32: Grundlegende Funktionen

Dichtefunktionen

binopdf Binomialdichtegeopdf Geometrische Dichtenormpdf Normaldichteunidpdf Diskrete gleichmäÿige Dichteunifpdf Stetige gleichmäÿige Dichte

Tabelle 33: Dichtefunktionen

Dichtefunktionen sind in Tabelle 33 zu se-hen.

Mit doc stats (help stats) erhalten Sieeinen Überblick über alle Funktionen derStatistics Toolbox.

63 Kombinatorik

Wir zeigen, wie man in Matlab kombina-torische Probleme lösen kann.

63.1 Fakultäten, Binomial- undPolynomialzahlen

Die Funktion factorial berechnet dieFakultät-Funktion n!. Da in doppelter Ge-nauigkeit nur ungefähr 15 Stellen exaktsind, ist das Ergebnis nur für n ≤ 21 exaktrichtig. Sonst sind nur die ersten 15 Stellenexakt genau.

>> factorial(6)

ans =

720

Eine Alternative stellt die Funktion prod

dar.

>> prod(1:6)

ans =

720

Mit der Symbolic-Toolbox hat man Zu-gri� auf Maple-Funktionen, zum Bei-spiel auf die Funktion factorial, die dieFakultäts-Funktion symbolisch berechnet,siehe mhelp factorial.

160 Copyright c© G. Gramlich

>> maple('factorial',6)

ans =

720

>> syms n

>> maple('factorial',n)

ans =

n!

oder einfach

>> maple('n!')

ans =

n!

>> maple('6!')

ans =

720

da Maple das !-Zeichen als Fakultätszei-chen erkennt.

Die Funktion perms gibt alle Permutatio-nen an. Von den drei verschiedenen Objek-ten 1, 2 und 3 gibt es genau sechs Permu-tationen. Diese sind:

>> perms(1:3)

ans =

3 2 1

3 1 2

2 3 1

2 1 3

1 2 3

1 3 2

Mit der Funktion nchoosek kann man Bi-nomialzahlen berechnen.

Aufgabe 120 (Binomialzahlen)Wie viele Möglichkeiten gibt es aus n = 49verschiedenen Objekten k = 6 verschiedeneObjekte auszuwählen?Lösung: Es ist gibt

(nk

)Möglichkeiten. Al-

so ist

>> nchoosek(49,6)

ans =

13983816

Demnach beträgt die Wahrscheinlich-keit beim Lotto sechs richtige zu ha-ben 1/13983816 ≈ 7.1511 · 10−8 =0.000000071511. © . . . . . . . . . . . . . . . . . . . . . . ©

Mit der Anweisung nchoosek(1:n,k) er-halten Sie alle Anordnungsmöglichkeitenfür k Objekte ohne Wiederholung und ohneBerücksichtigung der Reihenfolge aus n ver-schiedenen Objekten. Zum Beispiel ist diesfür n = 5 und k = 3:>> nchoosek(1:5,3)

ans =

1 2 3

1 2 4

1 2 5

1 3 4

1 3 5

1 4 5

2 3 4

2 3 5

2 4 5

3 4 5

Aufgabe 121 (Binomialzahlen)Geben Sie alle Teilmengen der Menge{1, 2, 3, 4, 5, 6} mit genau vier Elementenan. Wieviel gibt es?

161 Copyright c© G. Gramlich

Lösung: Es ist:

>> nchoosek(1:6,4)

ans =

1 2 3 4

1 2 3 5

1 2 3 6

1 2 4 5

1 2 4 6

1 2 5 6

1 3 4 5

1 3 4 6

1 3 5 6

1 4 5 6

2 3 4 5

2 3 4 6

2 3 5 6

2 4 5 6

3 4 5 6

Demnach gibt es

>> nchoosek(6,4)

ans =

15

Möglichkeiten. © . . . . . . . . . . . . . . . . . . . . . . . . ©

Mit der Maple-Funktion multinomial

kann man Polynomialzahlen berechnen.

Aufgabe 122 (Polynomialzahlen)Berechnen Sie mit Matlab

(8

2,3,3

).

Lösung: Es ist

>> maple('with(combinat)');

>> maple('multinomial',8,2,3,3)

ans =

560

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

63.2 Permutationen ohneWiederholung

Die Anzahl der Permutationen ohne Wi-derholung kann man mit den Funktionenfactorial, prod, Maple-factorial unddemMaple-Zeichen ! berechnen, siehe Ab-schnitt 63.1. Die Permutationen selbst sindmit der Funktion perms zu erhalten.

63.3 Variationen ohne Wiederholung

Die Anzahl der Variationen ohne Wiederho-lung kann mit den Funktionen zur Berech-nung der Fakultäten und Binomialzahlenausgerechnet werden, siehe Abschnitt 63.1.

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

>> factorial(30)/factorial(30-5)

ans =

17100720

oder aber

>> factorial(5)*nchoosek(30,5)

ans =

17100720

63.4 Kombinationen ohneWiederholung

Siehe Abschnitt 63.1.

162 Copyright c© G. Gramlich

63.5 Permutationen mit Wiederholung

Aufgabe 123 (Permutationen m.W.)Berechnen Sie mit Matlab PW (2, 3, 3).Lösung: Es ist PW (2, 3, 3) = 8!/(2! · 3! · 3!)auszurechnen.

>> maple('with(combinat)');

>> maple('multinomial',8,2,3,3)

ans =

560

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

63.6 Variationen mit Wiederholung

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

>> VW = 26^6

VW =

308915776

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

63.7 Kombinationen mit Wiederholung

Aufgabe 125 (Variationen m.W.)Berechnen Sie mit Matlab KW (6, 2).Lösung: Es ist KW (n, k) =

(n+k−1

k

).

>> KW = nchoosek(6+2-1,2)

KW =

21

oder

>> KW = maple('binomial',6+2-1,2)

KW =

21

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

63.8 Weitere Funktionen

Verfügt man über die Extended SymbolicToolbox, also über alle Maple-Funktionen,so gibt es das combinat-Paket. Damit ste-hen noch mehr Funktionen

bell binomial cartprod

character Chi choose

composition conjpart decodepart

encodepart fibonacci firstpart

graycode inttovec lastpart

multinomial nextpart numbcomb

numbcomp numbpart numbperm

partition permute powerset

prevpart randcomb randpart

randperm setpartition stirling1

stirling2 subsets vectoint

zur Lösung kombinatorischer Probleme zurVefügung, siehe mhelp combinat.

64 Zufallszahlen

Zufallszahlen sind im wissenschaftlichenRechnen ein nützliches Hilfsmittel. In vie-len Fällen werden Zufallszahlen in einerrechnergestützten Simulation eines komple-xen Problems eingesetzt, zum Beispiel beider Planung von Produktionssystemen odervon Groÿprojekten. Diese Simulation kanndann auf dem Rechner immer und immerwieder ausgeführt werden, und die Resul-

163 Copyright c© G. Gramlich

tate können analysiert werden. Oft werdenZufallszahlen auch als Testdaten benutzt.Hat man zum Beispiel einen Algorithmusentwickelt, der ein beliebiges Gleichungs-system lösen soll, so kann man eine Matrixals auch eine rechte Seite des Systems zumTesten des Algorithmus mit Zufallszahlengenerieren.

Zufallszahlen werden am Computer mitHilfe spezieller Algorithmen berechnet. Sol-che Algorithmen nennt man Zufallsgenera-toren. Grundlegend ist dabei die Erzeugungvon Zufallszahlen x1, x2, . . ., xn, derenWer-te sich in sehr guter Näherung wie Realisie-rungen von unabhängigen auf [0, 1] gleich-verteilten Zufallsvariablen X1, X2, . . ., Xn

verhalten. Da die Werte x1, x2, . . ., xn

tatsächlich jedoch berechnet werden, sindsie nicht echt zufällig. Man spricht des-halb auch von Pseudo-Zufallszahlen, diesich (fast) wie echte verhalten. Mit Hil-fe von gleichverteilten Zufallszahlen lassensich Zufallszahlen für andere Verteilungendurch geeignete Transformationen erzeu-gen. Je nach Verteilung kann dies sehr ein-fach oder aber auch kompliziert sein. In derStatistik Toolbox wird Ihnen diese Arbeitabgenommen, siehe Abschnitt 64.4.

In Matlab gibt es zwei eingebaute Funk-tionen rand und randn, mit denen manZufallszahlen erzeugen kann. Wir wollenim folgenden diese beiden Funktionen vor-stellen und miteinander vergleichen. Dabeiwerden uns ihre statistischen Eigenschaf-ten durch gra�sche Darstellungen verdeut-lichen.

64.1 Gleichverteilte Zufallszahlen

Zufallszahlen sind durch die Verteilung ih-rer Werte charakterisiert. Zum Beispielsind gleichverteilte Zufallszahlen dadurchgekennzeichnet, dass alle Werte der Zahlen-folge in einem bestimmten Intervall gleich-verteilt liegen. So erzeugt die Funktionrand(10,1) einen Spaltenvektor mit 10gleichmäÿig über das Intervall ]0, 1[ ver-teilten Zufallszahlen (Genaugenommen er-zeugt rand eine Gleitpunktzahl im abge-schlossenen Intervall [eps/2, (1− eps/2)]):

>> rand(10,1)

ans =

0.9501

0.2311

0.6068

0.4860

0.8913

0.7621

0.4565

0.0185

0.8214

0.4447

Der Aufruf rand(50,2) erzeugt eine Ma-trix mit 50 Zeilen und 2 Spalten mit Wer-ten zwischen 0 und 1. Testen Sie dies! All-gemein erzeugt der Aufruf rand(m,n) eine(m,n)-Matrix mit gleichverteilten Zufalls-zahlen zwischen 0 und 1.

In den Anwendungen werden oft auch Zu-fallszahlen gesucht, die in einem anderenIntervall als ]0, 1[ liegen. Mit der Matlab-Funktion rand ist auch dies leicht möglich.Zum Beispiel erzeugt die Anweisung

164 Copyright c© G. Gramlich

5 + 3*rand(n,1)

einen Spaltenvektor mit n gleichverteiltenWerten im Intervall ]5, 8[.

Mit rand und der eingebauten Matlab-Funktion floor lassen sich auch leichtganzzahlige Zufallszahllen generieren. DieRundungsfunktion floor(A) rundet alleElemente von A auf die nächstkleinere gan-ze Zahl (nächste ganze Zahl in Richtung−∞). Der folgende Function-File realisiertdas Erzeugen von ganzzahligen Zufallszah-len. Auÿer der Gröÿe der gewünschten Ma-trix lässt sich auÿerdem mit k ein Intervall[-k:k] angeben, aus dem die Zahlen zufäl-lig erzeugt werden. Wird k nicht angegeben,so wird k=9 gewählt.

function A = randganz(m,n,k)

if nargin == 1, n=m; end;

if nargin < 3, k=9; end;

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

Aufgabe 126 (Zufallszahlen)Die Matlab-Funktion rand(n) erzeugt ei-ne n × n-Matrix, deren Einträge gleichver-teilte Zufallszahlen aus dem Intervall ]0, 1[sind. Schreiben Sie einen Function-File, dern×n-Matrizen erzeugt, deren Einträge Zah-len aus {1, 2, 3, 4, 5, 6} sind.Lösung: Dies erreicht man zum Beispielmit folgender Funktion. Die Funktion ceil

rundet zur nächsten ganzen Zahl auf(nächste ganze Zahl in Richtung +∞).

function A = randganz1bisk(m,n,k)

if nargin == 1, n=m; end;

if nargin < 3, k=9; end;

A = ceil( k*rand(m,n) );

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

64.2 Normalverteilte Zufallszahlen

Erzeugen wir Zufallszahlen mit der Funkti-on rand, so treten alle Werte in einem be-stimmten Intervall gleichmäÿig häu�g auf.In den Anwendungen sucht man oft auchZufallszahlen, deren Werte nicht gleich-mäÿig auftreten, sondern wo bestimm-te Werte häu�ger vorkommen als andere,man nennt sie normalverteilte Zufallszahlen(auch Gauÿsche Zufallszahlen genannt).

In Matlab erzeugt man normalverteilteZufallszahlen mit Mittelwert 0 und Vari-anz 1 mit der Funktion randn. Der Befehlrandn(10,1) erzeugt zum Beispiel folgendenormalverteilte Zufallszahlen:

ans =

-0.4326

-1.6656

0.1253

0.2877

-1.1465

1.1909

1.1892

-0.0376

0.3273

0.1746

Will man eine normalverteilte n-wertigeZufallsfolge mit Mittelwert 10 und Stan-dardabweichung 5 erzeugen, so erreicht mandies durch:

165 Copyright c© G. Gramlich

10+5*randn(n,1)

64.3 Im Vergleich: Gleich- undnormalverteilte Zufallszahlen

Histogramme bieten eine geeignete Mög-lichkeit, um Zufallszahlen gra�sch darzu-stellen. Der Script-File

subplot(2,1,1)

yg = rand(10000,1);

hist(yg,25)

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

set(h,'FaceColor','b',...

'EdgeColor','w')

axis([-1 2 0 600])

title('Gleichmäÿigverteilte

Zufallszahlen')

yn = randn(10000,1);

x = min(yn):0.2:max(yn);

subplot(2,1,2)

hist(yn,x)

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

set(h,'FaceColor','b',...

'EdgeColor','w')

title('Normalverteilte

Zufallszahlen')

illustriert die beiden Matlab-Funktionenrand und randn gra�sch, siehe Abbildung61. Das obere Histogramm zeigt, wie sichdie 10000 Zufallszahlen gleichmäÿig überdas Intervall ]0, 1[ verteilen. Mit dem Be-fehl rand(10000,1) wird ein Spaltenvek-tor mit 10000 Werten erzeugt und yg zuge-

ordnet. DieMatlab-Funktion hist erstelltnun das Histogramm. Mit dieser Funkti-on kann man verschiedene Ziele erreichen.Ein Aufruf wie hist(yg,25) erzeugt einHistogramm, das angibt, wie oft ein Wertin einem Subintervall von ]0, 1[ vorkommt.Die Zahl 25 schreibt vor, das Intervall ]0, 1[in 25 gleichgroÿe Subintervalle einzuteilenund 25 Rechtecks�ächen zu zeichnen, de-ren Breite die Subintervallänge und derenHöhe die Anzahl der Zufallswerte in demjeweiligen Subintervall angeben. Das unte-re Histogramm in Abbildung 61 zeigt, wie

−1 −0.5 0 0.5 1 1.5 20

200

400

600Gleichmäßigverteilte Zufallszahlen

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

500

1000Normalverteilte Zufallszahlen

Abbildung 61: Zufallszahlen

sich 10000 Zufallszahlen mit Mittelwert 0und Varianz 1 ähnlich einer Gauÿschen Glo-ckenkurve verteilen.

Der Skript-File

Punkte = rand(10000,2);

subplot(1,2,1)

plot(Punkte(:,1),Punkte(:,2),'.')

title('Gleichmäÿigverteilte

Zufallszahlen')

axis([0 1 0 1])

166 Copyright c© G. Gramlich

axis('square')

Punkte = randn(10000,2);

subplot(1,2,2)

plot(Punkte(:,1),Punkte(:,2),'.')

title('Normalverteilte

Zufallszahlen')

axis([-3 3 -3 3])

axis('square')

erzeugt die Abbildung 62, 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 62: Zufallszahlen

zwischen rand und randn klar zu machen.

Aufgabe 127 (Zufallszahlen)Erzeugen Sie zehn gleichverteilte Zufalls-zahlen im jeweils angegebenen Intervall

(a) zwischen 0 und 10.

(b) zwischen -1 und 1.

(c) zwischen -20 und 10.

(d) zwischen −π und π.

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

(a) 10*rand(10,1).

(b) -1+2*rand(1,10).

(c) -20+30*rand(1,10).

(d) -pi+2*pi*rand(1,10).

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

Aufgabe 128 (Zufallszahlen)Erzeugen Sie tausend gleichverteilte Zu-fallszahlen

(a) mit Mittelwert 1/2 und Varianz 1/12

(b) mit Mittelwert 0 und Varianz 1/12

(c) mit Mittelwert 0 und Varianz 1

(d) mit Mittelwert 0 und Varianz 3

Lösung: Dies kann man wie folgt erreichen:

(a) rand(1000,1)

(b) rand(1000,1)-0.5

(c) sqrt(12)*(rand(1000,1)-0.5)

(d) sqrt(3*12)*(rand(1000,1)-0.5)

mit den Funktionen mean und var könnenSie das überprüfen; am Besten mit nochmehr Zahlen. © . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 129 (Zufallszahlen)Erzeugen Sie tausend normalverteilte Zu-fallszahlen

(a) mit Mittelwert 1.0 und Varianz 0.5.

(b) mit Mittelwert -5.5 und Standardab-weichung 0.25.

(c) mit Mittelwert -5.5 und Standardab-weichung 1.25.

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

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

(b) 0.25*randn(1000,1)-5.5;.

(c) 1.25*randn(1000,1)-5.5;.

167 Copyright c© G. Gramlich

Dies gilt wegen den Transformationsfor-meln für den arithmetischen Mittelwertbzw. für die Varianz: Ist yi = axi + b, sogilt y = ax + b und s2

Y = a2s2X . Hier gilt,

dass die Zahlen xi den Mittelwert null unddie Standardabweichung (Varianz) eins ha-ben. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

64.4 Andere Verteilungen

Wenn Sie über die Statistik Toolbox verfü-gen, so können Sie Zufallszahlen konforta-bel und interaktiv mit randtool erzeugen;für ingesamt 20 verschiedene Verteilungenzum Beispiel für die Exponential- oder Bi-nomialverteilungen. Die Abbildung 63 zeigt

0 2 4 6 80

10

20

30

40

50

Counts

Values

Samples

Abbildung 63: Exponentialverteilung

eine Exponentialverteilung mit Erwartung-wert 1.

65 Stochastische Simulationen

Eine stochastische Simulation liegt vor,wenn es um die Lösung von Problemen

geht, bei denen Zufallsein�üsse auftreten.Stochastische Simulationsmethoden werdenauch Monte Carlo Methoden genannt.Solche Methoden sind nützlich bei:

• Nichtdeterministischen (stochastischen)Prozessen.

• Deterministischen Systemen, die zu kom-pliziert sind, um sie analytisch zu behan-deln.

• Deterministischen Problemen, die sohoch dimensional sind, dass Standard-diskretisierungsverfahren ungeignet sind(zum Beispiel Monte Carlo Integra-tionen).

Die beiden grundsätzlichen Voraussetzun-gen stochastischer Simulationsmethodensind:

• Kenntnis über relevante Wahrscheinlich-keitsverteilungen.

• Unterstützung bei der Erzeugung vonZufallszahlen.

Mit gleichverteilten Zufallszahlen könnenwir zum Beispiel Spiele mit dem Glücks-rad am Rechner simulieren. Wenn wir et-wa die relative Häu�gkeit von Werten be-rechnen, die im Intervall [0.2, 0.6] liegen,und mit der Wahrscheinlichkeit P (0.2 ≤X ≤ 0.6) = 0.4 vergleichen, dann solltefür gröÿeres n die relative Häu�gkeit nachdem Gesetz groÿer Zahlen mit hoher Wahr-scheinlichkeit bei 0.4 liegen. Auch sollte dieempirische Verteilungsfunktion der gezoge-nen Zahlen x1, x2, . . ., xn sich der [0, 1]-Gleichverteilung annähern.

Wir �spielen� nun Glücksrad am Computer,indem wir wiederholt auf [0, 1] gleichverteil-

168 Copyright c© G. Gramlich

ter Zufallszahlen ziehen. Das Intervall [0, 1]wird wie in Abbildung 64 in zehn Teilin-

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

tervalle der Länge 0.1 zerlegt und zu jedem�Spiel� wird festgelegt, in welches Teilint-zervall die gezogene Zufallszahl fällt. Abbil-dung 64 zeigt links das resultierende Histo-gramm mit den relativen Häu�gkeiten fürdie zehn Teilklassen nach n = 100 Spielen.Man sieht, dass die relativen Häu�gkeitenzum Teil noch deutlich von dem zu erwar-tenden Wert 0.10 abweichen. Für n = 1000haben sich diese Häu�gkeiten bereits we-sentlich besser an den Wert 0.10 stabilisiert.Anders ausgedrückt: Die empirische Vertei-lung der gezogenen Zahlen approximiert diewahre Gleichverteilung besser.

Aufgabe 130 (Stochastische S.)Schreiben Sie eine Simulation, die das Volu-men der Einheitskugel {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 er-zeugt uniform verteilte Zufallsvariablen inQn. Die Wahrscheinlichkeit, dass einer die-ser Vektoren in Bn ist, ist V ol(Bn)

V ol(Qn) mitV ol(Qn) = 2n. Betrachtet man also z Zu-fallsvariablen, die durch rand(n,1)*2-1 er-zeugt werden und de�niert die VariableInside als die Anzahl derjenigen Vektoren,die in Bn liegen, so liefert V ol(Qn)· Inside

z ei-ne Schätzung für V ol(Bn). Man nennt dieseMethode Monte Carlo Methode.

Somit löst das folgendeMatlab Script-Filedie gestellte Aufgabe:

n=4;

Inside=0;

VolBn=zeros(500,1);

for k=1:500

A=-1+2*rand(n,100);

Inside=Inside+sum(sum(A.^2)<=1);

VolBn(k)=Inside/(k*100)*2^n;

end

plot(VolBn)

VolBn(500)

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

65.1 Näherung für π

Mit stochastischen Simulationen ist esmöglich, Antworten auch auf nicht-stochastische Fragestellungen zu geben.Mit einer stochastischen Simulation werden

169 Copyright c© G. Gramlich

wir nun eine Näherung für die Kreiszahlπ = 3.14159 . . . berechnen.

Wir denken uns zunächst folgendes Experi-ment, wozu man eine Zielscheibe und Dart-pfeile benötigt. Die Zielscheibe besteht auseinem Quadrat und einem einbeschriebenenKreis. Dann werfen wir nach dem Zufalls-prinzip mit Dartpfeilen auf diese Scheibeund bestimmen die relative Häu�gkeit derKreistre�er, das heiÿt

h =Anzahl der Tre�erAnzahl der Würfe

.

Hierbei werden nur Würfe gezählt, bei de-nen mindestens das Quadrat getro�en wur-de. Schreibt man die relativen Häu�gkeitender Kreistre�er auf, so stellt man fest, dasssie sich mit zunehmender Wurfzahl demWert π/4 nähert, denn die relative Häu-�gkeit h der Kreistre�er wird mit zuneh-mender Wurfzahl etwa dem Verhältnis (Flä-cheninhalt des Kreises) zu (Flächeninhaltdes Quadrates) entsprechen. Ist also r derKreisradius, so gilt: h ≈ r2π

4r2 = π4 und somit

π ≈ 4h.

Wir führen dieses Experiment nicht realaus (selbstverständlich können Sie dies tun,wenn Sie wollen), sondern simulieren es aufdem Computer. Wie ist das möglich? DieWahrscheinlichkeit eines zufälligen Ereig-nisses ist die idealisierte relative Häu�gkeit,mit welcher dieses vorkommt, wenn das zu-gehörige Zufallsexperiment sehr oft wieder-holt wird. Der folgende Script-File realisiertdie Simulation.

%----------------------------------

% Script-File: Pfeilwurf.

%

% Simulation von 50 000 Pfeil-

% würfen zur Näherungsberechnung

% von Pi.

%----------------------------------

AnzahlimKreis = 0;

PiNaeherung = zeros(500,1);

for k=1:500

x = -1+2*rand(100,1);

y = -1+2*rand(100,1);

AnzahlimKreis = AnzahlimKreis

+ sum(x.^2+y.^2<=1);

PiNaeherung(k) =

4*AnzahlimKreis/(k*100);

end

plot(PiNaeherung)

title(sprintf('Näherung von Pi =

%5.3f',PiNaeherung(end)));

xlabel('mal Hundert')

Die Abbildung 65 zeigt das Ergebnis der

0 100 200 300 400 5003.05

3.1

3.15

3.2

3.25

3.3Näherung von Pi = 3.144

mal Hundert

Abbildung 65: Näherung für π

Simulation. Siehe auch Aufgabe 173.

170 Copyright c© G. Gramlich

65.2 Zum Ziegenproblem

In einer Spielshow ist als Hauptpreis einAuto ausgesetzt. Hierzu sind auf der Bühnedrei verschlossene Türen aufgebaut. Hintereiner rein zufällig ausgewählten Tür be�n-det sich der Hauptpreis, hinter den beidenanderen jeweils eine Ziege. Der Kandidatwählt eine der Türen, beispielsweise Tür1 aus; diese bleibt aber vorerst verschlos-sen. Der Spielleiter, der weiÿ, hinter welcherTür das Auto steht, ö�net daraufhin mitden Worten: �Soll ich Ihnen mal etwas zei-gen?�eine der beiden anderen Türen, zumBeispiel Tür 3, und eine Ziege schaut insPublikum. Der Kandidat hat nun die Mög-lichkeit, bei seiner ursprünglichen Wahl zubleiben oder die andere verschlossene Tür(in unserem Beispiel Nr.2) zu wählen. Ererhält dann den Preis hinter der von ihmzuletzt gewählten Tür. In dem folgendenSkript �nden Sie die Antwort auf diese Fra-ge.

%----------------------------------

% Script-File: Ziegen

%

% Simulation des Ziegenproblems.

% Es werden zehn Versuche mit

% jeweils zehntausend

% Durchgängen simuliert.

%----------------------------------

%Zehn Versuche.

for i=1:10

%Zehntausend Durchgänge.

%Zufall wird vorbereitet.

%Es wird eine (10000,3)-Zu-

%fallsmatrix mit den Werten

% 1,2 und 3 erzeugt.

a = ceil(3*rand(10000,3));

%Zufallswahl der Autotür A.

A = a(:,1);

%Zufällige Erstwahl W1.

W1 = a(:,2);

%Moderator will Tür M öffnen.

M = a(:,3);

%M darf keine Autotür (A) sein

%und auch nicht die gewählte

%Tür (W1).

for j=1:10000

while ( (M(j)==A(j)) |...

(M(j)==W1(j)) )

M(j) = ceil(3*rand(1,1));

end

end

%W2 wäre die Tür, zu der nun

%gewechselt werden kann. Es

%muss sein: M+W1+W2=6.

W2 = 6-M-W1;

%Wenn W2 die Autotür ist, ein

%Punkt für 'Wechseln ist

%richtig'. Sonst ein Punkt für

%'Wechseln ist falsch', da W1

%gleich A ist. Die Variablen R

%und F zählen das richtige bzw.

%falsche Wechseln.

R = sum(W2==A);

F = 10000-R;

sprintf('Wechseln ist richtig:

%3.0f\t Wechseln ist falsch:

%3.0f',R,F)

subplot(2,5,i); pie([R,F]);

end

%Grafische Ausgabe als

%Kreisdiagramm.

legend('Wechseln ist richtig',

171 Copyright c© G. Gramlich

'Wechseln ist falsch');

65.3 Das Geburtstagsparadox

Stellen wir uns vor, dass sich in einemRaum eine gewisse Anzahl von Personenbe�ndet. Wir interessieren uns dafür, obzwei am gleichen Tag Geburtstag haben.Wie viele Personen müssen vorhanden sein,damit garantiert zwei am gleichen Tag Ge-burtstag haben? Das ist eine einfache Fra-ge: Da das Jahr 365 Tage hat, haben von366 Personen bestimmt zwei am gleichenTag Geburtstag (Wir gehen auf Schaltjah-re nicht ein). Eine wesentlich interessantereFrage ist: Wie viele Personen müssen vor-handen sein, damit es wahrscheinlich ist,dass zwei am gleichen Tag Geburtstag ha-ben? Genauer: Wie viele Personen brauchtman, dass mit einer Wahrscheinlichkeit vonüber 50% zwei am gleichen Tag Geburtstaghaben? Die Antwort ist überraschend: Be-reits 23 Personen reichen aus, um die Wahr-scheinlichkeit für einen gleichen Geburtstagauf über 50% zu bringen. Achtung: Es istweder danach gefragt, dass zwei am 1. Ja-nuar Geburtstag haben oder dass jemandam gleichen Tag wie Sie Geburtstag hat,sondern danach, ob zwei Leute am 1. Janu-ar oder am 2. Januar oder usw. Geburtstaghaben.

In einem Raum sind n Personen versam-melt. Unter der Voraussetzung, dass jedesJahr 365 Tage hat (es gibt keine Schaltjah-re) und dass die Geburtstage übers Jahrgleichverteilt sind, ist die Wahrscheinlich-keit dafür, dass mindestens zwei Personen

am gleichen Tag Geburtstag haben gegebendurch die Formel:

P = 1− 364 · 363 · · · (365− n + 1)365n−1

Für n = 23 ergibt sich 0.5073 = 50.73%und für n = 50 bereits 0.9704 = 97.04%.

Diese Resultate der Wahrscheinlichkeitsre-chung lassen sich simulationsmäÿig bestäti-gen. Dazu dient der folgende Script-File.

%----------------------------------

% Script-File: Geburtstag

%

% Das Geburtstagsparadox.

%----------------------------------

clear all

%kmax: Anzahl der Simulationen.

kmax = 5000;

%n: Anzahl der Personen im Raum.

for n = [5,10,15,20,22,23,25,...

30,35,40,45,50,55]

r = 0;

for k=1:kmax

%Zufallszahlen zwischen 1

%und 365.

g = ceil(365*rand(n,1));

for i=1:n

a = g-g(i)*ones(n,1);

if( sum(~a)>=2 )

%Zwei Zahlen sind

%gleich.

r = r+1;

break

end

end

end

%Wahrscheinlichkeit.

p = r/kmax;

172 Copyright c© G. Gramlich

[n,p]

end

Die Ergebnisse der theoretischen Berech-nungen und der Simulation sind in Tabelle34 gegenü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

65.4 Bestimmte Integrale

Das bestimmte Integral∫ 1

0xxdx

kann vonMatlab nicht exakt (symbolisch)berechnet werden, siehe Abschnitt 60. Wirkönnen aber mit Hilfe der Näherung∫ 1

0f(x)dx ≈ 1

n

n∑i=1

f(xi)

einen geschätzten Wert erhalten. Hierbeisind xi gleichmäÿig verteilte Zufallszahlenaus dem Intervall ]0, 1[.

>> n = 1000;

>> x = rand(n,1);

>> y = x.^x;

>> sum(y)/n

ans =

0.7850

Somit ist also∫ 1

0xxdx ≈ 0.7850

66 Symbolisches Rechnen

Symbolisches Rechnen ist der Versuch, dieMethoden, die man beim Rechnen mit Pa-pier und Bleistift kennt, auf Computern ab-zubilden und dort schlieÿlich durchzufüh-ren.

Um mit Matlab symbolisch rechnen zukönnen, muss die Symbolic Math Toolboxinstalliert sein.

Symbolische Rechnungen basieren auf Va-riablen, denen nicht unbedingt Zahlen zu-

173 Copyright c© G. Gramlich

gewiesen sind. Man rechnet mit Symbo-len und Termen, wie man es vom Rech-nen mit Papier und Bleistift kennt. Arith-metische Operationen können exakt durch-geführt werden. Auÿerdem kann man Nä-herungen bis auf eine beliebig vorgegebe-ne gewünschte Anzahl von Stellen �nden.Man kann Polynome oder rationale Aus-drücke symbolisch addieren, subtrahierenund dividieren. Ausdrücke können di�eren-ziert werden und man erhält die gleichenErgebnisse, die bisher nur mit Bleistift undPapier zu erzielen waren. Ausdrücke könnensogar unbestimmt integriert werden, sofernsie Integrale in geschlossener Form besit-zen. Diese Möglichkeiten erleichtern das er-müdende und fehlerbedrohte Manipulierenkomplizierter Ausdrücke, das auch häu�gdas Vorspiel numerischer Behandlung bil-det. Mit symbolischem Rechnen lassen sichauch kleinere lineare Gleichungssysteme oh-ne Rundungsfehler lösen. Auf jeden Fall istsymbolisches Rechnen ein sich ständig ent-wickelndes Gebiet, dessen Bedeutung fürdas wissenschaftliche Rechnen zunehmenwird.

66.1 Erste Schritte

Durch

>> syms x t

werden die beiden symbolischen Variablenx und t erzeugt, mit denen man durch

>> 3*x^2+x*t-1

ans =

3*x^2+x*t-1

den Ausdruck 3x2 + xt− 1 kreiert.

Bekanntlich ist

a2 − b2

a− b= a + b.

>> syms a b

>> simplify((a^2-b^2)/(a-b))

ans =

a+b

Es ist

(a + b + c)2 = a2 + b2 + c2 + 2(ab + ac + bc)

>> syms a b c

>> expand((a+b+c)^2)

ans =

a^2+2*a*b+2*a*c+b^2+2*b*c+c^2

Mit dem pretty-Befehl kann man Formelnin etwas lesbarerer Form ausgeben.

Mit der Funktion simplify können sym-bolische Terme vereinfacht werden. In derMathematik lernt man die Gültigkeit vonsin(x)2 + cos(x)2 = 1. Mit der Funktionsimplify kann man dies bestätigen:

>> syms x

>> simplify( sin(x)^2+cos(x)^2 )

ans =

1

Substitutionen können mit der Funktionsubs durchgeführt werden. Die folgendenAnweisungen substituieren cos(x) anstellevon x.

>> syms x

>> subs( sqrt(1-x^2),x,cos(x) )

174 Copyright c© G. Gramlich

ans =

(1-cos(x)^2)^(1/2)

Matlab verfügt über viele eingebaute ma-thematische Funktionen mit denen mansymbolisch rechnen kann. Mit diesen vorde-�nierten Funktionen ist es uns dann mög-lich, weitere Funktionen zu konstruieren,indem man die entsprechenden Funktions-terme f(x) miteinander verküpft.

Funktionsterme sind Ausdrücke, das heiÿt,sie können wie gewöhnliche Terme erzeugtwerden. Angenommen wir wollen mit demFunktionsterm f(x) = 2x2+3x+4 arbeiten,zum Beispiel di�erenzieren oder integrieren,so de�niert man diesen wie folgt.

>> syms x

>> f = 2*x^2+3*x+4;

Danach kann man zum Beispiel f ′(x) =4x + 3 bilden.

>> diff(f)

ans =

4*x+3

Aufgabe 131 (Rangordnung)Berechnen Sie symbolisch:

(a) 2�10/10

(b) 2+3*4

(c) 1+2/3*4.

Lösung: Es ist

a) >> sym(2^10/10)

ans =

512/5

b) >> sym(2+3*4)

ans =

14

c) >> sym(1+2/3*4)

ans =

11/3

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

Aufgabe 132 (Potenzregeln)Bestätigen Sie die folgenden Rechenregeln:

(a) am · an = am+n

(b) am

an = am−n

Verwenden Sie die Matlab-Funktionsimplify.Lösung: � syms a n m

(a) >> simplify(a^m*a^n)

ans =

a^(m+n)

(b) >> simplify(a^m/a^n)

ans =

a^(m-n)

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

Aufgabe 133 (Rechnen)Berechnen Sie den Ausdruck

√16 + cos(π/3)

3√

8 + 4

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

>> sym((sqrt(16)+cos(pi/3))...

/(8^(1/3)+4))

175 Copyright c© G. Gramlich

also auch

>> (sym(sqrt(16)) + sym(cos(pi/...

3)))/sym(8^(1/3)+4)

liefert

ans =

3/4

Numerische Rechnung:

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

ans =

0.7500

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

Aufgabe 134 (Vereinfachen)Vereinfachen Sie den Ausdruck

x2 + 2xy + y2

x2 − y2

Lösung: Mit

>> syms x y

>> simplify((x^2-2*x*y+y^2)/...

(x^2-y^2))

erhält man

ans =

(-y+x)/(x+y)

Somit ist die Vereinfachung dann also

x2 + 2xy + y2

x2 − y2=

x− y

x + y.

Anmerkung: Man kann statt simplify

auch den Befehl simple verwenden. © . . . ©

Aufgabe 135 (Multiplikation)Multiplizieren Sie

(x2 + x + 1) · (x3 − x2 + 1).

Lösung: Mit

>> syms x

>> collect( (x^2+x+1)*(x^3-x^2+1))

ans =

x^5+x+1

sieht man, dass

(x2 + x + 1) · (x3 − x2 + 1) = x5 + x + 1

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

Aufgabe 136 (Potenzieren)Berechnen Sie

(1 + x)4.

Lösung: Mit

>> syms x

>> expand((1+x)^4)

ans =

1+4*x+6*x^2+4*x^3+x^4

sieht man, dass

(1 + x)4 = x4 + 4x3 + 6x2 + 4x + 1

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

Aufgabe 137 (Faktorisieren)Faktorisieren Sie das Polynom

x6 + x4 − x2 − 1.

Lösung: Mit

176 Copyright c© G. Gramlich

>> syms x

>> factor(x^6+x^4-x^2-1)

ans =

(x-1)*(1+x)*(1+x^2)^2

sieht man, dass

(x6+x4−x2−1) = (x−1)·(x+1)·(x2+1)2

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

66.2 Wie man Maple-Funktionenverwendet

Die Funktion maple erlaubt es, jedeMaple-Funktion direkt zu verwenden.Kennt man den Namen der gewünschtenMaple-Funktion, so kann man mit

mhelp <Name>

Maple-Online-Informationen erhalten.Mit dem Aufruf

>> mhelp index[function]

erhält man eine Liste aller Maple-Funktionen.

Als Beispiel betrachten wir den Befehl

>> mhelp gcd

Da man auf diese Art die Syntax derMaple-Funktion gcd erfahren hat, kannman nun die Funktion maple benutzen, umgcd zu verwenden. Die folgenden Zeilen zei-gen, wie man den gröÿten gemeinsamenTeiler der Polynome x2 − y2 und x3 − y3

berechnet:

>> syms x y

p1 = x^2-y^2;

p2 = x^3-y^3;

maple('gcd',p1,p2)

ans =

-y+x

Die Anweisungen

>> maple('gcd',225,725)

ans =

25

bestimmen den gröÿten gemeinsamen Teilervon 225 und 725.

66.3 Mathematische Funktionen

Matlab verfügt über viele eingebaute Ma-thematische Funktionen mit denen mansymbolisch rechnen kann. Mit diesen vorde-�nierten Funktionen ist es uns dann auchmöglich, weitere Funktionen zu konstruie-ren, indem man die entsprechenden Funk-tionsterme f(x) miteinander verküpft.

Funktionsterme sind Ausdrücke, das heiÿt,sie können wie gewöhnliche Terme erzeugtwerden. Angenommen wir wollen mit demFunktionsterm f(x) = 2x2+3x+4 arbeiten,zum Beispiel di�erenzieren oder integrieren,so de�niert man diesen wie folgt.

>> syms x

>> f = 2*x^2+3*x+4;

Danach kann man zum Beispiel f ′(x) =4x + 3 bilden.

>> diff(f)

177 Copyright c© G. Gramlich

ans =

4*x+3

Will man einen abstrakten Funktionstermf(x) erzeugen, das heiÿt einen Term, der ir-gendein spezieller Funktionsterm sein kann,so ist das durch die die Anweisung

>> f = sym('f(x)')

möglich. Hierdurch wird das symbolischeObjekt f erzeugt, das wie f(x) agiert, dasheiÿt, dem Objekt f ist bekannt, dass eineunabhängige Variable x existiert. Das demso ist, zeigen die folgenden Zeilen.

>> diff(f)

ans =

diff(f(x),x)

>> diff(f,'t')

ans =

0

Der Funktionsterm f(x) nach x abgeleitet,ergibt f ′(x) bzw. in Matlab-Terminologiediff(f(x),x); nach t abgeleitet ist er aber0, denn f(x) hängt nicht von t ab.

Damit können wir nun den Di�erenzenquo-tient der Funktion f im Punkt x bilden

>> syms xbar h

>> ( subs(f,xbar+h)-subs(f,xbar) )/h

ans =

(f(xbar+h)-f(xbar))/h

und dann auch die Ableitung (Di�erenzial-quotient) f ′(x) im Punkt x.

>> limit(ans,h,0)

ans =

D(f)(xbar)

Als weiteres Beispiel bestätigen wir die Pro-duktregel.

>> diff(f*g)

ans =

diff(f(x),x)*g(x)+f(x)*diff(g(x),x)

Aufgabe 138 (Funktionsterme)Bestätigen Sie die Quotientenregel(f(x)

g(x)

)′=

f ′(x)g(x)− f(x)g′(x)2g(x)

Lösung: Hier die Bestätigung:

f = sym('f(x)'); g = sym('g(x)');

diff(f/g)

ans =

diff(f(x),x)/g(x)-f(x)/g(x)^2*

diff(g(x),x)

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

Häu�g hat man einen symbolischen Funkti-onsterm de�niert und möchte dann symbo-lische oder numerische Funktionswerte be-rechnen. Als Beispiel betrachten wir densymbolischen Funktionsterm f(x) =

√x.

Es soll f(2) zunächst symbolisch ausgewer-tet werden; hierbei hilft die subs-Funktion.

>> syms x

>> f = sqrt(x);

>> pretty(subs(f,sym(2)))

1/2

2

Auch die numerische Funktionsberechnungkann mit der subs-Funktion erfolgen.

178 Copyright c© G. Gramlich

>> subs(f,2)

ans =

1.4142

Wir können f(x) aber auch für mehrere x-Werte auswerten. Numerisch:

>> subs(f,[1, 2, 3, 4])

ans =

1.0000 1.4142 1.7321 2.0000

und symbolisch:

>> subs(f,sym([1, 2, 3, 4]))

ans =

[ 1, 2^(1/2), 3^(1/2), 4^(1/2)]

Mit zwei gegebenen Funktionen f und gund den Operationen Addition, Subtrakti-on, Multiplikation und Division kann mandie Summe f + g, die Di�erenz f − g, dasProdukt fg und den Quotienten f/g bil-den. Zusätzlich kann man die Kompositionvon f und g, in Zeichen f ◦ g, de�nieren.

Die Sinusfunktion f = sin und die Expo-nentialfunktion g = exp sind eingebauteFunktionen. Wir können damit die Sum-menfunktion f + g = sin+ exp oder dieVerkettung f ◦ g = esin dieser beiden Funk-tionen bilden. Die folgenden Anweisungenzeigen die Umsetzung:

>> syms x

>> sin(x) + exp(x)

ans =

sin(x)+exp(x)

>> exp(sin(x))

ans =

exp(sin(x))

oder alternativ mit der Funktion compose

für die Komposition.

>> syms x

>> compose(exp(x),sin(x))

ans =

exp(sin(x))

Wir können auch (symbolische) Funktions-werte berechnen.

>> sin(sym(1.5))

ans =

sin(3/2)

Den dazugehörigen numerischen Werte er-halten wir durch die Anweisung

>> double(ans)

ans =

0.9975

>> sin(sym(pi/4))

ans =

1/2*2^(1/2)

Wir können auch die Funktion subs ver-wenden, um Funktionswerte zu berechnen.

>> syms x

>> exp(sin(x));

>> subs(ans,sym(2))

ans =

exp(sin(2))

Der numerische Wert ist

>> double(ans)

ans =

2.4826

oder direkt

179 Copyright c© G. Gramlich

>> exp(sin(x));

>> subs(ans,2)

ans =

2.4826

Mit dem Befehl type ist die Überprüfungmöglich, ob eine vorliegende Funktion f ge-rade oder ungerade ist. Eine reellwertigeFunktion f mit symmetrischem De�nitions-bereich Df ⊆ R wird als gerade bezeichnet,wenn f(x) = f(−x) für alle x ∈ Df gilt.Demnach ist die Kosinusfunktion cos einegerade Funktion. Wir überprüfen diese Be-hauptung.

>> syms x

>> f = cos(x);

>> maple('type',f,'evenfunc(x)')

ans =

true

Die Exponentialfunktion exp ist dagegenweder gerade noch ungerade.

>> g = exp(x);

>> maple('type',g,'evenfunc(x)')

ans =

false

>> maple('type',g,'oddfunc(x)')

ans =

false

Mit der Funktion finverse kann man vonder Funktion f die Umkehrfunktion f−1

�nden, genauer: man kann den Funktions-term von f−1 berechnen. Das folgende Bei-spiel zeigt dies für die Exponentialfunktionf(x) = ex, x ∈ R.

>> syms x

>> f = exp(x);

>> finverse(f)

ans =

log(x)

Die Umkehrfunktion ist somit f−1(x) =ln(x), x > 0, wobei der De�nitionsbereichvon Matlab nicht angegeben wird, son-dern in Eigenverantwortung hingeschriebenwerden muss.

Ist bei der Umkehrfunktion besonders aufden De�nitionsbereich zu achten, so gibtMatlab eine Warnung heraus, wie folgen-des Beispiel zeigt:

>> g = x^2;

>> finverse(g)

Warning: finverse(x^2) is not

unique.

> In C:\MATLAB6p1\toolbox\symbolic\

@sym\finverse.m at line 43

ans =

x^(1/2)

Die Umkehrfunktion von der quadratischenFunktion f(x) = x2, x ∈ R ist die Wurzel-funktion, der De�nitionsbereich dieser istaber nicht ganz R, sondern R≥0.

Der Stetigkeitsbegri� ist ein zentraler Be-gri� der Analysis bzw. der Di�erenzial-und Integralrechung. Die Maple-Funktioniscount überprüft, ob eine vorliegendeFunktion f auf einem anzugebendem Inter-vall stetig ist. Die Funktion f(x) = 1/x istauf [1, 3] stetig, nicht aber auf [−1, 3]. Hierdie Bestätigung:

180 Copyright c© G. Gramlich

>> syms x

>> maple('iscont',1/x,'x=1..3')

ans =

true

>> maple('iscont',1/x,'x=-1..3')

ans =

false

Stückweise de�nierte Funktionen lassensich mit der Funktion piecewise de�nie-ren. Hier ein Beispiel.

>> f = maple('piecewise','x<=0',...

'x','0<x','1/x')

f =

PIECEWISE([x, x <= 0],[1/x, 0 < x])

>> diff(f)

ans =

PIECEWISE([1, x < 0],[NaN, x = 0],

[-1/x^2, 0 < x])

>> int(f)

ans =

PIECEWISE([1/2*x^2, x < 0],

[NaN, x = 0],[log(x), 0 < x])

66.4 Algebraische Gleichungen

Mit der Funktion solve kann man Glei-chungen lösen. Das folgende Beispiel löstx2 − x = 0.

>> solve('x^2-x = 0')

ans =

[0]

[1]

Findet man keine exakte symbolische Lö-sung, so wird die Lösung in variabler Ge-

nauigkeit ausgegeben.

>> solve('cos(x) = x')

ans =

.739...87

Aufgabe 139 (Algebraische Gl.)Lösen Sie die algebraischen Gleichungencos x = ex und ex + 2e−x − 9 = 0.Lösung: Es ist

>> solve('cos(x)=exp(x)')

ans =

0

>> solve('exp(x)+2*exp(-x)-9=0')

ans =

[ log(9/2+1/2*73^(1/2))]

[ log(9/2-1/2*73^(1/2))]

>> double(ans)

ans =

2.1716

-1.4784

Die Funktion fzero erlaubt es uns alterna-tiv die Nullstellen numerisch zu berechnen.Mit dem Starwert x0 = 1 (zweites Argu-ment in fzero) erhalten wir die Lösung

>> fzero('exp(x)+2*exp(-x)-9',1)

ans =

2.1716

und mit dem Starwert x0 = −1 die zweiteLösung

>> fzero('exp(x)+2*exp(-x)-9',-1)

ans =

-1.4784

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

181 Copyright c© G. Gramlich

Aufgabe 140 (Algebraische Gl.)Berechnen Sie die Lösung der Gleichungxex = 1.Lösung:

>> solve('x*exp(x)=1')

ans =

lambertw(1)

>> double(ans)

ans =

0.5671

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

Aufgabe 141 (Algebraische Gl.)Lösen Sie das Gleichungssystem

3x2 + 2y = 0

2x− 3y2 = 0

Lösung:

>> [x,y] = solve('3*x^2+2*y=0',...

'2*x-2*y^2=0')

x =

[0]

[1/9*18^(2/3)]

[(1/6*18^(1/3)-1/6*i*3^(1/2)

*18^(1/3))^2]

[(1/6*18^(1/3)+1/6*i*3^(1/2)

*18^(1/3))^2]

y =

[0]

[-1/3*18^(1/3)]

[1/6*18^(1/3)-1/6*i*3^(1/2)

*18^(1/3)]

[1/6*18^(1/3)+1/6*i*3^(1/2)

*18^(1/3)]

>> double(x), double(y)

ans =

0

0.7631

-0.3816 - 0.6609i

-0.3816 + 0.6609i

ans =

0

-0.8736

0.4368 - 0.7565i

0.4368 + 0.7565i

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

66.5 Grenzwerte

Die Folge

an =2n + 1

4n, n ≥ 1

hat den Grenzwert 1/2. Der folgendeMat-lab-Code bestätigt dies:

>> limit((2*n+1)/(4*n),inf)

ans =

1/2

Die Eulersche Zahl e = 2.7183 . . . ist derGrenzwert der Folge mit der Bildungsvor-schrift (1 + 1/n)n, n ≥ 1 für n → ∞. Diefolgenden Anweisungen zeigen dies:

>> syms n

>> limit((1+1/n)^n,inf)

ans =

exp(1)

Mit der Funktion limit lassen sich auchGrenzwerte von Funktionen berechnen. DieTabelle 35 Möglichkeiten mit limit.

182 Copyright c© G. Gramlich

Mathematik Matlab

limx→0

f(x) limit(f)

limx→a

f(x) limit(f,x,a)

oder limit(f,a)limx→ax<0

f(x) limit(f,x,a,'left')

limx→ax>0

f(x) limit(f,x,a,'right')

Tabelle 35: Grenzwerte berechnen

Besitzt der Di�erenzenquotient (f(x) −f(x))/(x − x) der Funktion f für x → xeinen Grenzwert, so heiÿt f an der Stellex di�erenzierbar. Der Grenzwert wird mitf ′(x) bezeichnet und man schreibt

f ′(x) = limx→x

f(x)− f(x)x− x

.

Man nennt den Grenzwert auch Di�eren-zialquotient und die Berechnungsmethodevon f ′(x) die x-Methode.

Wir können limit einsetzen, um die Ablei-tung einer Funktion f an der Stelle x zuberechnen. Als Beispiel berechnen wir fürdie Funktion f(x) = 3/x, x > 0 die Ablei-tung f ′(2).

>> syms x

>> limit( (3/x-3/2)/(x-2) ,x,2 )

ans =

-3/4

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

es manchmal zweckmäÿiger die sogenannteh-Methode einzusetzen. In diesem Fall wirdf ′(x) wie folgt berechnet:

f ′(x) = limh→0

f(x + h)− f(x)h

.

Für obiges Besipiel mit f(x) = 3/x, x > 0und x = 2 erhält man:

>> syms h

>> limit( (3/(2+h)-3/2)/h, h, 0)

ans =

-3/4

Bekanntlich hat der Di�erenzenquotient(f(x)− f(x))/(x− x) für die Betragsfunk-tion f(x) = abs(x) = |x|, x ∈ R und x = 0keinen Grenzwert. InMatlab erhalten wir:

>> syms x

>> limit( (abs(x)-abs(0))/(x-0),x,0)

ans =

NaN

Zwar ist die Betragsfunktion abs im Punkt0 nicht di�erenzierbar, hat aber dort einenrechten und linken Grenzwert, das heiÿt esgilt

limx→0x>0

abs(x)− abs(0)x− 0

= 1

und

limx→0x<0

abs(x)− abs(0)x− 0

= −1

Wir bestätigen dies:

>> limit( (abs(x)-abs(0))/(x-0),...

x,0,'right')

ans =

1

183 Copyright c© G. Gramlich

>> limit( (abs(x)-abs(0))/(x-0),...

x,0,'left')

ans =

-1

Die Ableitung einer Funktion basiert be-kanntermaÿen auf dem Prozeÿ der Grenz-wertbildung. Zum Beispiel ist die Ab-leitungsfunktion der Kosinusfunktion cosdie Funktion − sin. Mathematisch bedeutetdies:

d

dxcos(x) = lim

h→0

cos(x + h)− cos(x)h

= − sin(x)

Dies können wir mit der limit-Funktionbestätigen.

>> syms x h

>> limit( (cos(x+h)-cos(x))/h, h, 0)

ans =

-sin(x)

Die folgenden Matlab-Anweisungen be-rechnen den Grenzwert

limx→0

cos(x) = 1

>> syms x

>> limit(cos(x))

ans = 1

Aufgabe 142 (Grenzwerte)Berechnen Sie den Grenzwert

limx→0

sinx

x

Lösung: Berechnen Sie den Grenzwert mit

>> syms x

>> limit( sin(x)/x )

ans =

1

Somit ist der Grenzwert

limx→0

sin(x)x

= 1 .

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

Aufgabe 143 (Grenzwerte)Berechnen Sie den Grenzwert

limh→0

cos(h)− 1h

Lösung: Berechnen Sie den Grenzwert mit

>> syms h

>> limit( (cos(h)-1)/h )

ans =

0

Somit ist der Grenzwert

limh→0

cos(h)− 1x

= 0.

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

Aufgabe 144 (Grenzwerte)Bestimmen Sie den Grenzwert

limx→∞

xe−x

und interpretieren Sie ihn.Lösung: Der Grenzwert ist Null, denn esist:

184 Copyright c© G. Gramlich

>> syms x

>> limit(x*exp(-x),inf)

ans =

0

Die Exponentialfunktion f(x) = e−x, x ∈R fällt für x → ∞ schneller als die linea-re Funktion g(x) = x, x ∈ R für x → ∞steigt. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

Aufgabe 145 (Grenzwerte)Bestimmen Sie den Grenzwert

limh→0

(x + h)3 − x3

h.

Was bedeutet dieser Grenzwert?Lösung: Es ist:

>> syms x h

>> limit(((x+h)^3-x^3)/h,h,0)

ans =

3*x^2

Der Grenzwert ist der Ableitungsterm derFunktion f(x) = x3, x ∈ R. © . . . . . . . . . . .©

Aufgabe 146 (Grenzwerte)Bestätigen Sie zunächst rechnerisch mitBleistift und Papier und dann in Matlabdie 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:

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

Aufgabe 147 (Grenzwerte)Die folgenden Grenzwerte existieren nicht.Was liefert Matlab?

(a) limx→0

1/x (b) limx→0x>0

1/x (c) limx→0x<0

1/x

Lösung:

>> limit(1/x,0)

ans =

NaN

>> limit(1/x,x,0,'right')

ans =

Inf

>> limit(1/x,x,0,'left')

ans =

-Inf

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

66.6 Endliche und unendliche Summen

Endliche oder unendliche Reihen lassen sichmit der Matlab-Funktion symsum berech-nen, die symbolisches Summieren erlaubt.Die Summe der endlichen Reihe

10∑k=1

2k = 2 + 4 + 8 + · · ·+ 1024

ist 2046, was man durch folgende Zeilen be-stätigen kann:

185 Copyright c© G. Gramlich

>> symsum(2^k,1,10)

ans =

2046

Ob die Summe einer unendlichen Reiheexistiert und welchen Wert sie gegebenen-falls hat, lässt sich ebenfalls mit der Mat-lab-Funktion symsum beantworten. In derAnalysis beweist man2:

∞∑n=1

1n2

=π2

6.

Mit dem Kommando symsum kann man diesüberprüfen:

>> syms n

>> symsum(1/n^2,1,inf)

ans =

1/6*pi^2

Aufgabe 148 (Endliche Summen)Berechnen Sie

10∑k=1

1k.

Lösung: Mit

>> syms k

>> symsum(1/k,1,10)

erhält man

ans =

7381/2520

2Zum Beispiel mit Hilfe der Theorie der Fourier-

Reihen.

Es ist also

10∑k=1

1k

=73812520

.

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

Aufgabe 149 (Endliche Summen)Bestätigen Sie die folgenden Ergebnisse

(a)∑n

k=1 k = n(n+1)2

(b)∑n

k=1 k2 = n(n+1)(2n+1)6

(c)∑n

k=1 k3 = n2(n+1)2

4 .

Lösung: De�niert man zunächst

>> syms k n

so erhält man

a) >> simple(symsum(k,1,n))

ans =

1/2*n*(n+1)

b) >> simple(symsum(k^2,1,n))

ans =

1/6*n*(n+1)*(2*n+1)

c) >> simple(symsum(k^3,1,n))

ans =

1/4*n^2*(n+1)^2

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

Aufgabe 150 (Unendliche Summen)Berechnen Sie die Summe der Reihe

∞∑k=1

14k2 − 1

.

Lösung: Mit

186 Copyright c© G. Gramlich

>> syms k

>> symsum( 1/(4*k^2-1),1,inf)

erhält man

ans =

1/2

Also ist die Summe der Reihe

∞∑k=1

14k2 − 1

=12

.

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

Aufgabe 151 (Unendliche Summen)Bestätigen Sie, dass für die harmonischeReihe gilt

∞∑k=1

(−1)k−1 1k

= ln(2).

Lösung: Mit

>> syms k

>> symsum( (-1)^(k-1)/k,1,inf)

erhält man

ans =

log(2)

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

Aufgabe 152 (Unendliche Summen)Berechnen Sie die Leibnizsche Reihe

∞∑k=1

(−1)k 12k + 1

Lösung: Mit

>> syms k

>> symsum( (-1)^k/(2*k+1),1,inf)

erhält man

ans =

-1+1/4*pi

Also ist die Leibnizsche Reihe

∞∑k=1

(−1)k 12k + 1

4− 1 .

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

66.7 Di�erenziation

Die Funktion diff berechnet die symboli-sche Ableitung eines Funktionsterms. Umeinen symbolischen Ausdruck zu erzeugen,muss man zuerst die verwendeten symbo-lischen Variablen de�nieren, und dann dengewünschten Ausdruck bilden, und zwar ge-nauso, wie man es mathematisch tun wür-de. Die folgenden Anweisungen

>> syms x

>> f = x^2*exp(x);

>> diff(f)

erzeugen eine symbolische Variable x, bil-den den symbolischen Ausdruck x2 exp(x)und berechnen die Ableitung von f nach x.Das Ergebnis ist:

ans =

2*x*exp(x)+x^2*exp(x)

187 Copyright c© G. Gramlich

Aufgabe 153 (Ableitungen)Berechnen Sie

d

dx(x2ex)

Lösung: Mit

>> syms x

>> diff(x^2*exp(x))

ans =

2*x*exp(x)+x^2*exp(x)

sieht man, dass

d

dx(x2ex) = 2xex + x2ex

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

Aufgabe 154 (Ableitungen)Berechnen Sie

d

dxarctan(x)

Lösung: Mit den Anweisungen

>> syms x

>> diff(atan(x))

ans =

1/(1+x^2)

erkennt man, dass

d

dxarctan(x) =

11 + x2

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

Aufgabe 155 (Ableitungen)Berechnen Sie

d

dx(xxx

)

Lösung: Mit den Anweisungen

>> syms x

>> diff(x^(x^x))

ans =

x^(x^x)*(x^x*(log(x)+1)*log(x)

+x^x/x)

erkennt man, dass

d

dx

(xxx)

= xxx

(xx (ln (x) + 1) ln (x) +

xx

x

)ist. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

66.8 Partielle Di�erenziation

Es können auch partielle Ableitungen be-rechnet werden:

>> syms w x y

>> diff(sin(w*x*y))

berechnet die Ableitung von sin(wxy) nachx. Das Ergebnis ist cos(wxy)wy. Das Er-gebnis von

>> diff(sin(w*y))

ist cos(wy)w. Selbstverständlich kann manauch steuern, nach welcher Variablen di�e-renziert werden soll.

>> diff(sin(w*y),w)

liefert das Ergebnis

ans =

cos(w*y)*y

Es ist auch möglich, Ableitungen höhererOrdnung zu berechnen.

188 Copyright c© G. Gramlich

66.9 Der Gradient

Mit der Funktion jacobian ist es mög-lich, den Gradient einer reellwertigen Funk-tion zu berechnen. Für f : R3 → R mitf(x, y, z) = ex+2y + 2x sin(z) + z2xy ist

∇f(x) =

ex+2y + 2 sin(z) + z2y2ex+2y + z2x

2x cos(z) + 2xyz

.

Wir bestätigen dies in Matlab.

>> syms x y z real

>> jacobian(exp(x+2*y)+...

2*x*sin(z)+z^2*x*y)'

ans =

[ exp(x+2*y)+2*sin(z)+z^2*y]

[ 2*exp(x+2*y)+z^2*x]

[ 2*x*cos(z)+2*z*x*y]

66.10 Die Hesse-Matrix

Der Gradient der Funktion f(x, y) = 2x4 +3x2y + 2xy3 + 4y2, (x, y) ∈ R2 ist

∇f(x) =[

8x3 + 6xy + 2y3

3x2 + 6xy2 + 8y

]und die Hesse-Matrix ergibt sich zu

Hf (x) =[

24x2 + 6y 6x + 6y2

6x + 6y2 12xy + 8

].

Wir bestätigen dies in Matlab; hilfreichist wieder die jacobian-Funktion.

>> syms x y real

>> f = 2*x^4+3*x^2*y+2*x*y^3+4*y^2;

>> gradf = jacobian(f)'

gradf =

[ 8*x^3+6*x*y+2*y^3]

[ 3*x^2+6*x*y^2+8*y]

>> hessf = jacobian(gradf)

hessf =

[ 24*x^2+6*y, 6*x+6*y^2]

[ 6*x+6*y^2, 12*x*y+8]

Im Punkt (x, y) = (−2, 3) gilt

∇f(−2, 3) =[−46−72

]und

Hf (−2, 3) =[

114 4242 −64

].

In Matlab:

>> subs(gradf,{x,y},{-2,3})

ans =

-46

-72

>> subs(hessf,{x,y},{-2,3})

ans =

114 42

42 -64

66.11 Die Jacobi-Matrix

Bei Funktionen mehrerer Veränderlicherberechnet man die Funktionalmatrix oderJacobi-Matrix mittels jacobian. Will mandie Jacobi-Matrix der Funktion

f : R3 → R3

(x, y, z) 7→ (xy, x, z)

berechnen, so geht das wie folgt:

189 Copyright c© G. Gramlich

>> syms x y z

>> J = jacobian([x*y,x,z],[x,y,z])

J =

[ y, x, 0]

[ 1, 0, 0]

[ 0, 0, 1]

Im ersten Argument der Function jacobiansteht der Funktionsterm und im Zweitenstehen die unabhängigen Variablen.

Aufgabe 156 (Jacobi-Matrizen)Berechnen Sie die Jacobi-Matrix der Funk-tion f : R2 → R3, (x, y) 7→ (x +y, x2 sin y, exy) in einem beliebigen Punkt(x, y) ∈ R2. Wie lautet die Jacobi-Matrixim Punkt (1, 0)?Lösung: Es ist

>> syms x y

>> J = jacobian([x+y,x^2*sin(y),...

exp(x*y)],[x,y])

J =

[ 1, 1]

[ 2*x*sin(y), x^2*cos(y)]

[ y*exp(x*y), x*exp(x*y)]

Die Jacobi-Matrix im Punkt (1, 0) ist:

>> subs(J,[x,y],[1,0])

ans =

1 1

0 1

0 1

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

66.12 Integration

Die Funktion int erlaubt symbolische Inte-gration.

Als erstes Beispiel wollen wir die Gleichung∫sin(x)dx = − cos(x) + c bestätigen.

>> syms x

>> f = sin(x);

>> int(f)

ans =

-cos(x)

Bei parameterabhängigen unbestimmtenIntegralen der Form

Ft(x) =∫

f(x, t)dx

(t ist der Parameter) emp�elt es sich x undt als symbolische Variablen zu de�nieren.Als Beispiel betrachten wir

∫(x − t)2dx =

1/3(x− t)3 + c

>> syms x t

>> pretty(int((x-t)^2))

3

1/3 (x - t)

Sie können die Symbolic Math Toolbox her-anziehen, um bestimmte Integrale∫ b

af(x)dx

symbolisch zu lösen. Auch parameterab-hängige bestimmte Integrale

φt =∫ b

af(x, t)dx

190 Copyright c© G. Gramlich

können gelöst werden. Es ist∫ π

0sin(x)dx = 2.

Wir bestätigen dies mit der Funktion int

aus der Symbolic Math Toolbox.

>> int('sin(x)',0,pi)

ans =

2

Aufgabe 157 (Integration)Berechnen Sie das unbestimmte Integral∫

x sin(x)dx.

Lösung: Mit

>> syms x

>> int(x*sin(x))

ans =

sin(x)-x*cos(x)

sieht man, dass∫x sin(x)dx = sin(x)− x cos(x) + c

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

Aufgabe 158 (Integration)Berechnen Sie das bestimmte Integral∫ π

0x sin(x)dx

symbolisch.Lösung: Mit

>> syms x

>> int(x*sin(x),0,pi)

ans =

pi

folgt also, dass∫ π

0x sin(x)dx = π

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

Aufgabe 159 (Integration)Berechnen Sie das uneigentliche Integral∫ ∞

1

1x5

dx.

Lösung: Mit

>> syms x

>> int(x^(-5),1,inf)

ans =

1/4

folgt also, dass∫ ∞

1

1x5

dx =14

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

Aufgabe 160 (Integration)Berechnen Sie das uneigentliche Integral∫ ∞

0sin(2t)e−stdt

symbolisch.Lösung: Mit

191 Copyright c© G. Gramlich

>> syms t; syms s positive;

>> int(sin(2*t)*exp(-s*t),t,0,inf);

>> F = simple(ans)

F =

2/(s^2+4)

folgt also, dass∫ ∞

0sin(2t)e−stdt =

2s2 + 4

ist. Es handelt sich hier um die La-place-Transformierte der Funktion f(t) =sin(2t), t ∈ R. Mit der eingebauten Funk-tion laplace kann man die Laplace-Transformierte auch unmittelbar berech-nen:

>> syms t;

>> laplace(sin(2*t))

ans =

2/(s^2+4)

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

Aufgabe 161 (Ableitungen, Integrale)Berechnen Sie symbolisch mit den Mat-lab-Funktionen diff und int die Ablei-tungen bzw. Integrale folgender Exponen-tialfunktionen:

(a) ex

(b) 2x

(c) 10x

(d) ax

Lösung: � syms x a

(a) >> diff(exp(x))

ans =

exp(x)

>> int(exp(x))

ans =

exp(x)

(b) >> diff(2^x)

ans =

2^x*log(2)

>> int(2^x)

ans =

1/log(2)*2^x

(c) >> diff(10^x)

ans =

10^x*log(10)

>> int(10^x)

ans =

1/log(10)*10^x

(d) >> diff(a^x)

ans =

a^x*log(a)

>> int(a^x)

ans =

1/log(a)*a^x

Damit gilt:

f(x) f ′(x)∫

f(x)dx

ex ex ex

2x ln(2)2x 2x/ ln(2)10x ln(10)10x 10x/ ln(10)ax ln(a)ax ax/ ln(a)

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

192 Copyright c© G. Gramlich

66.13 Polynome

Wir zeigen nun Beispiele für den Umgangmit �symbolischen Polynomen�, siehe Ab-schnitt 52 für Rechnungen mit �numeri-schen Polynomen � .

Die Funktion horner erlaubt die Darstel-lung eines Polynoms in Horner-Form.

>> syms x

>> p = -3*x^3+3*x^2+10*x+5;

>> ph = horner(p)

ph =

5+(10+(3-3*x)*x)*x

Will man dieses zum Beispiel an der Stellex = 3 auswerten, so geht das wie folgt:

>> subs(ph,x,3)

ans =

-19

Will man den Grad eines Polynoms bestim-men, so hilft die Maple-Funktion degree.

>> maple('degree',p)

ans =

3

Weitere Matlab bzw. Maple Funktio-nen zum Rechnen mit Polynomen �n-den Sie in der Tabelle 36. Hilfe zu denMaple-Funktionen erhalten Sie mit mhelp<Funktionsname>.

66.14 Taylor-Polynome

Die Funktion taylor erlaubt das symboli-sche Berechnen des Taylor-Polynoms ei-ner Funktion. Zum Beispiel liefert

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

Tabelle 36: Zum symbolischen Rechnen mitPolynomen

>> syms x

>> taylor(sin(x))

das Taylor-Polynom bis zur fünften Ord-nung:

ans =

x-1/6*x^3+1/120*x^5

Aufgabe 162 (Taylor-Polynome)Berechnen Sie das Taylor-Polynom derKosinus-Funktion

f(x) = cos(x)

vom Grad vier im Entwicklungspunkt 0.Lösung: Es ist

>> syms x

>> taylor(cos(x),5,x,0)

ans =

1-1/2*x^2+1/24*x^4

d.h. das Taylor-Polynom der Kosinus-Funktion vom Grad vier im Entwicklungs-punkt 0 ist

f(x) = 1− x2

2+

x4

24.

193 Copyright c© G. Gramlich

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

66.15 Die Funktionen funtool undtaylortool

Die Funktionen funtool und taylortool

stellen pädagogische Hilfsmittel zur Ver-fügung. Die Funktion funtool ist eineArt gra�scher Taschenrechner, der wichtigeOperationen und einfache Visualisierungenbei Funktionen einer Veränderlichen ermög-licht, siehe Abbildung 66.

Abbildung 66: Das GUI von funtool

Mit Hilfe des Kommandos taylortool kön-nen Sie die gra�sche Ober�äche des Pro-gramms taylortool starten und damitTaylor-Approximationen studieren, sieheAbbildung 67.

66.16 MehrdimensionaleTaylor-Polynome

Zur Berechnung des Taylor-Polynoms ei-ner reellwertigen Funktion mehrerer Varia-blen kann man die Funktion mtaylor aus

Abbildung 67: Das GUI von taylortool

Maple verwenden.

Das Taylor-Polynom zweiten Grades derFunktion f(x, y) = ex+y, (x, y) ∈ R2 mitEntwicklungspunkt (0, 0) ist gegeben durchT2(x, y) = 1 + x + y + 1/2(x2 + y2) + xy.Hier die Bestätigung in Matlab:

>> syms x y

>> T2 = maple('mtaylor',exp(x+y),...

'[x,y]',3)

T2 =

1+x+y+1/2*x^2+x*y+1/2*y^2

Aufgabe 163 (Taylor)Berechnen Sie das Taylor-Polynom zwei-ter Ordnung mit dem Entwicklungspunkt(−1/2,−1/2) der quadratischen Funktionq(x, y) = x2 + y2 + x + y, (x, y) ∈ R2.Lösung: Die folgendenMatlab-Zeilen be-rechnen die Lösung:

>> syms x y

>> T2 = maple('mtaylor',...

x^2+y^2+x+y,'[x=-1/2,y=-1/2]',3)

194 Copyright c© G. Gramlich

T2 =

-1/2+(x+1/2)^2+(y+1/2)^2

Wir bestätigen das Ergebnis:

>> simplify(T2)

ans =

x^2+y^2+x+y

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

Aufgabe 164 (Taylor)Approximieren Sie die Funktion f(x, y) =xey − x3y, (x, y) ∈ R2 in der Nähe desNullpunktes durch ihrTaylor-Polynom T2

zweiten Grades. Vergleichen Sie dann dieFunktionswerte von f und T2 an der Stel-le (0.5, 0.5), indem Sie den relativen Fehler|T2(0.5, 0.5) − f(0.5, 0.5)|/|f(0.5, 0.5)| be-rechnen.Lösung: Es ist

>> syms x y

>> f = x*exp(y)-x^3*y;

>> T2 = maple('mtaylor',f,'[x,y]',3)

T2 =

x+x*y

>> subs(T2,[x,y],[0.5,0.5]),...

subs(f,[x,y],[0.5,0.5])

ans =

0.7500

ans =

0.7619

>> abs(subs(T2,[x,y],[0.5,0.5])...

-subs(f,[x,y],[0.5,0.5]))...

/abs(subs(f,[x,y],[0.5,0.5]))

ans =

0.0156

Der relative Fehler ist demnach zirka 1.5%.

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

66.17 Lineare Algebra

Siehe Abschnitt 48

66.18 Di�erenzengleichungen

Maple kann Di�erenzengleichungen lösen.Die Funktion rsolve kann lineare Di�eren-zengleichungen mit konstanten Koe�zien-ten, Systeme linearer Di�erenzengleichun-gen mit konstanten Koe�zienten und man-che nichtlineare Gleichungen erster Ord-nung. Implementiert sind Standardtechni-ken wie erzeugende Funktionen und z-Transformationen, sowie Methoden basie-rend auf Substitutionen und charakteristi-schen Gleichungen.

Die lineare Di�erenzengleichung erster Ord-nung

yt = −0.9yt−1

hat die Lösung

yt = (−1)t(0.9)ty0.

Hier die Bestätigung in Matlab.

>> maple('rsolve',...

'y(t)=-0.9*y(t-1)','y(t)')

ans =

y(0)*(-9/10)^t

Die Komplexität der Gauÿschen Elimina-tion ist

>> maple('rsolve','{T(n)=T(n-1)

+n^2','T(1)=0}','T(n)')

195 Copyright c© G. Gramlich

ans =

-3*(n+1)*(1/2*n+1)+n+2*(n+1)*

(1/2*n+1)*(1/3*n+1)

>> factor(sym(maple('rsolve',...

'{T(n)=T(n-1)+n^2','T(1)=0}',...

'T(n)')))

ans =

1/6*(n-1)*(2*n^2+5*n+6)

Aufgabe 165 (Di�erenzengleichungen)Bestätigen Sie die Lösung yt = (0.5)t(y0 −12) + 12 der Di�erenzengleichung

yt = 0.5yt−1 + 6

Lösung: Es ist

>> maple('rsolve',...

'y(t)=0.5*y(t-1)+6','y(t)')

ans =

y(0)*(1/2)^t-12*(1/2)^t+12

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

66.19 Di�erenzialgleichungen

Mit Hilfe derMatlab-Funktion dsolve istes möglich, allgemeine Lösungen von Di�e-renzialgleichungen zu berechnen, Anfangs-wertaufgaben und Randwertaufgaben zu lö-sen. Hierbei kann eine einzelne Di�eren-zialgleichung oder aber auch ein Systemvon Gleichungen vorliegen. Mit der Funkti-on pdsolve können sogar einfache partielleDi�erenzialgleichungen bzw. partielle Di�e-renzialgleichungssysteme gelöst werden.

Die gewöhnliche Di�erenzialgleichung y′ =ay hat die allgemeine Lösung y(t) = ceat.In Matlab bestätigt man das wie folgt:

>> dsolve('Dy = a*y')

ans =

exp(a*t)*C1

Aufgabe 166 (Di�erenzialgleichung)Berechnen Sie die allgemeine Lösung dergewöhnlichen Di�erenzialgleichung

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

siehe Abschnitt 61.Lösung: Die allgemeine Lösung ist

>> y = dsolve('Dy=-y-5*...

exp(-t)*sin(5*t)')

y =

exp(-t)*cos(5*t)+exp(-t)*C1

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

Aufgabe 167 (Anfangswertaufgabe)Berechnen Sie die Lösung der Anfangswert-aufgabe

AWA :

{y′(t) = −y(t)− 5e−t sin(5t)y(0) = 1

t ≥ 0

aus Abschnitt 61.Lösung: Die Lösung ist

>> y = dsolve('Dy=-y-5*...

exp(-t)*sin(5*t)','y(0)=1')

y =

exp(-t)*cos(5*t)

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

196 Copyright c© G. Gramlich

Aufgabe 168 (Anfangswertaufgabe)Berechnen Sie die Lösung der Anfangswert-aufgabe

AWA :

{y′′(t) + 144y(t) = cos(11t)y(0) =, y′(0) = 0

t ≥ 0

und stellen Sie die Lösung im Intervall[0, 6π] dar.Lösung: Die Lösung ist

>> y = dsolve('D2y+144*y=cos(11*t)',

'y(0)=0','Dy(0)=0')

y =

-1/23*cos(12*t)+1/23*cos(11*t)

Eine Di�erenzialgleichung dieses Typesnennt man die Gleichung des (ungedämpf-ten) harmonischen Oszillators mit äuÿererharmonischer Anregung, hier cos(11t). DieLösung y(t) = 1/23 cos(11t)−1/23 cos(12t)ist eine Überlagerung von zwei Schwingun-gen mit unterschiedlichen Frequenzen. Manspricht von einer Schwebung (amplituden-modulierte Schwingung), eine Bewegungs-form, die für die Akustik und Funktechnikvon groÿer Bedeutung ist. Die Abbildung68 zeigt die Lösung. © . . . . . . . . . . . . . . . . . . .©

Wir berechnen die Lösung der Randwert-aufgabe

RWA :

{u′′ = 6x

u(0) = 0, u(1) = 10 ≤ x ≤ 1.

aus Abschnitt 61.2.

>> u = dsolve('D2u-6*x=0',

'u(0)=0','u(1)=1','x')

u =

x^3

0 5 10 15−0.1

−0.05

0

0.05

t

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

Abbildung 68: Lösung der AWA

Aufgabe 169 (Randwertaufgabe)Berechnen Sie die Lösung der Randwertauf-gabe

RWA :

{y′′ = −y

y(0) = 3, y(π/2) = 70 ≤ x ≤ π/2.

aus Abschnitt 61.2.Lösung: Es ist

>> y = dsolve('D2y=-y','y(0)=3',

'y(pi/2)=7','x')

y =

7*sin(x)+3*cos(x)

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

Mit der Maple-Funktion pdsolve kannman einfache partielle Di�erenzialgleichun-gen lösen. Als Beispiel betrachten wir dieeindimensionale homogene Wellengleichung

utt − c2uxx = 0 (c 6= 0).

Dies ist eine lineare partielle hyperbolischeDi�erenzialgleichung zweiter Ordnung. Um

197 Copyright c© G. Gramlich

diese symbolisch zu lösen, de�nieren wir zu-nächst die symbolischen Variablen x, t, cund die Funktion u(x, t):

>> syms x t c

>> u = sym('u(x,t)');

Danach berechnen wir die Ableitungenzweiter Ordnung

>> uxx = diff(u,x,2);

>> utt = diff(u,t,2);

und schlieÿlich die allgemeine Lösung

>> maple('pdsolve',utt-c^2*uxx)

u(x,t) = _F1(t*c+x)+_F2(t*c-x)

Hierbei sind _F1 und _F2 zwei beliebigezweimal stetig di�erenzierbare Funktionen.Wählt man für diese beiden Funktionen dieFunktion e−z2

, z ∈ R und für den Para-meter c den Wert 1, so erhält man die Lö-sungsfunktion u(x, t) = e−(t+x)2 + e−(t−x)2 .Die Abbildung 69 zeigt den Graph der Lö-

−6−4

−20

24

6

−5

0

5

0

0.5

1

1.5

t

exp(−(t+x)2)+exp(−(t−x)2)

x

Abbildung 69: Lösung der eindimensiona-len Wellengleichung

sungsfunktion, der mit

>> ezsurf('exp(-(t+x)^2)+

exp(-(t-x)^2)')

erzeugt wurde. Man erkennt, dass die all-gemeine Lösung der homogenen Wellenglei-chung eine Überlagerung zweier gegenläu�-ger Wellen darstellt.

Aufgabe 170 (Di�erenzialgleichung)Berechnen Sie mit pdsolve eine Lösung derpartiellen Di�erenzialgleichung

axux + btut = 0.

Lösung: Es ist

>> syms x t a b

u = sym('u(x,t)');

ux = diff(u,x);

ut = diff(u,t);

maple('pdsolve',a*x*ux+b*t*ut)

ans =

u(x,t) = _F1(t/(x^(b/a)))

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

66.20 Die kontinuierlicheFourier-Transformation

Die kontinuierliche Fourier-Transformati-on (CFT) untersucht, welche Frequenzenmit welchen Amplituden in einem Zeitsi-gnal f(t) enthalten sind, wenn das Zeit-signal nicht periodisch ist. Man nenntdieses Vorgehen �wie bei den Fourier-Reihen� die Frequenzanalyse des Zeitsi-gnals f(t). Man kann sagt auch, die konti-nuierliche Fourier-Transformation (CFT)

198 Copyright c© G. Gramlich

zerlegt ein Signal in sinusförmige Wellenunterschiedlicher Frequenzen.

Die kontinuierliche Fourier-Transformati-on (CFT) drückt ein Signal f(t) als eine�stetige Linearkombination� von Sinus- undCosinusfunktionen aus

f(ω) =∫R

f(t)e−iωtdt.

Die Abbildung f → f heiÿt kontinu-ierliche Fourier-Transformation (CFT).Stellt die unabhängige Variable t die Zeitdar, so hat die Variable ω die Bedeutungder Frequenz. Somit ist die Frequenz ωeine kontinuierliche Gröÿe, das heiÿt al-le möglichen Frequenzen sind darstellbar.Die kontinuierliche Fourier-Transformati-on (CFT) bildet die Funktion f vom Zeitbe-reich oder Originalbereich in den Frequenz-bereich oder Bildbereich ab. Die inverseFourier-Transformation (ICFT) transfor-miert umgekehrt.

Für den Rechteckimpuls

f(t) =

{1, falls |t| < T

0, sonst

soll die Fourier-Transformation f(ω) be-rechnet werden. Es ergibt sich

f(ω) =∫ ∞

−∞f(t)e−iωtdt =

∫ T

−Te−iωtdt

=[e−iωt

−iω

]T

−T

=1−iω

(e−iTω − eiTω)

=2ω

12i

(eiTω − e−iTω

)=

2 sin(ωT )ω

.

Die folgenden Anweisungen bestätigen dieRechnung.

>> syms t T

>> Rechteck = heaviside(t+T)-...

heaviside(t-T);

>> fourier(Rechteck)

ans =

2/w*sin(T*w)

Die folgenden Anweisungen geben einezweite Möglichkeit, obiges Resultat zu be-stätigen. Es ist T = 1.

>> maple('T:=1');

>> maple('Rechteck(t/T):=

Heaviside(t+T)-Heaviside(t-T):');

>> maple('simplify(fourier(Rechteck

(t/T),t,w))')

ans =

2/w*sin(w)

Das folgende Beispiel zeigt, dass die Fouri-er-Transformierte f(·) einer Funktion f(·)im allgmeinen eine komplexwertige Funk-tion ist. Der Graph einer komplexwertigenFunktion liegt im R4 und ist somit nichtdirekt darstellbar. Entweder man zeichnetden Real- und Imaginärteil getrennt oderman zerlegt die komplexe Funktion in Be-trag und Phase.

Für die von den Parametern a > 0 und b >0 abhängige Funktion

f(t) =

{ae−bt, falls t > 00, sonst

soll die Fourier-Transformation f(ω) be-

199 Copyright c© G. Gramlich

rechnet werden. Es ergibt sich

f(ω) =∫ ∞

−∞f(t)e−iωtdt

=∫ ∞

0ae−bte−iωtdt = a

∫ ∞

0e−(b+iω)dt

= a

[e−(b+iω)t

−(b + iω)

]t=∞

t=0

=a

b + iω.

Die folgenden Anweisungen bestätigen dasErgebnis symbolisch in Matlab.

>> maple('assume(a>0,b>0)');

>> maple('fourier(a*exp(-b*t)

*Heaviside(t),t,w)')

ans =

a/(b+i*w)

Beachten Sie, dass die Konstanten a undb so wie es die Theorie erfordert gröÿer alsNull de�niert werden müssen, weil sonst ge-gebenenfalls das Integral bzw. die Fouri-er-Transformation nicht existiert.

Die Fourier-Transformierte von

f(x) = e−x2

ist

f(ξ) =√

πe−ξ2/4.

Wir bestätigen dies symbolisch mit derfourier Funktion

>> syms x

>> f = exp(-x^2);

>> fhat = fourier(f)

fhat =

pi^(1/2)*exp(-1/4*w^2).

Aufgabe 171 (Fourier-T.)Berechnen Sie zunächst per Hand und dannmit Matlab die Fourier-Transformiertevon

f(x) = e−|x|.

Lösung: Die Fourier-Transformierte von

f(x) = e−|x|

ist

f(ξ) =2

1 + ξ2,

denn

f(ξ) =∫R

e−|x|e−ixξdx

=∫ ∞

0e−|x|e−ixξdx +

∫ 0

−∞e−|x|e−ixξdx

=∫ ∞

0e−xe−ixξdx +

∫ ∞

0e−xeixξdx

=∫ ∞

0ex(−1−iξ)dx +

∫ ∞

0ex(−1+iξ)dx

= limr→∞

[e−x(1+iξ)

−1− iξ+

e−x(1−iξ)

−1 + iξ

]x=r

x=0

= − 1−1− iξ

− 1−1 + iξ

=2

1 + ξ2.

Wir bestätigen dies symbolisch

>> syms x

>> f = exp(-abs(x));

>> fhat = fourier(f)

fhat =

2/(1+w^2)

Beachten Sie, dass die unabhängige Varia-ble der Fourier-Transformierten w ist. Die

200 Copyright c© G. Gramlich

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

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

exp(−abs(x))

−6 −4 −2 0 2 4 6

0

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

2

2/(1+w2)

Abbildung 70: Zur stetigen Fourier-Transformation

Abbildung 70 zeigt die Funktion f und ihreFourier-Transformierte f . © . . . . . . . . . . . ©

Die diskrete Fourier-Transformierte ha-ben wir in Abschnitt 59 besprochen.

66.21 Laplace-Transformation

Die Laplace-Transformation kann symbo-lisch mit der Funktion laplace berechnetwerden. Siehe Aufgabe 160 für ein Beispiel.

Aufgabe 172 (Laplace-T.)Berechnen Sie die Laplace-Transformation von der Funktionf(t) = e−at, t ∈ R, wobei a ein reel-ler Parameter ist.Lösung: Es ist

>> syms a t

laplace(exp(-a*t))

ans =

1/(a+s)

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

66.22 Spezielle mathematischeFunktionen

Über 50 spezielle mathematische Funktio-nen stehen mit der Symbolic Math Tool-box zur Verfügung. Diese Funktionen wer-den mit mfun angesprochen und werten dieentsprechende Funktion an der gewünsch-ten Stelle numerisch aus. Dies stellt so-mit auch eine Erweiterung zum Standard-Matlab dar, denn diese klassischen Funk-tionen stehen dort nicht zur Verfügung. Sie-he doc mfunlist (help mfunlist).

66.23 Variable Rechengenauigkeit

Zusätzlich zu Matlab's doppelt genau-er Gleitpunktarithmetik und der symbo-lischen Rechenmöglichkeit wird durch dieSymbolic Toolbox eine variable Rechenge-nauigkeitsarithmetik unterstützt, die durchden Maple-Kern durchgeführt wird. DieseArt von Arithmetik zu verwenden, ist dannsinnvoll, wenn eine genaue Lösung verlangtwird, aber eine exakte unmöglich oder aberzu zeitaufwendig zu berechnen ist.

Mit der Funktion digits ist es möglich, dieAnzahl der genauen dezimalen Stellen ein-zustellen, mit der die Rechnungen durchge-führt werden sollen. Standardmäÿig sind 32Stellen eingestellt, was Sie durch den Auf-ruf von digits überprüfen können. Wol-len Sie diese Zahl zu n abändern, so gehtdas mit digits(n). Die variable Rechenge-nauigkeitsarithmetik basiert auf dem vpa-Kommando. Der einfachste Gebrauch be-steht zum Beispiel darin, die Kreiszahl π

201 Copyright c© G. Gramlich

auf 32 Stellen zu berechnen:

>> digits

Digits = 32

>> vpa(pi)

ans =

3.1415926535897932384626433832795

Wie der Aufruf vpa(pi,40) zeigt, könnenSie mit dem zweiten Argument von vpa diezur Zeit aktuelle Anzahl von gültigen Dezi-malen überschreiben.

Das nächste Beispiel berechnet die Eu-lersche Zahl e auf 50 Nachkommastellengenau, gibt sie aus und überprüft, ob derLogarithmus davon wieder 1 ergibt:

>> digits(50);

>> x = vpa(sym('exp(1)'))

x =

2.71828182845904523536028747135266

24977572470937000

>> vpa(log(x))

ans =

1.00000000000000000000000000000000

00000000000000000

Vorsicht Falle:

>> x = vpa(sym(exp(1)))

x =

2.71828182845904553488480814849026

50117874145507813

>> vpa(log(x))

ans =

1.00000000000000011018891328384949

58218182413442295

Wir haben auf die Hochkomma in exp(1)

verzichtet. Das Resultat ist, dass Matlabexp(1) mit doppelter Genauigkeit berech-net, diese 16-stellige Dezimalzahl in eine 50-stellige Dezimalzahl transformiert (34 Stel-len sind somit bedeutungslos) und dann denLogarithmus anwendet, was zu einem unge-nauen Ergebnis führt. Erst die Hochkommasorgen dafür, dass der Matlab-Interpreterübergangen wird, damit Maple den Aus-druck auswerten kann.

Aufgabe 173 (Symbolisches Rechnen)Berechnen Sie π auf 50 Stellen genau!Lösung: Sowohl

>> digits(50)

>> vpa(pi)

als auch

>> vpa pi 50

liefern

ans =

3.14159265358979323846264338327

95028841971693993751

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

Aufgabe 174 (Geschwindigkeit)Sowohl

∞∑n=0

1n!

= limn→∞

n∑k=0

1k!

als auch

limn→∞

(1 +1n

)n

ergeben die Eulersche Zahl e = 2.71 . . ..

202 Copyright c© G. Gramlich

(a) Veri�zieren Sie die beiden Aussagen.

(b) Berechnen Sie die Eulersche Zahl aufzehn Dezimalen.

(c) Vergleichen Sie nun die Konvergenz-geschwindigkeiten der beiden Folgen,die für n = 0, 1, 2, . . . durch sn =∑n

k=0 1/k! und an = (1 + 1/n)n gege-ben sind, indem Sie die folgende Tabel-le vervollständigen.

n sn an

2 2.5000000000 2.25000000004 2.7083333333 2.441406250068101214161820

Lösung:

(a) Hier die Veri�kation. Zum Einen ist

>> symsum(1/sym('n!'),0,inf)

ans =

exp(1)

und zum Anderen gilt

>> limit((1+1/n)^n,inf)

ans =

exp(1)

(b) Die Eulersche Zahl auf zehn Nach-kommastellen ist

>> digits(11)

>> e = vpa(exp(1))

e =

2.7182818285

(c) Mit den Zeilen

>> n = 2:2:20;

>> an = (1+1./n).^n;

>> for i=1:10

>> sn(i,1) = ...

symsum(1/sym('k!'),0,n(i));

>> end

erhält man den gewünschten Vergleich.

>> digits(11)

>> [vpa(sn) vpa(an')]

ans =

[ 2.5000000000, 2.2500000000]

[ 2.7083333333, 2.4414062500]

[ 2.7180555556, 2.5216263717]

[ 2.7182787698, 2.5657845140]

[ 2.7182818011, 2.5937424601]

[ 2.7182818283, 2.6130352902]

[ 2.7182818285, 2.6271515563]

[ 2.7182818285, 2.6379284974]

[ 2.7182818285, 2.6464258211]

[ 2.7182818285, 2.6532977051]

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

66.24 Überblick über alle symbolischenFunktionen

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

203 Copyright c© G. Gramlich

66.25 Weitere Bemerkungen undHinweise

Es gibt zwei Levels der Symbolic Math Tool-box.

• Die Standard Symbolic Math Toolbox ver-fügt über annähernd 50 eingebauteMat-lab-Funktionen und Kommmandos, diedie entsprechenden Maple-Befehle auf-rufen. Eine Liste dieser Funktionen er-halten Sie mit help symbolic. Darüberhinaus besteht die Möglichkeit, andereMaple-Kommandos anzusprechen, diezur Standardbibliothek von Maple ge-hören. Hierzu verwendet man die maple-Funktion.

• Die Extended Symbolic Math Toolbox be-sitzt alle Funktionalitäten der StandardSymbolic Math Toolbox, und darüber hin-aus besteht die Möglichkeit, die Maple-Programmierstrukturen, die Ein- undAusgabe Möglichkeiten als auch Funktio-nen und Kommandos spezieller Maple-Pakete zu nutzen.

Mit dem Aufruf

>> mhelp index[packages]

erhalten Sie eine Liste über die Maple-Pakete.

Wenn Sie sich nun näher für ein Paket in-teressieren, zum Beispiel für das Paket mitden kombinatorischen Funktionen, so hilftder Aufruf mhelp combinat weiter. Dieserlistet dann alle relevanten Funktionen auf.Mit maple('with(combinat)') laden Siedas Paket und mit mhelp binomial erhal-ten Sie zum Beispiel weitere Informationen

über die Funktion binomial, etwa wie mansie aufzurufen hat.

Das Paket LinearAlgebra enthält dieFunktion Basis. Mit mhelp Basis erhaltenSie die Meldung

Multiple matches found:

SolveTools,Basis

Modular,Basis

LinearAlgebra,Basis

Dann hilft mhelp('LinearAlgebra,Basis')oder mhelp LinearAlgebra[Basis] wei-ter.

Eine Online-Einführung in die SymbolicMath Toolbox erhalten Sie mit dem Be-fehl demos. Geben Sie hierzu demos nachdem Matlab-Prompt ein. Es wird danndas Matlab-Demo-Fenster geö�net.

67 Nichtlineare Gleichungen (2)

Mit der Funktion fsolve, die zur Optimiza-tion Toolbox gehört, kann man nichtlineareGleichungssysteme 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�nden. Hierzu starten wir den iterativen Al-gorithmus mit x0 = (1, 1, 1) und de�nierendie vektorwertige Funktion F : R3 → R3,F (x, y, z) = (16x4 + 16y4 + z4 − 16, x2 +

204 Copyright c© G. Gramlich

y2 + z2 − 3, x3 − y) in dem Function-FileMyFunction.m wie folgt:

function F = MyFunction(x)

F = [16*x(1)^4+16*x(2)^4+x(3)^4-16;

x(1)^2+x(2)^2+x(3)^3-3;

x(1)^3-x(2)];

Dann rufen wir den Löser fsolve auf underhalten eine Nullstelle des Systems:

>> [x,fval] = fsolve(@MyFunction,x0)

Optimization terminated: ...

x =

0.8896

0.7040

1.1965

fval =

1.0e-012 *

0.1243

0.0022

0.0022

68 Optimierung (Teil 2)

Mit der Optimization Toolbox kann manOptimierungsaufgaben lösen, insbesonderesolche, wo Nebenbedingungen (Restriktio-

nen) auftreten. Diese sind in der Praxisauch meist vorhanden. Sie treten linear alsauch nichtlinear auf. Für folgende Optimie-rungsmodelle stehen Matlab-Funktionenzur Verfügung: Lineare Optimierung, Qua-dratische Optimierung, Minmax Optimie-rung, Mehrzielige Optimierung, Semiin�ni-te Optimierung und Nichtlineare Optimie-rung. Siehe doc optim (help optim) für ei-ne komplette Übersicht über alle in Mat-lab lösbaren Optimierungsmodelle.

Zu beachten ist, dass jedes Optimierungs-problem als Minimierungsproblem formu-liert werden muss.

68.1 Lineare Optimierung

An einem einfachen Beispiel zur Linea-ren Optimierung zeigen wir, wie man un-ter Matlab solche Probleme löst. Als Bei-spiel betrachten wir die Optimierungsauf-gabe (u.d.N. steht als Abkürzung für unterden Nebenbedingungen)

Minimiere(x1, x2) ∈ R2 −2x1 − 3x2

u.d.N.x1 + 2x2 ≤ 10x1 + x2 ≤ 6

x1 ≥ 0, x2 ≥ 0

Mit den Anweisungen

c = [-2;-3]; A = [1 2; 1 1];

b = [10;6]; u = [0;0];

und dem Funktionsaufruf

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

erhalten wir die Ausgabe

205 Copyright c© G. Gramlich

Optimization terminated successfully.

x =

2.0000

4.0000

fWert =

-16.0000

Das bedeutet, dass x∗ = (x∗1, x∗2) = (2, 4)

die Minimalstelle des linearen Optimie-rungsproblems ist, und −(2)(2) − (3)(4) =−16 der Zielfunktionswert, das heiÿt dasMinimum ist.

Das erste Argument c der Funktionlinprog beinhaltet die Koe�zienten derZielfunktion. Die Matrix A beinhaltet dieKoe�zienten der linearen Ungleichungen,wobei die Koe�zienten der rechten Sei-ten der Ungleichungen im Vektor b stehen.Schlieÿlich werden die unteren Grenzen derVariablen im Vektor u gespeichert und alssechstes Argument in linprog übergeben.Das vierte und fünfte Argument der Funk-tion linprog ist für eventuell vorkommendelineare Gleichungen vorgesehen.

Allgemein gilt: Mit der Funktion linprog

können lineare Optimierungsaufgaben derForm

Minimierex ∈ Rn cT x

u.d.N.Ax ≤ bBx = d

l ≤ x ≤ u

gelöst werden. Die Vektoren l und u dürfenauch Koordinaten −∞ bzw.∞ haben. Fallsder Aufruf

[x,fWert] = linprog(c,A,b,B,d,l,u)

erfolgreich war, �ndet man in der Variablenx den berechneten Lösungsvektor und inder Variablen fWert den zugehörigen Wertder Zielfunktion cT x =: f(x). Wie bei al-len anderen Matlab-Funktionen entspre-chenden Typs können Argumente weggelas-sen werden, wenn nicht alle Formen der Ne-benbedingungen auftreten. Damit aber dieReihenfolge erhalten bleibt, müssen gege-benenfalls eckige Klammern [] hierfür ge-schrieben werden. Ferner können Optionengesetzt werden und weitere Ausgabeargu-mente angegeben werden. Für weitere Hin-weise verweisen wir auf die Online-Hilfe,siehe doc linprog (help linprog).

Aufgabe 175 (Lineare Optimierung)Die lineare Optimierungsaufgabe

Minimierex ∈ R2 −x1 − x2

u.d.N.

x1 + 3x2 ≤ 133x1 + x2 ≤ 15−x1 + x2 ≤ 3x1 ≥ 0, x2 ≥ 0

hat die Minimalstelle x∗ = (4, 3) mit demMinimum−7, wie die Abbildung 71 gra�schzeigt. Bestätigen Sie die Lösung inMatlabmit der Funktion linprog.Lösung: Die Lösung erhält man in Mat-lab wie folgt:

>> c = [-1 -1];

A = [1 3; 3 1; -1 1];

b = [13; 15; 3];

lb = [0; 0];

206 Copyright c© G. Gramlich

0 2 4 6 80

2

4

6

8Lineare Optimierungsaufgabe

Zulässige Menge

−7

−7

−7

−7

Abbildung 71: Lineare Optimierung

[x,fx] = linprog(c,A,b,[],[],lb)

Optimization terminated.

x =

4.0000

3.0000

fx =

-7.0000

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

68.2 Quadratische Optimierung

Die Quadratische Optimierung gehört be-reits in die Klasse der Nichtlinearen Opti-mierungsaufgaben, stellt aber bereits einenwichtigen Spezialfall dieser Problemklassedar, sowohl aus theoretischen als auch ausalgorithmisch numerischen Gründen. Qua-dratische Programme treten im Bereich derRegelungstechnik häu�g bei der Online-Optimierung von Stellgröÿen linearer Sys-teme mit quadratischen Gütefunktionalenund linearen Nebenbedingungen auf. Li-neare Regressionsprobleme sind wiederum

wichtige Spezialfälle Quadratischer Opti-mierungsaufgaben.

Eine Quadratische Optimierungsaufgabeliegt vor, wenn die Zielfunktion quadratischund die Nebenbedingungen wie bei der Li-nearen Optimierung linear sind. Die allge-meine Problemstellung ist:

Minimierex ∈ Rn

12xTHx + cT x

u.d.N.Ax ≤ bBx = d

l ≤ x ≤ u

Die Matrix H in der Zielfunktion ist ausRn×n und symmetrisch. Ansonsten giltanaloges wie bei Linearen Optimierungs-aufgaben. Falls der Aufruf

[x,qWert] = quadprog(c,A,b,B,d,l,u)

erfolgreich war, �ndet man in der Va-riablen x den berechneten Lösungsvektorund in der Variablen qWert den zugehö-rigen Wert der Zielfunktion 1/2xTHx +cT x =: q(x). Wie bei allen anderen Mat-lab-Funktionen entsprechenden Typs kön-nen Argumente weggelassen werden, wennnicht alle Formen der Nebenbedingungenauftreten. Damit aber die Reihenfolge er-halten bleibt, müssen gegebenenfalls ecki-ge Klammern [] hierfür geschrieben wer-den. Ferner können Optionen gesetzt wer-den und weitere Ausgabeargumente ange-geben werden. Für weitere Hinweise ver-weisen wir auf die Online-Hilfe, siehe doc

quadprod (help quadprog).

207 Copyright c© G. Gramlich

Als Beispiel betrachten wir die Aufgabe

Minimierex ∈ R2 q(x1, x2)

u.d.N.

x1 + x2 ≤ 2001.25x1 + 0.75x2 ≤ 200

x2 ≤ 150x1 ≥ 0, x2 ≥ 0.

mit der quadratischen Zielfunktionq(x1, x2) = −(4 + 2x1)x1 − (5 + 4x2)x2 −8x1x2, x = (x1, x2) ∈ R2.

Es ist dann

H =[−4 −8−8 −8

], c =

[−4−5

],

A =

1 11.25 0.75

0 1

, b =

200200150

und l = (0, 0). Nach den Zuweisungen

H = [-4 -8; -8 -8]; c = [-4;-5];

A = [1 1; 1.25 0.75; 0 1];

b = [200;200;150];

l = [0;0];

und dem Aufruf

[x,qWert]=quadprog(H,c,A,b,[],[],l)

erhält man die Ausgabe

Warning: Large-scale method does

not currently solve this problem

formulation,

switching to medium-scale method.

> In quadprog at 236

Optimization terminated.

x =

50.0000

150.0000

qWert =

-155950

68.3 Überblick über alle Funktionenzur Optimierung

Mit doc optim (help optim) erhalten Sieeinen Überblick über alle Funktionen derOptimization Toolbox.

69 NichtlineareAusgleichsaufgaben

Zu der Optimization Toolbox gehörenauch die Funktionen lsqnonlin undlsqcurvefit, siehe doc lsqnonlin (helplsqnonlin) und doc lsqcurvefit (helplsqcurvefit). Mit diesen Funktionen kannman nichtlineare Ausgleichsaufgaben lösen.Nichtlineare Ausgleichsaufgaben treten beiParameteridenti�kationsproblemen auf undspielen in den Anwendungen eine groÿe Rol-le. Wenn Sie sich für diesen Problemkreisnäher interessieren, sehen Sie auch unterden Worten Inverse Probleme nach ([21]).Wir zeigen das Lösen einer nichtlinearenAusgleichsaufgabe in folgender Aufgabe.

Aufgabe 176 (lsqcurvefit)Gegeben sind die vier Datenpunkte

t 0.0 1.0 2.0 3.0y 2.0 0.7 0.3 0.1

und die nichtlineare Modellfunktion

φ(t, x) = x1ex2t.

208 Copyright c© G. Gramlich

Bestimmen Sie x = (x1, x2), sodassdie Funktion f die Datenpunkte im Sin-ne kleinster Quadrate bestmöglichst aus-gleicht.Lösung: Das Problem kann in Matlabmit der Funktion lsqcurvefit gelöst wer-den.

t = [0:3];

y = [2 0.7 0.3 0.1];

fxt = @(x,t) x(1)*exp(x(2)*t);

x0 = [1,0];

[x,resnorm]=lsqcurvefit(fxt,x0,t,y)

Optimization terminated

successfully:

Relative function value changing

by less than OPTIONS.TolFun

x =

1.9950 -1.0095

resnorm =

0.0020

Die Lösungsstelle ist somit x∗ ≈(1.995,−1.0095). Die Abbildung 72zeigt die dazugehörige Geometrie und

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 72: Zu Aufgabe 176

wurde wie folgt erzeugt:

tt = linspace(0,3);

ff = x(1)*exp(x(2).*tt);

plot(tt,ff,t,y,'ro'), grid,

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

Für lineare Ausgleichsaufgaben siehe Ab-schnitt 51.

70 Simulink

Simulink ist ein signal�ussorientiertes(blockorientiertes), interaktives System zurSimulation linearer und nichtlinearer dyna-mischer Systeme. Es handelt sich um einmausgesteuertes Gra�kprogramm, das einModell eines natürlichen, technischen oderwirtschaftlichen Systems, das als Block-diagramm (Signal�ussdiagramm) auf demBildschirm darzustellen ist, unter dynami-schen Einwirkungen nachbildet. Es kannfür lineare, nichtlineare, zeitkontinuierlicheoder zeitdiskrete Prozesse eingesetzt wer-den. Grundlage sind Matlab-Funktionenzur Lösung gewöhnlicher Di�erenzialglei-chungen (DGL) bzw. Anfangswertaufga-ben (AWA). In diesem Sinn kann Simu-link als ein numerischer Di�erenzialglei-chungslöser aufgefasst werden. Im zeitdis-kreten Fall sind die Modellgleichungen na-türlich Di�erenzengleichungen. Innerhalbder Matlab-Umgebung ist Simulink ei-ne Matlab-Toolbox, die sich von den an-deren Toolboxes eben durch diese speziel-le Ober�äche, mit der dann auch eine be-sondere �Programmiertechnik� verbunden

209 Copyright c© G. Gramlich

ist, unterscheidet. Variablen können von Si-mulink nach Matlab problemlos impor-tiert und exportiert werden. Damit stehenzum Beispiel alle Visualisierungsmöglich-keiten von Matlab zur Verfügung, oderGröÿen des Systems können mathematischoptimiert werden, zum Beispiel mit Optimi-zation Toolbox.

70.1 Erste Schritte

Der Start des Programms Simulink er-folgt zum Beispiel durch das Kommandosimulink im Matlab-command window.Danach ö�net sich der so genannte blockLibrary Browser. Dieser stellt die verfüg-baren Blöcke (Funktionsblöcke) der Simu-link-Bibliothek in Form einer Liste und inForm von Icons dar. Die Bibliothek ist da-bei in Funktionsgruppen organisiert:

• Sources

• Sinks

• Continous

• Discrete

• usw.

Bei der Auswahl eines Listeneintrages(Icon) ö�net sich dann im Simulink Libra-ry Browser -Fenster ein Teilfenster mit denzur Funktionsbibliothek gehörenden Funk-tionssysmbolen. Ein Klick auf Sources etwaö�net alle Funktionsblöcke zur Erzeugungvon Signalen (Funktionen). Zu sehen sindetwa die Blöcke Constant zur Erzeugung ei-nes konstanten Signals oder Sine Wave zurErzeugung einer Sinusfunktion. Die Funk-tionsblöcke haben folgende Eigenschaften:

• Name

• Ein- und Ausgabe

• Parameter (Doppelklick)

• Online-Hilfe (Help-Button)

• Kontextmenü (Maus rechts)

Simulink ist erweiterbar, das heiÿt, es kön-nen eigene Blöcke mit der gewünschtenFunktion de�niert werden.

70.2 Konstruktion einesBlockdiagramms

Will man nun mit Hilfe der Bibliothekenein eigenes System konstruieren, so mussman zunächst im Simulink-Libraray Brow-ser durch Auswahl von File New Model einleeres Fenster ö�nen. Blöcke können nunvia Drag&Drop aus der Bibliothek einge-fügt werden. Zwei Blöcke können dadurchverbunden werden, dass man mit der linkenMaustaste auf einen Blockausgang klickt,die Maustaste festhält und die sich aufbau-ende Verbindungslinie auf den gewünsch-ten Blockeingang zieht. Am Besten zeihtman das Verbindungssignal (Verbindungs-linie) immer gegen der Signal�ussrichtungvom Eingang des Zielblocks zum Ausgangdes Quellblocks. Blöcke und Verbindungenlöschen, können Sie mit Hilfe der rechtenMaustaste. Blöcke können durch Ziehen anden Ecken auch vergröÿert oder verkleinertwerden.

Bereits vorhandene Blockdiagramme kön-nen mit File Open geö�net und dann be-arbeitet werden.

210 Copyright c© G. Gramlich

Die Kanten sind den Signalen (oder Grö-ÿen) des Systems zugeordnet, in den Kno-ten werden diese Signale generiert oder um-gewandelt, also geformt. Da Signale eine be-stimmte Flussrichtung haben, sind Block-diagramme gerichtete Graphen (Digraph).

70.3 Weitere Arbeitsschritte

Bevor wir mit dem Blockdiagramm jedocheine Simulation durchführen können, sindnoch weitere Arbeitsschritte durchzufüh-ren:

• Parametrierung der verwendeten Blöcke,

• Festlegung des numerischen Lösungsver-fahrens (Integrator),

• Angabe der Anfangswerte, Simulations-dauer usw., also allgemeine Parameterder Simulation,

• Dokumentation.

70.4 Ein erstes Beispiel

Wir konstruieren uns nun ein einfaches Bei-spiel (Modell) eines Blockdiadramms un-ter Simulink, führen die zur Simulationnotwendigen Arbeitsschritte durch und ma-chen mit diesem Modell ein paar Simulatio-nen.

Es soll ein Quellsignal, die Sinusfunktionf(t) = 2 sin(t), t ∈ R, (Amplitudenwert 2)integriert werden, und samt ihrer Integral-funktion F (t) = 2

∫ t0 sin(τ)dτ = −2 cos(t)+

2 von [0, 15] gra�sch ausgegeben werden.

Aufgabe 177Überlegen Sie, warum das Ergebnis der Si-mulation die Lösung der Anfangswertauf-gabe

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

y(t) =∫ t

0x(τ)dτ + y(0).

Durch Di�erenziation dieser Gleichung er-hält man y′(t) = x(t). © . . . . . . . . . . . . . . . . .©

70.4.1 Konstruktion des Blockdiagramms

Wir ö�nen ein neues Fenster und speichernes unter dem Namen ErstesBeispiel.mdl

(mdl steht abkürzend für model) ab. In dasleere Fenster ziehen wir aus der Block Li-brary mit Hilfe der Maus den Block SineWave; dieser be�ndet sich in der Biblio-thek Sources. Gleichermaÿen verfahren wirmit den Blöcken Integrator (Continuouse),Mux (Signal Routing) und Scope (Sinks).Jetzt werden die Blöcke verbunden. DerAusgang von Sine Wave mit dem Eingangvon Integrator, der Ausgang von Integratormit einem Eingang von Mux und der Aus-gang von Mux mit dem Eingang von Sco-pe. Schlieÿlich verbinden wir den zweitenEingang von Mux mit der Verbindungsli-nie (Signalkante) zwischen Sine Wave und

211 Copyright c© G. Gramlich

Integrator. Hierzu beginnt man mit demEingang von Mux. Bei einer Verbindung�um die Ecke� muss die Maustaste zwsi-chendurch losgelassen werden. Man beachteauch, dass die Verbindung zu einer Signal-kante (wie hier zwischen Sine Wave und In-tegrator) erst dann vollständig ist, wenn ander Kreuzungsstelle ein kleiner rechteckigerPunkt erscheint.

70.4.2 Weitere Arbeitsschritte

Wir beginnen mit der Parametrierung desSine Wave-Blocks. Ein Doppelklick auf denBlock ö�net ein Fenster, in dem die Ampli-tude auf den Wert 2 eingestellt wird. Dieanderen Parameter (Frequenz, usw.) blei-ben unverändert.

Der Block Mux hat zwei Eingänge, was inunserem Beispiel gerade passend ist. Hierist also nicht zu tun. Prima! Die Zahl derEingänge kann jedoch im Allgemeinen ein-gestellt werden.

Der Integratorblock (Integrator) verlangtunter anderem den Anfangswert der In-tegration. Für das Beispiel soll der Wertauf der voreingestellten Null stehen blei-ben. Die übrigen Parameter betre�en spe-zielle Formen von Integratoren und blei-ben für unser Beispiel auf den voreingestell-ten Werten. Der Eintrag 1/s im Integrator-block deutet an, dass es sich um die La-place-Transformierte der Integration han-delt. Die meisten (linearen) Funktionsblö-cke sind mit der Laplace-Transformiertenbzw. dem diskreten Pendant dazu, der Z-Transformation, gekennzeichnet.

Der Scope-Block sollte auch parametriertwerden. Ein Doppelklick auf den Block undein Klick aus das Parameters-Icon ö�netein Karteifenster in dem Parameter ein-gestellt werden können. Interessant ist dieMöglichkeit, das angezeigte Signal direkt ineiner Matlab-Variablen speichern zu las-sen. Man achte darauf, an dieser Stelle aufdas Array-Format umzustellen, wenn manvon dieser Möglichkeit des Datenexports indenMatlab-Workspace Gebrauch machenwill.

Den letzten Schli� gibt dem Ganzen nunnoch die Dokumentation (Beschriftung,Hervorhebung durch Farbe usw.). Durcheinen Doppelklick in Modellfenster er-scheint ein blickender Cursor. Hier kannfrei Text eingetragen werden, der überden Menüpunkt Format-Font noch nachGeschmack im Erscheinungsbild verändertwerden kann.

Das Ergbenis all unserer Bemühungen se-hen Sie in Abbildung 73.

Mein erstes Simulink Modell

Sine WaveScope

1s

Integrator

Abbildung 73: Erstes Beispiel

Das eingestellte numerische Lösungsverfah-ren ist ode45 (unten im Fenster Erstes-Beispiel). Wir ändern daran nichts. WennSie doch eine Änderung durchführen wol-

212 Copyright c© G. Gramlich

len, dann unter Simulation und weiter unterCon�guration Parameters. Es würde an die-ser Stelle zu weit führen, im Einzelnen aufdie numerischen Integrationsverfahren ein-zugehen. Eine tiefe Diskussion der Verfah-ren würde den Rahmen dieser Einführungbei weitem sprengen. Es sei jedoch bemerkt,dass die modernsten mathematischen Ver-fahren zum Einsatz kommen [23, 24], sieheauch Abschnitt 60.

Den Wert der Simulationdauer setzen wirvon 10 auf 15 (zweite Zeile von oben rechts).

70.4.3 Simulation

Nun steht einer Simulation oder mehre-rer Simulationen nichts mehr im Wege.Drücken Sie einfach auf das Dreieckssym-bol in der zweite Zeile des Modellfensters.Im Scope-Block bauen sich dann das in Ab-bildung 74 dargestellte Sinussignal f unddie zugehörige Integralfunktion F auf.

70.5 Beispiele

In diesem Absschnitt betrachten wir nunweitere Simulink-Modelle. Hierbei handeltes sich um das Lösen von Di�erenzial-und Di�erenzengleichungen unter Simu-link, oder anders gesagt, um die Simula-tion dynamischer Systeme.

Als erstes Beispiel wählen wir die Anfangs-wertaufgabe

AWA :

{y′(t) = −y(t)− 5e−t sin(5t)y(0) = 1

Abbildung 74: Ergebnis

die wir bereits in Abschnitt 61.1 numerischund in Abschnitt 66 symbolisch behandelthaben. Die Lösung ist

y(t) = e−t cos(5t).

Als ersten Schritt löst man die gegebe-ne Di�erenzialgleichung nach der höchstenAbleitung auf. In diesem Fall ist diese einsund die Gleichung braucht nicht umgeformtzu werden

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

Zur Integration wird der Block Integra-tor (Continous) verwendet. Er sorgt fürdie numerische Integration der Di�erenzi-algleichung. Danach wird die rechte Seiteder Di�erenzialgleichung mit Hilfe von In-tegrieren, Additionsstellen, usw. aufgebaut.Im vorliegenden Fall wird mit dem Bock

213 Copyright c© G. Gramlich

fcn (User-De�ned Functions) der Aus-druck −5e−t sin(5t) gebildet und durch dieSummationsstelle Sum (Commonly UsedBlocks) mit dem Ausgang des Integriererszusammengefasst. Da die rechte Seite nunkomplett ist und diese gleich der erstenAbleitung ist, wird der Ausgang mit demIntegrierereingang verbunden (Rückkopp-lung). Zur gra�schen Darstellung des Si-gnals (Lösung y der Di�erenzialgleichung)während der Simulation wird der Block Sco-pe (Sinks) verwendet. Den Block Clock �n-det man in Source. Das Simulink-Modellzur Lösung der Di�erenzialgleichung ist inAbbildung 75 dargestellt.

Scope

1s

Integrator

f(u)

FcnClock

Abbildung 75: Simulink-Modell

Nun setzen wir beim Integrierer die An-fangsbedingungen. Dies geschieht durchDoppelklicken auf das Symbol und demEintrag des Anfangwertes, hier 1. Der letz-te Schritt besteht in der Wahl der Simu-lationsparameter. Unter mehreren Integra-tionsverfahren (das sind gerade die DGL-Löser ode45, usw. von Matlab) muss eingeeignetes aufgewählt werden. Voreinge-

stellt ist ode45. Auÿerdem ist die Simulati-onszeit einzustellen. Ich habe das Intervall[t0 = 0, tf = 3] gewählt. Das gra�sche Er-gebnis der Simulation, das heiÿt die Lösungder Di�erenzialgleichung, ist in Abbildung58 zu sehen.

Aufgabe 178 (y′(t) = k)Konstruieren Sie eine (signal�ussorientier-te) Simulink-Implementierung der Di�e-renzialgleichung y′(t) = k und simulierenSie damit. Wählen Sie speziell k = 10 undy(0) = 0 und 0 ≤ t ≤ 11.Lösung: Die Abbildung 76 zeigt eine Si-

y(t)

Scope

1s

Integrator

10

Constant

Abbildung 76: y′(t) = k

mulink-Implementierung der Di�erenzial-gleichung y′(t) = k. © . . . . . . . . . . . . . . . . . . . ©

Aufgabe 179 (y′(t) = ky(t))Konstruieren Sie eine (signal�ussorientier-te) Simulink-Implementierung der Di�e-renzialgleichung y′(t) = ky(t) und simu-lieren Sie damit. Wählen Sie speziell k =−0.1, y(0) = 1 und 0 ≤ t ≤ 30. Ab wann istder Zustandswert y(t) kleiner als 0.1? Wielautet die analytische Lösung? Sie kann ge-gebenenfalls zu Kontrollzwecken verwendetwerden.Lösung: Die Abbildung 77 zeigt eine Si-mulink-Implementierung der Di�erenzial-gleichung y′(t) = ky(t). An der gra�sche

214 Copyright c© G. Gramlich

y(t)y’(t)

Scope

1s

Integrator

−K−

Gain

Abbildung 77: y′(t) = ky(t)

Ausgabe kann man erkennt, dass der Zu-standswert y(t) für t & 23 (ungefähr grö-ÿer) kleiner 0.1 ist. Die analytische Lösungist y(t) = e−0.1t, t ∈ [0, 30]. © . . . . . . . . . . . .©

Aufgabe 180 (yt = kyt−1)Konstruieren Sie eine (signal�ussorientier-te) Simulink-Implementierung der Di�e-renzengleichung yt = kyt−1 und simulierenSie damit. Wählen Sie speziell k = −7/10,y0 = 1 und 0 ≤ t ≤ 20.Lösung: Die Abbildung 78 zeigt eine Si-

y_t−1y_t

z

1

Unit Delay

Scope

−K−

Gain

Abbildung 78: yt = kyt−1

mulink-Implementierung der Di�erenzen-gleichung yt = kyt−1. Man muss also nurden Integrator -Block durch den Unit De-

lay-Block (Discrete) auswechseln. Der An-fangswert y0 = 1 wird in diesem Block ein-gestellt. Die Abbildung 79 zeigt das Ergeb-

Abbildung 79: Simulation

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

70.6 Vereinfachungen

Schon für vergleichsweise kleine dynami-sche Systeme werden relativ schnell vieleBlöcke benötigt. Für die gezeigten einfa-chen Beispiele ist dieser E�ekt natürlichin erster Linie darauf zurückzuführen, dassschon für die Operationen der unterstenEbene, wie etwa die Addition oder Skalie-rung, entsprechende Blöcke eingesetzt wur-den. Dies trägt zwar zur Nachvollziehbar-keit der Modellgleichungen innerhalb desBlockdiagramms bei, macht aber dassebe

215 Copyright c© G. Gramlich

auch schnell unübersichtlich.

Durch geschickte Verwendung des Fcn-Blocks aus der Bibliothek userDe�nedFunctions können Simulink-Systeme ver-einfacht werden. Mit Hilfe dieses Blocks istes möglich, ganze Formeln zu einer Einheitzusammenzufassen, so dass auf die Elemen-tarblöcke der untersten Ebene (Sum oderGain) verzichtet werden kann.

Eine weitere Möglichkeit zur Vereinfa-chung von Simulink-Systemen ist eine Zu-sammenfassung von Teilsystemen zu eige-nen Simulink-Blöcken; eine Konstruktionvon Subsystemen. Die damit verbundeneHierarchisierung des Problems entsprichtder Modularisierung durch Funktionen beiMatlab-Programmen. Eine solche Modu-larisierung ist für die meisten Probleme derPraxis unumgänglich.

70.7 Kommunikation mit Matlab

Mit Hilfe verschiedenster Blöcke aus der Bi-bliothek Sinks ist es möglich mit Matlabzu kommunizieren. Als Beispiele seien dieBlöcke Scope und To Workspace erwähnt.

Mit Hilfe der Matlab-Funktion sim kannaus Matlab ein Simulink-Modell aufge-rufen werden. Genaue Auskunft über dieberschiedenen Formen der Verwendung vonsim erhalten sie mit doc sim (help sim).

Eine weiter Kommunikationsart bestehtüber das Konzept globaler Variablen.

70.8 Umgang mit Kennlinien

In den Anwendungen kann ein funktiona-ler Zusammenhang zwischen vorkommen-den Gröÿen meist nicht explizit angegebenwerden, das heiÿt eine Formel oder Funk-tionsvorschrift steht nicht zur Verfügung.Vielmehr stehen gemessene oder beobach-te Werte tabellarisch zur Verfügung. Einesolche Tabelle nennt man eine Kennlinie.

In der Bibliothel Lookup Tables stehen Blö-cke zur Vefügung mit denen man Kenntli-nien behandeln kann (Interpolation, Extra-polation).

70.9 Weitere Bemerkungen undHinweise

Weitere Informationen und Details über Si-mulink �nden Sie in [25].

71 Dünn besetzte Matrizen

Rechnet man mit einer Matrix, so gehtMatlab davon aus, dass diese dicht be-setzt ist, das heiÿt, nur wenige Matrixele-mente sind Null. Sind in einer Matrix je-doch viele Elemente Null (zum Beispiel 95%oder mehr) so spricht man von einer Spar-sematrix oder von einer dünn besetztenMatrix. Liegt solch eine Sparsematrix vorund möchte man Matrixoperationen mitdieser durchführen, so kann man meistensGleitpunktoperationen auf den Nullelemen-ten einsparen. Darüber hinaus muss mannicht die ganze Matrix abspeichern, son-dern es genügt, nur die von Null verschie-

216 Copyright c© G. Gramlich

denen Elemente abzulegen. Trägt man die-sen Sachverhalten Rechnung, so lässt sichdie E�zienz von Algorithmen in bezug aufSpeicher- und Zeitaufwand reduzieren. Da-mit ist es möglich, gröÿere Probleme zu lö-sen, die sonst nicht lösbar wären. Matlabkann die dünne Besetztheit einer Matrixausnutzen.

Matlab verfügt über zwei Speichermodi:full und sparse, wobei full standardmä-ÿig eingestellt ist. Die Funktionen full undsparse erlauben es, zwischen beiden Modihin und her zu schalten.

Im Sparsemodus werden die von Null ver-schiedenen Matrixelemente als eindimensio-nales (lineares) Feld mit ihren Zeilen- undSpaltenindizes abgespeichert. Die Anwei-sung

>> F = -triu(tril(ones(6),1),-1)

+3*eye(6)

erzeugt die (6, 6)-Matrix

F =

2 -1 0 0 0 0

-1 2 -1 0 0 0

0 -1 2 -1 0 0

0 0 -1 2 -1 0

0 0 0 -1 2 -1

0 0 0 0 -1 2

Mit S = sparse(F) wird F im Sparsemodusabgespeichert:

S =

(1,1) 2

(2,1) -1

(1,2) -1

(2,2) 2

(3,2) -1

(2,3) -1

(3,3) 2

(4,3) -1

(3,4) -1

(4,4) 2

(5,4) -1

(4,5) -1

(5,5) 2

(6,5) -1

(5,6) -1

(6,6) 2

Die von Null verschiedenen Elemente wer-den zusammen mit ihren Indizes spalten-weise angeordnet. Mit

>> F = full(S)

lässt sich dies rückgängig machen. DerFunktionsaufruf nnz(F) zeigt Ihnen die An-zahl der von Null verschiedenen Elementeder Matrix F.

71.1 Sparsematrizen erzeugen

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

lässt sich zum Beispiel eine dünn besetz-te Bandmatrix erzeugen. Obige Bandma-trix F kann somit direkt wie folgt erstelltwerden:

>> m = 6; n = 6;

>> e = ones(n,1); d = 2*e;

>> A = spdiags([-e,d,-e],...

[-1,0,1],m,n);

217 Copyright c© G. Gramlich

Der Vektor [-1,0,1] gibt an, in welcherDiagonalen die Spalten von [-e,d,-e] ste-hen. Führen Sie die Anweisungen aus undsehen Sie sich die volle Matrix mit full(A)an. Alternativ dazu können Sie sich mitspy(A) die Struktur der Matrix A gra-�sch betrachten. Die zu eye, zeros, ones,rand und randn analogen Sparsefunktionensind: speye, sparse, spones, sprand, undsprandn.

71.2 Mit Sparsematrizen rechnen

Unabhängig vom Speichermodus könnenSie die arithmetischen Operationen undviele Funktionen verwenden. Welchen Spei-chermodus haben dann die Ergebnismatri-zen? Operationen mit vollen Matrizen erge-ben volle Matrixresultate. Ist S eine Spar-sematrix und F eine vollbesetzte Matrix, soist:

Sparse: S+S, S*S, S.*S, S.*F,

S^n, S.^n, S\S

Sparse: inv(S),chol(S), lu(S),

diag(S), max(S), sum(S)

Full: S+F, S*F, S\F, F\S

Ist a ein Skalar, so sind die Ergebnisse vona*S und a\S vom Sparsemodus.

Um Eigenwerte oder singuläre Werte einerSparsematrix S zu berechnen, muss man S

in den vollen Speichermodus konvertierenund die Funktionen eig bzw. svd verwen-den: eig(full(S)) bzw. svd(full(S)).Will man nur einige Eigenwerte oder sin-guläre Werte berechnen, so kann man dieFunktionen eigs und svds benutzen. Diese

akzeptieren Sparsematrizen als Eingabear-gument: eigs(S) bzw. svds(S) .

Bildet man eine Blockmatrix und ist eineUntermatrix eine Sparsematrix, so ist auchdie Blockmatrix vom Speichermodus spar-se.

Weitere Informationen erhalten Sie mit docsparfun (help sparfun).

Aufgabe 181 (Sparsematrizen)Erzeugen Sie eine (100, 100)-SparsematrixA, die in der Diagonalen lauter 4-en hatund die obere und untere Nebendiagonalebesteht aus lauter Zahlen -1. Plotten Siedie Sparsematrix A und bestimmen Sie dieAnzahl der von Null verschiedenen Elemen-ten.Lösung: Man de�niert zunächst

>> n = 100;

>> e = ones(n,1);

>> d = 4*e;

Dann erzeugt man die Matrix A mittels

A = spdiags([-e,d,e],[-1,0,1],n,n);

Mit spy(A) kann ein Plot der Matrix A er-zeugt werden, siehe Abbildung 80. In derGra�k erscheint die Anzeige nz = 298(nz: non zeros). Dies gibt die Anzahl dervon Null verschiedenen Elemente an. Die-se Information kann man auch mittels nz

= length(nonzeros(A)) erhalten. © . . . . ©

Aufgabe 182 (Sparsematrizen)Wie sieht die Matrix S nach den folgendenAnweisungen aus? Überlegen Sie zuerst und

218 Copyright c© G. Gramlich

0 50 100

0

20

40

60

80

100

nz = 298

Abbildung 80: Sparsematrix

überprüfen Sie danach Ihre Antwort mitfull(S).

n = 6;

D = sparse(1:n,1:n,2*ones(1,n),n,n);

U = sparse(2:n,1:n-1,...

-ones(1,n-1),n,n);

L = sparse(1:n-1,2:n,...

-ones(1,n-1),n,n);

S = L+D+U;

Lösung: Die Matrix S hat die folgendeForm:

>> full(S)

ans =

2 -1 0 0 0 0

-1 2 -1 0 0 0

0 -1 2 -1 0 0

0 0 -1 2 -1 0

0 0 0 -1 2 -1

0 0 0 0 -1 2

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

Aufgabe 183 (Sparsematrizen, �ll-in)In vielen Fällen, zum Beispiel bei der Dis-

kretisierung von partiellen Di�erenzialglei-chungen mit Di�erenzenverfahren und nachder Methode der �niten Elemente, ent-stehen Matrizen, deren n2 Elemente nichtin den Hauptspeicher passen, sehr vieleNullelemente haben, aber ihre nichtver-schwindenden Elemente sehr wohl in denArbeitsspeicher passen, wenn man spezi-elle Speichertechniken verwendet. Im all-gemeinen sind dann Eliminationsverfahren(LU- bzw. QR-Zerlegungen) nicht anwend-bar, weil in Ihrem Verlauf Nichtnullemen-te an vorher noch nicht belegten Positio-nen entstehen können. Dieses Phänomender Erzeugung von Nichtnullelementen be-zeichnet man als �ll-in. Das folgende Bei-spiel zeigt solch ein �ll-in. De�nieren Siehierzu die Matrix A durch die AnweisungA = gallery('redheff',20). Schauen Siesich mit help private/redheff an, wie dieMatrix de�niert ist. Mit Hilfe der Funkti-on lu enthält man in Matlab eine LU-Zerlegung (Siehe zum Beispiel [7]). PlottenSie sodann die Matrizen A, L und U mitder Funktion spy.Lösung: Die LU-Zerlegung der Matrix Aerhält man mit

>> [L,U] = lu(A);

Die gra�sche Darstellung der Matrizen A,L und U (Siehe Abbildung 81 und 82) er-zeugt man mit

>> figure

>> plot(3,1,1)

>> spy(A)

>> title('Plot der Matrix A')

>> subplot(1,2,1)

219 Copyright c© G. Gramlich

0 5 10 15 20

0

5

10

15

20

nz = 85

Plot der Matrix A

Abbildung 81: 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 82: Plot der Matrizen L und U

>> spy(L)

>> title('Plot der Matrix L')

>> subplot(1,2,2)

>> spy(U)

>> title('Plot der Matrix U')

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

72 Mehrdimensionale Arrays

Arrays der Datentypen (Abschnitt 73)double, char, cell und struct könnenmehr als zwei Dimensionen haben. Solchemehrdimensionale Arrays werden in natür-licher Verallgemeinerung zu Techniken, wieman sie für Matrizen kennt, de�niert undmanipuliert.

Mit den Funktionen zeros, rand und randn

können mehrdimensionale Arrays erzeugtwerden. Zum Beispiel wird durch

randn(3,4,5)

ein (3, 4, 5)-Array mit insgesamt 3·4·5 = 60normalverteilten Zufallszahlen erzeugt.

Ein dreidimensionales Array könnte zumBeispiel dreidimensionale physikalische Da-ten darstellen, etwa die Temperatur in ei-nem Raum über den Punkten eines recht-eckigen Gitters. Es könnte auch eine Folgevon Matrizen Ak repräsentieren bzw. Ab-tastwerte einer zeitabhängigen Matrix A(t)bezeichnen. Das (i, j)-te Element der k-tenMatrix ist dann A(i, j, k) = aijk.

Mit Hilfe der cat-Funktion kann man einmehrdimensionales Array durch Angabeder Elemente in einer Anweisung de�nieren.

220 Copyright c© G. Gramlich

Das erste Argument gibt die Dimension desArrays. Die folgende Anweisung erzeugt eindreidimensionales Array der Gröÿe 3×2×2.

>> A = cat(3,[1 2;3 4;5 6],...

[7 8;9 10;11 12])

A(:,:,1) =

1 2

3 4

5 6

A(:,:,2) =

7 8

9 10

11 12

Funktionen, die elementweise arbeiten, kön-nen auch auf mehrdimensionale Arrays an-gewendet werden, zum Beispiel arithme-tische, logische und relationale Operato-ren. zum Beispiel geben die AusdrückeA.*A, exp(A), 3.�A und A>0 die erwartetenErgebnisse. Der (konjugiert) tranponierteOperator und die Funktionen diag, inv,eig und \ aus der Linearen Algebra sindfür Arrays der Dimension gröÿer als zweinicht de�niert, also nur für Matrizen (zwei-dimensionale Arrays).

Die Tabelle 37 gibt weitere Matlab-Funktionen an, die speziell zum Manipulie-ren von mehrdimensionalen Arrays geeignetsind.

Aufgabe 184 (Mehrdim. Arrays)Verwenden Sie dreidimensionale Arrays,um die folgende symmetrische Matrix fürverschiedene reelle Parameter t zu studie-

Funktion Bedeutungcat Verkettet Arraysndims Gröÿe, Ordnungndgrid Erzeugt Arrayspermute Permutiert Dimensionipermute Inverse Permutationshiftdim Verschiebt Dimensionsqueeze Verschiebt Dimension

Tabelle 37: Array-Funktionen

ren:

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

(b) Versuchen Sie die Inverse von A0 zuberechnen.

(c) Lassen Sie den Parameter t von 2 anlangsam immer kleiner werden. Berech-ne die Inversen von At und gib den ers-ten Wert an, wo At singulär wird.

Die n× n-Matrix At ist beim numerischenLösen von Di�erenzialgleichungen von Be-deutung, insbesondere für groÿe n.Lösung: Zunächst de�nieren wir die Ma-trix A0 für A0.

A0 = diag(-ones(4,1),1)+...

diag(-ones(4,1),-1);

Nun de�nieren wir für verschiedene Para-meterwerte den Vektor T. Zum Beispiel:

221 Copyright c© G. Gramlich

T = [0 1 2 3.7 5];

Dann erzeugen wir At durch:

for i=1:length(T)

A(:,:,i) = A0+T(i)*diag(ones(5,1));

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 dieMatrix At singulär wird, ist t = 1.

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

73 Datentypen (Klassen)

Bei der Realisierung numerischer undhauptsächlich nichtnumerischer Algorith-men sind Datentypen von besonderer Be-deutung. Spricht man von einfachen Daten-typen, so meint man ganze Zahlen, Gleit-punktzahlen, Zeichenketten usw. Unter ei-nem zusammengesetzten Datentyp oder ei-ner Datenstruktur versteht man ein Array(Feld) oder einen Verbund. Datenstruktu-ren können statisch und dynamisch sein.Ein statischer Datentyp ist zum Beispiel einArray und eine verkettete Liste ist ein dy-namischer Datentyp. Durch die De�nitionvon Datentypen werden die möglichen Ope-rationen mit denen Daten und die Gröÿe

des Speicherplatzes festgelegt. In Matlabwird stets der Begri� Datentyp oder Klasseverwendet und man meint damit zum Bei-spiel einen der folgenden Datentypen:

• double (numerische Arrays)

• sym (Symbolisches Objekt)

• function_handle (Function Handle)

• char (Zeichenketten)

• cell (Zellenarrays)

• struct (Strukturarrays)

Bisher haben wir hauptsächlich mit demDatentyp double und sym (aus der Sym-bolic Toolbox ) gearbeitet; gelegentlich auchmit der Klasse function_handle.

Um festzustellen von welchem Datentyp einObjekt ist, kann man die Funktion class

verwenden:

>> class(pi)

ans =

double

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

>> class(f)

ans =

function_handle

Auch mit der Funktion isa kann man denDatentyp einer Variablen heraus�nden.

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

>> isa(f,'double')

ans =

0

>> isa(f,'function_handle')

ans =

1

222 Copyright c© G. Gramlich

Mit den folgenden Anweisungen werden dieVariablen A bis N de�niert, die alle einenanderen Datentyp besitzen. Den Datentypkönnen Sie aus dem Matlab-Workspaceablesen.

>> A = 'Z';

>> B = magic(3);

>> C = @(x) x^2;

>> D = cell(3,2);

>> E.field = 1;

>> F = int8(123);

>> G = uint8(123);

>> H = int16(123);

>> I = uint16(123);

>> J = int32(123);

>> K = uint32(123);

>> L = single(123);

>> M = sym(123);

>> N = ss(1,1,1,1);

Die vorletzte Anweisung M = sym(123) istmit der Symbolic Math Toolbox und dieletzte Anweisung N = ss(1,1,1,1) mitControl Toolbox möglich. Erstere erzeugteine symbolische Variable und Letztere einZustandsraummodell. Weitere Matlab-Datentypen werden von Toolboxen erzeugt.Für weitere Informationen siehe auch doc

datatypes (help datatypes). Die drei Da-tentypen char, cell und struct wollen wiretwas genauer anschauen.

73.1 Zeichenketten (char)

Zeichenketten (Strings) werden durchHochkommata begrenzt

>> s = 'Ich bin eine Zeichenkette'

s =

Ich bin eine Zeichenkette

Die Variable s ist ein Array der Gröÿe(1, 25) vom Typ char. Mit dieser Varia-blen können Sie nun mit allen erlaubtenArrayoperationen manipulieren. Sie kön-nen zum Beispiel Zeichenketten zusammen-fügen oder trennen. Mit den Funktionenstr2num oder num2str können Sie Zeichenin Zahlen konvertieren oder umgekehrt.

Für weitere Informationen siehe doc

strfun (help strfun).

Aufgabe 185 (Zeichenketten)Die druckbaren Zeichen des Ascii-Zeichensatzes werden durch die ganzenZahlen 32:127 dargestellt. Zahlen kleinerals 32 entsprechen nicht druckbaren Steu-erzeichen. Geben Sie diese druckbarenZeichen auf dem Bildschirm aus. Pro Zeilesollen 16 Zeichen ausgegeben werden.Welcher Zahl entspricht das @-Zeichen, dasin jeder E-Mail-Adresse vorkommt?Lösung: Zunächst de�niert man eine(6, 16)-Matrix Z, die die Werte 32 bis 127enthält.

N = 32:127;

Z = reshape(N,16,6)';

Dann kann man diese mit Hilfe des Befehlschar in den ASCII-Zeichensatz umwandeln.Nach der Eingabe

char(Z)

sieht die Ausgabe wie folgt aus:

223 Copyright c© G. Gramlich

ans =

!"#$%&'()*+,-./

0123456789:;<=>?

@ABCDEFGHIJKLMNO

PQRSTUVWXYZ[\]^_

`abcdefghijklmno

pqrstuvwxyz{|}~

Um herauszu�nden welcher Zahl ein Zei-chen entspricht kann man Befehl double

verwenden. double('@') liefert dann dieZahl 64. © . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©

73.2 Zellen- und Strukturenarrays

Die Datentypen cell und struct erlau-ben es, unterschiedliche aber logisch zusam-mengehörige Daten (Felder) zu einer Varia-blen zusammenzufassen. Zum Beispiel kön-nen Zeichenketten und numerische Felderunterschiedlicher Gröÿe in einer Zelle ge-speichert werden. Mathematische Operatio-nen sind darauf aber nicht de�niert. Hierzumuss man gegebenenfalls auf den Inhalt zu-greifen. Strukturen und Zellen sind ähnlich.Ein Unterschied besteht jedoch darin, dassStrukturen durch Namen und nicht durchZahlen identi�ziert werden.

Strukturenarrays werden innerhalb vonMatlab an verschiedenen Stellen ver-wendet, zum Beispiel von den Funktio-nen spline, solve und von Optimierungs-und Di�erenzialgleichungslösern. Auÿer-dem spielen sie beim objektorientiertenProgrammieren inMatlab eine groÿe Rol-le (Darauf sind wir bisher nicht eingegan-

gen). Zellenarrays �nden zum Beispiel inden Funktionen varargin und varargout

Verwendung, sowie in Gra�kkommandos,um Text zu spezi�zieren.

Eine Struktur ist ein Datentyp, welcher ver-schiedene Werte von möglicherweise ver-schiedenen Datentypen beinhaltet. EineMatlab-Struktur ist mit dem DatentypRecord in der Sprache Pascal vergleich-bar. Im einfachsten Fall lässt sich eineStruktur durch einfache Anweisungen er-zeugen. Die folgenden Anweisungen erzeu-gen die Variable M vom Datentyp struct. Mist ein (1, 1)-Array.

n = 2;

M.Name = 'Hilbert';

M.Matrix = hilb(n);

M.Eigenwerte = eig(sym(hilb(n)));

Gibt man M ein, so erhält man die Feldna-men, aber nicht deren Inhalt:

>> M

M =

Name: 'Hilbert'

Matrix: [2x2 double]

Eigenwerte: [2x1 sym]

Das erste Feld M.Name ist vom Typ char,das zweite vom Typ double und das drittevom Typ sym. Den Inhalt des zweiten Feldeserhält man zum Beispiel durch

>> M.Matrix

ans =

1.0000 0.5000

0.5000 0.3333

Ein Zellenarray ist ein Matlab-Array, das

224 Copyright c© G. Gramlich

als Elemente Matlab-Arrays haben kann.Ein Element heiÿt Zelle oder Zellenelement.Im Gegensatz zu Strukturenarrays werdenZellenarrays nicht durch Namen, sonderndurch Zahlen identi�ziert. Ein Weg, umein Zellenarray zu de�nieren besteht dar-in, geschweifte Klammern zu verwenden.Die folgende Anweisung erzeugt das (2, 2)-Zellenarray Z und gibt Informationen überdie einzelnen Zellen am Bildschirm aus.

>> Z = {sym(2), pi; pascal(3),...

'ABC'}

Z =

[1x1 sym ] [3.1416]

[3x3 double] 'ABC'

Ein Zellenarray erlaubt es somit, Arraysverschiedener Datentypen zu einem Objektzusammenzufassen. Im obigen Beispiel be-steht das Zellenarray Z aus Arrays des Typsdouble und char. Sind die Zellen nicht zugroÿ, so werden sie am Bildschirm ange-zeigt. Lässt es der Raum aber nicht zu, soerscheint nur die Gröÿe der jeweiligen Zelle.Eine Zelle kann auch eine mehrdimensiona-le Struktur sein. Die Inhalte von einzelnenZellen sind zur Ausgabe mit Indizes in ge-schweiften Klammern anzugeben. Beispiel:

>> Z{2,1}

ans =

1 1 1

1 2 3

1 3 6

Mit der Funktion cellplot kann man sichdie gra�sche Struktur eines Zellenarrays ineinem Gra�kfenster anschauen. Der Aufruf

cellplot(A)

erzeugt die Abbildung 83.

3.1416

ABC

Abbildung 83: Die cellplot-Funktion

Aufgabe 186 (Zellenarrays)Speichern Sie die Blockmatrix

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:

A{1,1} = [1 2 3;6 7 8];

A{1,2} = [4 5;9 10];

A{2,1} = [11 12 13;16 17 18];

A{2,2} = [14 15;19 20];

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

Aufgabe 187 (Zellenarrays)Speichern Sie im (2, 2)-Zellenarray Z ortho-normale Basen für alle vier fundamentalen

225 Copyright c© G. Gramlich

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)-Zelleeine Basis von Null(A), in der (2,1)-Zellevon Bild(A) und in der verbleibenden Zelleeine orthonormale Basis von Null(A)T.Lösung: Die Singulärwertzerlegung

A = USV T

liefert orthonormale Basen für alle vier fun-damentalen Unterräume von A.

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

>> [U,S,V] = svd(A);

>> Z = cell(2,2);

>> Z(1,1) = {V};

>> Z(1,2) = {[]};

>> Z(2,1) = {U(:,1:3)};

>> Z(2,2) = {U(:,4)};

Alternativ kann eine Lösung wie folgt aus-sehen:

>> Z{1,1} = orth(A');

>> Z{1,2} = null(A);

>> Z{2,1} = orth(A);

>> Z{2,2} = null(A');

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

74 Audiosignale (Töne, Musik)

Für die folgende Beispiele mit Au-diosignalen ist eine funktionsfähi-

ge �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 sichaus digitalen Signalen mit einem Digital-Analog-Umsetzer (D/A-Umsetzer) analogeSignale erzeugen. Wichtige Parameter da-bei sind die Abtastfrequenz fS , das heiÿtdie Häu�gkeit der Abtastungen pro Sekun-de, und die Wortlänge w, das heiÿt die Zah-lendarstellung der Amplituden des digita-len Signals.

Eine moderne �PC Sound Card� besitztA/D- und D/A-Umsetzer mit einer typi-scherweise von 5 bis 44.1 kHZ einstellbarenAbtastfrequenz und einer Wortlänge von 8oder 16 Bit. Sie erreicht dann theoretisch ei-ne Hörqualität vergleichbar zur Audio-CD.

Der folgende Script läd die Datei handelin den Workspace. Darin be�ndet sich dasAudiosignal y für das Hallelujah aus Hän-dels Messias. Mit der Funktion soundsc

kann das Signal abgespielt werden. Die Ab-spieldauer beträgt 8.9 s. Die Abtastfre-quenz Fs ist 8192 Hz.

>> load handel

>> soundsc(y,Fs)

Weiter Tonbeispiele (Zugpfeife, Gong,Gelächter, usw.) �nden Sie unter doc

audiovideo (help audiovideo).

Am PC mit BetriebssystemWindows liegenAudiosignale oft in Dateien im wav-Format

226 Copyright c© G. Gramlich

vor. Matlab kann derartige Dateien lesenund schreiben, sowie digitale Signale direktan die �PC Sound Card� ausgeben. Siehedoc audiovideo (help audiovideo).

Aufgabe 188 (Audiosignale)Suchen Sie auf Ihrem PC eine wav-Dateiund laden Sie sie mit der Funktion wavread.Bestimmen Sie die Abtastfrequenz und dieWortlänge und geben Sie das Signal gra�schaus.Lösung: Hier mein Beispiel, siehe Abbil-dung 84. Dazu habe ich folgende Skript ver-

Abbildung 84: wav-Datei

wendet.

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

>> soundview(y,fs)

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

75 WWW-Seiten

Die Firma MathWorks kann über dasWorld Wide Web (WWW) erreicht werden.Die URL-Adresse3 lautet: http://www.

3URL: Uniform Resource Locator.

mathworks.com Der Deutsche Web Mir-ror (Spiegel) ist http://www.mathworks.

de Von hier aus �ndet man verschiedene In-formationen über Matlab und Simulinksowie deren Toolboxen. Auÿerdem gibt esHinweise über Blocksets, eine Liste von Bü-chern über Matlab sowie m-Files von an-deren Benutzern. Auch Informationen zurStudentenversion sind dort zu haben. Esemp�ehlt sich, hin und wieder die Home-page aufzusuchen, da dort die aktuellen In-formationen über Matlab zu �nden sind.

Um sich m-Files von der User Communityzu besorgen, steht die Adresse http://www.mathworks.de/matlabcentral zur Verfü-gung.

Programmiertipps stehen unterhttp://www.mathworks.de/access/

helpdesk/help/techdoc/matlab_prog.In dieser Beschreibung �ndet Sie auf derletzten Seite weitere Adressen, um weitereInfos über Realease Notes, Function Refe-rence, Newsgroup-Adressen, Suchadressennach Online-Quellen, Digest-Infos, News& Notes, Dokumentationen (Handbücher),Beispielsammlung, usw. Übrigens, dieseProgrammiertips (mit den Adressen auf derletzten Seite) werden auch als PDF-Filemit Matlab mitgeliefert. Über das Menühelp in Matlab help unter PrintableDokumentation (PDF) kommen Sie an dasPDF-Dokument.

Ein FAQ-Text (FAQ = Frequently AskedQuestions) zu Matlab �nden Sie unterhttp://www.mit.edu/~pwb/cssm.

227 Copyright c© G. Gramlich

76 Das Matlab-Logo

Zur Geschichte des Matlab-Logos (Ab-bildung 85) siehe http://www.mathworks.

com/company/newsletters/news_notes/

clevescorner/win03_cleve.html.

Abbildung 85: Das Matlab-Logo

77 Studentenversion

Eine Studentenversion von Mat-lab erhalten Sie unter https://www.

academic-center.de/cgi-bin/home.

78 Cleve's Corner

Besonders interessant �nde ich Cleve'sCorner. Darin be�nden sich interessanteArtikel rund umMatlab von Cleve Mo-ler, siehe www.mathworks.com/company/

newsletters/news_notes/clevescorner/

index.html.

79 Handbücher

Die Handbücher [14], [15], [16]und [17] sind als PDF-Files unterhttp://www.mathworks.de/access/

helpdesk/help/helpdesk.html erhältlich.

80 Progammierungstips

Tips zur e�zienten Programmierung inMatlab �nden Sie unter http://www.

mathworks.de/access/helpdesk/help/

pdf_doc/matlab/programming_tips.pdf.

81 Literatur

Bücher zu und über Matlab �ndetman unter http://www.mathworks.de/

support/books. Darunter auch das sehrempfehlenswerte Buch von Cleve Moler,siehe [19].

82 Ähnliche Systeme

Diejenigen, die sich Matlab nichtleisten können, sei auf die PublicDomain Software Scilab (http://www-rocq.inria.fr/scilab/), Octave(http://www.che.wisc.edu/octave),RLaB (http://rlab.sourceforge.net)und Euler (http://mathsrv.ku-eichstaett.de/MGF/homes/

grothmann/euler/german/index.html)verwiesen. Diese Systeme sind bezüglichSyntax und Kapazität dem Matlab-

228 Copyright c© G. Gramlich

System ähnlich. Andere kommerzielleSysteme sind zum Beispiel Gauss, HiQ,IDL, Mathcad und PV-WAVE.

Andere interaktive Systeme, die ihre Stär-ken hauptsächlich im Bereich symbolischerRechnungen haben, sind: Axiom, De-rive,Macsyma,Maple,Mathematica,MuPAD und Reduce. Man nennt die-se Systeme Computeralgebra-Systeme (CA-Systeme).

229 Copyright c© G. Gramlich

A Glossar

Array (Feld). Unter einem Array (Feld)versteht man eine Reihe (Ansamm-lung) von Daten eines bestimmtenTyps. Vektoren und Matrizen sind diebekanntesten Beispiele.

Array Editor. Ein Tool, das es erlaubt, denInhalt von Arrays anzuzeigen und zuverändern.

Class (Klasse oder Datentyp). Ein Da-tentyp in Matlab.

Command History (Kommando-Historie).Ein Tool, das früher eingebaute Mat-lab Kommandos anzeigt, sowohl fürdie gegenwärtige als auch für frühereSitzungen.

Command Window (Kommando-Fenster).Das Fenster, in dem Matlab denPrompt � anzeigt und man Komman-dos eingeben kann. Es ist Teil derMatlab Arbeitsober�äche.

Current Directory Browser. AktuellerVerzeichnis-Browser. Ein Browser,in dem m-Files und andere Filesangezeigt werden. Es können auchOperationen angewendet werden.

Editor/Debugger. Ein Tool zum Erzeu-gen, Editieren und zur Fehlersuche vonFiles.

FIG-�le. Ein File mit der Endung .fig,der eine Matlab-Figur speichert undin Matlab eingeladen werden kann.

Figure. Ein Matlab-Fenster zur Anzeigevon Gra�k.

Function M-File. Ein Typ von m-File, derEin- und Ausgabeargumente akzep-tiert. Variablen sind dort lokal de�-niert.

Handle Graphics. Ein objekt-orientiertesGra�ksystem, dem die Gra�k vonMatlab unterliegt. Objekte sind hier-achisch organisiert und werden durchHandles manipuliert.

Help Browser. Ein Browser, mit dem mandie Dokumentation von Matlab undanderen MathWorks Produkten an-schauen und suchen kann.

IEEE arithmetic (IEEE-Arithmetik). EinStandard-Gleitpunktsystem, das inMatlab realisiert ist.

LAPACK. Eine Bibliothek von FORTRAN77 Programmen zur Lösung linea-rer Gleichungen, Ausgleichsaufgaben,Eigenwert- und Singulärwertberech-nnungen. Viele Matlab-Funktionenzur linearen Algebra basieren auf LA-PACK.

Launchpad. Ein Fenster für den Zugangzu Tools, Demos und Dokumentatio-nen von MathWorks Produkten.

M-File. Ein File mit der Endung .m, derMatlab Kommandos beinhaltet. Einm-File ist entweder ein Function oderScript-File.

MAT-File. Ein File mit der Endung .mat,der Matlab Variablen beinhaltet. Eswird mit den Kommandos save undload erzeugt bzw. eingeladen.

Matlab desktop (Arbeitsober�äche).

230 Copyright c© G. Gramlich

Eine Benutzer-Arbeitsober�äche, umFiles, Tools und Anwendungen mitMatlab zu bearbeiten.

MEX-File. Ein Unterprogramm mit Coder FORTRAN-Code, das plattform-abgängige Endungen hat. Es verhältsich wie ein m-File oder eine eingebau-te Funktion.

Script M-File. Ein Typ von m-File, daskein Ein- und Ausgabeargument hatund auf Daten im Workspace (Ar-beitsspeicher) operiert.

Toolbox. Eine Sammlung von m-Files, dieden Funktionsumfang vonMatlab er-weitert, gewöhnlich im Hinblick auf einspezielles Anwendungsfeld.

Workspace. Arbeitsspeicher, der über dieMatlab-Befehlszeilen erreichbar ist.Beim Beenden werden die Variablengelöscht.

Workspace Browser. Ein Browser, der alleVariablen im Workspace au�istet undOperationen auf diesen erlaubt.

231 Copyright c© G. Gramlich

B Die Top Matlab-Funktionen

In diesem Anhang liste ich Matlab-Funktionen auf, von denen ich glaube, dasssie vom typischen Matlab-User am Häu-�gsten eingesetzt werden. Informationenüber diese Funktionen erhalten Sie mit denOnline-Hilfen von Matlab, insbesonderemit doc und help.

Vektoren/Matrizen

zeros Nullmatrixones Einsmatrixeye Einheitsmatrixrand Zufallsmatrixrandn Zufallsmatrixlinspace Gleicher Abstand

Spezielle Variablen/Konstanten

ans Nullarrayeps Maschinengenauigkeiti Imaginäre Einheitj Imaginäre Einheitinf ∞NaN Not a Numberpi Kreiszahl π

Logische Operatoren

all Test auf Nichtnullenany Test für ein Nichtnullelementfind Findet Indizesisempty Test auf leeres Arrayisequal Test auf Gleichheit

Arrays

size Arraygröÿelength Vektorlängereshape Ändert Form: Doppelpunktend Letzter Indexdiag Diagonalmatrizentril Dreiecksmatrizentriu Dreiecksmatrizenrepmat Blockmatrix

Kontrollstrukturen

error Fehlermeldungfor For-Schleifeif If-Abfrageswitch, case Fallunterscheidungwhile Wiederholungen

Datenanalysis

max Maximummin Minimummean arithm. Mittelwertstd Standardabweichungsum Summeprod Produktsort Sortieren

Lineare Algebra

norm Normcond Kondition\ Löst LGSeig Eigensystemelu LU-Faktorisierungqr QR-Faktorisierungsvd Singulärwertzerlegung

232 Copyright c© G. Gramlich

m-Files

edit Editorlookfor Suchenargin Anzahl Input-Argumentenargout Anzahl Output-Argumentetype Listet Filewhich Pfadname

Gemischtes

clc Löschtdemo Demonstrationendiary Aufzeichnungendir Verzeichnisdoc Hilfehelp Hilfetic, toc Zeitmessungwhat Listet Files

Datentypen

double Double Precisionchar Zeichencell Zellenum2str Zahl2Zeichensparse Sparsematrixstruct Struktur

Workspace

clear Löschtwho Listet Variablenload Läd Variablensave Speichertexit, quit Beendet

Ein- und Ausgabe

disp Zeigt Text oder Arrayfprintf Schreibt Datensprintf Schreibt Dateninput Prompt für Eingabe

Numerische Methoden

bvp4c Randwertaufgabefft FFTfminbnd Minimierunginterp1 Interpolationode45 Löst ODEpolyfit Polynom�tquadl Numerische Integrationroots Nullstellenspline Splines

Gra�k

plot x, y-Plotfplot Funktionsplotezplot Funktionsplotsemilog Halblogarithmischbar Barplothist Histogrammaxis Axenxlim x-Achseylim y-Achsegrid Gitterxlabel x-Labelylabel y-Labeltitle Titellegend Legendetext Textsubplot Subplothold Einfrierencontour Höhenlinienmesh 3D-Netzsurf 3D-Flächengraphspy Sparsestrukturprint Druckenclf Löscht Figurclose Schlieÿt Figur

233 Copyright c© G. Gramlich

Literatur

Die Literaturangaben sind alphabetischnach den Namen der Autoren sortiert.

[1] Anderson, E., Bai, Z., Bischof,C., Demmel, J., Dongarra, J.,Croz, J. D., Greenbaum, A.,Hammarling, S., McKenney, A.,Ostrouchov, S., Sorensen, D.:LAPACK User's Guide. Society forIndustrial and Applied Mathematics,Philadelphia, PA, USA, 3. Auflage,1999.

[2] Dongarra, J., Bunch, J., Moler,C., Stewart, G.: LINPACK Users'Guide. Society for Industrial and Ap-plied Mathematics, Philadelphia, PA,USA, 1979.

[3] Golub, G., van Loan, C.: MatrixComputations. The Johns HopkinsUniversity Press, 3. Auflage, 1996.

[4] Gramlich, G.: Lineare Algebra.Mathematik-Studienhilfen. Fachbuch-verlag Leipzig im Carl Hanser Verlag,2003.

[5] Gramlich, G.: Anwendungen derLinearen Algebra. Mathematik-Studienhilfen. Fachbuchverlag Leipzigim Carl Hanser Verlag, 2004.

[6] Gramlich, G.: Zur Linearen Alge-bra: Zusammenfassungen, Ergänzun-gen, Erweiterungen und Übersich-ten. Skript, Hochschule Ulm, Febru-ar 2006. http://www.rz.fh-ulm.de/

~gramlich.

[7] Gramlich, G., Werner, W.: Nu-merische Mathematik mit Matlab.dpunkt.verlag, 2000.

[8] Greenbaum, A.: Iterative Methodsfor Solving Linear Systems. Societyfor Industrial and Applied Mathema-tics, Philadelphia, PA, USA, 1997.

[9] Higham, D., Higham, N.: MatlabGuide. Society for Industrial and Ap-plied Mathematics, Philadelphia, PA,USA, 2000.

[10] Kanzow, C.: Numerik linearer Glei-chungssysteme. Springer Verlag, 2005.

[11] Kelley, C.: Iterative Methods for Li-near ans Nonlinear Equations. Societyfor Industrial and Applied Mathema-tics, Philadelphia, PA, USA, 1995.

[12] Knorrenschild, M.: Numeri-sche Mathematik . Mathematik-Studienhilfen. Fachbuchverlag Leipzigim Carl Hanser Verlag, 2003.

[13] Lehoucq, R., Sorensen, D., Yang,C.: ARPACK User's Guide: Soluti-on of Large-Scale Eigenvalue Problemswith Implicitly Restarted Arnoldi Me-thods. Society for Industrial and Ap-plied Mathematics, Philadelphia, PA,USA, 1998.

[14] Matlab: Data Analysis. The Ma-thWorks, Natick, MA, USA, 2006.http://www.mathworks.de.

[15] Matlab: Graphics. The MathWorks,Natick, MA, USA, 2006. http://www.mathworks.de.

234 Copyright c© G. Gramlich

[16] Matlab: Mathematics. The Ma-thWorks, Natick, MA, USA, 2006.http://www.mathworks.de.

[17] Matlab: Programming . The Ma-thWorks, Natick, MA, USA, 2006.http://www.mathworks.de.

[18] Meister, A.: Numerik linearer Glei-chungssysteme. Vieweg-Verlag, 1999.

[19] Moler, C.: Numerical Computingwith Matlab. Society for Industri-al and Applied Mathematics, Philadel-phia, PA, USA, 2004.

[20] Nitschke, M.: Geometrie.Mathematik-Studienhilfen. Fach-buchverlag Leipzig im Carl HanserVerlag, 2005.

[21] Rieder, A.: Keine Probleme mit In-versen Problemen. Vieweg Verlag,2003.

[22] Saad, Y.: Iterative Methods for SparseLinear Systems. Society for Industri-al and Applied Mathematics, Philadel-phia, PA, USA, 2. Auflage, 2003.

[23] Shampine, L., Gladwell, I.,Thompson, S.: ODEs with Matlab.Cambridge, 2003.

[24] Shampine, L. F., Reichelt, M. W.:The MATLAB ODE suite. SIAM J.SCI. Computing , (18):1�22, 1997.

[25] Simulink: Simulation and Model-Based Design. The MathWorks, Na-tick, MA, USA, 2006. http://www.

mathworks.de.

[26] Smith, B., Boyle, J., Dongarra,J., Garbow, B., Ikebe, Y., Kleme,

V., Moler, C.: Matrix EigensystemRoutines-Eispack Guide. Springer-Verlag, 1976.

[27] Weigand, H., Weth, T.: Computerim Mathematikunterrricht . SpektrumAkademischer Verlag, 2002.

235 Copyright c© G. Gramlich

Stichwortverzeichnis

', 46*, 10, 15, 30, 34, 50+, 30, 34, 50, 51-, 30, 34, 50, 51-all, 28-realmin, 35.*, 51, 52.+, 52./, 15, 51.�, 51.\, 51/, 15, 30, 34:, 44, 232�, 30, 50\, 93, 100, 109, 111, 114, 118, 132, 221,

232

abs, 34acos, 40acosd, 40acsc, 40Albrecht Dürer, 13all, 232all(any(B)), 57angle, 34ans, 30, 33, 232any, 232any(all(B)), 57any(B(1:2,1:3)), 57any(B), 57Ascii, 26asec, 40asin, 40asind, 40atan, 40

atan2, 40Axiom, 229axis, 73, 233axis equal, 73axis square, 73

backsub, 111, 113bar, 75, 233bar3, 75bar3h, 75barh, 75Basis, 204bench, 30Bessel, 40bicg, 124bicgstab, 124binomial, 204binopdf, 160blkdiag, 54box off, 65box on, 65bvp4c, 155�158, 233bvpinit, 156

C/C++, 17, 18, 39, 79, 84cart2pol, 74cart2sph, 74cat, 220, 221cd, 29ceil, 165ceil(x), 41cell, 220, 222, 223, 233cellplot, 225cgs, 124char, 116, 220, 222�225, 233chol, 120

236

Cholesky, 120cholinc, 124Cholseky, 120circshift, 55class, 222clc, 28, 233clear, 233clear global, 89Cleve Moler, 2, 228clf, 233close, 233coeff, 193colorbar, 68colormap, 68colspace, 98, 108combinat, 163compan, 47compose, 179computer, 29, 33, 36cond, 117, 232condest, 118contour, 233conv, 133, 136convert, 193corrcoef, 160cos, 40, 129cosd, 40cot, 40cov, 131, 160cross, 52, 97, 108csc, 40cumprod, 56cumsum, 56cumtrapz, 150, 151

dblquad, 148, 151deconv, 134, 136degree, 193

delete, 29demo, 233demos, 204Derive, 229det, 102, 108, 118diag, 47, 54, 108, 221, 232diag(rot90(B)), 55diary, 233diary off, 26Dichtefunktionen, 160diff, 56, 187digits, 201dir, 29, 233disp, 59, 233doc, 23, 27, 28, 232, 233doc audiovideo, 226, 227doc datatypes, 38, 223doc demo, 27doc demos, 27doc elfun, 27, 34, 40doc elmat, 33, 45doc funfun, 62, 153doc gallery, 125doc general, 85doc graph2d, 66doc graph3d, 66doc graphics, 78doc iofun, 60doc lang, 33, 82, 85doc ops, 43, 45, 80doc optim, 144, 205, 208doc polyfun, 136doc sim, 216doc sparfun, 125, 218doc specfun, 40doc specgraph, 66doc stats, 160doc strfun, 223

237 Copyright c© G. Gramlich

doc symbolic, 203doc uicontrol, 79dot, 97, 108double, 3, 9, 32, 35�38, 116, 220, 222,

224, 225, 233dsolve, 151, 153, 196

echo off, 83echo on, 83edit, 85, 233eig, 85, 103, 104, 106�108, 123, 126, 218,

221, 232eigs, 3, 106, 125, 126, 218eigshow, 105Eispack, 16end, 131, 232eps, 33, 35, 118, 122, 232eps*realmin, 36error, 232Euklid, 39Euler, 182, 202, 203, 228Excel, 24, 26exist, 29, 89exit, 20exit, quit, 233exp, 41, 129expm, 54, 108, 126eye, 46, 94, 108, 218, 232ezmesh, 66, 71ezplot, 66, 67, 69, 72, 128, 129, 233ezplot3, 69ezsurf, 71

factor, 193factorial, 160, 162feval, 129fft, 145, 233fftw, 146

filebrowser, 23find, 232find(B), 57finite(B(:,3)), 57finverse, 180fix(x), 41fliplr, 54, 55fliplr(A), 55flipud, 11, 54floor, 165floor(x), 41fminbnd, 131, 143, 144, 233fminsearch, 143, 144fopen, 60for, 80, 81, 232format, 32, 59format bank, 32format long, 32format short, 32Fortran, 17, 18, 84, 115Fourier, 144�146, 198�201fourier, 200fplot, 61, 66, 67, 88, 233fprintf, 59�61, 233fread, 60Frobenius, 116, 117fscanf, 60, 61fsolve, 140, 204, 205full, 126, 217function, 42, 84, 85function_handle, 222funm, 54funtool, 194fwrite, 60fzero, 61, 139, 140, 143, 181

Galiei, 9gallery, 47

238 Copyright c© G. Gramlich

Gauÿ, 113, 195Gauÿ-Jordan, 111Gauss, 229gausselim, 111, 113, 114gaussjord, 111, 114gcd, 177gemres, 124geomean, 160geopdf, 160get, 78global, 89gmres, 124, 125grid, 63, 233gsvd, 131guide, 79

Hadamard, 47hadamard, 47, 131handel, 226Hankel, 40, 47hankel, 47Hdf, 26Heaviside, 86heaviside, 86help, 26�28, 232, 233Help Browser, 28Hermite, 120, 123, 124, 126Hesse, 189Higham, 125Highams, 47hilb, 47Hilbert, 47HiQ, 229hist, 75, 233hold, 233Horner, 88horner, 193hostid, 29

humps, 67, 139, 146, 150

i, 33, 232IDL, 229Ieee, 32, 35if, 80, 82, 232ifft, 145imag, 34image, 76, 78imread, 76, 78Inf, 33, 35, 36inf, 33, 232input, 59, 233inputname, 85int, 151, 190, 191int16, 36, 37int32, 36, 37int8, 36, 37interp1, 139, 233interp2, 68intmax, 38intmin, 38inv, 93, 94, 107, 108, 118, 221inverse, 28invhilb, 47ipermute, 221isa, 222iscount, 180isempty, 232isequal, 232iskeyword, 89isvarname, 33

j, 33, 232Jacobi, 189, 190jacobian, 189, 190Java, 17, 18, 39Jordan, 108

239 Copyright c© G. Gramlich

jordan, 108

kron, 53Kronecker, 53

Lapack, 115Laplace, 192, 201, 212laplace, 192, 201legend, 233length, 232license, 29limit, 182�184LinearAlgebra, 204Linpack, 16linprog, 206linsolve, 109linspace, 44, 159, 232load, 21, 22, 47, 233log, 41log10, 41log2, 41loglog, 73logm, 54logspace, 44lookfor, 28, 85, 233lookfor complex, 34ls, 29lsqcurvefit, 208, 209lsqnonlin, 208lsqr, 124lu, 94, 108, 119, 219, 232luinc, 124

Macsyma, 229mad, 160magic, 47Maple, 12, 111, 160�163, 177, 180, 194,

195, 197, 201, 202, 204, 229maple, 111, 177, 204

maple('with(combinat)'), 204Markov, 81Mathcad, 229Mathematica, 229Matlab, 88matlabrc, 30matlabroot, 29max, 39, 56, 232mean, 56, 83, 160, 167, 232median, 56, 83, 160mesh, 65, 66, 159, 233meshgrid, 65mfun, 201mhelp, 193mhelp Basis, 204mhelp binomial, 204mhelp combinat, 163, 204mhelp LinearAlgebra[Basis], 204mhelp('LinearAlgebra,Basis'), 204min, 56, 232minres, 124mode, 160movie, 78mtaylor, 194multinomial, 162MuPAD, 229

namelengthmax, 33NaN, 33, 35, 86, 232nargchk, 85nargin, 85, 233nargout, 85, 233nchoosek, 161ndgrid, 221ndims, 221norm, 39, 115, 116, 232normest, 117normpdf, 130, 160

240 Copyright c© G. Gramlich

null, 98, 108, 122num2str, 223, 233

Octave, 228ode113, 154ode15i, 153, 154ode15s, 154, 155ode23, 154ode23s, 154ode23t, 154ode23tb, 154ode45, 61, 131, 152�155, 212, 214, 233ones, 46, 218, 232optimset, 140, 143orth, 98, 99, 108, 122

Pascal, 18, 47, 84, 224pascal, 47path, 29Path Browser, 29pathtool, 29pcg, 124, 125pdepe, 157, 158pdsolve, 196�198peaks, 68perms, 161, 162permute, 221pi, 32, 33, 232pie, 75piecewise, 181pinv, 119pinv(A)*b, 110plot, 15, 62�67, 233plot3, 65plotyy, 74pol2cart, 74polar, 74poly, 103, 108, 133, 136

polyder, 135, 136polyfit, 132, 136, 137, 233polyint, 135, 136polyval, 135, 136pretty, 174print, 77, 78, 233prod, 56, 160, 162, 232PV-WAVE, 229pwd, 29

qmr, 124qr, 108, 232quad, 42, 61, 146, 148, 149, 151quad, quadl, 131quadl, 146, 148, 149, 151, 233quadv, 151quit, 20quiver, 75, 76quiver3, 76

rand, 10, 46, 49, 164, 165, 167, 218, 220,232

rand(n), 165randn, 46, 164, 165, 167, 220, 232randtool, 168range, 160rank, 99, 108, 122rcond, 118real, 34realmax, 35realmin, 36Record, 224Reduce, 229Reichelt, 154repmat, 232reshape, 54, 232reshape(A,4,3), 55RLaB, 228

241 Copyright c© G. Gramlich

roots, 136, 140, 143, 233Rosenbrock, 154rosser, 47rot90, 54rot90(A,3), 55rot90(B), 55round, 42round(x), 41rref, 93, 108, 111�114rsolve, 195Runge-Kutta, 152, 154Runge-Kutte, 154

save, 21, 22, 233saveas, 78Scilab, 228sdvs, 126sec, 40semilog, 233semilogx, 73semilogy, 73set, 78Shampine, 154shiftdim, 221sim, 216simplify, 174simulink, 210sin, 27, 40, 61, 129sind, 40single, 36, 38size, 46, 47, 85, 232solve, 111, 114, 142, 143, 181, 193, 224sort, 56, 83, 232soundsc, 226sparse, 217, 218, 233spdiags, 217speye, 218sph2cart, 74

spline, 138, 224, 233spones, 218sprand, 218sprandn, 218sprintf, 59, 233spy, 219, 233sqrt, 27, 34, 41, 43sqrtm, 54squeeze, 221startup, 30std, 56, 83, 160, 232stem, 75str2num, 223struct, 220, 222�224, 233subplot, 65, 233subs, 174, 178, 179, 193sum, 56, 232surf, 65, 233svd, 108, 218, 232svds, 126, 218switch, 80, 82switch, case, 232sym, 222, 224symmlq, 124symsum, 185, 186

Töplitz, 47tabulate, 160tan, 40Taylor, 194, 195taylor, 193taylortool, 194text, 233tic, 126tic, toc, 233title, 63, 65, 233toc, 126toeplitz, 47

242 Copyright c© G. Gramlich

trapz, 149, 151tril, 54, 108, 232triplequad, 149, 151triu, 54, 108, 232triu(B), 55type, 29, 180, 233

uiimport, 26uint16, 36, 37uint32, 36, 37uint8, 36, 37unidpdf, 160unifpdf, 160

vander, 47Vandermonde, 47var, 56, 131, 160, 167varargin, 131, 224varargout, 131, 224vectorize, 58, 91ver, 30version, 30vpa, 201, 202

Wathen, 125wav, 226, 227wavread, 227what, 29, 233whatsnew, 30which, 29, 233while, 80, 81, 232who, 21, 22, 233whos, 9, 21, 22whos global, 89why, 131Wilkinson, 47wilkinson, 47Workspace Browser, 45

xlabel, 65, 233xlim, 233

ylabel, 65, 233ylim, 233

zeros, 46, 81, 94, 108, 218, 220, 232zlabel, 65

243 Copyright c© G. Gramlich