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

Post on 29-Oct-2019

2 views 0 download

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

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

Ü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

Ü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

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

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

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

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

Ü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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ü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

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

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

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

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

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

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

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

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

Ü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

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

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

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

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

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

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

Aufgabe zum Funktionsplot

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

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

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

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

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

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

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

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

Ü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

Übersicht

2. Woche:

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

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

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

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

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

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

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

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

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

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

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

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

Vielen Dank für die Mitarbeit

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