<<

. 6
( 11 .)



>>

Matlab, ein mathematisches Labor 31




Bei dem ersten Beispiel, dem ™bicgstab™ Verfahren, betrachten wir genauer,
welche Parameter angegeben werden k¨nnen Alle Verfahren haben die gemeinsa-
o
me Eigenschaft, dass sie verschiedene Abbruchkriterien verwenden. Nach Abbruch
des Verfahrens wird ausgegeben, aus welchem Grund die Iteration beeendet wur-
de.
1) Abbruch bei erreichter gewunschter Genauigkeit: Das Abbruchkriterium ist bei
¨
den Verfahren in MATLAB anders als die einfache Kriterium aus der Vorlesung.
Hier wird fur eine vorgegebene Toleranz ™tol™ so lange iteriert, bis das relative
¨
Residuum Ax ’ b / b < tol (fur die 2-Norm) ist. Der Vorteil dieses Verfah-
¨
rens liegt darin, dass sich der Fehler in der L¨sung dann aus der Kondition der
o
Matrix A mittels des Satzes 2.32 (Fehleranalyse) der Vorlesung absch¨tzen l¨sst.
a a
Die gewunschte Genauigkeit ist mit 1e-6 voreingestellt.
¨
2) Abbruch nach maximaler Anzahl an Iterationen: Wenn eine maximale Anzahl
von Iterationen erreicht ist, wird das Verfahren in jedem Fall abgebrochen, auch
wenn die gewunschte Genaugkeit noch nicht erreicht ist. Die maximale Anzahl
¨
der Iterationen ist mit n (=Dimension des Problems) voreingestellt.
3) Abbruch bei Stagnation: Wenn sich das Residuum nicht mehr verbessert, wird
ebenfalls abgebrochen, auch wenn die gewunschte Genaugkeit noch nicht erreicht
¨
ist.
Wir illustrieren nun die verschiedenen Abbruchkriterien: Beachte: Die An-
zahl der Iterationen, die nach dem Abbruch angegeben wird, kann ein nicht-
ganzzahliger Wert sein, da viele Verfahren mehrstu¬ge Iterationsschritte durch-
laufen, die nach einem Teildurchlauf abgebrochen werden k¨nnen.
o
Wir rufen das Verfahren zunachst ohne weitere Paremeter auf.
¨
bicgstab(A,b)
input(™druecke RETURN™)
Hier tritt nun ein Abbruch wegen erreichter maximaler Anzahl der Iterationen
auf. Als optionale Paramater k¨nnen nun die Toleranz als drittes Argument und
o
die maximale Anzahl der Iterationen als viertes Argument angegeben werden.
Wir erh¨hen nun die Anzahl der Iterationen und belassen die Toleranz bei dem
o
voreingestellten Wert 1e-6
bicgstab(A,b,1e-6,20)
input(™druecke RETURN™)
Hier tritt ein Abbruch bei erreichter Genauigkeit ein, das Ergebnis ist aber noch
nicht so ganz zufriedenstellend, da A schlecht konditioniert ist. Wir erh¨hen also
o
die gewunschte Toleranz:
¨
bicgstab(A,b,1e-10,20)
input(™Druecke RETURN™)
32 Matlab, ein mathematisches Labor




Jetzt kann man mit dem Ergebnis zufrieden sein.
Wir verwenden jetzt den gleichen Aufruf fur andere Verfahren
¨

cgs(A,b,1e-10,20)
input(™Druecke RETURN™)

bicg(A,b,1e-10,20)
input(™Druecke RETURN™)

qmr(A,b,1e-10,20)
input(™Druecke RETURN™)

Eine Ausnahme macht das gmres-Verfahren, das eine verschachtelte Iteration
verwendet. Hier muss als dritter Parameter die maximale Anzahl der Schritte der
inneren Iteration angegeben werden.

gmres(A,b,3,1e-10,20)
input(™Druecke RETURN™)

Welches Verfahren fur welche Problemklasse am angemessensten ist, h¨ngt stark
a
¨
vom betrachteten Problem ab.


2.2 De¬nition von Funktionen
2.2.1 Funktionen von Zahlen
Jede Funktion muss in ein eigenes M-File geschrieben werden.
Der Dateiname bestimmt den Funktionsnamen
Die erste Programmzeile des M-Files muss die Vereinbarung ™function a =
name(b)™ enthalten. Hierbei ist ™b™ der Eingabeparameter und ™a™ der Ausgabe-
¨
parameter (die Namen sind beliebig). ™name™ sollte zur besseren Ubersichtlichkeit
mit dem Funktionsnamen, also dem Dateinamen des M-Files ubereinstimmen.
¨
Beispiel: Berechne den Absolutbetrag einer reellen Zahl:

function y = testfunktion(x)
if x>0
y=x;
else
y=-x;
end
Matlab, ein mathematisches Labor 33




Beispielaufruf: ™testfunktion(-10)™ oder ™a=testfunktion(-10)™
Funktionen k¨nnen mehrere Ein- und Ausgabeparameter besitzen. Die Einga-
o
beparameter werden dabei einfach durch Komma getrennt Die Ausgabeparameter
werden durch Komma getrennt in eckige Klammern geschrieben
Beispiel: Berechne die zwei L¨sungen einer quadratischen Gleichung x2 + px +
o
q=0

function [x1,x2] = testfunktion2(p,q)
x1 = -p/2 + sqrt(p^2-4*q)/2;
x2 = -p/2 - sqrt(p^2-4*q)/2;

Achtung: Bei einem Aufruf ™testfunktion2(0,-1)™ wird nur der erste Ausgabepa-
rameter am Bildschirm ausgegeben. Um beide zu bekommen, muss die Funktion
mittels ™[a,b]=testfunktion2(0,-1)™ aufgerufen werden.


