Hallo,
was k"onnte wohl die build-in Funktion InterpolatingPolynomial[]
machen ? Wenn Sie f"ur n Punkte ein Polynom n-1 Grades erzeugt (??)
Kaffee kochen ? Probieren wir es doch mal aus
ip = InterpolatingPolynomial[{{x0, f0}, {x1, f1}, {x2, f2}}, x];
mypoly[lst : {{_, _} ..}, t_] :=
Block[{n = Length[lst]},
Sum[
lst[[i, 2]]*
Product[If[k == i,
1, (x - lst[[k, 1]])/(lst[[k, 1]] - lst[[i, 1]])], {k, 1,
n}], {i,
1, n}]
]
und
ip - mypoly[{{x0, f0}, {x1, f1}, {x2, f2}}, x] // FullSimplify
ergibt 0. Weil InterpolatingPolynomial[] gar nichts anderes als eine
Lagrange Interpolation machen *kann* denn das Polynom ist eindeutig
bestimmt.
Nat"urlich ist die Formel oben, die der Deinen entspricht
nicht die g"unstigste um ein Lagrange-Interpolationspolynom
zu erhalten. Sondern man berechnet das mit einem Neville
Algorithmus der z. B. im Stoer und den Numerical Recipes
oder im Stegun als Aitken Iteration (25.2.23) drin steht.
Dann tritt das Problem gar nicht erst auf -- das sollte man
aber in der Numerik-Ausbildung gelernt haben.
.. und auch die Variante von Thomas Hahn hat eine Komplexit"at
2^n, w"ahrend ein Neville Algorithmus nur mit n^2 w"achst.
Und 2^n ist so happig, das schon f"ur 10 Punkte diese Version
10 mal l"anger dauert als ein Neville Algorithmus.
Wer also nicht InterpolatingPolynomial[] schreiben kann, sollte
es mit
myPolynomial[lst : {{_, _} ..}, t_] :=
Module[{x, y, n, Aitken},
n = Length[lst];
{x, y} = Transpose[lst];
Aitken[{i_, j_}] :=
Aitken[{i, j}] = (y[[j]]*(x[[i]] - t) - y[[i]]*(x[[j]] - t))/
(x[[j]] - x[[i]]);
Aitken[{other__, i_, j_}] :=
Aitken[{other, i, j}] = (Aitken[{other, j}]*(x[[i]] - t) -
Aitken[{other, i}]*(x[[j]] - t))/
(x[[j]] - x[[i]]);
If[EvenQ[n], -1, 1]*Aitken[Table[i, {i, 1, n}]]
]
probieren.
Gruss
Jens
Winfried Bilgic wrote:
>
> Hallo ihr MailingUser von Dmug,
>
> möcht mich erstmal kurz vorstellen, bin Student an der Universität Duisburg und befasse mich im Rahmen meiner
> Diplomarbeit mit FDTD (Finite Differenzen im Zeitbereich). Dabei konzentriere ich mich derzeit auf die linearen
> Interpolationen von Ableitungoperatoren, genauer um die Lagrange Interpolation. Jene möchte ich in Mathematica
> einpflegen, weiß allerdings nicht wie ich weitere Underscripts einfügen kann, wie sie die Lagrange Interpolation
> Formel von mir verlangt.
>
> Lagrange'sche Interpolationsformel:
> p(x)=Sum (von i=0 über n) fi * Product(von k ungleich i UND k=0 über n) (x-xk) / (xi-xk)
>
> Bezogen auf die obige Formel besteht mein Problem darin, wie ich die UND Verknüpfung in dem Product hinbekomme. Jede
> Art von Hilfe ist wünschenswert.
>
> Mit freundlichen Grüßen aus Duisburg
>
> Winfried Bilgic
>
> P.S.: Es ist meine erste Mailingsliste, so möge man mir Amateurverhalten mit einem grinsenden Schmunzeln entschuldigen
> ______________________________________________________________________________
> Ihr FreeMail-Postfach kann von jedem Telekom Festnetzanschluss erreicht
> werden? Mit der Voicebox - http://freemail.web.de/features/?mc=021163