<<

. 5
( 11 .)



>>

o
Beispiel:

set(gca,™nextplot™,™replacechildren™);
surf(X,Y,Z./2,C);
input(™Druecke RETURN™)

Hier bleiben die Achsen erhalten, statt - wie ublich - automatisch angepasst zu
¨
werden.
Eine sch¨ne Anwendung dieses Modus ist die Erstellung von Animationen.
o
Hierzu bietet MATLAB die ™movie™-Anweisung, die einen Vektor von Gra¬ken
in einer vorgegebenen Reihenfolge abspielt. Die einzelnen Gra¬ken k¨nnen dabei
o
mit der Anweisung ™getframe™ in eine Bild-Datenstruktur umgewandelt werden
und in den Komponenten von F abgelegt werden. Der ™replacechildren™ Modus ist
dabei wichtig, damit die Achsen von Bild zu Bild gleich bleiben.
Erzeugen eines ™Testbildes™

surf(X,Y,Z,C)

Einstellen der Achsen auf einen sinnvollen Bereich

axis([-10 10 -10 10 -140 140])
input(™Druecke RETURN™)

Einstellen des ™replacechildren™ Modus

set(gca,™nextplot™,™replacechildren™)

Erzeugen der Bilder

for j = 1:21
surf(X,Y,cos(2*pi*(j-1)/20).*Z,Z)
F(j)=getframe;
end
input(™Druecke RETURN™)

Abspielen des Films

movie(F)
input(™Druecke RETURN™)
26 Einfuhrung in Matlab
¨




Abspielen des Films mit 9 Wiederholungen (also 10 mal, Voreinstellung 1 Wie-
derholung) und 24 Bildern pro Sekunde (Voreinstellung 12)

movie(F,9,24)
input(™Druecke RETURN™)

Abspielen des Films mit 9 Wiederholungen (Voreinstellung 1) und 24 Bildern pro
Sekunde (Voreinstellung 12) sowie der in dem angegebenen Vektor eingestellten
Bildfolge

movie(F,[9 1 2 3 4 5 6 6 6 6 5 4 3 2 1], 24)


1.4 Ausgabe
MATLABs Standardausgabe von Rechenergebnissen ist weder besonders sch¨n o
noch besonders ubersichtlich. Eine sehr leistungsf¨hige Abhilfe bietet die ™fprintf™-
a
¨
Anweisung. Mit ihr kann man Text und Werte von Variablen in beliebiger Form
ausgeben lassen. Die folgenden Beispiele erl¨utern einige wesentliche Anwen-
a
dungsm¨glichkeiten.
o
Zun¨chst einmal ist es sehr einfach, mit ™fprintf™ Text auszugeben Beachte: Mit
a
dem Ende der ™fprintf™ wird nicht automatisch in die n¨chste Zeile gewechselt. Ein
a
Zeilenende muss explizit durch die Zeichenfolge ™\n™ erzeugt werden. Leerzeilen
erzeugt man mit ™fprintf(™\n™)™

fprintf(™Dies ist ein Text™)
fprintf(™...und hier geht es in der selben Zeile weiter\n™)
fprintf(™Jetzt beginnt eine neue Zeile\n™)
fprintf(™\n™)
input(™Druecke RETURN™)

Um Variablenwerte auszugeben, muss im Text ein Platzhalter eingegeben werden,
der das Format der Ausgabe bestimmt. Fur Gleitkommazahlen gibt es die Format-
¨
Platzhalter ™%e™, ™%f™ oder ™%g™.
™%e™ gibt die Zahl immer in Exponenten-Darstellung aus
™%f™ gibt die Zahl immer ohne Exponenten aus
™%g™ wechselt zwischen diesen Formaten, je nach dem, in welchem Zahlenbereich
die auszugebende Zahl liegt. Außerdem werden unwichtige Nachkommastellen
(Nullen) abgeschnitten.
Diese Platzhalter legen nur das Format und die Position der Ausgabe im
laufenden Text fest. Die eigentlich auszugebende Variable(n) muss (mussen) dann
¨
als weitere Argumente an die ™fprintf™ Anweisung ubergeben werden.
¨
Einfuhrung in Matlab 27
¨