2.2.2 Funktionen von Vektoren und Matrizen
Wenn eine reellwertige Funktion mit einem reellwertigen Argument mit einem
Vektor oder einer Matrix aufgerufen wird, wird die Funktion elementweise fr
jeden Eintrag des Vektors oder der Matrix ausgefuhrt.
¨
Dies sollte man auch bei selbstgeschriebenen Funktionen beachten. Wenn man
dabei nur bereits (korrekt!) de¬nierte mathematische Operationen verwendet,
genugt es, alle Multiplikationen, Divisionen und Potenzierungen mit dem ™.™ zu
¨
versehen

function y = vektorfunktion1(x)
y = x.^2+2.*x+1;

Wenn eine reellwertige Funktion mit einem reellwertigen Argument mit einem
Vektor oder einer Matrix aufgerufen wird, wird die Funktion elementweise fr
jeden Eintrag des Vektors oder der Matrix ausgefuhrt.
¨
Dies sollte man auch bei selbstgeschriebenen Funktionen beachten. Wenn man
fr in der Funktion ™if™-Anweisungen verwendet, muss man dann etwas komplizier-
ter programmieren. Die bereits bekannte (reelle) Betragsfunktion kann man wie
folgt modi¬zieren, damit sie auch fur Matrizen korrekt funktioniert.
¨

function y = vektorfunktion2(x)

™size™ liefert die Anzahl von Zeilen und Spalten von ™x™ in einem 2-dimensionalen
Vektor zuruck¨

s = size(x);
34 Matlab, ein mathematisches Labor




Jetzt kann man den reellen Betrag komponentenweise berechnen

for i=1:s(1)
for j=1:s(2)
if x(i,j)>0
y(i,j) = x(i,j);
else
y(i,j) = -x(i,j);
end
end
end

2.2.3 Funktionen von Funktionen
Bisher haben wir Funktionen benutzt, deren Parameter Zahlen bzw. Vektoren
oder Matrizen waren. Es gibt in MATLAB aber auch die M¨glichkeit, ganze
o
Funktionen an andere Funktionen als Parameter zu ubergeben.
¨
Als Beispiel fur eine Anwendung programmieren wir hier eine Funktion, die
¨
eine gegebene Funktion plottet. Ein Beispielaufruf lautet z.B.

funplot(™sin(x)™,1,5,100)

Der erste Parameter bestimmt die zu plottende Funktion, der zweite und dritte
die untere bzw. obere Intervallgrenze des zu plottenden Bereichs. Der vierte Para-
meter bestimmt die Anzahl der Stutzstellen, die in der Gra¬k verwendet werden
¨
sollen.

function funplot(fun,a,b,n,format)

inline wandelt den ubergebenen Funktionsnamen in eine ausfuhrbare MATLAB
¨ ¨
Funktion um.

g = inline(fun);

Wie ublich erzeugen wir den Vektor der Stutzstellen
¨ ¨

t = [a:(b-a)/(n-1):b];

dazu den Vektor von Funktionswerten

y = g(t);

und plotten das Ganze

plot(t,y,format)
Matlab, ein mathematisches Labor 35




Diese Beispielfunktion ™funplot™ plottet eine Funktion mit abhangiger Variable
¨
™x™. Beispielaufruf:

funplot(™sin(x)™,0,2*pi,50,™-™)
input(™Druecke RETURN™)

Zur Erl¨uterung der Parameter siehe oben. Die hier ubergebene Funktion kann
a ¨
ubrigens auch eine selbstde¬ninerte Funktion sein. Z.B.
¨

funplot(™vektorfunktion2(x)™,-1,1,51,™-™)
input(™Druecke RETURN™)

MATLAB bietet aber auch eine ganze Reihe eigene Funktionen, die in verschie-
denster Weise auf anderen Funktionen arbeiten
Wir werden hier eine Reihe solcher Funktionen kennen lernen.
Zun¨chst einmal bietet MATLAB selbst mit ™fplot™ eine eingebaute Gra¬k-
a
Routine zur Darstellung von Funktionen. Der Funktion wird der Name der dar-
zustellenden Funktion ubergeben sowie der darzustellende Bereich als Vektor:
¨

fplot(™sin(x)™,[0,2*pi])
input(™Druecke RETURN™)

™fplot™ ist intern aufw¨ndiger programmiert als unsere einfache ™funplot™ Routine:
a
- das Argument ™(x)™ kann bei der Funktionsubergabe weggelassen werden.
¨
- ™fplot™ errechnet selbst eine brauchbare Anzahl von Stutzstellen zur Darstel-
¨
lung der Funktion. Will man diese per Hand einstellen, kann die gewunschte
¨
Minimalanzahl N¿1 von Stutzstellen als weiterer Parameter angegeben werden.
¨
Alternativ kann statt der Anzahl der Stutzstellen ein Parameter ™tol™ angegeben
¨
werden, der die Genauigkeit der Gra¬k steuert. Voreinstellung ist 2e-3.
- Auch der Bereich, den die y-Achse abdecken soll, kann eingestellt werden

fplot(™sin(x)™,[0,2*pi,-0.5,0.5])
input(™Druecke RETURN™)

Wir kommen nun zu Funktionen, die mathematische Operationen auf anderen
Funktionen durchfuhren. Eine klassische Anwendung ist die Minimierung von
¨
Funktionen auf einem vorgegebenen Intervall. Dies macht ™fminbnd™. Hier wird die
Funktion sowie die untere und obere Intervallgrenze des Intervalls angegeben, auf

<<

. 6
( 11 .)



>>