Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux...

58
Eine kurze Einführung in Matlab Bärbel Janssen und Thomas Wick AG Numerik Universität Heidelberg Numerik 0 Matlab-Einführung 30. April 2010 1

Transcript of Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux...

Page 1: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Eine kurze Einführung in Matlab

Bärbel Janssen und Thomas WickAG Numerik

Universität Heidelberg

Numerik 0 Matlab-Einführung 30. April 2010 1

Page 2: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Übersicht

1. Woche:

Zuweisung von Werten an Variablen.

Anlegen und Bearbeiten von Vektoren & Matrizen.

Operatoren auf Vektoren & Matrizen.

Schleifen und Verzweigungen.

Programmieren mit Matlab.

Graphische Ausgabe der Ergebnisse.

2. Woche:

Einfache Numerik Aufgaben, d.h. Umsetzung von Mathematik inAlgorithmik.

Numerik 0 Matlab-Einführung 30. April 2010 2

Page 3: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Überblick

1 Erste Aufgabe in Matlab

2 Variablen, Handwerkszeug zum Lösen der ersten Aufgabe

3 Arbeiten mit Vektoren und Matrizen

4 Erste Schritte zum Programmieren in Matlab

5 2. Woche: Numerik Aufgaben

Numerik 0 Matlab-Einführung 30. April 2010 3

Page 4: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Basics im Umgang mit Linux

Shell oder Konsole öffnenPasswort ändern mit

1 >passwd

Verzeichnis anlegen mit

1 >mkd i r Matlab_Ordner

In das Verzeichnis wechseln

1 >cd Matlab_Ordner

Verzeichnisse und Dateien löschen

1 >rmd i r Matlab_Ordner2 >rm Date i

Matlab öffnen

1 >mat lab &

Numerik 0 Matlab-Einführung 30. April 2010 4

Page 5: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Was ist Matlab?

MATrix LABoratory.

Was kann Matlab berechnen?

Was kann man mit Matlab berechnen?

Was kann ich mit Matlab berechnen?

MATLAB-die Sprache für technische BerechnungenMATLAB ist eine Hochsprache und eine interaktive Umgebung, mit derSie rechenintensive Aufgaben schneller als mit herkömmlichenProgrammiersprachen wie C, C++ und Fortran ausführen können.

Numerik 0 Matlab-Einführung 30. April 2010 5

Page 6: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Was kann ich mit Matlab berechnen?

1. Beispiel: Fibonacci-Zahlen

fib(n) =

0 n = 0,

1 n = 1,

fib(n − 1) + fib(n − 2) n > 1.

1. Aufgabe:Berechne fib(25) mit Matlab.

Numerik 0 Matlab-Einführung 30. April 2010 6

Page 7: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Wie löse ich die Aufgabe?

Was benötige ich?Zahlen, hier: 0, 1, 2 u.s.w.

Variablen, hier: n

Funktionen, hier: fib(·)Vergleiche, hier = 0, = 1, > 1.

Vorgehensweiseneue .m Datei bearbeiten

mathematische Formel in einen Algorithmus umwandeln

Numerik 0 Matlab-Einführung 30. April 2010 7

Page 8: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Überblick

1 Erste Aufgabe in Matlab

2 Variablen, Handwerkszeug zum Lösen der ersten Aufgabe

3 Arbeiten mit Vektoren und Matrizen

4 Erste Schritte zum Programmieren in Matlab

5 2. Woche: Numerik Aufgaben

Numerik 0 Matlab-Einführung 30. April 2010 8

Page 9: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Variablen I

Variablen werden durch die Zuordnung von Werten angelegt.

Variablennamen müssen mit einem Buchstaben anfangen, ansonstendürfen Buchstaben, Zahlen und Unterstriche benutzt werden.

Es wird zwischen Groß und Kleinschreibung unterschieden, d.h.A 6= a.

Variable anlegen und Wert zuordnen:>> a = 3.14159;

Variable ausgeben:>> aergibt:a =

3.14159

