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: