Praktikum zur Vorlesung: Numerische Mathematik für Lehramt SS 2006 Die Programmieraufgaben Jan Mayer 18. Mai 2006
Lösung zur ersten Aufgabe Tschebyscheff Stuetzstellen.m function xs = Tschebyscheff Stuetzstellen(n); % berechnet die Nullstellen des n-ten Tschebyscheff-Polynoms. xs = cos( (2*((1:n) )-1)*pi/(2*n) ); Runge.m function y = Runge(x) % Berechnet 1 / (1+ 25x^2) y = 1./ (1+25*x.^2); Matlab: eine kleine Einführung 2
NewtonInterpolation.m function s = NewtonInterpolation(xs,f) % Eingabe: Stützstellen xs. % Stützwerte y. % Ausgabe: Steigungen s. n = length(xs); F = zeros(n,n); F(:,1) = f; for m = 2:n for k = m:n F(k,m) = (F(k-1,m-1)-... F(k,m-1))/(xs(k-m+1)-xs(k)); s=diag(f); Matlab: eine kleine Einführung 3
Lösung zur ersten Aufgabe eval NewtonPolynom.m function y = eval NewtonPolynom(xs,s,x) % Wertet das Newtonpolynom mit Horner-Schema aus. % Eingabe: Stützstellen xs. % Steigungen s. % Stelle x. % Ausgabe: Funktionswerte y. n = length(s); y = s(n)*ones(size(x)); for k = n-1:-1:1 y = y.*(x-xs(k)) + s(k); Matlab: eine kleine Einführung 4
Lösung zur ersten Aufgabe visualisierung aequidistant.m function visualisierung aequidistant(ssz) xplot = (-1:0.01:1) ; Y = []; for k = SSZ xs = (-1:(2/(k-1)):1) ; s = NewtonInterpolation(xs,Runge(xs)); yplot = eval NewtonPolynom(xs,s,xplot); Y = [Y,yplot]; Y = [Runge(xplot),Y]; plot(xplot,y); Matlab: eine kleine Einführung 5
Lösung zur ersten Aufgabe visualisierung aequidistant.m function visualisierung aequidistant(ssz) xplot = (-1:0.01:1) ; Y = []; for k = SSZ xs = (-1:(2/(k-1)):1) ; s = NewtonInterpolation(xs,Runge(xs)); yplot = eval NewtonPolynom(xs,s,xplot); Y = [Y,yplot]; Y = [Runge(xplot),Y]; plot(xplot,y); Matlab: eine kleine Einführung 6
Lösung zur ersten Aufgabe visualisierung Tschebyscheff.m function visualisierung Tschebyscheff(SSZ) xplot = (-1:0.01:1) ; Y = []; for k = SSZ xs = Tschebyscheff Stuetzstellen(k); s = NewtonInterpolation(xs,Runge(xs)); yplot = eval NewtonPolynom(xs,s,xplot); Y = [Y,yplot]; Y = [Runge(xplot),Y]; plot(xplot,y); Matlab: eine kleine Einführung 7
Die 2. Aufgabe: Kubische Spline-Interpolation der Lemniscate Die Lemniscate ist gegeben in Parameterform durch: cos t x 1 + sin 2 t = Φ(t) = y sin t cos t, t R 1 + sin 2 t 0.4 0.3 0.2 0.1 0 0.1 0.2 0.3 0.4 1 0.8 0.6 0.4 0.2 0 0.2 0.4 0.6 0.8 1 Matlab: eine kleine Einführung 8
Die 2. Aufgabe visualisierung natuerlicher spline.m function visualisierung natuerlicher spline(ssz) % t-werte für Plot: t = (0 : 2*pi/200 : 2*pi) ; % exakte Werte für Lemniscate abspeichern: [X,Y] = lemniscate(t); Matlab: eine kleine Einführung 9
Die 2. Aufgabe visualisierung natuerlicher spline.m for k = SSZ % äquidistante Stützstellen bestimmen: ts = (0:2*pi/(k-1):2*pi) ; % Werte für Stützstellen berechnen: [fx,fy] = lemniscate(ts); % sigmas für x bzw. y Werte berechnen: sigmax = sigma natuerlicher spline(ts,fx); sigmay = sigma natuerlicher spline(ts,fy); % Splines for x bzw. y Werte erzeugen: Sx = spline erzeugen(ts,fx,sigmax); Sy = spline erzeugen(ts,fy,sigmay); Matlab: eine kleine Einführung 10
Die 2. Aufgabe visualisierung natuerlicher spline.m % Splines auswerten: x = spline auswerten(sx,t); y = spline auswerten(sy,t); % Matrix zum plotten aufbauen: X = [X,x]; Y = [Y,y]; plot(x,y); Matlab: eine kleine Einführung 11
Die 2. Aufgabe visualisierung periodischer spline.m: verwe: sigma periodischer spline statt sigma natuerlicher spline Matlab: eine kleine Einführung 12
Weitere Hinweise zur 2. Aufgabe Ein kubischer Spline kann dargestellt werden in der Form: s(x) = γ j (x x j 1 ) 3 + δ j (x j x) 3 + α j (x x j 1 ) + β j (x j x) für x [x j 1,x j ], j = 2,...,n und mit γ j = σ j 6h j 1 δ j = σ j 1 6h j 1 α j = f j 1 6 h2 j 1 σ j h j 1 β j = f j 1 1 6 h2 j 1 σ j 1 h j 1. Beachte: diese Formeln unterscheiden sich von denen aus der Vorlesung, da die Indizierung bei 1 statt 0 beginnt! Matlab: eine kleine Einführung 13
Weitere Hinweise zur 2. Aufgabe Speicher deswegen ab in einer (n 5)-Matrix S spaltenweise: S(1:n,1) = xs S(2:n,2) = γ S(2:n,3) = δ S(2:n,4) = α S(2:n,5) = β. Beachte: Die Elemente S(1, 2: 5) sind bedeutungslos. Matlab: eine kleine Einführung 14
Weitere Hinweise zu MATLAB Vektorisierung for-schleifen werden normalerweise verwet um: eine Rekursion durchzuführen. Die berechneten Werte hängen von einander ab, z.b. x n+1 = f(x n ), n = 1,...,N. Hier muss eine for-schleife verwet werden! Matlab: eine kleine Einführung 15
Weitere Hinweise zu MATLAB Vektorisierung for-schleifen werden normalerweise verwet um: diesselbe Rechnung für alle Einträge in einem Vektor bzw. Matrix durchzuführen. In diesem Fall hängt keiner der berechneten Werte von anderen ab, z.b. x n = 4 x n oder x n = n x n, n = 1,...,N. Hier sollte durch Vektorisierung die for-schleife vermieden werden! x = 4*x bzw. x = (1:length(x)).*x Matlab: eine kleine Einführung 16
Nach dem 1. Schritt: Vektorisierung Gauß sche Elimination 0 0 0 0 0 keinen Zugriff : nur gelesen, unverändert verändert Matlab: eine kleine Einführung 17
Vektorisierung for i = k+1:n for j = k+1:n A(i,j) = A(i,j) - A(i,k)*A(k,j)/A(k,k); i = k+1:n j = k+1:n A(i,j) = A(i,j) - A(i,k)*A(k,j)/A(k,k); Rechenzeit 1 für n=300 und k=1: mit for-scheifen: 3.46 sec. mit Vektorisierung: 0.11 sec. 1 Higham, D.; Higham N.: Matlab Guide. SIAM 2000. Matlab: eine kleine Einführung 18
Weitere Hinweise zu MATLAB Speicherplatzreservierung x(1:2)=1; for i = 3:n x(i) = 0.25*x(i-1)^2 - x(i-2); x = ones(n,1); for i = 3:n x(i) = 0.25*x(i-1)^2 - x(i-2); Rechenzeit 2 für n=10000: ohne Speicherplatzzuweisung im Voraus: 5.88 sec. mit Speicherplatzzuweisung im Voraus: 0.38 sec. 2 Higham, D.; Higham N.: Matlab Guide. SIAM 2000. Matlab: eine kleine Einführung 19