Numerik 0 Matlab-Einführung 30. April 2010 9

Page 10: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Variablen II

Schönere Ausgabe:>> disp([′Variable a =′, num2str(a)])bewirktVariable a = 3.14159.

Das Semikolon hinter einer Wertzuweisung unterdrückt die Ausgabe.So weista = 3.14159der Variable a den Wert 3.14159 zu und erzeugt die Ausgabea =

3.14159.

Matlab kennt praktisch nur den Datentyp der n ×m Matrix.

Skalar = 1× 1 Matrix

Zeilen- und Spaltenvektoren sind 1×m, bzw. n × 1 Matrizen.

Numerik 0 Matlab-Einführung 30. April 2010 10

Page 11: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Handwerkszeug

Logische VergleicheSeien a und b zwei Skalare, X und Y zwei boolscheVariablen.

a gleich b?

a == b

a kleiner/größer b?

a < b, bzw. a > b

X und Y ?

X & Y

nicht X?

∼ X

a ungleich b?

a ∼= b

a kleiner/größer gleich b?

a <= b, bzw. a >= b

X oder Y ?

X | Y

Numerik 0 Matlab-Einführung 30. April 2010 11

Page 12: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Zurück zu den Fibonacci-Zahlen

1. Beispiel: Fibonacci-Zahlen

fib(n) =

0 n = 0,

1 n = 1,

fib(n − 1) + fib(n − 2) n > 1.

1. Aufgabe:Berechne fib(25) mit Matlab.

Numerik 0 Matlab-Einführung 30. April 2010 12

Page 13: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Lösung der ersten Aufgabe

* Klick auf ’File’ -> New -> M-File.

* Datei ’fib.m’ benennen und mit einem Editor öffnen.

function erg = fib(n)if(n == 0)erg = 0;elseif(n==1)erg = 1;elseerg = fib(n-1) + fib(n-2);end

Speichere die Datei ab.

Numerik 0 Matlab-Einführung 30. April 2010 13

Page 14: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Lösung der ersten Aufgabe

* Klick auf ’File’ -> New -> M-File.

* Datei ’fib.m’ benennen und mit einem Editor öffnen.

function erg = fib(n)if(n == 0)erg = 0;elseif(n==1)erg = 1;elseerg = fib(n-1) + fib(n-2);end

Speichere die Datei ab.

Numerik 0 Matlab-Einführung 30. April 2010 13

Page 15: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Lösung der ersten Aufgabe

* Klick auf ’File’ -> New -> M-File.

* Datei ’fib.m’ benennen und mit einem Editor öffnen.

function erg = fib(n)if(n == 0)erg = 0;elseif(n==1)erg = 1;elseerg = fib(n-1) + fib(n-2);end

Speichere die Datei ab.

Numerik 0 Matlab-Einführung 30. April 2010 13

Page 16: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Lösung der ersten Aufgabe

* Klick auf ’File’ -> New -> M-File.

* Datei ’fib.m’ benennen und mit einem Editor öffnen.

function erg = fib(n)if(n == 0)erg = 0;elseif(n==1)erg = 1;elseerg = fib(n-1) + fib(n-2);end

Speichere die Datei ab.

Numerik 0 Matlab-Einführung 30. April 2010 13

Page 17: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Lösung der ersten Aufgabe

* Klick auf ’File’ -> New -> M-File.

* Datei ’fib.m’ benennen und mit einem Editor öffnen.

function erg = fib(n)if(n == 0)erg = 0;elseif(n==1)erg = 1;elseerg = fib(n-1) + fib(n-2);end

Speichere die Datei ab.

Numerik 0 Matlab-Einführung 30. April 2010 13

Page 18: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Lösung der ersten Aufgabe

* Klick auf ’File’ -> New -> M-File.

* Datei ’fib.m’ benennen und mit einem Editor öffnen.

function erg = fib(n)if(n == 0)erg = 0;elseif(n==1)erg = 1;elseerg = fib(n-1) + fib(n-2);end

Speichere die Datei ab.

