Matheseiten-Übersicht • zurück
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
"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
Zur Gewinnung der Koeffizienten definiert man geeigneterweise die n
Teilstücke des Splines mit
Da die Teilstücke in den gegebenen Punkten nahtlos ineinander übergehen, gilt
Aus Si(xi) = yi folgt sofort di =
yi, denn in
Außerdem gilt wegen Si-1(xi) =
Si(xi):
also:
In allen gegebenen Punkten haben die anstoßenden Teilkurven gleiche
Tangenten, es gilt also
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) 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:
b1 | b2 | b3 | b4 | ... | bn-3 | bn-2 | bn-1 | ||
---|---|---|---|---|---|---|---|---|---|
i=1 | 2(x2-x0) | x2-x1 | 0 | 0 | ... | 0 | 0 | 0 | |
i=2 | x2-x1 | 2(x3-x1) | x3-x2 | 0 | ... | 0 | 0 | 0 | |
i=3 | 0 | x3-x2 | 2(x4-x2) | x4-x3 | ... | 0 | 0 | 0 | |
... | ... | ... | ... | ... | ... | ... | ... | ... | |
i=n-2 | 0 | 0 | 0 | 0 | 0 | xn-2-xn-3 | 2(xn-1-xn-3) | xn-1-xn-2 | |
i=n-1 | 0 | 0 | 0 | 0 | 0 | 0 | xn-1-xn-2 | 2(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.
© 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: