Hallo,
> So weit war ich auch gekommen. Nun das ganze mit nicht-äquidistanten
> X-Werten... Zudem ergeben sich mit derartigen Differenzenformeln für die
> Ableitungen mit "Interpolation" keine Cubic Splines. Diese sind definiert
> durch stetige Ableitungen bis zur 2. Ordnung an den Stützstellen. Die
> Koeffizienten der Cubics muss man aus einem tridiagonalen Gleichungssystem
> bestimmen.
Nun man kann Interpolation[] auch die 2. Ableitungen mit angeben,
dann ist die Formel stetig bis zur zweiten Ableitung. Das sind dann
zwar kubische Splines, aber kubische Hermite-Splines und f"ur die
muss man auch kein tridiagonales Gleichungssystem l"osen.
>
> Darauf bezog sich meine Frage: vielleicht hat jemand die dann doch recht
> unübersichtlichen Formeln für die 1. und 2. Ableitungen bereits
> programmiert?
Die Frage bezog sich auf das Umwandeln von Splines in
InterpolatingFunction[]
wir erinnern uns:
>> Ich möchte mit Cubic Splines in einer einfachen Tabelle interpolieren. Die
>> Funktion "SplineFit" in NumericalMath`SplineFit` liefert ein SplineFunction
>> Objekt, welches jedoch für ein x Argument immer das Zahlenpaar (x,y)
>> liefert. Weiss jemand, wie ich das SplineFunction Objekt in ein
>> InterpolationFunction Objekt umwandeln kann?
Von Ableitungen war da nur am Rande die Rede.
Ausserdem gibt es bei der Regel
data = Table[{x, Random[]}, {x, 0, 1, 0.1}];
ip = SplineFit[data, Cubic];
dip = ip /. {a_?NumericQ, b_?NumericQ, c_?NumericQ, d_?NumericQ} :>
{b, 2*c, 3*d, 0}
nicht all zuviel zu programmieren, oder ? und mit
Plot[Last[dip[t]], {t, 0, 10}]
kann man das auch plotten.
Die Ableitungen eines kubischen Splines sind auch nicht
un"ubersichtlich sofern man ein Polynom ableiten kann, denn
eine kubischer Spline bestimmt ein Polynom 3. Grades
a+b*t+c*t^2+d*t^3
f"ur die Bereiche zwischen den St"utzstellen,
die Ableitung ist dann
b+2*c*t + 3 d*t^2
und genau das steht oben in der Regel
dip = ip /. {a_?NumericQ, b_?NumericQ, c_?NumericQ, d_?NumericQ} :>
{b, 2*c, 3*d, 0}
Schlimmer ist wohl, das SplineFit[] immer den Index als Parameter
benutzt, um eine parametrische Kurve zu erstellen.
Daher ist SplineFit[] auch f"ur den Wunsch eine Funktion von
einer Variablen und variablen Abstand der St"utzstellen
zu interpolieren unbrauchbar, es rechnet die
Tridagonalmatrix n"amlich *immer* mit
der konstanten Schrittweite 1 aus wie man aus der
internen Funktion von SplineFit`
trisolve[lst_, ln_] :=
Module[{a, b, c},
a = c = Table[1, {ln - 1}];
b = Join[{2}, Table[4, {ln - 2}], {2}];
TridiagonalSolve[a, b, c, lst]
]
leicht sieht.
Gruss
Jens