Numerik 0 Matlab-Einführung 30. April 2010 13

Page 19: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Lösung der ersten Aufgabe

* Klick auf ’File’ -> New -> M-File.

* Datei ’fib.m’ benennen und mit einem Editor öffnen.

function erg = fib(n)if(n == 0)erg = 0;elseif(n==1)erg = 1;elseerg = fib(n-1) + fib(n-2);end

Speichere die Datei ab.

Numerik 0 Matlab-Einführung 30. April 2010 13

Page 20: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Lösung der ersten Aufgabe

* Klick auf ’File’ -> New -> M-File.

* Datei ’fib.m’ benennen und mit einem Editor öffnen.

function erg = fib(n)if(n == 0)erg = 0;elseif(n==1)erg = 1;elseerg = fib(n-1) + fib(n-2);end

Speichere die Datei ab.

Numerik 0 Matlab-Einführung 30. April 2010 13

Page 21: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Lösung der ersten Aufgabe

* Klick auf ’File’ -> New -> M-File.

* Datei ’fib.m’ benennen und mit einem Editor öffnen.

function erg = fib(n)if(n == 0)erg = 0;elseif(n==1)erg = 1;elseerg = fib(n-1) + fib(n-2);end

Speichere die Datei ab.

Numerik 0 Matlab-Einführung 30. April 2010 13

Page 22: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Lösung der ersten Aufgabe

* Klick auf ’File’ -> New -> M-File.

* Datei ’fib.m’ benennen und mit einem Editor öffnen.

function erg = fib(n)if(n == 0)erg = 0;elseif(n==1)erg = 1;elseerg = fib(n-1) + fib(n-2);end

Speichere die Datei ab.

Numerik 0 Matlab-Einführung 30. April 2010 13

Page 23: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Überblick

1 Erste Aufgabe in Matlab

2 Variablen, Handwerkszeug zum Lösen der ersten Aufgabe

3 Arbeiten mit Vektoren und Matrizen

4 Erste Schritte zum Programmieren in Matlab

5 2. Woche: Numerik Aufgaben

Numerik 0 Matlab-Einführung 30. April 2010 14

Page 24: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Vektoren erstellen

Vektoren können als Zeilen- oder Spaltenvektoren angelegt werden.Sie werden entweder explizit, d.h. komponentenweise eingegeben,oder mittels (vorgegebener) Funktionen sukzessive gefüllt.

a = [1, 2, 3] erzeugt a =(1 2 3

).

b = [4; 5] erzeugt b =

(45

).

Beispiele für spezielle Funktionen zum Füllen eines Vektors:a = 1 : 5 liefert den Vektor a =

(1 2 3 4 5

).

b = 1 : 2 : 5 liefert den Vektor a =(1 3 5

).

Die Länge eines Vektors a wird mit length(a) abgefragt.Sei a = 1 : 10, dann ist length(a) = 10.

Numerik 0 Matlab-Einführung 30. April 2010 15

Page 25: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Vektoren bearbeiten

Lese-/Schreibzugriff auf die i-te Komponente von a über a(i):Sei a = 11 : 15 =

(11 12 13 14 15

)b = a(3) liefert b = 13a(3) = −1 erzeugt a =

(11 12 −1 14 15

)Analoger Zugriff auf Subvektoren:

Sei a = −5 : −1 =(−5 −4 −3 −2 −1

)b = a(2 : 4) liefert b =

(−4 −3 −2

)a(2 : 4) =

(1 2 3

)erzeugt a =

(−5 1 2 3 −1

)Mittels ′ werden Vektoren (und später auch Matrizen) transponiert

Sei a = 1 : 4, dann liefert a′ den Vektor

1234

Numerik 0 Matlab-Einführung 30. April 2010 16

Page 26: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Matrizen erstellen

Auch Matrizen können sowohl explizit, als auch mithilfe diverserFunktionen erstellt werden.

A = [1, 2, 3; 4, 4, 4; 0, 0, 0] erzeugt A =( 1 2 3

4 4 40 0 0

).

