<<

. 7
( 11 .)



>>

dem minimiert werden soll. Ausgegeben wird eine Stelle ™x™, an der die Funktion
ihr Minimum annimmt.

x = fminbnd(™sin™,0,2*pi)
input(™Druecke RETURN™)
36 Matlab, ein mathematisches Labor




Siehe die MATLAB Hilfe fur die Optionen, die der Funktion ™fminbnd™ uberge-
¨ ¨
ben werden k¨nnen. Beachte: Die zugrundeliegenden Algorithmen garantieren im
o
Allgemeinen nur, dass ein lokales Minimum gefunden wird.
Eine weitere Anwendung ist die Nullstellensuche. Wir werden einige numeri-
sche Algorithmen dazu in der Vorlesung noch besprechen. Hier aber bereits die
MATLAB Anweisung dazu. Ausgegeben wird eine Stelle ™x™, an der die Funktion
Null wird.

x = fzero(™sin™,3)
input(™Druecke RETURN™)

Neben der Funktion, fur die eine Nullstelle gesucht werden soll muss ein An-
¨
fangswert fur die Nullstellensuche angegeben werden. Es wird ublicherweise eine
¨ ¨
Nullstelle gefunden, die nahe bei diesem Anfangswert liegt.
Siehe die MATLAB Hilfe fur die Optionen, die der Funktion fzero ubergeben
¨ ¨
werden k¨nnen.
o
Eine weitere wichtige Operation auf Funktionen ist die Integration. Auch hier-
zu werden wir in der Vorlesung noch entsprechende Algorithmen behandeln. Die
MATLAB Routine zur Integration lautet ™quad™, da numerische Integration ubli-
¨
cherweise als ™Quadratur™ bezeichnet wird.

x = quad(™sin™,0,2*pi)
input(™Druecke RETURN™)

Der Grundaufruf entspricht dem ™fminbnd™ Befehl. Als viertes Argument kann
zus¨tzlich die gewunschte Genauigkeit angegeben werden. Beachte: Hier wird
a ¨
numerisch integriert, d.h. man muss mit numerischen Fehlern rechnen.


2.3 Nullstellen nichtlinearer Gleichungen
Nachfolgend eine Demonstration der MATLABRoutine ™fzero™ zur Nullstellenbe-
stimmung
Informationen zum Algorithmus:
™fzero™ sucht zun¨chst ein Intervall [a,b], fur dessen Grenzen f(a) und f(b) un-
a ¨
terschiedliche Vorzeichen besitzen. Danach startet ein ein iteratives Verfahren,
wobei in jedem Schritt falls m¨glich in Schritt des Sekantenverfahrens (in MAT-
o
LAB ´ Interpolation™ genannt) durchgefuhrt wird. Fuhrt dieser nicht zum Erfolg,
¨ ¨
wird statt dessen ein Schritt des Bisektionsverfahrens durchgefuhrt.
¨
Der Grundaufruf lautet

fzero(™sin™,4)
Matlab, ein mathematisches Labor 37




wobei das zweite Argument ein Startwert fur die Iteration ist.
¨
Statt eines einzelnen Startwertes kann auch direkt ein Intervall [a,b] angegeben
werden.

fzero(™sin™,[2,4])

Aber Achtung: Falls ein Intervall [a,b] ubergeben wird, mussen f(a) und f(b)
¨ ¨
unterschiedliche Vorzeichen besitzen: Der folgende Aufruf liefert eine Fehlermel-
dung:

fzero(™sin™,[1,2])

Zus¨tzlich zu der Nullstelle k¨nnen weitere Informationen ausgegeben werden:
a o
Der Funktionswert an der ermittelten Nullstelle:

[x,fval] = fzero(™sin™,4)

Ein Flag, das einen positiven Wert bei erfolgreicher Suche und einen negativen
Wert bei Misserfolg ausgibt. Dies ist nutzlich, falls ™fzero™ als Teil eines anderen
¨
Algorithmus verwendet wird und Fehler abgefangen werden sollen.

[x,fval,flag] = fzero(™sin™,4)
[x,fval,flag] = fzero(™sin(x)+2™,4)

Schliesslich k¨nnen noch die Anzahl der Iterationen, die Anzahl der Funktions-
o
auswertungen und der tatsachlich verwendete Algorithmus ausgegeben werden.
¨

[x,fval,flag,output] = fzero(™sin™,4)

™fzero™ hat zwei einstellbare Parameter, die aber nicht direkt, sondern uber eine
¨
Verbundvariable ™options™ eingestellt werden, die mit der Anweisung ™optimset™
gesetzt wird. Die Verwendung von ™optimset™ ist unten an Beispielen illustriert.
Die zwei Parameter von ™fzero™ sind:
TolX : Gewunschte Genauigkeit
¨
- voreingestellt auf die Maschinengenauigkeit eps
- m¨gliche Werte: jede reelle Zahl >=eps
o
Display: Steuerung der Ausgabe w¨hrend der Iteration
a
- voreingestellt auf den Wert ™¬nal™
- m¨gliche Werte: ™o¬™ : Keine Ausgabe, - ™iter™ : Ausgabe jedes Schrittes, - ™¬nal™:
o
Nur Endergebnis

Beispiele:

format long
38 Matlab, ein mathematisches Labor




