MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB...

46
MATLAB — E INE E INFÜHRUNG basierend auf den Skripten von Prof. Dr. Martin Reißel, Fachhochschule Aachen, Standort Jülich M.Sc. Ivan Cherlenyak und Prof. Dr. Hans-Jürgen Reinhardt, Universität Siegen Dr. Susanne Teschl, Fachhochschule Technikum Wien Prof. Dr. Jörn Behrens und Prof. Dr. Armin Iske, Alfred Wegener Institute für Polar- und Meeresforschung sowie Universität Hamburg

Transcript of MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB...

Page 1: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

MATLAB — E INE EINFÜHRUNG

basierend auf den Skripten von

• Prof. Dr. Martin Reißel, Fachhochschule Aachen, Standort Jülich

• M.Sc. Ivan Cherlenyak und Prof. Dr. Hans-Jürgen Reinhardt, Universität Siegen

• Dr. Susanne Teschl, Fachhochschule Technikum Wien

• Prof. Dr. Jörn Behrens und Prof. Dr. Armin Iske, Alfred Wegener Institute für Polar-und Meeresforschung sowie Universität Hamburg

Page 2: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

Kapitel 1

Was ist MATLAB

Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die

Visualisierung von Daten im technisch-wissenschaftlichen Bereich. MATLAB wurde in

den 70er Jahren an der University of New Mexico und der Stanford University entwickelt

um Kurse aus Lineare Algebra und Numerische Analysis zu unterstützen. Der Name

(MAT rix LAB oratory) erinnert noch daran. Heute ist MATLAB ein universelles Werk-

zeug, das in weiten Bereichen der angewandten Mathematik eingesetzt wird.

Man kann MATLAB auf zwei Arten verwenden:

• Bei der interaktiven Verwendung werden Anweisungen direkt über die Tastatur ein-

gegeben und sofort ausgeführt.

• Für umfangreiche Probleme ist es empfehlenswert, MATLAB als Programmier-

sprache einzusetzen.

Wesentlichen Eigenschaften sind:

• die Sprache wird interpretiert, d.h. Übersetzen etc. entfällt

• grundlegender Datentyp sind doppeltgenaue Matrizen; Variablen (auch Felder) müs-

sen nicht vereinbart werden

• vom Benutzer definierte Funktionen und Unterprogramme werden einfach in Text-

dateien (m-Files) abgespeichert und können dann wie eingebaute Funktionen be-

nutzt werden

2

Page 3: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

3

• auf dieser Basis gibt es zahlreiche Erweiterungen (Toolboxes), die (nach Kauf) eine

Unmenge an Funktionalitäten zur Verfügung stellen

• ein einfaches Hilfe-System, in dem auch Dokumentationen eigener Funktionen

leicht handhabbar sind.

Darüber hinaus können auch C- und Fortran-Programme in Form von sogenannten mex-

Files von MATLAB ausgeführt werden.

Nach dem Hochfahren von MATLAB sollte etwa folgendes Fenster zu sehen sein

Abbildung 1.1: Matlab Oberfläche.

Das Fenster ist in5 Bereiche geteilt:

• in der Mitte befindet sich das Kommandofenster, in dem der Benutzer seine Befehle

eingibt und auch Ausgaben des Programms angezeigt werden

Page 4: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

4

• rechts oben werden (bei Einstellung Workspace) alle augenblicklich vorhandenen

Variablen mit Typ und Speicherbedarf angezeigt

• rechts unten werden (bei Einstellung Command History) alle vom Benutzer einge-

gebenen Kommandos angezeigt

• links oben sind (bei Einstellung Current Directory) alle vomBenutzer in seinem

Arbeitsverzeichnis abgelegten m-Files zu sehen

• links unten werden Details zu der gewählten Datei angezeigt, z.B. Name der Funk-

tion.

Für jedes neue Projekt sollte ein eigenes Verzeichnis angelegt werden. Damit MATLAB in

diesem Verzeichnis arbeitet, muss am oberen Rand des Fensters unter “Current Directory“

das jeweilige Verzeichnis eingestellt werden.

Abbildung 1.2: Aktuelles Verzeichnis.

1.1 Hilfe

MATLAB verfügt über umfangreiche Online-Hilfen. Mit diesen erhalten Sie detaillierte

Informationen zur Funktionalität von MATLAB. Die Hilfsysteme können mit den Befeh-

len help, helpwin undhelpdesk aufgerufen werden.

• Das help- Kommando.

>> help name

gibt Hilfetext zur Variable oder Funktion “name“ aus. Alle MATLAB-Funktionen

sind in logische Gruppen (Themen) eingeteilt, und die MATLAB-Verzeichnisstruktur

basiert auf dieser Einteilung. Gibt man alleine “help“ ein,so wird diese Gruppie-

rung angezeigt. Hiermit kann man sich nun weiter vortasten.

Page 5: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

5

• Das lookfor- Kommando

Basierend auf einem Schlüsselwort können Sie mit dem lookfor-Kommando nach

Funktionen suchen. Dabei wird die erste Zeile des help-Textes jeder MATLAB-

Funktion ausgegeben, die das angegebene Schlüsselwort beinhaltet. Sucht man zum

Beispiel Informationen über Splines, dann gibt man am Prompt

>> lookfor spline

an.

• Das Hilfefenstersystem helpwin

Gibt man den Befehl

>> helpwin

ein, so wird ein neues Windowsfenster geöffnet (siehe Abbildung 1.3), das verwen-

det werden kann, um interaktive Hilfe über MATLAB Funktionen zu erhalten. Das

helpwin-System ist das interaktive Analog des help-Systems. Durch Doppelklicken

auf ein Thema in diesem Textfenster, erhält man eine Liste zudiesem Thema. Der

helpwin-Befehl läßt sich analog dem help-Befehl mit dem gewünschten Thema

bzw. der gewünschten Funktion direkt aufrufen.

• Das Hilfesystem helpdesk

Das MATLAB-Hilfesystem helpdesk liefert HTML-basierte Hilfe. Diese HTML-

Dokumente haben den Vorteil, dass sie Grafiken beinhalten können und Verweise

auf andere Dokumente leicht machbar sind.

Page 6: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

6

Abbildung 1.3: Help.

Page 7: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

Kapitel 2

Erste Schritte

Der MATLAB-Prompt (die Eingabeaufforderung) wird durch dieZeichen “»“ gekenn-

zeichnet. Das Semikolon “;“ trennt mehrere Befehle in einer Zeile, und unterdrückt die

Ausgabe von Werten, wohingegen das Komma “,“ Befehle trennt,aber die Werte auch

ausgibt. Zuweisungen erfolgen durch den Operator “=“. DreiPunkte am Zeilenende “...“

bedeutet, dass der Ausdruck in der nächsten Zeile weitergeht. Kommentare werden mit

“%“ eingeleitet.

MATLAB unterscheidet zwischen Groß- und Kleinbuchstaben,d.h. “Antwort“ und

“antwort“ sind unterschiedliche Variablennamen. Folgende Regeln sind bei der Definition

von Variablen zu beachten:

• Ein Variablenname darf keine Sonderzeichen außer dem Unterstrich enthalten.

• Das erste Zeichen muß ein Buchstabe sein.

• Der Name darf nicht mehr als19 Zeichen enthalten (der Rest wird automatisch

abgeschnitten).

D.h. “test_3“ wäre ein gültiger Variablenname, aber “Summe_a+b“ oder auch “5_Test“

sind keine gültigen Variablennamen.

7

Page 8: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

8

2.1 Einfache Rechenoperationen

Alle Anweisungen werden nach dem Prompt eingegeben und mit “Return“ bestätigt.

MATLAB nennt das Ergebnis ans (kurz für answer):

>> 12+3*1/8

ans =

12.3750

Addition (+), Subtraktion (-), Multiplikation (*) und Division (/) werden wie gewohnt

bezeichnet und verwendet.

Benötigt man einen Ausdruck häufiger, so ist es sinnvoll eine Variable anzulegen:

>> a_1 = 12+3*1/8; b_1 = 9/5+2/3

b_1 =

2.4667

Durch das Semikolon hinter der ersten Zuweisung wird die Ausgabe unterdrückt. Trotz-

dem ist die Variable “a_1“ definiert. Der Wert einer Variablen kann auch abgefragt wer-

den:

>> a_1

a_1 =

12.3750

Wichtig: Bei der Multiplikation darf das Multiplikationszeichen (*) nicht weggelassen

werden:

Page 9: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

9

>> 8a_1

??? 8a_1

|

Error: Unexpected MATLAB expression.

wohingegen

>> 8*a_1

ans =

99

2.2 Komplexe Zahlen

Komplexe Zahlen können wie reelle Zahlen eingegeben werden:

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

z1 =

3.0000 + 4.0000i

z2 =

1.0000 - 3.0000i

Beachten Sie, dass die imaginäre Einheit als “i“ oder “j“ eingegeben werden kann (intern

wird “i“ verwendet). Außerdem kann das Multiplikationszeichen zwischen “i“ und dem

Imaginärteil weggelassen werden. Im Falla = 1; b = 2; z = a+ b ∗ j ist das Multiplika-

tionszeichen zwischenb und “j“ jedoch notwendig.

Addition, Subtraktion, Multiplikation, Division und Funktionswerte werden wie bei

den reellen Zahlen gebildet:

Page 10: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

10

>> z = z1/3 + z2*z1^2

z =

66.0000 +46.3333i

>> sqrt(1+2i)

ans =

1.2720 + 0.7862i

Die konjugiert komplexe Zahl zuz erhalten wir mit

>> z = 1+3i; conj(z)

ans =

1.0000 - 3.0000i

Auch durch Anfügen eines Apostrophs ’ wird eine Zahl komplexkonjugiert. Das ist ein

Spezialfall - im allgemeinen bewirktA′, daß die MatrixA transponiert und komplex kon-

jugiert wird.

>> z’

ans =

1.0000 - 3.0000i

Absolutbetrag und Phasenwinkel berechnet man mitabs(z) undangle(z), wobei der Pha-

senwinkel von MATLAB im Bogenmaß ausgegeben wird.

>> abs(z)

ans =

Page 11: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

11

3.1623

>> angle(z)

ans =

1.2490

2.3 Vektoren

Vektoren werden genau wie Skalare als spezielle Matrizen behandelt. Dabei wird strikt

zwischen Zeilenvektoren (1× n Matrizen) und Spaltenvektoren (n×1 Matrizen) unter-

schieden. Die Eingabe von Zeilenvektoren erfolgt durch

>> z=[1 2 5 7]

z =

1 2 5 7

bzw.

>> z=[1,2,5,7]

z =

1 2 5 7

Bei Spaltenvektoren müssen die Komponenten durch “;“ getrennt werden, d.h.

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

s =

1

2

3

4

Page 12: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

12

Mit dem Befehlsize ermittelt man das Format einer Variablen. Fürs und z aus dem

vorherigen Beispiel erhalten wir

>> size(z),size(s)

ans =

1 4

ans =

4 1

d.h. z ist eine 1×4 Matrix, s eine 4×1 Matrix. Man beachte, daß das Ergebnis vonsize

selbst ein Vektor mit zwei Komponenten ist. Zeilenvektorenwerden mit Hilfe des Trans-

positionsoperators ’ in Spalten umgewandelt und umgekehrt:

>> z,s

z =

1 2 5 7

s =

1

2

3

4

>> z’

ans =

1

2

5

7

>> s’

ans =

1 2 3 4

Vektoren gleichen Formats können addiert, subtrahiert undmit einer reellen Zahl multi-