Mit v = [1, 2] erzeugt B = [v ; 0, 0] die Matrix ( 1 20 0 ).

Beispiele für spezielle Funktionen zum Füllen einer Matrix:

Einheitsmatrix: I = eye(3) erzeugt I =(

1 0 00 1 00 0 1

).

Nullmatrix: N = zeros(3) erzeugt N =(

0 0 00 0 00 0 0

).

n ×m Nullmatrix: N = zeros(2, 3) erzeugt N = ( 0 0 00 0 0 ).

Eins-Matrix: N = ones(3) erzeugt N =(

1 1 11 1 11 1 1

).

n ×m Eins-Matrix: N = ones(1, 3) erzeugt N =(1 1 1

).

Numerik 0 Matlab-Einführung 30. April 2010 17

Page 27: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Matrizen bearbeiten

Sei nun A =

1 2 3 40 1 0 00 0 1 0

.[n,m] = size(A) liefert Zeilenvektor

(n m

), wobei n = #Zeilen und

m = #Spalten von A.[n,m] = size(A) gibt den Vektor

(3 4

)zurück.

Lese-/Schreibzugriff auf den Eintrag i , j mittels A(i , j)b = A(1, 3) liefert b = 3.

Zugriff auf n-te Zeile / m-te Spalte mittels A(n, :), bzw. A(:,m)

v = A(1, :) liefert v =(1 2 3 4

).

w = A(1, 3 : 4) hingegen ergibt v =(3 4

).

A(:, 4) = [ ] löscht die 4. Spalte: A =

1 2 30 1 00 0 1

.

Numerik 0 Matlab-Einführung 30. April 2010 18

Page 28: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Grundlegende Operatoren I

Matlab kennt beispielsweise die Operatoren +, −, ∗, / und ∧.Grundsätzlich werden Operatoren als Matrizenoperatoreninterpretiert. Durch das Voranstellen eines Punktes (’.’) erzwingtman die komponentenweise Interpretation des Operators.

Seien nun A und B n × n Matrizen, v und w Spaltenvektoren passenderGröße, sowie c und d Skalare.

Operatoren zwischen ’Matrizen’.Addition: A + B, v + w und c + d addiert einfach die jeweiligenKomponenten.Multiplikation ∗

A ∗ B und c ∗ A liefern eine Matrix, c ∗ d einen Skalar.A ∗ v , w ′ ∗ B und c ∗ v liefern einen Vektor.v ′ ∗ w =

∑ni=1 vi ∗ wi liefert einen Skalar.

v ∗ w ′ hingegen ergibt die Matrix (vi ∗ wj)ni ,j=1.

Numerik 0 Matlab-Einführung 30. April 2010 19

Page 29: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Beispiele zu den grundlegenden Operatoren I

Sei A = 2 ∗ eye(2), B = [4, 2; 0, 2], v = [1; 0], w = [1; 3]

A + B =

(6 20 4

), v + w =

(23

).

A ∗ B =

(8 40 4

), 0.5 ∗ A =

(1 00 1

).

A ∗ v =

(20

), w ′ ∗ B =

(4 8

).

v ′ ∗ w = 1, v ∗ w ′ =(1 30 0

).

Numerik 0 Matlab-Einführung 30. April 2010 20

Page 30: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Grundlegende Operatoren II

Fortsetzung der Matrix-OperatorenDivision: A/B berechnet A ∗ B−1 (falls B invertierbar).Potenzieren: A ∧ c berechnet Ac .

Komponentenweise OperatorenMultiplikation ’.∗’: A. ∗ B und v . ∗ w multipliziert die jeweiligenKomponenten miteinander.Division ’./’: Funktioniert analog zur Multiplikation.Potenzieren ’.∧:

v . ∧ c und A. ∧ c bewirkt das komponentenweise Potenzieren.c. ∧ v liefert den Vektor (cvi )n

i=1.

Sinngemäß lassen sich die Operatoren auch auf Subvektorenübertragen.

