Technische Universität München WiSe 07 / 08 Institut für Informatik Univ-Prof Dr Hans-Joachim Bungartz Michael Obersteiner Philipp Samfass Numerisches Programmieren, Übungen Musterlösung 3 Übungsblatt: Interpolation ) Interpolation mit Unterschiedliche Basis Funktionen Die Ausgabewerte einer unbekannten Funktion f sind an den Punkten x 0 = 0, x =, x = gegeben: f(0) = 3, f() = 0, f( = Im folgenden untersuchen wir Schätzungen für f ( Geben Sie für das lineare Gleichungssystem für die Interpolation, die Interpolationsfunktion G, die Schätzung von f ( = G (, a) die Polynom-Basisfunktionen g 0 (x) =, g (x) = x, g (x) = x, (Bestimmen Sie, dass die Lösung ( c 0 c c ) T = ( 3 5 ) T ist) b) die folgende trigonometrische Basisfunktionen ( πx ) g 0 (x) =, g (x) = cos, g (x) = cos(πx), (Bestimmen Sie, dass ( ) T die Lösung ist) c) die Tchebycheff-Polynom-Basisfunktionen g 0 (x) =, g (x) = x, g (x) = x, (Bestimmen Sie, dass ( 4 5 ) T die Lösung ist) d) die Lagrange-Basispolynomen l 0, l, l für x 0, x, x (berechnen Sie den zuerst): l j (x) = i j x x i x j x i Vergleichen Sie Ihre Antworten zu a), c) und d)
Lösung: Für Stützpunkte x 0,, x n und Basisfunktionen g 0,, g n, sieht das lineare Gleichungssystem für die Interpolation so aus: a) Polynom-Basisfunktionen: g 0 (x 0 ) g n (x 0 ) c 0 f(x 0 ) = () g 0 (x n ) g n (x n ) f(x n ) 3 Lösungsvektor c = 5 G(x) = x 5x + 3 G ( = b) trigonometrische Basisfunktionen: 0 Lösungsvektor c = G(x) = + cos ( ) πx + cos(πx), G ( ) = + c) Tchebycheff-Polynom-Basisfunktionen: c n 0 0 c 0 3 c = 0 ( 4 c c 0 3 c = 0 (3) c 0 7 4 Lösungsvektor c = 5 G(x) = (x ) 5x + 4 = x 5x + 3 G ( = d) Lagrange-Basispolynome c 0 c c 3 = 0 (4)
(x )(x (x )(x l 0 = = (0 (0 ) (x 0)(x x(x l = = ( ( 0) (x 0)(x ) x(x ) l = = ( 0)( ) 0 0 c 0 3 0 0 c = 0 (5) 0 0 c 3 Lösungsvektor c = 0 G(x) = 3 (x )(x + x(x ) = x 5x + 3 G ( = Vergleich von a), c) und d): Interpolationspolynom ist eindeutig! Polynominterpolation nach Newton Die Newtonschen dividierten Differenzen bieten eine effiziente Möglichkeit, ein Interpolationspolynom p(x) analytisch zu beschreiben (dh seine Koeffizienten zu berechnen) Mit zu interpolierenden Punkten P i = (x i, f(x i )) gelten die folgenden Formeln aus der Vorlesung: [x i ]f = f(x i ) (6) [x i,, x i+k ] f = [x i+,, x i+k ]f [x i,, x i+k ]f x i+k x i (7) Man ordnet die dividierten Differenzen in ein Dreiecksschema: x i i \k 0 x 0 0 [x 0 ]f [x 0, x ]f [x 0, x, x ]f x [x ]f [x, x ]f x [x ]f Damit kann man in der ersten Zeile direkt die Koeffizienten [x 0,, x i+k ]f des Interpolationspolynoms p(x) in der folgenden Gestalt ablesen: n p(x) = [x 0 ]f + [x 0, x ]f (x x 0 ) + + [x 0,, x n ]f (x x i ) (8) i=0
In dieser Aufgabe soll zu den Punkten aus Aufgabe ) ein Interpolationspolynom bestimmt werden P 0 = (0, 3), P = (, 0) und P = (, ) a) Berechnen Sie die Newtonschen dividierten Differenzen für das Interpolationspolynom p(x) mit den Gleichungen (6) - (7) Stellen Sie dazu auch das Dreiecksschema auf und berechnen Sie p(x) mit Hilfe der Formel (8)! b) Nun soll ein zusätzlicher Punkt P 3 = (x 3, f(x 3 )) = (5, 0) zur Interpolation hinzugenommen werden Berechnen Sie die noch fehlenden dividierten Differenzen, erweitern Sie das Dreiecksschema aus Teilfaufgabe b) und geben Sie die Koeffizienten des neuen Gesamtpolynoms q(x) nach Formel (8) an! Lösung: a) Für die Newtonschen dividierten Differenzen ergibt sich: [x 0 ] f = f(x 0 ) = 3 [x ] f = f(x ) = 0 [x ] f = f(x ) = [x 0, x ] f = [x ]f [x 0 ]f x x 0 = 0 3 0 = 3 [x, x ] f = [x ]f [x ]f x x = 0 = [x 0, x, x ] f = [x, x ]f [x 0, x ]f x x 0 = ( 3) 0 = Im Dreiecksschema sieht das folgendermaßen aus: x i i \k 0 0 0 f(x 0 ) = 3 3 f(x ) = 0 f(x ) = Nützen wir nun die Werte [x 0,, x i ]f aus der obersten Zeile des Dreiecks als Koeffizienten des Polynoms in der Darstellung (4), so erhalten wir das Interpolationspolynom p(x) zu n p(x) = [x 0 ]f + [x 0, x ]f (x x 0 ) + + [x 0,, x n ]f (x x i ) = 3 + 3 (x 0) + (x 0)(x ) = x 5x + 3 b) Ein zusätzlicher Punkt P 3 = (x 3, f(x 3 )) = (5, 0) lässt sich (unabhängig von seiner x Position) einfach unten an das Newton-Schema anhängen Man muss nur die noch i=0
fehlenden dividierten Differenzen berechnen: [x 3 ] f = f(x 3 ) = 0 [x, x 3 ] f = [x 3]f [x ]f x 3 x = 0 5 = [x, x, x 3 ] f = [x, x 3 ]f [x, x ]f x 3 x = 5 = [x 0, x, x, x 3 ] f = [x, x, x 3 ]f [x 0, x, x ]f x 3 x 0 = 5 0 = 0 Im Dreiecksschema sieht das folgendermaßen aus: x i i \k 0 3 0 0 f(x 0 ) = 3 3 0 f(x ) = 0 f(x ) = 5 3 f(x 3 ) = 0 Der zusätzliche Term für q(x) besteht dann aus [x 0, x, x, x 3 ]f (x x 0 )(x x )(x x ) = 0 Dass dieser Anteil verschwindet, ist nötig, da der Zusatzpunkt (5,0) auch schon auf dem ersten Interpolationspolynom p(x) liegt! Deswegen muss aufgrund der Eindeutigkeit der Polynominterpolation p(x) = q(x) gelten 3) Polynominterpolation mit Aitken-Neville Das Aitken-Neville Verfahren gibt uns eine Möglichkeit das Interpolationspolynom zu den Punkten P i = (x i, f(x i )), i = 0,, n direkt an einer Stelle x auszuwerten, ohne die tatsächliche Koeffizienten des Polynomes zu berechnen: for i=0:n; p[i,0]:=f_x[i]; end for k=:n for i=0:n-k p[i,k] := p[i,k-] + (x-x[i])/(x[i+k]-x[i])*(p[i+,k-] - p[i,k-]); end end Die sukzessive Berechnung der p[i, k] ist hier im Vergleich zur Vorlesungsfolie äquivalent umgeformt und kann wieder mit einem Dreiecksschema veranschaulicht werden: x i i \k 0 x 0 0 p[0, 0] = y 0 p[0, ] p[0, ] x p[, 0] = y p[, ] x p[, 0] = y
Der Wert des Polynoms p(x) an der Stelle x steht nach Abschluss des Algorithmus in p[0, n] Berechnen Sie den Wert des quadratischen Interpolationspolynoms p(x) an der Stelle x = 05 für die drei Punkte P 0, P, P aus Aufgabe mit dem Aitken-Neville-Algorithmus! Stellen Sie dabei auch das Dreiecksschema auf Wann ist die Berechnung mit Aitken-Neville vorteilhaft und wann nicht? Lösung: Die zu interpolierenden Punkte (hier für alle vier Punkte) sind: x 0 = 0, f(x 0 ) = 3 x =, f(x ) = 0 x =, f(x ) = x 3 = 5, f(x 3 ) = 0 Damit ergibt sich für die Auswertung des Algorithmus (p[i, 0] = f(x i ) ist ja klar): k = : k = : k = 3: p[0, ] = p[0, 0] + x x[0] x[] x[0] p[, ] = p[, 0] + x x[] x[] x[] p[, ] = p[, 0] + x x[] x[3] x[] p[0, ] = p[0, ] + x x[0] x[] x[0] p[, ] = p[, ] + x x[] x[3] x[] p[0, 3] = p[0, ] + x x[0] x[3] x[0] 05 0 (p[, 0] p[0, 0]) = 3 + (0 3) = 5 0 05 (p[, 0] p[, 0]) = 0 + ( 0) = 05 05 (p[3, 0] p[, 0]) = + (0 ) = 5 05 0 (p[, ] p[0, ]) = 5 + ( 05 5) = 0 05 (p[, ] p[, ]) = 05 + ( ( 05)) = 5 05 0 (p[, ] p[0, ]) = + ( ) = 0
Für das Dreicksschema erhält man somit: x i i \k 0 3 0 0 f(x 0 ) = 3 5 f(x ) = 0 05 f(x ) = 5 3 f(x 3 ) = 0 Der Wert von p(x = 05) steht in dem obersten rechten Eintrag (p[0, 3]) des Schemas und passt mit dem echten Polynom p(x) = x 3 5x + 3 an der Stelle x = 05 zusammen Wenn man den Aitken-Neville-Algorithmus schnell im Kopf rechnen möchte/muss (zb bei der Klausur), dann kann man mit ein wenig Übung direkt das Dreiecksschema nützen; dafür stehen dort auch die x i mit dabei Die Auswertung eines Polynoms mit dem Aitken-Neville-Algorithmus ist dann gut, wenn man nicht sehr viele Werte des Polynoms benötigt Sonst ist der Aufwand von O(n ) durch die beiden verschachtelten Schleifen über i und k höher, als wenn man einmal die Polynomkoeffizienten direkt berechnet (zb mit Lagrange oder Newton) und dann die Auswertung über das Horner-Schema (O(n)) macht 4) Runge-Effekt Im letzten Übungsblatt haben wir uns mit Polynominterpolation beschäftigt Hierfür wurde zb das Newtonverfahren verwendet, um ein eindeutiges Polynom n- Grades, oder geringer, zu konstruieren, welches durch alle n gegebenen Stützpunkte verläuft a) Überlegen Sie sich wie das Interpolationspolynom von = +5x (siehe auch Abb ) mit wachsender Zahl von Stüzstellen aussieht b) Was könnte man machen um das Interpolationsergebnis zu verbessern? c) Zeichnen Sie das Ergebnis der verbesserten Methoden in die Abbildung ein! Lösung: a) Siehe Abb rote Kurve b) Interpolationspunkte besser wählen: zb Chebyshev Punkte Stückweise Interpolation: zb stückweise linear (oder auch höhere Ordnungen) c) Siehe Abb grüne und braune Kurven
0 08 06 y 04 0 00 0 05 00 05 0 x Abbildung : Runge Funktion 0 5 interpolated uniform points interpolated Chebyshev interpolated piecewise linear 0 y 05 00 05 0 05 00 05 0 x Abbildung : Runge Funktion with different interpolation strategies 5) Zusatzaufgabe: Fehlerabschätzung Im Abbildung 3 links ist die tatsächliche Funktion f gezeichnet a) Zeichnen Sie das berechnete Interpolationspolynom von ) dazu Wie groß ist der Fehler an der Stelle x = 05? b) Die Formel zur Abschätzung des Interpolationsfehlers p(x) für eine Funktion f C n+ lautet D n+ f(ξ) n p(x) = (x x k ) (n + )! mit ξ [min{x, x 0,, x n }, max{x, x 0,, x n }] Werten Sie den Fehler an der Stelle k=0
x = 05 aus! Verwenden Sie dazu max ξ [0,] D3 f(ξ) = 3543, max ξ [0,] D4 f(ξ) = 0753 4 3 50 00 D 3 D 4 50 0-50 0-00 - 0 05 5 x -50 0 05 5 x Abbildung 3: Die tatsächliche und ihre dritte und vierte Ableitungen Lösung: a) f(05) p(05) = = b) Mit den drei Punkten: p(x) = f(05) p(05) = D 3 f(ξ) 3! = 6 D3 f(ξ) 6 max x [0,] D3 = 3543 6 oder mit den vier Punkten: p(x) = f(05) p(05) = D 4 f(ξ) 4! = 64 D4 f(ξ) (05 0)(05 )(05 (05 0)(05 )(05 5)(05 64 max D 4 = 0753 68 x [0,] 64 Die tatsächliche Funktion war = + cos ( ( πx ) + cos(πx) + ) sin(πx)
4 3 p(x) abs Fehler 0-0 05 5 x Abbildung 4: Die tatsächliche und der absolute Fehler