pliziert werden:

Page 13: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

13

>> z=[1,2,5,7]

z =

1 2 5 7

>> z2=[5:8]

z2 =

5 6 7 8

>> z+z2

ans =

6 8 12 15

>> z*4

ans =

4 8 20 28

Das Skalarprodukt ergibt sich als Matrixmultiplikation eines Zeilenvektors mit einem

Spaltenvektor:

>> z,s

z =

1 2 5 7

s =

1

2

3

4

>> z*s

ans =

48

d.h. das Ergebnis ist eine 1×1 Matrix. Umgekehrt erhalten wir eine n×n Matrix, in unse-

rem Beispiel also

>> s*z

ans =

Page 14: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

14

1 2 5 7

2 4 10 14

3 6 15 21

4 8 20 28

Daneben gibt es die Möglichkeit, zwei Vektoren komponentenweise zu multiplizieren,

indem statt * der Operator .* benutzt wird:

>> z=[1,2,5,7]

z =

1 2 5 7

>> z2=[5:8]

z2 =

5 6 7 8

>> z.*z2

ans =

5 12 35 56

Auf ein einzelnes Element eines Vektors wird in Array-Notation zugegriffen:

>> z=[1,2,5,7]

z =

1 2 5 7

>> z(3)

ans =

5

Man beachte die runden Klammern! Die Indizierung beginnt bei 1 (nicht bei0). Analog

kann man komplette Teilvektoren selektieren, z.B.

>> z=[1,2,5,7]

z =

1 2 5 7

>> z(1:3)

Page 15: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

15

ans =

1 2 5

d.h.z(1 : 3) selektiert die Komponenten mit Index1, 2, 3. Soll ein nicht zusammenhän-

gender Bereich selektiert werden, so benutzt man einfach einen Indexvektor

>> z([1,3,4])

ans =

1 5 7

Neben dem Auswählen von Teilvektoren können Vektoren auch erweitert werden:

>> z=[1,2,5,7]

z =

1 2 5 7

>> z=[z,8,9]

z =

1 2 5 7 8 9

>> z2=[5:8]

z2 =

5 6 7 8

>> z=[z,z2]

z =

Columns 1 through 7

1 2 5 7 8 9 5

Columns 8 through 10

6 7 8

Bei allen Operationen mit Vektoren muß darauf geachtet werden, dass die (Matrix-) For-

mate mathematisch korrekt gewählt sind, d.h. man kann keineSpalten- zu Zeilenvektoren

addieren etc. Für Vektoren sind zahlreiche spezielle Funktionen implementiert, so z.B.

die Norm eines Vektors:

>> z=[1,2,5,7]

Page 16: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

16

z =

1 2 5 7

>> norm(z)

ans =

8.8882

2.4 Matrizen

Für Matrizen gelten analoge Aussagen wie für Vektoren. Mit

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

a =

1 2 3

4 5 6

definiert man also eine 2×3 Matrix. Matrizen können auch aus Zeilen- bzw. Spaltenvek-

toren zusammengesetzt werden:

>> z1=[3 2 1]

z1 =

3 2 1

>> z2=[6 5 4];

>> b=[z1;z2]

b =

3 2 1

6 5 4

Man beachte, dass Zeilen mit “;“ aber Spalten mit “,“ getrennt werden müssen. Zur Se-

lektion einzelner Elemente wird wieder Array-Notation benutzt, so dass für die Matrixb

aus dem letzten Beispiel folgt

>> b(2,1)

ans =

6

Page 17: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

17

Analog zu Vektoren können Untermatrizen ausgewählt bzw. Matrizen erweitert werden.

Addition und Subtraktion zweier Matrizen sowie Multiplikation einer Matrix mit einer

reellen Zahl sind wie üblich definiert. Wie bei Vektoren können zwei Matrizen mit Hilfe

der Operatoren .* bzw. ./ komponentenweise multipliziert bzw. dividiert werden:

>> a,b

a =

1 2 3

4 5 6

b =

3 2 1

6 5 4

>> a.*b

ans =

3 4 3

24 25 24

Zum Transponieren einer Matrix benutzt man wieder den Operator ’.

Existiert die InverseA−1 , so ist die Lösungx vonA∗x = b gegeben durchx = A−1∗b.

A ist invertierbar genau dann, wenn die Determinate vonA ungleich Null ist:

>> A= [3 4 -2; -1 2 8; 2 0 -5], b = [4; -1; 3]

A =

3 4 -2

-1 2 8

2 0 -5

b =

Page 18: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

18

4

-1

3

>> det(A)

ans =

22

Wir erhalten die InverseA−1 mit inv(A):

>> x = inv(A)*b

x =

2.1818

-0.5000

0.2727

MATLAB bietet noch eine andere Schreibweise fürx = A−1 ∗ b:

>> x = A\b

x =

2.1818

-0.5000

0.2727

Das Symbol “\“ bezeichnet die sogenannte Linksdivision (left division). Der Name kommt

daher, dass nun der Nenner links steht und der Bruchstrich nach links geneigt ist. Hier

stehtA\ sozusagen für die Inverse vonA. Im Fall von Skalaren ist die Linksdivision

>> 2\3

Page 19: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

19

ans =

1.5000

gleich der Rechtsdivision3/2 (die Multiplikation von Skalaren ist ja kommutativ). Bei

Matrizen aber istinv(A) ∗ b (Linksdivision) ungleichb ∗ inv(A) (Rechtsdivision), der

letzte Ausdruck ist nämlich gar nicht definiert. Daher erhalten wir eine Fehlermeldung,

wenn wir eingeben:

>> b/A

??? Error using ==> /

Matrix dimensions must agree.

Die Verwendung vonx = A\b anstelle vonx = inv(A) ∗ b hat verschiedene Vorteile:

• Erstens werden bei Eingabe vonA\b weniger interne Rechenschritte durchgeführt

(es wird das Gaußsche Eliminationsverfahren verwendet). Daher erhält man so vor

allem bei größeren Problemen schneller eine Lösung.

• Zweitens liefert die Eingabe vonx = A\b auch dann eine Lösung, wenn das Glei-

chungssystem nicht eindeutig lösbar ist (und daher die InverseA−1 nicht existiert).

Im Fall eines überbestimmten Systems erhält man zum Beispieleine Lösung, die

den quadratischen Fehler vonAx− b = 0 minimiert.

Es gibt einige Funktionen zum einfachen erzeugen spezieller Matrizen:

>> ones(2,3)

ans =

1 1 1

1 1 1

>> zeros(3,2)

ans =

0 0

0 0

Page 20: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

20

0 0

>> eye(3)

ans =

1 0 0

0 1 0

0 0 1

>> rand(3,2)

ans =

0.4398 0.3651

0.3400 0.3932

0.3142 0.5915

MATLAB erlaubt es, daß Funktionen mehrere Ergebniswerte liefern, die in einem Vektor

zusammengefasst werden. Ein Beispiel dafür ist die (eingebaute) LU-Zerlegung einer

Matrix A, d.h.PA = LU , wobeiA die Eingabe undP,L, U Ausgabewerte sind. Ein

entsprechender Aufruf der Funktionlu sieht wie folgt aus:

>> A=3*eye(3)+ones(3)

A =

4 1 1

1 4 1

1 1 4

>> [L,U,P] = lu(A)

L =

1.0000 0 0

0.2500 1.0000 0

0.2500 0.2000 1.0000

U =

4.0000 1.0000 1.0000

0 3.7500 0.7500

0 0 3.6000

P =

Page 21: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

21

1 0 0

0 1 0

0 0 1

Weitere Details sind mithelp lu zu erhalten. Darüberhinaus sind die meisten Standard-

funktionen (exp, sin, cos, etc.) auf Matrizen definiert, wobei sie jeweils komponentenwei-

se angewandt werden. Bei allen Operationen mit Matrizen mussdarauf geachtet werden,

dass die Matrix-Formate mathematisch korrekt gewählt sind.

2.5 Lösung von Gleichungen

Die Anweisungsolve(f,’x’) löst die symbolische Gleichungf nachx auf. Kommt nur eine

Variable vor, so wird automatisch nach ihr aufgelöst und es genügt der Befehlsolve(f).

• Die lineare Gleichung3x+ 4 = 17 wird gelöst mit:

>> solve(’3*x + 4 = 17’)

ans =

13/3

Die einfachen Anführungszeichen sind hier notwendig, damit das Gleichheitszei-

chen nicht als Zuweisung interpretiert wird.

• Geben wir beim nächsten Beispiel, der Exponentialgleichung5x−1 = 10, eine der

Zahlen als Kommazahl ein:

>> f = ’5^(x-1) = 10’; solve(f)

ans =

log(5, 10) + 1

Page 22: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

22

im Gegensatz zu

>> f = ’5.0^(x-1) = 10’; solve(f)

ans =

2.4306765580733930506701065687640

Nun wird, da die Zahl5 in der Form5. eingegeben worden ist, auch das Ergebnis

numerisch ausgegeben. Auch mit double kann ein numerischesErgebnis ausgege-

ben werden.

• Mehrere Lösungen gibt es in folgendem Beispiel, bei dem die Schnittpunkte von

tan(2x) undsin(x) berechnet werden:

>> solve(’tan(2*x) = sin(x)’)

ans =

acos(1/2 - 3^(1/2)/2)

acos(3^(1/2)/2 + 1/2)

0

-acos(1/2 - 1/2*3^(1/2))

-acos(1/2*3^(1/2) + 1/2)

>> double(ans)

ans =

1.9455

0 + 0.8314i

0

Page 23: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

23

-1.9455

0 - 0.8314i

Es werden also sowohl die reellen als auch die komplexen Lösungen ausgegeben!

Natürlich kann auf eine bestimmte Lösung zugegriffen werden:

>> w = ans(2)

w =

3.1416

• MATLAB kann nicht immer alle Lösungen ausgeben. So hat zum Beispiel die tri-

gonometrische Gleichungsin(3x+ 1.2) = 0 unendlich viele Lösungen:

>> solve(’sin(3*x + 1.2) = 0’)

ans =

-.40000000000000000000000000000000

MATLAB berechnet hier aber nur eine Nullstelle!

• Ein Gleichungssystem bestehend aus den symbolischen Gleichungeng1, g2, g3wird

mit solve(g1,g2,g3,’x,y,z’) nach den Variablenx, y undz aufgelöst. Kommen sonst

keine Variablen vor, so genügt die Anweisungsolve(g1,g2,g3):

>> g1 = ’x + y + z = 0’;

>> g2 = ’4*x + 5*y + z - 3 = 0’;

>> g3 = ’-2*x + y - 3*z - 5 = 0’;

>> [x y z]= solve(g1,g2,g3)

x =

-1

Page 24: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

24

y =

3/2

z =

-1/2

2.6 Ableiten

Die Anweisungdiff bildet die Ableitung eines symbolischen Ausdrucks :

>> syms x; diff(cos(x))

ans =

-sin(x)

>> diff(sqrt(5*x^2 - 7*x + 4))

ans =

(10*x - 7)/(2*(5*x^2 - 7*x + 4)^(1/2))

Im nächsten Beispiel kommen in der Funktion zwei Variablen,x undt, vor. Wir müssen

daher angeben, nach welcher Variablen differenziert werden soll:

>> syms t; diff(3*x*t,x)

ans =

3*t

Page 25: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

25

Möchte man eine höhere Ableitung berechnen, so gibt man das zusätzlich in der Klammer

an:

>> diff(cos(x),2)

ans =

-cos(x)

Hier wird 2-mal differenziert.

