DMUG-Archiv 2002

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

Re: Spline interpolation

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


Antworten:
Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html