Click here to load reader
Upload
phamdiep
View
215
Download
2
Embed Size (px)
Citation preview
Funktionen in Matlab
Vorlesung
Computergestutzte Mathematik zur Linearen Algebra
Lehrstuhl fur Angewandte MathematikSommersemester 2009
14. und 21. Mai 2009
Funktionen in Matlab
Wir kennen schon diverse Matlab-Funktionen:
I sin, cos, diag, size, . . .
diese wurden meist durch y = funktion(x) aufgerufen, wobei xeine Eingabevariable und y eine Ausgabevariable war.
I was in der Funktion passiert, ist fur uns unsichtbar (black box)
I der Funktionsaufruf hinterlasst im Unterschied zu Skriptenkeine Spuren (z.B. Hilfsvariablen) im Arbeitsspeicher.
Matlab kann nicht nur durch Skripte sondern auch durchFunktionen erganzt werden!
Matlab-eigene Funktionen
In Matlab gibt es so genannte built-in Funktionen, die besondersschnell laufen und nicht in Matlab programmiert sind.
Beispiel: type diag
Es gibt aber auch viele in Matlab programmierte Funktionen:
Beispiel: type flipud
Funktionen sind wie Skripte Textdateien, deren Name mit .mendet.
Funktionen
Aufbau einer Funktion:
1. Definition der Funktion (abgespeichert in funname.m)
function [out_1,out_2,...,out_k] = ...funname(in_1,in_2,...,in_m)
Die Listen der Ein- oder Ausgabevariablen konnen auch leersein.
2. Kommentarzeilen (was tut die Funktion, welche Ein- undAusgabevariablen muss der Benutzer verwenden).
I Der erste zusammenhangende Block von Kommentarzeilenwird bei help funname angezeigt.
I Die erste Zeile der Kommentarzeilen wird bei lookfordurchsucht.
Funktionen, Fortsetzung
3. Haufig folgt dann die Uberprufung der Eingabedaten:I sind genugend Eingabevariablen vorhanden?I sind die Eingabedaten vernunftig?I sind hochstens k Ausgabevariablen gefragt?
Falls dies nicht der Fall ist: Fehlermeldung und Ausstieg
4. Matlab-Befehle fur die eigentliche Funktion
Die Variablen in_1,...,in_m und out_1,...,out_k und alle inder Funktion neu definierten Variablen sind lokal, also nicht imMatlab-Workspace vorhanden.
Aufruf: (es darf x ≤ k und y ≤ m sein)[out_1,...,out_x]=funname(in_1,in_2,...,in_y)
Beispiel
ggt als Funktion, gespeichert in ggt.m
function g = ggt(m,n);% function g = ggt(m,n);% Berechnung des ggt zweier ganzer Zahlen
if (m > 0 & n > 0)while m ~= n...endg = m;
elseerror(’fehlerhafte Eingabedaten’);
end
Aufruf: x=3; y=5; f=ggt(x,y); whos
Arbeitsspeicher
Aufruf: f=ggt(x,y)
Funktion g=ggt(m,n)
Matlab-Workspace ggt-Workspace
vorher: x , y
nachher: x , y , f
Input: m, n
Output: g
x −→ my −→ n
f ←− g
Der Workspace kann mit whos angezeigt werden (amMatlab-Prompt bzw. innerhalb der Funktion ggt)
Regeln fur Funktionen I
I Fur Funktionsnamen gelten dieselben Regeln wie fur Variablen
I Eine Funktion endet nachdem die letzte Zeile ausgefuhrtwurde oder durch ein return-Kommando
I Eine Funktion kann durch warning(’eine Warnung’) eineWarnung geben. Im Unterschied zu disp(’eine Warnung’)konnen durch warning on bzw. warning off Warnungenglobal an- bzw. ausgeschaltet werden
I Matlab-Funktionen konnen Skripte oder andereMatlab-Funktionen aufrufen.
Regeln fur Funktionen II
I In einem m-File konnen mehrere Funktionen abgespeichertwerden. Solche Unterfunktionen werden an die erste Funktion(die Hauptfunktion) angehangt. Sie beginnen mit einemStandard function-Kommando und genugen denselbenRegeln wie vorher.
I Unterfunktionen konnen durch die Hauptfunktion oder durchandere Unterfunktionen aus demselben m-File aufgerufenwerden, nicht aber aus anderen Funktionen oder Skripten.
I Unterfunktionen haben ihren eigenen lokalen Arbeitsspeicher.
I Die Reihenfolge von Unterfunktionen spielt keine Rolle.
Beispiel: Binomialkoeffizienten
Aufgabe: Gegeben sei eine Funktion f=fac(n) die f = n! liefertund in fac.m gespeichert ist. Mit dieser soll
(nk
)berechnet werden:
(n
k
)=
{1, n = k oder k = 0
n!(n−k)!k! , 0 < k < n
Losung:function b=bin(n,k)
Input: n, kOutput: b
function b = bin(n,k);% function b = bin(n,k); Binomialkoeffizient
if (n == k | k == 0)b = 1;
elseif (0 < k & k < n)b = fac(n)/fac(n-k)/fac(k);
elseerror([’erster Eingabewert muss groesser ’,...
’als der zweite sein’]);end
Arbeitsspeicher
Matlab bin
fac
n, k
b
Beispiel: Approximation an ex
Aufgabe: Berechnen Sie so viele Folgenglieder
xn =(1 +
x
n
)n,
bis gilt|xn − xn−1| ≤ tol
Losung: while-Schleife
Berechnung von Funktionen
Aufgabe: Schreiben Sie eine Funktion function y=fun1(x), mitder Sie f (x) = sin(x)/x auswerten konnen. Falls x ein Vektor odereine Matrix ist, soll die Funktion fur jedes Element berechnetwerden.
Losung: Fallunterscheidung fur Elemente von x = 0 notig: Furx < 10−5 verwende Taylor-Entwicklung:
sin(x)
x= 1− 1
3!x2 +
1
5!x4 − 1
7!x6
Bestimme diese Elemente mit find.Achtung: find gibt Spaltenindizes zurueck, daher schreibe xzunachst als Vektor.
Beispiel: Mandelbrot-Menge
Aufgabe: Bestimme alle z ∈ C, welche unter der Abbildungz 7→ z2 + c gestartet mit z = c beschrankt bleiben.
Losung:
1. Definition von Punkten zjk ∈ C in einem Rechteck
2. Funktion auf diesen Punkten, Startwert zjk = c fur alle j , k
3. Fuhre Iteration fur alle zjk gleichzeitig aus (for- oderwhile-Schleife)
4. Plotte alle Punkte zjk mit |zjk | < M (z.B. M = 106)