2.7 Integration

Mit der Anweisungint wird ein symbolischer Ausdruck integriert:

>> syms x; int(log(x))

ans =

x*(log(x) - 1)

Nun wollen wiry = t ∗ x3 nacht integrieren. Da hier zwei Variablet undx vorkommen,

müssen wir angeben, dass wir nacht integrieren wollen:

>> syms t; int(t*x^3,t)

ans =

(t^2*x^3)/2

Um bestimmt zu integieren, etwa von0 bis1, geben wir zusätzlich die Integrationsgrenzen

an:

>> int(x^2,0,1)

Page 26: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

26

ans =

1/3

2.8 Grenzwertbestimmung

Grenzwerte (auch einseitige) können ebenfalls symbolischmit der limit-Anweisung be-

rechnet werden:

>> syms x a; limit(sin(a*x)/x, x,0)

ans =

a

Das erste Argument gibt hierbei die Funktion an, deren Grenzwert bestimmt werden soll.

Das zweite und dritte Argument spezifizieren welche Variable sich welchem Wert nähern

soll. Durch Hinzufügen von “right“ oder “left“ werden die entsprechenden einseitigen

Grenzwerte bestimmt:

>> syms t; limit(1/(t-1),t,1,’right’)

ans =

Inf

Page 27: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

Kapitel 3

Graphiken und Funktionen

3.1 Graphiken

Mit der Funktionplot können in MATLAB Polygonzüge durch gegebenex-y Wertepaare

gezeichnet werden. Um den Graphen vonsin(x) auf dem Intervall[0, 2π] zu zeichnen

konnen wir folgende Kommandos benutzen:

>> x=[0:0.1:2*pi];

>> y=sin(x);

>> plot(x,y)

Mit dem ersten Befehl werdenx-Werte zwischen 0 und2π mit Abstand0.1 erzeugt.

Der zweite Befehl generiert die zugehörigen Funktionswerte. Mit plot(x,y) öffnet sich

ein neues Fenster und der Polygonzug wird blau in ein Koordinatensystem eingezeichnet

(siehe Abbildung 3.1).

Erzeugen wir anschließend einen zweiten Satz von Funktionswerten z.B. fürcos(x)

und plotten den neuen Graphen, so erscheint er im selben Grafikfenster, aber die alte Gra-

fik wird vorher gelöscht. Um beide Kurven ins selbe Grafikfenster zu zeichnen, müssen

wir den Befehl “hold on“ benutzen. Nach “hold on“ erfolgen sämtliche plot Ausgaben ins

selbe Koordinatensystem im momentan aktiven Grafikfenster. Das kann durch “hold off“

wieder rückgängig gemacht werden, d.h. nach “hold off“ wirdbei jedem plot Befehl der

Fensterinhalt zuerst gelöscht. Wenn also nacheinander erst der sinus (in blau) und dann

der cosinus (in rot) ins selbe Fenster gezeichnet werden soll, dann benutzen wir:

27

Page 28: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

28

Abbildung 3.1: sin(x).

>> x=[0:0.1:2*pi];

>> y=sin(x);

>> plot(x,y)

>> hold on

>> z=cos(x);

>> plot(x,z,’r’)

>> hold off

und erhalten den Graphen in Abbildung 3.2. Alternativ geht auch

>> x=[0:0.1:2*pi];

>> y=sin(x);

>> z=cos(x);

>> plot(x,y,x,z,’r’)

Eine Funktion kann auch gezeichnet werden, ohne daß Datenpunkte angegeben wer-

den müssen. Dies ist mit der Anweisungfplot möglich. Mit ihr kann man Funktionen

zeichnen, ohne vorher einen Vektorx definieren zu müssen. MATLAB wählt die Stellen,

an denen die Funktionswerte berechnet werden, automatisch. Gezeichnet wird die Funk-

tion hier für−20 ≤ x ≤ 20 mit einem sichtbaren Wertebereich von−0.4 ≤ y ≤ 1.2

(siehe Abbildung 3.3).

Page 29: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

29

Abbildung 3.2: cos(x) und sin(x) im gleichen Koordinatensystem.

>> fplot(’sin(x)./x’, [-20,20,-0.4,1.2])

Abbildung 3.3: sin(x)/x.

Es kann vorteilhaft sein, eine oder beide Achsen eines rechtwinkligen Koordinaten-

systems logarithmisch zu skalieren. So wird eine Exponentialfunktiony = aebx in einem

„ordinatenlogarithmischen Papier“ (d.h. die y-Achse ist logarithmisch geteilt) als Gerade

dargestellt.

>> x = linspace(0,10,50);

Page 30: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

30

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

>> semilogy(x,y); grid

Hier besteht der Vektorx aus50 Werten im gleichen Abstand, wobei der erste Wert0

und der letzte Wert10 ist. Fehlt die Angabe für die Anzahl der Werte, so wird dafür100

genommen. Abbildung 3.4 zeigt das Resultat.

Abbildung 3.4: Semilogplot vony = aebx.

Will man eine Funktionz = f(x, y) graphisch veranschaulichen, so kann man den

Graph dieser Funktion, eine Fläche, über der (x, y)-Ebene zeichnen. Dazu ist anzugeben,

über welchemx-Bereich undy-Bereich gezeichnet werden soll. Wir wollen die Funktion

z = xy zuerst sehr grobflächig als Maschenplot (Drahtgitter) überden folgenden15 Git-

terpunkten(−2/−1), (−2/0), ..., (2/1) zeichnen, die aus den fünfx-Werten2,−1, 0, 1, 2

sowie den dreiy-Werten1, 0 und1 gebildet werden können.

>> x = -2:1:2

>> y = -1:1:1

>> [xx, yy] = meshgrid(x,y)

x =

Page 31: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

31

-2 -1 0 1 2

y =

-1 0 1

xx =

-2 -1 0 1 2