x = 123456.789876
fprintf(™Verschiedene Formate\n™)
fprintf(™e: %e\n™,x)
fprintf(™f: %f\n™,x)
fprintf(™g: %g\n\n™,x)
input(™Druecke RETURN™)
Zusatzlich zum Format kann man auch eine Mindestanzahl von Stellen angeben,
¨
die fur die Zahl bereitgestellt werden sollen. Dies ist fur Tabellen sehr nutzlich.
¨ ¨ ¨
Wir drucken eine Tabelle zun¨chst ohne Stellenangabe.
a
for i = 1:10
wurzel = sqrt(i);
fprintf(™Die Zahl %g ist Quadratwurzel von %g\n™,wurzel,i)
end
fprintf(™\n™)
input(™Druecke RETURN™)
Jetzt formatieren wir dies sch¨ner indem wir die Stellen festlegen. Man kann die
o
Anzahl der Gesamtstellen und (wahlweise) zus¨tzlich die Anzahl der Nachkom-
a
mastellen angeben, indem man diese zwischen ™%™ und Formatzeichen schreibt.
Fur das Format ™%f™ mit 10 Stellen schreibt man z.B. ™%10f™. Um von den 10 Stel-
¨
len 5 fur Nachkommastellen zu reservieren, schreibt man ™%10.5f™. Wir benutzen
¨
dies fur die sch¨nere Ausgabe der Quadratwurzeltabelle
o
¨
for i = 1:10
wurzel = sqrt(i);
fprintf(™Die Zahl %10.8g ist Quadratwurzel von %2g\n™,wurzel,i)
end
fprintf(™\n™)
input(™Druecke RETURN™)
Eine weitere Anwendung der Stellenangabe ist es, die Genauigkeit der Ausgabe
zu erh¨hen
o
fprintf(™Die Wurzel von 2 ist %f\n™,sqrt(2))
fprintf(™Die Wurzel von 2 ist %20.18f\n™,sqrt(2))
input(™Druecke RETURN™)
™fprintf™ kann nicht nur einfache Zahlen, sondern auch Vektoren und Matrizen
ausgeben. Hierbei wird die entsprechende Formatanweisung fur jedes Element der
¨
Matrix wiederholt. Hierbei wird spaltenweise vorgegangen, so dass die gewohnte
Reihenfolge (zeilenweise) durch Transponieren der auszugebenden Matrix erzeugt
werden muss.
28 Einfuhrung in Matlab
¨




A = [1.5 2.7 3.456; 7.6 4.765 1.234; 3 4 5]

Ein erster Versuch, der aber nicht so besonders sch¨n aussieht
o

fprintf(™Eine Matrix %f\n™,A™)
fprintf(™\n™)
input(™Druecke RETURN™)

Eine schonere Variante
¨

fprintf(™Eine Matrix\n™)
fprintf(™%f %f %f\n™,A™)
Kapitel 2

Matlab, ein mathematisches
Labor

2.1 Lineare Gleichungssysteme
Man kann lineare Gleichungssysteme Ax = b mittels der Inversen der Matrix A
l¨sen:
o

x=inv(A)*b

Dies ist aber numerisch ine¬zient im Vergleich zu anderen Vorgehensweisen.


2.1.1 Direkte Verfahren
MATLAB hat eine Reihe von Algorithmen zur Losung von linearen Gleichungs-
¨
systemen und verwandten Problemen eingebaut. Sei

A = [ 1 5 6; 7 9 6; 2 3 4]
b = [29; 43; 20]

Der Grundbefehl zur Losung eines linearen Gleichungssystems ist der umgekehrte
¨
Schr¨gstrich
a

x=A\b

Die Rechnung wird mit Gauß-Elimination (mit geschickter Pivotierung) durch-
gefuhrt Wenn A in obererer oder unterer Dreiecksform ist, wird Ruckw¨rts bzw.
a
¨ ¨
Vorw¨rtseinsetzen durchgefuhrt. Anmerkung: Wenn A nicht quadratisch ist, wird
a ¨
keine Fehlermeldung ausgegeben, sondern automatisch das zugeh¨rige lineare
o
Ausgleichsproblem gel¨st.
o

29
30 Matlab, ein mathematisches Labor




Neben der direkten Losung von linearen GS stehen Algorithmen zur Zerlegung
¨
von Matrizen zur Verfugung.
¨
™lu™ zerlegt per Gauß-Elimination eine Matrix in eine rechte untere und eine
linke obere Dreiecksmatrix - bis auf Zeilenvertauschungen durch Pivotierung

[L,R] = lu(A)

™chol™ zerlegt symmetrische, positiv de¬nite Matrizen mittels des Choleski-Verfahrens.
Achtung: Im Gegensatz zur Vorlesung wird hier ™R™ mit R™*R=A berechnet, nicht
™L™ mit L*L™=A

AA = A™*A Hinweis: erzeugt eine symm, pos. def. Matrix
R = chol(AA)

zuletzt gibt es noch die QR Zerlegung, die wir in der Vorlesung nicht besprochen
haben. Hier wird A=Q*R zerlegt, wobei R eine obere Dreiecksmatrix ist und Q
eine orthogonale Matrix ist, d.h. es gilt Q’1 = QT

[Q,R] = qr(A)

Die 2 Norm der Matrix Q ist immer 1:

norm(Q,2)


2.1.2 Iterative Verfahren
MATLAB stellt eine Reihe von Verfahren zur iterativen L¨sung linearer Glei-
o
chungssysteme zur Verfugung
¨
Zunachst de¬nieren wir uns ein Beispiel-Gleichungssystem und zwar eins, das
¨
sehr schlecht konditioniert ist

A = [0.780 0.563; 0.913 0.659];
b = [0.217; 0.254];
cond(A,2)

Die exakte L¨sung dieses Systems ist [1; -1]. Wir werden nun einige wichtige
o
Verfahren durchgehen, die alle - im Gegensatz zum Jacobi oder Gauss-Seidel
Verfahren - fur allgemeine quadratische Matrizen funktionieren. Im Einzelnen
¨
sind dies
bicgstab - ™stabilisiertes bikonjugiertes Gradientenverfahren™
cgs - ™quadriertes konjugiertes Gradientenverfahren™
bicg - ™bikonjugiertes Gradientenverfahren™
gmres - ™verallgemeinertes Minimalresiduumsverfahren™

<<

. 5
( 11 .)



>>