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)