Eine kurze Einführung in Matlablehre/SS10/numerik0/Folien/... · BasicsimUmgangmitLinux...
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