Matheseiten-Übersicht  •   zurück

Kubische Splines

→ gleich zum Rechner

   
Ihr Browser kann weder HTML5 (canvas) noch Java.
Die Punkte können mit der Maus verschoben werden
zyklisch    5 Punkte
Kubische Parabeln komplett plotten

 

Ein kubischer Spline ist eine glatte Kurve, die durch gegebene Punkte im Koordinatensystem geht und eine minimale Gesamtkrümmung aufweist. Jedes Teilstück ist dabei durch eine kubische Parabel aix³ + bix² + cix + di mit geeigneten Koeffizienten ai, bi, ci und di definiert.

"Glatte Kurve" bedeutet dabei im mathematischen Sinne, daß die Kurve zweimal stetig differenzierbar sein soll. Alle gegebenen Punkte stellen als Stützstellen der Kurve sozusagen auch Nahtstellen zwischen den Teilkurven dar, in denen jeweils beide Funktionswerte, beide erste und auch zweite Ableitungen der zusammentreffenden Teilkurven übereinstimmen. Diese Naht- oder Stützstellen werden auch Knoten genannt.

Es seien n+1 Punkte (x0|y0), (x1|y1) ... (xn|yn) gegeben, wobei x0 < x1 < ... < xn gelte.

Zur Gewinnung der Koeffizienten definiert man geeigneterweise die n Teilstücke des Splines mit Si(x) = ai(x-xi)³ + bi(x-xi)² + ci(x-xi) + di, wobei 0 ≤ i < n ist und Si(x) das Kurvenstück zwischen den Punkten (xi|yi) und (xi+1|yi+1) darstellt.

Da die Teilstücke in den gegebenen Punkten nahtlos ineinander übergehen, gilt Si-1(xi) = Si(xi) = yi für 1 < i ≤ n.

Aus Si(xi) = yi folgt sofort di = yi, denn in Si(xi) = ai(xi-xi)³ + bi(xi-xi)² + ci(xi-xi) + di = yi werden alle (xi-xi) Null.

Außerdem gilt wegen Si-1(xi) = Si(xi):
ai-1(xi-xi-1)³ + bi-1(xi-xi-1)² + ci-1(xi-xi-1) + di-1 = ai(xi-xi)³ + bi(xi-xi)² + ci(xi-xi) + di
also:
ai-1(xi-xi-1)³ + bi-1(xi-xi-1)² + ci-1(xi-xi-1) + di-1 = di      (I)

In allen gegebenen Punkten haben die anstoßenden Teilkurven gleiche Tangenten, es gilt also S'i-1(xi) = S'i(xi), wobei die Ableitung S'i(x) = 3ai(x-xi)² + 2bi(x-xi) + ci ist. Hieraus gewinnt man

                         S'i-1(xi) = S'i(xi)
3ai-1(xi-xi-1)² + 2bi-1(xi-xi-1) + ci-1 = 3ai(xi-xi)² + 2bi(xi-xi) + ci
3ai-1(xi-xi-1)² + 2bi-1(xi-xi-1) + ci-1 = ci                 (II)

Schließlich haben die anstoßenden Teilkurven in allen gegebenen Punkten auch gleiche Krümmungen, es gilt also S"i-1(xi) = S"i(xi), wobei die 2. Ableitung S"i(x) = 6ai(x-xi) + 2bi ist. Hieraus gewinnt man

           S"i-1(xi) = S"i(xi)
6ai-1(xi-xi-1) + 2bi-1 = 6ai(xi-xi) + 2bi
6ai-1(xi-xi-1) + 2bi-1 = 2bi

Aus dieser Gleichung folgt

       bi - bi-1
ai-1 = ——————————                  (III)
       3(xi-xi-1)

(III) in (II) eingesetzt ergibt

(bi-bi-1)(xi-xi-1) + 2bi-1(xi-xi-1) + ci-1 = ci
(bi+bi-1)(xi-xi-1) + ci-1 = ci                (IV)

(III) in (I) eingesetzt:

(bi-bi-1)(xi-xi-1)²/3 + bi-1(xi-xi-1)² + ci-1(xi-xi-1) + di-1 = di
(bi-bi-1)(xi-xi-1)/3 + bi-1(xi-xi-1) + ci-1 + di-1/(xi-xi-1) = di/(xi-xi-1) 
(bi-bi-1)(xi-xi-1)/3 + bi-1(xi-xi-1) + ci-1 = (di-di-1)/(xi-xi-1)               
ci-1 = (di-di-1)/(xi-xi-1) - (bi-bi-1)(xi-xi-1)/3 - bi-1(xi-xi-1)              (V)