Numerik 0 Matlab-Einführung 30. April 2010 21

Page 31: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Beispiele zu den grundlegenden Operatoren II

B/A =

(2 10 1

), B ∗ A ∧ −1 =

(2 10 1

).

B ∧ 2 =

(16 120 4

), A ∧ 0.5 =

(1.4142 0

0 1.4142

).

A. ∗ B =

(8 00 4

), v ./w =

(10

).

Mit a = (1 : 5) ergibt a. ∧ 2 die ersten fünf Quadratzahlen.

a. ∧ 2 erzeugt(1 4 9 16 25

)Durch 2. ∧ a erhält man die ersten fünf Zweierpotenzen.

2. ∧ a erzeugt(2 4 8 16 32

)

Numerik 0 Matlab-Einführung 30. April 2010 22

Page 32: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Überblick

1 Erste Aufgabe in Matlab

2 Variablen, Handwerkszeug zum Lösen der ersten Aufgabe

3 Arbeiten mit Vektoren und Matrizen

4 Erste Schritte zum Programmieren in Matlab

5 2. Woche: Numerik Aufgaben

Numerik 0 Matlab-Einführung 30. April 2010 23

Page 33: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Steuerstrukturen

Warum?

→ Sequentielle Steuerung des Programmablaufs

Was hat Matlab zu bieten?→ 4 Arten von Schleifen und Verzweigungen

for-Schleifewhile-Schleifeif-Verzweigungswitch-Verzweigung

Numerik 0 Matlab-Einführung 30. April 2010 24

Page 34: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Schleifen

for-Schleifen

n = 10; z = 0;

for i = 1 : n

z = z + i

end ;

while-Schleifen

format long

c = 0; a = 1; n = 0;

while(c ∼= a)

c = a + 2 ∧ (−n)n = n + 1;

end ;

Numerik 0 Matlab-Einführung 30. April 2010 25

Page 35: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Verzweigungen

if-Verzweigung

function [z ] = fun(x , y)

if (x > y)

z = 1;

elseif (x < y)

z = −1;else

z = 0;

end ;

switch-Verzweigung

x = −2;switch x

case − 2

disp(’x ist -2’)

case 0

disp(’x ist Null’)

case 1001

disp(’x ist groß’)

end ;

Numerik 0 Matlab-Einführung 30. April 2010 26

Page 36: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Dateien für Skripte und Funktionen

m-filesZwecks Zeitersparnis können Matlabbefehle in Dateien, sogenanntem-files gespeichert werden.

Zum Erstellen: Eine Textdatei mit entsprechenden Befehlen füllenund diese als ’Dateiname.m’ abspeichern.Diese Dateien können zwei verschiedene Aufgaben erfüllen:

FunktionshülleDie Datei dient zurDefinition von Funktionen.

SkriptDie Datei enthält eineAbfolge von Matlabbefehlen.

Dateien können nur benutzt werden, wenn sie im aktuellenMatlab-Verzeichnis (’current directory’) liegen.Skripte und Funktionen können mit <STRG>-C abgebrochenwerden.Numerik 0 Matlab-Einführung 30. April 2010 27

Page 37: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Skripte

Zweck Erleichtert das Programmieren mit Matlab.

Arbeitsweise Die Befehlssequenzen in der Datei werden der Reihe nachabgearbeitet.

Aufruf Das Skript wird über den Dateinamen aufgerufen, d.h.’befehle.m’ wird mit dem Aufruf ’befehle’ gestartet.

Sichtbarkeit Das Skript kann auf alle vorher definierten Variablenzugreifen.Nach Ablauf des Skriptes sind alle im Skript erstelltenVariablen weiterhin sichtbar.

Der Befehl pause hält ein Skript an, bis <RETURN> betätigt wird.

Der Befehl pause(n) lässt ein Skript n Sekunden lang pausieren.

Numerik 0 Matlab-Einführung 30. April 2010 28

Page 38: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Funktionen

Zweck Definition und Implementation von Funktionen.Arbeitsweise Die Funktion arbeitet ihren Rumpf mit den übergebenen