-2 -1 0 1 2

-2 -1 0 1 2

yy =

-1 -1 -1 -1 -1

0 0 0 0 0

1 1 1 1 1

Von besonderer Bedeutung ist hier die Anweisung meshgrid (mesh = Masche, grid =

Gitter). Es erzeugt zwei Matrizen, hierxx undyy genannt. Einander entsprechende Ele-

mente dieser beiden Matrizen bilden gerade die beiden Koordinaten unserer Gitterpunkte.

Anwendung der Punktmultiplikation ergibt:

>> z = xx.*yy

z =

2 1 0 -1 -2

0 0 0 0 0

Page 32: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

32

-2 -1 0 1 2

Dies sind die gewünschten Funktionswerte. Zuletzt soll jeder dieser Funktionswerte über

„seinem“ Gitterpunkt als Punkt dargestellt und inx- und iny-Richtung durch Strecken mit

den Nachbarpunkten verbunden werden. Wir erhalten den Maschenplot oder das Draht-

modell der Funktion. Dies erfolgt mit Hilfe der Anweisung mesh:

>> mesh(x,y,z)

−2−1

01

2

−1

−0.5

0

0.5

1−2

−1

0

1

2

Abbildung 3.5: Maschenplot von f(x,y)=xy.

x undy geben diex- bzw. diey-Werte der Gitterpunkte an,z die Funktionswerte über

den Gitterpunkten.

Statt die Punkte durch Strecken zu verbinden, können auch kleine Flächenstücke zwi-

schen den Punkten verwendet werden. Man erhält so ein Kachelmodell der Funktion,

indem man mesh durch surf (von surface) ersetzt. Im Folgenden ist die Fläche außerdem

durch mehr Gitterpunkte feinmaschiger gezeichnet und die Achsen sind beschriftet.

>> x = -2:0.2:2; y = -1:0.2:1;

>> [xx,yy] = meshgrid(x,y,z);

>> z = xx.*yy;

>> surf(x,y,z); xlabel(’x’); ylabel(’y’); zlabel(’z’)

Page 33: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

33

−2−1

01

2

−1

−0.5

0

0.5

1−2

−1

0

1

2

xy

z

Abbildung 3.6: Surfaceplot von f(x,y)=xy.

Der plot Befehl läßt noch zahlreiche Optionen zu. Nach dem Zeichnen von Grafiken kön-

nen diese auch noch mit demtitle bzw.legend Befehl beschriftet werden. Außerdem kann

der Inhalt eines Grafikfensters auch in vielen gängigen Grafikformaten (ps, jpeg, etc.) ab-

gespeichert werden. Details sind mit derhelp Funktion zu erfahren.

3.2 Funktionen

Funktionen sind analog zu anderen prozeduralen Programmiersprachen aufgebaut, d.h.

die Schnittstelle wird durch Funktionsname, Eingabe- und Ergebnisparameter festgelegt,

wobei keine Typen angegeben werden müssen. Der File-Name und der Funktionsname

müssen übereinstimmen. In der Regel wird jede Funktion in eineigenes m-File in den

Arbeitsbereich gelegt. Als Beispiel betrachten wir die Definition der Funktion

f(x) = 0.01 ∗ (50− x) ∗ x

Um ein neues m-File zu erzeugen klickt man mit der rechten Maustaste in das linke obere

Fenster (Current Directory), worauf ein Menü erscheint, in dem der Punkt “New File –

Blank M-File“ angewählt werden muß. Anschließend wird ein File mit einem Default-

Namen generiert, den wir z.B. auf “f.m“ ändern. Durch Doppelklick auf das f.m Icon

wird die Datei nun in einem gesonderten Editor-Fenster geöffnet.

Page 34: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

34

Abbildung 3.7: Neues m-file.

Als erstes definieren wir in der ersten Zeile die korrekte Schnittstelle für unsere Funk-

tion, d.h.

function y = f(x)

da wir einen Eingabe- und einen Ausgabeparameter benutzen wollen. Die nächsten Zei-

len sollte man für Funktionsdokumentation (Kommentarzeilen werden mit % eingeleitet)

nutzen (nicht zwingend notwendig, aber sinnvoll). Rufen wirspäterhelp f auf, so wird

diese Dokumentation angezeigt. Wir können unsere Funktionf z.B. wie folgt vereinbaren

(siehe Abbildung 3.8):

Die Variablen a und g, die in der Funktion vereinbart sind, werden als lokale Varia-

blen behandelt, d.h. außerhalb der Funktion sind sie nicht sichtbar. Man beachte, daß bei

der Multiplikation der Operator .* benutzt wurde, damit dieFunktion (wie die Standard-

funktionensin, cos, etc.) auch komponentenweise auf Vektoren und Matrizen angewandt

werden kann. Das m-File muss explizit abgespeichert werden. Anschließend kannf wie

Page 35: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

35

Abbildung 3.8: Definition der Funktion.

gewohnt benutzt werden

>> f(1)

ans =

0.4900

>> x=[1:4]

x =

1 2 3 4

>> f(x)

ans =

0.4900 0.9600 1.4100 1.8400

Als Hilfetext erhalten wir

>> help f

Page 36: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

36

y = f(x)

berechnet f(x) = 0.01 * (50-x) * x

3.3 Gewöhnliche Differentialgleichungen

MATLAB hat mehrere vordefinierte Funktionen zur näherungsweisen Lösung von An-

fangswertproblemen für Systeme von Differentialgleichungen erster Ordnung. Eine die-

ser Funktionen istode45 mit Schnittstelle

[t,x]=ode45(@f,[t0,te],x0)

Die Eingabeparameter sind

• f , eine Funktionf(t, x) die vont undx abhängt und die rechte Seite der Differen-

tialgleichung enhält,

• [t0, te], ein zweidimensionaler Vektor, der Anfangs und Endzeit enthält,