ci = (di+1-di)/(xi+1-xi) - (bi+1-bi)(xi+1-xi)/3 - bi(xi+1-xi)                (V')

(V) und (V') in (IV) eingesetzt:

(bi+bi-1)(xi-xi-1) + (di-di-1)/(xi-xi-1) - (bi-bi-1)(xi-xi-1)/3 - bi-1(xi-xi-1) 
                              = (di+1-di)/(xi+1-xi) - (bi+1-bi)(xi+1-xi)/3 - bi(xi+1-xi)

3(bi+bi-1)(xi-xi-1) + 3(di-di-1)/(xi-xi-1) - (bi-bi-1)(xi-xi-1) - 3bi-1(xi-xi-1) 
                              = 3(di+1-di)/(xi+1-xi) - (bi+1-bi)(xi+1-xi) - 3bi(xi+1-xi)

(xi-xi-1)bi-1 + 2(xi+1-xi-1)bi + (xi+1-xi)bi+1 = 3((di+1-di)/(xi+1-xi) - (di-di-1)/(xi-xi-1))      (VI)

Wegen di=yi ist die rechte Seite von (VI) für i>0 und i<n bekannt. Weil auch alle entsprechenden x bekannt sind, lassen sich die bi für 0<i<n mit einem linearen Gleichungssystem aus allen Gleichungen (VI) gewinnen. b0 und bn sind die halben Krümmungen im ersten und im letzten Punkt, die frei vorgegeben werden können und hier mit 0 angenommen werden. (Der Koeffizient bn taucht zwar in keinem Spline auf, wird jedoch zur Berechnung von an-1 und cn-1 benötigt.)

Die Koeffizientenmatrix der linken Seite des Gleichungssystems stellt sich für b0=bn=0 wie folgt dar:

     b1b2 b3b4...bn-3bn-2bn-1
i=1 2(x2-x0)x2-x1 00...000
i=2 x2-x12(x3-x1)x3-x2 0...000
i=30 x3-x22(x4-x2)x4-x3 ...000
.................. .........
i=n-200000 xn-2-xn-32(xn-1-xn-3)xn-1-xn-2
i=n-1000000 xn-1-xn-22(xn-xn-2)

Die rechte Seite ergibt sich aus (VI) für die angegebenen Indizes.

Die Lösungen rückwärts in (V) und (III) eingesetzt, ergeben sich die Koeffizienten ci und ai.

 

Rechner für kubische Splines

  

→Zufallswerte

Wertetabelle

  alle kubischen Funktionen komplett plotten        Skalierung: →1:1 | →auto
Ihr Browser unterstützt weder HTML5-canvas noch Java. Schade.
     2. Ableitungen in Anfangs- und Endpunkt festlegen:     x =   
Erster Punkt: S"(x0)= Letzter Punkt: S"(xn)=
Koeffizienten: S(x) =

Eingabehinweise
Die Werte können durch Leerzeichen, Semikolon oder Zeilenwechsel voneinander getrennt eingegeben werden, auch Tabulatoren werden richtig interpretiert, so daß Tabellen aus einer Tabellenverarbeitung importiert werden können.
Je nach Wahl des Koeffizientenmodus erfolgt die Berechnung im Fließkomma- oder im Brüchemodus. Letzterer ist genau, solange Zähler und Nenner während der Berechnung nicht zu groß werden (Grenze bei etwa 1015), allerdings auch wesentlich langsamer. Die Wertepaare werden dem Modus entsprechend angepaßt und stets auch nach x-Werten geordnet. Die Umwandlung Komma- nach Bruchzahlen erfolgt mit einem Kettenbruchalgorithmus.
Werden beim Interpolieren Brüche eingegeben, erfolgt auch die Ausgabe in Brüchen — diese können allerdings bei großen Nennern nur angenähert sein. Wird bei ganzzahligen x-Werten eine Bruch-Ausgabe gewünscht, so können die x-Werte leicht mit dem Nenner 1 eingegeben werden.
Das Interpolieren ist nur innerhalb des Definitionsbereichs möglich.
Für den ersten und den letzten Punkt können Krümmungswerte (Werte der zweiten Ableitung im ersten und im letzten Punkt) vorgegeben werden.


Nullstellen:
Extremstellen:
Wendestellen:

FlächenintegralVolumenintegral Kurvenintegral (approximiert)
       S(x) dx =
     π S(x)² dx =
       
        √(1+S'(x)²) dx
        
automatisch berechnen
Genauigkeit:10

© Arndt Brünner, 1. 10. 2003
Version: 2. 4. 2006 — einen Index in der Zeile vor (I) korrigiert am 29. 10. 2006
Javascript-Graphik: 23. 1. 2018
 
Gleicher Rechner, aber große Graphik
Alte Java-Version
Applet Splineinterpolation für parametrisierte Kurven
eMail: