26
Praktikum zur Vorlesung: Numerische Mathematik f ¨ ur Lehramt SS 2006 Matlab: Fortsetzung Jan Mayer 4. Mai 2006

Matlab: Fortsetzung - math.kit.edu · Spaltenvektor und plottet mit dem Befehl plot(X,Y) das Gewunschte.¨ Matlab: eine kleine Einfu¨hrung 15. Plotten von mehreren Funktionen

  • 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

Bemerkungen zu den einzelnen Funktionen:

6. visualisierung Tschebyscheff(StuetzstellenZahl)zur Vi-sualisierung des Newton-Polynoms fur Tschebyscheff-Stutz-stellen.

Analog zu visualisierung aequidistant(StuetzstellenZahl),nur mit den Tschebyscheff-Stutzstellen.

Matlab: eine kleine Einfuhrung 26