• x0, der Anfangswert.

Als Ausgabe erhalten wir einen Vektort, der Zeitpunkte zwischent0 undte enthält, sowie

x, das die zugehörigen (genäherten) Funktionswerte der Lösungx an den Zeitpunkten von

t enthält. Dabei treten folgende Besonderheiten auf:

• werden Funktionen als Parameter an andere Funktionen übergeben, so geschieht

dies (analog zu C) über einen Funktionszeiger, den wir durch das “@“ Zeichen vor

dem Funktionsnamen erhalten ,

• f muß immert undx als Parameter besitzen, auch wenn es nur von einer der beiden

Variablen (oder auch von keiner) abhängt,

• der Zeitvektor[t0, te] darf sowohl ein Spalten- als auch ein Zeilenvektor sein,

• lösen wir ein System, so istx(t) und damit auchx0 vektorwertig;ode45 verlangt,

daß es sich hierbei um Spaltenvektoren handelt.

Page 37: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

37

Um das Grenzpopulationsproblem

x’ = a*(g-x)*x, x(0)= 10

für a = 0.01, g = 50 auf dem ZeitintervallT = [0, 20] anzunähern, ändern wir zunächst

unsere oben definierte Funktionf ab zu

function y = f(t,x)

%y = f(t,x)

% berechnet f(t,x) = 0.01 * (50-x) * x

a=0.01;

g=50;

y=a*(g-x).*x;

und benutzen dann folgende Befehle

>> T=[0,20];

>> x0=10;

>> [t,x]=ode45(@f,T,x0);

>> plot(t,x)

so erhalten wir als Ausgabe den Graphen in Abbildung 3.9.

Um die Modellparametera undg nicht fest inf kodieren zu müssen, vereinbart man

sie als globale Variablen. Dazu mussf zuerst mitgeteilt werden, dass es sich um globale

Variablen handelt:

function y = f(t,x)

%y = f(t,x)

% berechnet f(t,x) = a * (g-x) * x

global a g;

y=a*(g-x).*x;

Zusätzlich muß im Kommandofenster ebenfalls der “global“ Befehl abgesetzt werden und

anschließend den Variablen ein Wert zugewiesen werden:

Page 38: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

38

Abbildung 3.9: Lösung der ODE.

>> global a g

>> a=0.01;g=75;

Dabei sind einige Besonderheiten zu beachten:

• nach der “global“ Vereinbarung haben unbedingt Zuweisungen an die globalen Va-

riablen zu erfolgen; eventuell vorher zugewiesene Werte sind nach global nicht

sichtbar

• alle Änderungen an globalen Variablen, die nach der global Vereinbarung erfolgen,

sind systemweit sichtbar

• die Variablen in “global“ dürfen nicht durch Komma getrenntwerden.

Page 39: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

Kapitel 4

MATLAB als Programmiersprache

Einfache Funktionen, die in m-files abgespeichert werden, haben wir ja bereits im letz-

ten Kapitel gesehen. In diesem Kapitel werden nun wichtige Kontrollmechanismen zur

Steuerung des Ablaufes von MATLAB-Anweisungen vorgestellt. Von diesen Mechanis-

men wird innerhalb von Funktionen massiv gebraucht gemacht.

4.1 If-Abfragen

If-Abfragen führen zu bedingten Verzweigungen innerhalb eines Programmablaufes. Die

Verzweigung erfolgt in Abhängigkeit eines bestimmten Testresultats. Diese If-Abfragen

tauchen typischerweise in Situationen auf, in denen fehlerhafte Eingaben behandelt wer-

den müssen, um größerem Unheil vorzubeugen bzw. die Korrektheit des zugrundelie-

genden Algorithmus zu garantieren. Ein klassisches Beispiel für den ersten Fall ist die

Operation der Divisiona/b einer Zahla dividiert durchb. Man will natürlich nur durch

b dividieren, fallsb nicht Null ist. Anderenfalls verzichten wir auf die Division. Die ent-

sprechende Folge von MATLAB-Anweisungen sieht für diesen Fall folgendes vor:

>> if b ~= 0

c = a/b;

end

wobei wir angenommen haben, daß die Variablena undb dem MATLAB-Interpreter be-

reits bekannt sind. Der Test in dieser If-Abfrage lautet b ˜=0: es wird geprüft, obb un-

39

Page 40: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

40

gleich Null ist. Fällt dieser Test positiv aus (d.h.b ist nicht Null), so wird in die Zeile

c = a/b; verzweigt. Jede If-Abfrage endet generell mit der Anweisung end.

Mit dem obigen Beispiel haben wir bereits den Relationsoperator ˜= (ungleich) ken-

nengelernt. Dieser liefert im obigen Fall das Resultat1, fallsb 6= 0, ansonsten das Resultat

0. Mit anderen Worten: Der Test b ˜= 0 fällt positiv aus, falls die Operation b ˜= 0 den

Wert1 liefert; der Test b ˜= 0 fällt negativ aus, falls die Operation b ˜= 0 den Wert0 liefert.

Weitere Relationsoperatoren in MATLAB sind die folgenden:

< kleiner

> größer

<= kleiner oder gleich

>= größer oder gleich

== gleich

˜= ungleich

Ein weiteres Beispiel, das an das obige anknüpft: Wir wollen der Variablenc den Wert

der Divisiona/b zuweisen, fallsb nicht Null ist, anderenfalls wollen wirc den Wert Null

zuweisen. Mit MATLAB sieht die entsprechende Anweisungsfolge wie folgt aus.

>> if b ~= 0

c = a/b;

else

c = 0;

end

Ein weiteres Beispiel: Wir wollen die Vorzeichenfunktion implementieren: Wir weisen

der Variablens den Wert−1 zu, falls die Variablex einen negativen Wert besitzt,s be-

kommt den Wert1, falls der Wert vonx positiv ist; anderenfalls (d.h. fallsx den Wert

Null besitzt), bekommts den Wert Null zugewiesen.