¨
Anderung der Genauigkeit:

options = optimset(™TolX™,1e-4);
fzero(™sin™,4,options)
options = optimset(™TolX™,1e-15);
fzero(™sin™,4,options)
fprintf(™(Zum Vergleich: pi = %16.14f)\n\n™,pi)
¨
Anderung von Ausgabe und Genauigkeit

options = optimset(™TolX™,1e-4,™Display™,™iter™);
fzero(™sin™,4,options)

Mit dieser Ausgabe kann man auch sch¨n erkennen, dass die Angabe eines Inter-
o
valls den numerischen Aufwand deutlich reduzieren kann

fzero(™sin™,[2,4],options)


2.4 Polynome und Interpolation
Polynome sind eine wichtige Klasse von Funktionen. In der Vorlesung haben wir
sie zur Interpolation und im Ausgleichsproblem verwendet, sie tauchen aber auch
in vielen anderen Anwendungen auf.
Hier wollen wir die wichtigsten Polynom-Routinen von MATLAB besprechen.
In mathematischer Schreibweise ist ein Polynom vom Grad n gegeben durch

p(x) = a0 + a1x + a2x2 + ... + anxn

In MATLAB werden die Koe¬zienten anders numeriert; es gilt die Konvention

p(x) = P (n + 1) + P (n) — x + P (n ’ 1) — x2 + ... + P (1) — xn

Ein Polynom vom Grad n wird also als n+1-dimensionaler Vektor dargestellt.
Beispiel: Das Polynom p1(x) = 1 + 2x ’ 3x2 wird in MATLAB als

P1 = [-3 2 1]

dargestellt.
Zur Auswertung eines Polynoms dient die Routine ™polyval™:

polyval(P1,0)
polyval(P1,1)
input(™Druecke RETURN™)
Matlab, ein mathematisches Labor 39




Diese kann selbstverst\"andlich auch zum Plotten verwendet werden.
\begin{verbatim}
t = [-2:0.05:2];
y = polyval(P1,t);
plot(t,y,™-™)
input(™Druecke RETURN™)

™polyval™ rechnet immer komponentenweise, wenn der zweite Parameter ein Vek-
tor oder eine Matrix ist. Wenn man mochte, dass die Multiplikationen in der
¨
Polynomauswertung als Matrix-Multiplikationen ausgefuhrt werden, muss man
¨
die Routine ™polyvalm™ verwenden. Achtung: Dies ist nur fur quadratische Matri-
¨
zen sinnvoll.

A = [0 1; 2 3]
polyval(P1,A)
polyvalm(P1,A)
input(™Druecke RETURN™)

Die Routine ™roots™ ¬ndet die Nullstellen eines Polynoms

roots(P1)
input(™Druecke RETURN™)

Dies funktioniert auch, wenn, wie z.B. beim Polynom p2(x) = 1 + x + 2x2 , nur
komplexe Nullstellen existieren

P2 = [2 1 1]
roots(P2)
input(™Druecke RETURN™)

Umgekehrt kann man sich das zu einer vorgegebenen Menge von Nullstellen
geh¨rige Polynom mit eben diesen Nullstellen ausrechnen lassen. Hierbei wird
o
der Koe¬zient P(1) immer gleich 1 gesetzt.

P3 = poly([1 -1])
input(™Druecke RETURN™)

Dies liefert den Vektor P3 = [1 0 -1], also das Polynom p3(x) = ’1 + x2 .
Mit ™conv™ kann man zwei Polynome miteinander multiplizieren.

P4 = conv(P1,P2)
input(™Druecke RETURN™)
40 Matlab, ein mathematisches Labor




und mit ™deconv™ kann man ein Polynom durch ein anderes Teilen. Falls ein Rest
bleibt, wird dieser als zweite Variable zuruckgegeben. Mit dem Aufruf [Q,R] =
¨
deconv(P1,P2) erfullen die zugeh¨rigen Polynome q, r, p1 und p2 also fur alle x
o
¨ ¨
die Gleichung p1(x) = p2(x)q(x) + r(x)

[Q,R] = deconv(P4,P1)
[Q,R] = deconv(P4,P3)
input(™Druecke RETURN™)

Mit ™polyder™ kann man Polynome mit MATLAB ableiten.

P5 = polyder(P1)

MATLAB hat mit ™poly¬t™ einen eingebauten Befehl, um Interpolationspolynome
zu berechnen. Als Beispiel de¬nieren wir die Daten

nn = 4 % Anzahl der Stuetzstellen - 1
xx = [1 2 3 4 5]
ff = [2.2 5.4 9.2 16.0 26.2]

und berechnen

P6 = polyfit(xx,ff,nn)

Gra¬sch sieht man am einfachsten, dass das wirklich stimmt

t = [1:0.05:5];
y = polyval(P6,t);
plot(t,y,™r-™,xx,ff,™bx™)
input(™Druecke RETURN™)

Es ist hierbei erlaubt, den dritten Parameter in ™poly¬t™ kleiner als die Anzahl
der Stutzstellen minus 1 zu wahlen. Dann wird ein Polynom des angegebenen
¨ ¨
Grades berechnet, das - im Sinne der kleinsten Quadrate - am n¨chsten an den
a
vorgegebenen Datenpunkten liegt.

<<

. 7
( 11 .)



>>