Parametern ab. Als Rückgabewert dienen die im Kopfdeklarierten Variablen:function [ output_args ] = fun( input_args )

Aufruf Die Funktion wird über den Dateinamen aufgerufen. Diesersollte mit dem Funktionsnamen übereinstimmen.

Sichtbarkeit Die Funktion kann nicht auf vorher definierte Variablenzugreifen.Nach Ablauf der Funktion sind alle in der Funktion erstelltenVariablen verschwunden.

Ein m-file kann mehrere Funktionen enthalten, allerdings kann nurdie erste ’extern’ aufgerufen werden.Es können nur Funktionen in der Datei definiert werden, außerhalbdürfen keine Befehle stehen.Numerik 0 Matlab-Einführung 30. April 2010 29

Page 39: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Aufgabe zum Funktionsplot

Man plotte die Funktion f (x) = sin(x) auf I = [−π, π]

Numerik 0 Matlab-Einführung 30. April 2010 30

Page 40: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Lösung

1 >>x=−p i : p i /10 : p i ;2 >>y= s i n ( x ) ;3 >>p l o t ( x , y ) ;

Numerik 0 Matlab-Einführung 30. April 2010 31

Page 41: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Funktionen und grafische Ausgabe

Definition einer Funktion, die (x + sin(x))2 berechnet.

Nebenstehendes Programmeintippen und speichern.

fun.m

function erg = fun(x)

tmp = x + sin(x);

erg = tmp. ∧ 2;

Funktionsaufruf für x = 5 über y = fun(5);

Grafische Ausgabe der Funktion auf dem Intervall [0, 1]:v = 0 : 0.1 : 1;

plot(v , fun(v),′ r−′);Funktionen können mehre Ein-/Ausgabeparameter besitzen:function[erg1, erg2] = fun2(x ,A, c)

Numerik 0 Matlab-Einführung 30. April 2010 32

Page 42: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Plotten

Vektor von Funktionswerten y gegen Vektor von x plotten:plot(x , y)

x-Werte sind z.B. x = 0 : 0.01 : 10;Funktionswerte sind z.B. y = f (x), odern = length(x); y = zeros(1, n); for i = 1 : n y(i) = f (x(i)); end ;Anstelle von y kann auch eine Matrix übergeben werden. Dann wirdder x-Vektor gegen jede Zeile geplottet.

Beschriftung des PlotsTitel title(′titletext ′);

Achsen xlabel(′x − Achsentext ′); ylabel(′y − Achsentext ′);Legende legend(′plot1′,′ plot2′, . . . );

Achsen können mit semilogy , semilogx und loglog logarithmischskaliert werden.

Mit figure(i), i ∈ N kann das Ausgabe gewechselt werden. Mithold on können mehrere Plots in einem Fenster ausgegeben werden.

Numerik 0 Matlab-Einführung 30. April 2010 33

Page 43: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Fortsetzung Funktionsplot

Man plotte die Funktion f (x) = sin(x) auf I = [−π, π] undbeschrifte die Achsen auf sinnvolle Art und Weise. Danach gebe mandem Plot einen Titel.

Numerik 0 Matlab-Einführung 30. April 2010 34

Page 44: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Hilfe & Softwarealternativen

Matlabinterne Hilfehelp eingebenFür Hilfe zu einem bestimmten Befehl help befehl . . .. . . noch ausführlicher mit doc befehl

Externe HilfeKostenloser Zugriff über die UB:http://www.springerlink.com/content/q41041/http://en.literateprograms.org/Category:Programming_language:Matlab

Alternative zu Matlab: http://www.gnu.org/software/octave/

Numerik 0 Matlab-Einführung 30. April 2010 35

Page 45: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Hausaufgabe: Octave installieren

octave 3.X.exe herunterladen und installieren (mit Admin Rechten)

stabile Version 3.2.4 mit ca. 70 MB

Testen mit dem Befehl ‘sombrero(40)’ (40 steht für die Feinheit derDiskretisierung)

