Lagrange Interpolation
Die Lagrange Interpolation kann dazu verwendet werden, ein Polynom möglichst kleinen Grades durch eine Menge von Funktionswerten zu gegeben Stützstellen zu legen. Liegen solche Paare vor, so reicht hierzu ein Polynom vom Grad aus. Ziel der Interpolationsaufgabe ist es hierbei, die Koeffizienten für das gesuchte Polynom zu finden. Es muss allerdings gefordert werden, dass die paarweise verschieden sind, andernfalls könnte eine inkonsistente Forderung an einen -Wert entstehen. Eine Möglichkeit diese Koeffizienten zu berechnen besteht darin, explizit das folgende Gleichungssystem zu lösen:
Die linke Seite wertet das fragliche Polynom an den Stützstellen aus. Die rechte Seite setzt diese Auswertung mit den geforderten -Werten gleich. Erstaunlicherweise (und erfreulicherweise) ist dieses lineare Gleichungssystem tatsächlich immer dann lösbar, wenn die paarweise verschieden sind. Der Grund dafür ist die so genannte Vandermonde Matrix» und deren Determinante (Genaueres hierzu kommt später in der Vorlesung). Zugegebenermaßen ist es nicht die klügste Variante, die Polynomkoeffizienten auf diese Weise zu bestimmen. Das obige Gleichungssystem ist sehr schlecht konditioniert (d.h. im Allgemeinen numerisch instabil) bedingt durch den Umstand, dass in der Matrix zugleich sehr große und sehr kleine Zahlen auftreten können. Eine bessere Methode, das gesuchte Polynom zu bestimmen, besteht aus den folgenden Schritten: Zunächst bestimmt man Polynome Diese haben folgende drei wichtige Eigenschaften: Alle haben Grad , Für gilt , Es gilt für alle . Aus diesen bestimmt man normierte Polynome gemäß . Diese Polynome sind an allen Stützstellen außer gleich . Bei ergibt sich . Das gesuchte Polynom erhält man dann durch eine Linearkombination der : Das folgende Applet verdeutlicht das Ergebnis dieser Berechnung für vier frei positionierbare Punkte. Die grünen Punkte sind frei beweglich.
Mit dem Schiebeschalter können die vier gewichteten Basisfunktionen sichtbar gemacht werden. Der algorithmische Kern des Applets besteht aus den foglenden 8 Zeilen in CindyScript
pts=allpoints();
xs=apply(pts,#.x);
ys=apply(pts,#.y);
n=length(pts);
q(x,i):=product(1..n--[i],j,x-xs_j);
p(x,i):=f(x,i)/f(xs_i,i)*ys_i;
p(x):=sum(1..n,i,p(x,i));
plot(p(x));