Upload
ngoque
View
216
Download
0
Embed Size (px)
Citation preview
Praktikum zur Vorlesung: Numerische Mathematik fur LehramtSS 2006
Matlab: Fortsetzung
Jan Mayer4. Mai 2006
Manipulation von Matrizen und Vektoren
• [M,N]=size(A); speichert die Dimension einer Matrix bzw.Vektors in (M,N) ab.
• K=length(A) ergibt die großte Dimension, max(M,N).
• v(i) greift auf Ai des Vektors v zu.
• A(i,j) greift auf Aij der Matrix A zu.
• A(i) durchlauft A spaltenweise und gibt das i-te Elementzuruck.
Matlab: eine kleine Einfuhrung 2
Manipulation von Matrizen und Vektoren
• Erinnerung: * / \ ^ sind Operationen der Linearen Alge-bra (
”Matrix-Division“ entspricht Multiplikation mit der Inver-
sen von links bzw. rechts, vgl. mldivide, mrdivide).
• Erinnerung: .* ./ .^ sind elementweise Operationen.Auch alle Standardfunktionen (sin, cos, exp,. . . ) werdenelementweise ausgefuhrt.
• Skalare konnen stets mit Vektoren und Matrizen verknupftwerden: der Skalar wird elementweise verknupft.
Matlab: eine kleine Einfuhrung 3
Manipulation von Matrizen und Vektoren: find
• i=find(v) findet die Elemente des Vektors v mit vi 6= 0. DerVektor i enthalt alle zugehorigen Indizes.
• [i,j]=find(A) findet die Elemente der Matrix A mit Aij 6= 0.Die Vektoren i und j enthalten alle zugehorigen Index-Tupel.
Beispiel: folgt spater!
Matlab: eine kleine Einfuhrung 4
Beispiel: Spiel des Lebens
Gegeben: Gebiet der Große N×N bestehend aus 1×1 Zellen.
• Jede Zelle ist in dem Zustand lebend oder tot.
• Zum Zeitpunkt T = 0 besteht ein Anfangszustand, z.B. einlebender 4 × 4 Block in der Mitte.
• Ubergang der Generation zum Zeitpunkt T = t in eine neueGeneration zum Zeitpunkt T = t + 1:
1. Zu viele oder zu wenige lebende Nachbarn: Zelle ist tot.z.B. 0, 1, 7, 8 Nachbarn.
2. Optimale Anzahl von Nachbarn: Zelle lebt.z.B. 3, 4, 5 Nachbarn.
3. Sonst: keine Veranderungz.B. 2, 6 Nachbarn.
Matlab: eine kleine Einfuhrung 5
Beispiel: Spiel des Lebens
main.m
% Hauptprogramm
parameter; % Parameter laden
M = init(N); % Initialisieren
for t = 1:Tmax
display([’Schritt ’,num2str(t)]);
spy(M); % Visualisieren
pause;
M = neue generation(M,tot,gleich,leben);
end
spy(M); % Visualisieren
Matlab: eine kleine Einfuhrung 6
Beispiel: Spiel des Lebens
parameter.m
% Parameter
N = 50; % Dimension
Tmax = 100; % Anzahl der Zeitschritte
tot = [0 1 7 8]; % #Nachbarn -> sterben
gleich = [2 6]; % #Nachbarn -> unverandert
leben = [3 4 5]; % #Nachbarn -> leben
Matlab: eine kleine Einfuhrung 7
Beispiel: Spiel des Lebens
init.m
function A = init(N)
% Bevolkerungsmatrix mit Anfangsbevolkerung erzeugen
A = zeros(N,N);
k = floor(N/2);
A(k-1:k+2,k-1:k+2) = ones(4,4);
Matlab: eine kleine Einfuhrung 8
function A = neue generation(A,tot,gleich,leben);
% neue Generation berechnen.
B = A; % Kopie von A anlegen.
[M, N] = size(A);
for j = 1:N
for k = 1:N
anz nachbarn = nachbarzahl(B,j,k);
if length(find(tot == anz nachbarn))
A(j,k) = 0;
elseif length(find(leben == anz nachbarn))
A(j,k) = 1;
end % sonst: andert sich nichts.
end
end
Einschub: Beispiel zu find
tot = [0 1 7 8]; gleich = [2 6]; leben = [3 4 5];
anz nachbarn = nachbarzahl(B,j,k);
if length(find(tot == anz nachbarn))
A(j,k) = 0;
elseif length(find(leben == anz nachbarn))
A(j,k) = 1;
end % sonst: andert sich nichts.
Matlab: eine kleine Einfuhrung 10
function n = nachbarzahl(A,j,k);
% berechnet die Anzahl der Nachbarn von Zelle (j,k).
[M, N] = size(A);
if (j == 1) & (k == 1)
n = A(1,2) + A(2,2) + A(2,1);
elseif (j == N) & (k == 1)
n = A(N,2) + A(N-1,1) + A(N-1,2);
elseif (j == 1) & (k == N)
n = A(2,N) + A(1,N-1) + A(2,N-1);
elseif (j == N) & (k == N)
n = A(N,N-1) + A(N-1,N) + A(N-1,N-1);
elseif j == 1
n = A(2,k-1) + A(2,k) + A(2,k+1) + ...
A(1,k-1) + A(1,k+1);
elseif j == N
n = A(N-1,k-1) + A(N-1,k) + A(N-1,k+1) + ...
A(N,k-1) + A(N,k+1);
elseif k == 1
n = A(j-1,2) + A(j,2) + A(j+1,2) + ...
A(j-1,1) + A(j+1,1);
elseif k == N
n = A(j-1,N-1) + A(j,N-1) + A(j+1,N-1) + ...
A(j-1,N) + A(j+1,N);
else
n = sum(A(j-1:j+1,k-1)) + ...
sum(A(j-1:j+1,k+1)) + A(j-1,k) + A(j+1,k);
end
Plotten von Daten
Sind X und Y Vektoren von derselben Dimension n, so plottetder Befehl plot(X,Y) den Streckenzug
(x1, y1), (x2, y2), (x3, y3), . . . , (xn−1, yn−1), (xn, yn).
Matlab: eine kleine Einfuhrung 13
Plotten von Funktionen
Um eine Funktion f zu plotten, legt man eine”Wertetabelle“
an, und plottet diese:
X=-1:0.01:1; % funktioniert, aber schlechte Idee
Y=f(X);
plot(X,Y);
Dazu muss(!!!) die Funktion so programmiert sein, dass sie dieMatrix X elementweise ausrechnet!
Alle Funktionen in MATLAB sollten so programmiert werden!
Matlab: eine kleine Einfuhrung 14
Plotten von mehreren Funktionen
Problematik:
• Die Werte in der Wertetabelle sollten Spaltenvektoren sein.
• X=-1:0.01:1 erzeugt einen Zeilenvektor.
• Konsequenz: Y=f(X) ist ebenfalls ein Zeilenvektor.
• Notlosung: MATLAB interpretiert ggf. einen Zeilenvektor alsSpaltenvektor und plottet mit dem Befehl plot(X,Y) dasGewunschte.
Matlab: eine kleine Einfuhrung 15
Plotten von mehreren Funktionen
Um mehrere Funktionen zu plotten:
• Der (Spalten oder zur Not Zeilen) Vektor X enthalt die x-Werte.
• Die Matrix Y enthalt spaltenweise die Werte der unter-schiedlichen Funktionen.
• plot(X,Y) plottet alle Funktionen.
Konsequenz: Funktionswertetabelle spaltenweise anlegen!
Matlab: eine kleine Einfuhrung 16
Plotten von mehreren Funktionen
So macht man es richtig:
X = (-1:0.01:1)’ % ein Spaltenvektor!
plot(X,[sin(X),cos(X),(X. 2)./(X+10)]
% Matrix verkleben
plotet die Funktionen sin x, cos x und x2
x+10im Intervall [-1,1].
Matlab: eine kleine Einfuhrung 17
Die Programmieraufgabe: Newton-Interpolation
Implementieren Sie folgende MATLAB-Funktionen fur dieNewton-Interpolation:
1. xs = Tschebyscheff Stuetzstellen(n) zur Berechnungder Nullstellen des n-ten Tschebyscheff-Polynoms
2. y = Runge(x) zur Berechnung
f(x) =1
1 + 25x2.
3. s = NewtonInterpolation(xs,f) zur Berechnung der Stei-gungen.
Matlab: eine kleine Einfuhrung 18
4. y = eval NewtonPolynom(xs,s,x) zur Auswertung desNewton-Polynoms mit dem Horner-Schema.
5. visualisierung aequidistant(StuetzstellenZahl) zurVisualisierung des Newton-Polynoms fur aquidistante Stutz-stellen.
6. visualisierung Tschebyscheff(StuetzstellenZahl)zur Vi-sualisierung des Newton-Polynoms fur Tschebyscheff-Stutz-stellen.
Matlab: eine kleine Einfuhrung 19
Bemerkungen zu den einzelnen Funktionen:
1. xs = Tschebyscheff Stuetzstellen(n) liefert als Ergeb-nis einen Vektor der Lange n, welcher die n-Nullstellen vonTn enthalt.
Matlab: eine kleine Einfuhrung 20
Bemerkungen zu den einzelnen Funktionen:
2. y = Runge(x) berechnet
f(x) =1
1 + 25x2.
Dabei darf x ein Skalar, ein Vektor oder eine Matrix sein.In diesem Fall wird f komponentenweise ausgewertet. Dazuverwenden Sie die komponentenweise Grundoperationen!
Matlab: eine kleine Einfuhrung 21
Bemerkungen zu den einzelnen Funktionen:
3. s = NewtonInterpolation(xs,f) berechnet Steigungen.
• xs enthalt die n Stutzstellen; f die n Stutzwerte.• s enthalt die n Steigungen.
Beachten Sie:
• Die Indizierung in MATLAB beginnt grundsatzlich bei 1, sodass es keine Stutzstelle x0 bzw. Stutzwert f0 gibt.
• Vorgehensweise:(a) n × n Nullmatrix F fur das Steigungschema anlegen.(b) Stutzwerte in die erste Spalte kopieren.(c) Steigungen spaltenweise berechnen.(d) Ruckgabe der Diagonale mit Hilfe diag.
Matlab: eine kleine Einfuhrung 22
Bemerkungen zu den einzelnen Funktionen:
4. y = eval NewtonPolynom(xs,s,x) zur Auswertung desNewton-Polynoms
p(x) = s1 + s2(x − x1) + . . . + sn−1(x − x1) . . . (x − xn−2)
+sn(x − x1) . . . (x − xn−1)
mit dem Horner-Schema.
• xs: Stutzstellen x1, . . . , xn des Newton-Polynoms p;• s: Steigungen s1 . . . , sn.• Skalar, Vektor oder Matrix x: Stelle(n) an denen das Newton-
Polynom ausgewertet werden soll.
Horner-Schema (mit Indexverschiebung):
p(x) = (. . . (sn(x−xn−1)+sn−1)(x−xn−2) . . .)+s2)(x−x1)+s1
Matlab: eine kleine Einfuhrung 23
Bemerkungen zu den einzelnen Funktionen:
Implementierung des Horner-Schemas:
p(x) = (. . . (sn(x−xn−1)+sn−1)(x−xn−2) . . .+s2)(x−x1)+s1
(1.) y = sn
(2.) for k = n − 1, . . . , 1
(3.) y = y ∗ (x − xk) + sk;
(4.) end
Beachte: Dies ist nicht die MATLAB-Implementierung!
Matlab: eine kleine Einfuhrung 24
Bemerkungen zu den einzelnen Funktionen:
5. visualisierung aequidistant(StuetzstellenZahl) zumPlotten des Newton-Polynoms fur aquidistante Stutzstellen.
• Der Vektor StuetzstellenZahl ist eine Liste mit Anzahl vonStutzstellen, fur die das Newton-Polynom berechnet wird.
• Fur jeden Eintrag in StuetzstellenZahl wird berechnet:– die aquidistante Zerlegung xs von [−1, 1];– die Funktionswerte f der Runge-Funktion an xs;– die Steigungen des Newton-Polynoms zu xs und f;– die Werte des Newton-Polynoms fur -1:0.01:1.
• Weiter werden die Werte der Runge-Funktion fur den Vektor-1:0.01:1 berechnet.
• Die Werte der Runge-Funktion sowie aller Newton-Polynomewerden im Intervall [-1,1] in einem Schaubild geplotet.
Matlab: eine kleine Einfuhrung 25