Numerik 0 Matlab-Einführung 30. April 2010 36

Page 46: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Überblick

1 Erste Aufgabe in Matlab

2 Variablen, Handwerkszeug zum Lösen der ersten Aufgabe

3 Arbeiten mit Vektoren und Matrizen

4 Erste Schritte zum Programmieren in Matlab

5 2. Woche: Numerik Aufgaben

Numerik 0 Matlab-Einführung 30. April 2010 37

Page 47: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Übersicht

2. Woche:

Einfache Numerik Aufgaben, d.h. Umsetzung von Mathematik inAlgorithmik.

Numerik 0 Matlab-Einführung 30. April 2010 38

Page 48: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Präsenzaufgabe 1: Polynomauswertung

Man werte das folgende Polynom an den Stellen x = −3,−1, 1, 3, 5aus:

p(x) = 0.01x3 + 5.7x − 45

Numerik 0 Matlab-Einführung 30. April 2010 39

Page 49: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Präsenzaufgabe 1: Lösung

1 % Prae s en z au f g ab e 12 % Polynomauswertung3 % De f i n e r e S c h r i t t w e i t e h4 h = 2 ;5 x=−3:h : 3 ;6 po lynom_koef f = [ 0 . 0 1 0 5 .7 −45] ;7 p o l y v a l ( po lynom_koef f , x )

Numerik 0 Matlab-Einführung 30. April 2010 40

Page 50: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Präsenzaufgabe 2: Taylorapproximation des Sinus

Man entwickle die Funktion sin(x) als Polynom bis zur Ordnung 5und werte das Polynom anschließend an den Stellen im IntervallI = [a, b] mit der Schrittweite h = 2 aus. Man vergleiche mit derAuswertung des sin(x) an den gleichen Stellen.

Man variiere die Intervallgrenzen a und b und interpretiere dasErgebnis.

Dazu plotte man beide Funktionen im Intervall I = [a, b].

Numerik 0 Matlab-Einführung 30. April 2010 41

Page 51: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Präsenzaufgabe 2: Lösung

1 % Prae s en z au f g ab e 22 % Polynomauswertung f u e r3 % s i n ( x ) = x − x ^3/3! + x ^5/5!4 % De f i n i e r e : I =[ a , b ]5 a=−5;6 b=5;7 x=a : 2 : b ;8 po lynom_koef f = [1/5/4/3/2 , 0 , −1/6 , 0 , 1 , 0 ] ;9 p o l y v a l ( po lynom_koef f , x )

10 s i n ( x )11 % Plo t de r Funk t i o n mit S c h r i t t w e i t e h12 h =0 . 1 ;13 y=a : h : b ;14 p l o t ( y , s i n ( y ) , y , p o l y v a l ( po lynom_koef f , y ) )

Numerik 0 Matlab-Einführung 30. April 2010 42

Page 52: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Präsenzaufgabe 3: exp-Funktion

Man schreibe ein Matlabprogramm zur Berechnung derExponentialfunktion

ex =∞∑

k=0

xk

k!, x ∈ R

mit Hilfe ihrer Taylor-Summen

Tn(x) =n∑

k=0

xk

k!, x ∈ R, n ∈ N.

Man plotte für n ∈ [0, 20] den relativen Fehler für die Argumentex ∈ {10, 1,−1,−10}, und gebe eine Modifikation an, mit deren Hilfenegative wie positive Argumente gleich gut behandelt werden können.

Numerik 0 Matlab-Einführung 30. April 2010 43

Page 53: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Präsenzaufgabe 3: Lösungsansatz

Vorgehen vor dem ProgrammierenProblem verstehen!

Problem mit Bleistift und Papier lösen.

Vorgehen während des ProgrammierensFunktion mit Argumenten x und n zur Auswertung derTaylorreihe schreiben.Hauptprogramm schreiben, in welchem1. x und n initialisiert werden.2. der relative Fehler unter Aufruf der zuvor programmierten

