Kapitel 2
Wir wollen Polynome aus einer Folge von Punkten interpolieren. Dazu suchen wir eine Basis und Koeffizienten und schreiben .
Um ein Polynom schnell auszuwerten, verwenden wir das Horner Schema. Sei :
for from to :
Es ist numerisch stabil und läuft in .
Naive Methode
Ein Polynom von Grad ist durch Punkte (Stützstellen) eindeutig bestimmt. Also können wir für die Punkte ein lineares Gleichungssystem aufstellen und lösen. Diese Methode gibt aber die Vandermode Matrix (mit Einsen in der linken Spalte), welche schlecht konditioniert ist (die Lösung wird stark von numerischen Fehlern beeinflusst).
Da das Polynom durch die Punkte eindeutig ist, geben die anderen Methoden dasselbe Polynom (bei denselben Punkten).
Laufzeit: für das lösen des Systems und für die Auswertung.
Newton Basis und dividierte Differenzen
Wir wollen nun leicht neue Punkte zum Polynom hinzufügen. Dazu fügen wir zu einem alten Interpolationspolynom einen neuen Term hinzu, welcher 0 ist bei den alten Punkten und bei dem neuen Punkt zum richtigen Wert ausgleicht.
Die Newton-Basis ist . Also z.B.
Wir erhalten so n Basispolynome und die Koeffizienten könnten wir durch ein lineares Gleichungssystem bestimmen.
Besser geht es mit den dividierten Differenzen. Wir schreiben hier für die Interpolationspunkte
Aus den y mit “Länge” 1 können wir also die y mit “Länge” 2 berechnen und so weiter. Wir machen also DP. Die Koeffizienten sind und ergeben das Polynom
Wenn wir nur Speicher verwenden wollen, können wir nur ein Array nehmen und im Durchgang i nur die Elemente ab i ausrechnen und die schon berechneten stehen lassen (siehe CE 2.1.d):
NewtonCoeffs(x, y):
n = len(x)
for j in range(1,n):
y[j:n] = (y[j:n] - y[j-1:n-1]) / (x[j:n] - x[:n-j])
return yWir können das Polynom wieder mit einer Idee wie dem Horner-Schema auswerten.
Laufzeit: für dividierte Differenzen und für die Auswertung und für das Hinzufügen neuer Punkte.
Der Fehler ist für n Stützstellen in [a,b] maximal
Wobei die maximale Komponente von x ist. (In dem Fall der maximale Funktionswert.) Das folgt aus einer genaueren Schätzung in Theorem 2.2.12 im Skript.
Lagrange und baryzentrische Interpolation
Wir definieren die Lagrange-Polynome
Diese Polynome haben praktische Eigenschaften:
- für
Wir können dann interpolieren mit
Um zur baryzentrischen Formel zu kommen, schreiben wir
und dann
Laufzeit: für das Berechnen der und dann für eine Auswertung. Ein paar neue Punkte lassen sich in hinzufügen.
Für den Fehler definieren wir die Lebesgue-Konstante . Mit ihr schätzen wir die Auswirkung von Messfehlern ab. Bei der Runge-Funktion treten starke Fehler and den Rändern des Intervalls auf bei äquidistanten Stützstellen. Wir sollten diese also niemals für Polynome hohen Grades verwenden. Die Wahl der Stützstellen beeinflusst den Fehler.
Chebyshev Interpolation
Wir wollen nun bessere Stützstellen als äquidistante Punkte finden. Wir definieren die Chebyshev-Polynome und . Dann sind die n+1 Chebyshev-Knoten auf [a,b] für
Die Chebyshev-Abszissen sind
Wenn wir bei den Abszissen die Endpunkte auslassen wollen, gehen wir nur über
Die Wahl der Chebyshev-Knoten minimiert den Fehler. Die Chebyshev-Abszissen beinhalten die Chebyshev-Knoten (sehr vereinfacht) und werden deshalb in der Praxis verwendet.
Das Chebyshev-Interpolationspolynom ist dann
Die können wir mit der Formel im Skript berechnen. Wenn wir die Koeffizienten haben, können wir sehr stabil mit dem Clenshaw-Algorithmus berechnen. Wir setzen und die Rekursion
und erhalten .