>> if x < 0

s = -1;

Page 41: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

41

elseif x > 0

s = 1;

else

s = 0;

end

4.2 For-Schleifen

Wollen wir eine bestimmte Folge von Anweisungen n-mal hintereinander ausführen, so

bietet sich die Verwendung einer sogenannten For-Schleifean. Nehmen wir an, wir wol-

len elf ganzzahlige Zufallszahlen aus dem Intervall[0, 2] erzeugen (um etwa am Toto-

wettbewerb teilzunehmen). Eine mögliche Implementation mit einer For-Schleife sieht

folgendermaßen aus.

Beipiel 1: Elf Totozahlen zufällig generieren. Der Vektorx enthält nach Ablauf der

For-Schleife die elf Zufallszahlen.

>> x = [];

>> for k=1:11

x = [x; round(2*rand)];

end

>> x

x =

2

2

0

2

1

0

1

Page 42: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

42

1

2

2

0

Beipiel 2: Wir berechnen die Zahl12! = 1 ∗ 2 ∗ . . . ∗ 12. Die Hilfsvariable “fac“ wird das

Ergebnis enthalten.

>> n = 12;

>> fac = 1;

>> for i=2:n

fac = i*fac;

end

>> fac

fac =

479001600

Nun brauchen wir die Variable “fac“ nicht mehr.

>> clear fac;

4.3 While-Schleifen

Wir haben im vorigen Unterabschnitt For-Schleifen kennengelernt. While-Schleifen sind

so ähnlich: Während man bei einer For-Schleife bereits vor deren Ablauf weiß, wie oft

man den Schleifenkörper durchlaufen möchte, koppelt man dies bei While-Schleifen an

eine Bedingung: Vor jedem Durchlaufen des Schleifenkörpersfindet ein Test statt. Fällt

der Test positiv aus, so wird der Schleifenkörper durchlaufen. Anderenfalls wird die

While-Schleife verlassen (oder erst gar nicht betreten), und die Anweisungen nach der

While-Schleife werden ausgeführt.

Page 43: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

43

Ein Negativbeispiel: Wir produzieren absichtlich eine Endlosschleife (wenn Sie noch

nicht wissen, was eine Endlosschleife ist, dann werden Sie es gleich wissen) mit der

folgenden Anweisungssequenz.

>> n = 1;

>> while n > 0

n = n + 1;

end

Mit der TastenkombinationCTRL + C kann man die aktuelle Berechnung abbrechen,

und bekommt den vertrauten MATLAB-Prompt zurück, d.h. man kann anschließend die

begonnene MATLAB-Sitzung fortführen.

Ein weniger destruktives Beispiel: Wir wollen zu einer positiven Zahlx die kleinste

ganze Zahln mit der Eigenschaftn < x < n + 1 berechnen. Zur Information: Übli-

cherweise kürzt man diese Zahl mit[x] ab, und das Symbol[·] wird als Gaußklammer

bezeichnet.

>> x = 5.3;

>> n=0;

>> while n+1 <= x

n = n+1;

end

>> n

n =

5

Selbstverständlich ist[x] auch für negative reelle Zahlen definiert. Diese mögliche Erwei-

terung der obigen Implementation von[x]sieht beispielsweise so aus:

>> x = - 5.3;

>> n=0;

Page 44: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

44

>> if x < 0

while n > x

n = n-1;

end

elseif x > 0

while n+1 <= x

n = n+1;

end

end

>> n

n =

-6

Sie werden es zurecht als umständlich empfunden haben, die einzelnen Anweisungen,

die mit If-Anweisungen sowie For- und While-Schleifen verbunden sind, Zeile für Zeile

an den Interpreter zu übergeben. Wie bereits eingangs erwähnt, tauchen solche Kontroll-

strukturen üblicherweise innerhalb von Funktionen auf.

4.4 Abbruch von Schleifen

Für den Fall, daß man den Ablauf einer For- oder einer While-Schleife aus irgendwelchen

Gründen terminieren lassen möchte, steht in MATLAB der Befehl break zur Verfügung.

Diese Art von Abbruch kann sinnvoll sein in Anwendungen, diemit Suchen oder Zählen

in Verbindung stehen. Hierzu jeweils ein Beispiel.

Beipiel 3: Ein Suchbeispiel mit einer For-Schleife. Man möchte zu einem Zeilenvektor

x, dessen Komponenten Zufallszahlen aus dem Intervall[0, 1] sind, dessen kleinsten Index

i ermitteln, für den giltx(i) < 0.5. Falls es keinen solchen Index gibt, so solli den Wert

−1 besitzen.

>> n = 10;

Page 45: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

45

>> x = rand(1,n)

>> i = -1;

>> for k=1:n

if x(k) < 0.5

i = k;

break;

end

end

>> i

x =

Columns 1 through 5

0.0357 0.8491 0.9340 0.6787 0.7577

Columns 6 through 10

0.7431 0.3922 0.6555 0.1712 0.7060

i =

1

Beipiel 4: Ein Zählbeispiel mit einer While-Schleife. Man möchte solange Zufallszahlen

aus[0, 1] erzeugen, bis eine der Zufallszahlen größer als0.99 ist. Die Anzahln der Ver-

suche sollen mitgezählt und anschließend anzeigt werden; Falls die Anzahl der Versuche

10 übersteigt, so möchte man aufhören.

>> x = rand;

>> n = 1;

Page 46: MATLAB — E INE EINFÜHRUNG - · PDF fileKapitel 1 Was ist MATLAB Kurz gesagt: MATLAB ist ein Softwarepaket für numerische Berechnungen und für die Visualisierung von Daten im technisch

46

>> while x <= 0.99

if n > 10

n = - 1;

break;

else

x = rand;

n = n+1;

end;

end;

>> n

n =

-1