Funktion berechnet wird.3. für jeden Wert von x der relative Fehler gegen n aufgetragen wird.

Fehler analysieren, Verbesserungsstrategie überlegen.

Numerik 0 Matlab-Einführung 30. April 2010 44

Page 54: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Präsenzaufgabe 3: Lösung 1 Taylorsumme

1 f u n c t i o n e r g = taysum ( x , n )2 %Berechne x k , k = 0 , . . . , n :3 N = 0 : n ;4 X = x .^N;5 %D i v i s i o n von X ( k ) du rch k !6 f o r i = 2 : l e n g t h (X )7 X ( i ) = X ( i )/ f a c t o r i a l ( i −1);8 end ;9 e r g = sum(X ) ; %Aufsummieren

10 r e tu rn ;

Numerik 0 Matlab-Einführung 30. April 2010 45

Page 55: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Präsenzaufgabe 3: Lösung 1 Hauptteil

1 f o rmat long ;2 x = [ 10 , 1 , −1, −10] ;3 e = exp ( x ) ; n = 0 : 20 ;4 l_x = l e n g t h ( x ) ;5 l_n = l e n g t h ( n ) ;6 f e h l e r = z e r o s ( l_x , l_n ) ;7 f o r i = 1 : l_x8 f o r j = 1 : l_n9 tmp = taysum ( x ( i ) , n ( j ) ) ;

10 tmp = ( tmp −e ( i ) )/ e ( i ) ;11 f e h l e r ( i , j ) = abs ( tmp ) ;12 end ;13 end ;14 f e h l e r15

16 p lo t_exp ;

Numerik 0 Matlab-Einführung 30. April 2010 46

Page 56: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Präsenzaufgabe 3: Lösung 1 Plot

1 % Plo t de r Funk t i on en2 y = −10 :0 .01 :5 ;3 z= z e r o s ( l e n g t h ( y ) , 1 ) ;4 exponen t =5;5 f o r i =1: l e n g t h ( y )6 % i f ( y ( i ) <0)7 % z ( i ) = 1/ taysum ( y ( i ) , e xponen t ) ;8 % e l s e9 z ( i ) = taysum ( y ( i ) , e xponent ) ;

10 % end ;11 end ;12 p l o t ( y , z , ’ r e d ’ , y , exp ( y ) , ’ b l a c k ’ ) ;

Numerik 0 Matlab-Einführung 30. April 2010 47

Page 57: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Präsenzaufgabe 3: Lösung 2 Taylorsumme

1 % Vo r s c h l a g 2 zu r Imp l emen t i e r u n g de r Taylorsumme2 a=−10; b=3 % I n t e r v a l l e n d e n3 h =0 . 1 ; % S c h r i t t w e i t e4 x=a : h : b ; % D e f i n i t i o n s i n t e r v a l l (− v e k t o r )5 n=20; % Ordnung des Tay l o r po l ynoms6 % E r g e b n i s v e k t o r i n i t a l i s i e r e n ( y−Werte )7 erg_tay= z e r o s (1 , l e n g t h ( x ) ) ;8 % Berechne f u e r j e d e n E i n t r a g x_i9 % den Tay lorsummenwert

10 f o r k = 0 : n11 erg_tay = erg_tay + x .^ k/ f a c t o r i a l ( k ) ;12 end13 % Ausgabe de r E r g e b n i s s e14 d i s p ( [ ’ Werte␣ de r ␣Taylorsumme : ␣ ’ , num2str ( erg_tay ) ] ) ;15 % Plo t de r E r g e b n i s s e16 p l o t ( x , erg_tay , ’ r e d ’ , x , exp ( x ) , ’ b l a c k ’ ) ;

Numerik 0 Matlab-Einführung 30. April 2010 48

Page 58: Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux ShelloderKonsoleöffnen Passwortändernmit 1 >passwd Verzeichnisanlegenmit 1 >mkdir Matlab_Ordner

Vielen Dank für die Mitarbeit

Numerik 0 Matlab-Einführung 30. April 2010 49