Kubische Splines LGS Matrix

Einen optimierten Algorithmus zur Splineberechnung kann man z.B. bei [url=http://www.arndt-bruenner.de/mathe/scripts/kubspline.htm#rechner]Arndt Brünner[/url][math]\nearrow[/math] oder in meinem Artikel [url=https://www.geogebra.org/m/bbdfgfcp]Splines Tridiagonal Matrix[/url][math]\searrow[/math] nachlesen und meine [url=https://www.geogebra.org/m/QW6bURhd]Umsetzung für ggb Javascript[/url][math]\searrow[/math] verwenden.[br][br]In diesem Beispiel geht es um die Darstellung der grundsätzlichen Überlegungen einen kubischen Spline über abschnittsweise definierte kubische Polynome zu beschreiben. Im CAS erhalte ich darüberhinaus exakte Ergebnisse![br][br]4 Punkte A[sub]0[/sub]...A[sub]3[/sub] werden durch 3 kubische Parabeln verbunden[br][br][math]P_i:a_{i3} \; x^{3} + a_{i2} \; x^{2} + a_{i1} \; x + a_{i0} = y[/math][br][br]Pro Parabel sind 4 Koeffizienten a[sub]ij[/sub] zu bestimmen - insgesamt sind 3*4=12 Gleichungen zu finden und das Gleichungssystem zu lösen:[br][br] [math]A_0\in P_1 \;\wedge\; A_1\in P_1 [/math] 2 Gleichungen (5.2), (5.3) [color=#0B5394][size=85](Zeile.Gleichg)[/size][/color] [br] [math]A_1\in P_2 \;\wedge\; A_2\in P_2 [/math] 2 Gleichungen (6.1), (6.2)[br] [math]A_2\in P_3 \;\wedge\; A_3\in P_3 [/math] 2 Gleichungen (7.1), (7.2)[br][br]Für "glatte" Übergänge an den Stützstellen müssen Steigung und Krümmung der Parabeln gleich sein[br][br][math]P_i‘:3 \; a_{i3} \; x^{2} + 2 \; a_{i2} \; x + a_{i1} \; = y[/math][br] [math]A_1\in P_1'=P_2' \;\wedge\; A_2\in P_2'=P_3'[/math] 2 Gleichungen (5.4), (5.5)[br][br][math]P_i‘‘:6 \; a_{i3} \; x + 2 \; a_{i2} = y[/math][br] [math]A_1\in P_1''=P_2'' \;\wedge\; A_2\in P_2''=P_3''[/math] 2 Gleichungen (6.3), (6.4)[br][br]Randbedingungen (für natürliche Splines) [ ][br][math]A_0\in P_1''=0 \;\wedge\; A_3\in P_3''=0[/math] 2 Gleichungen (5.1), (7.3)[br]Randbedingungen (für periodische Splines) [√][br][math]A_0\in P_1'=A_n\in P_n' \;\wedge\; A_0\in P_1''=A_n\in P_n ''[/math][br]Randbedingung (vollständige Splines) [br][ ] Steigung links A[sub]o[/sub] ↤m[sub]0[/sub]↦, rechts A[sub]n[/sub] ↤m[sub]n[/sub]↦ [br][br](8) LGS gesamtes Gleichungssystem[br](9) Lösung LGS[br](10)(11)(12) Koeffizienten in Parabelgleichung eingesetzt[br](13) Koeffizientenvektor a[br](14) Matrix für LGS in Matrixform A a = b
Das LGS nach Funktion geordnet
In dieser Form lässt sich der Algorithmus wohl einfacher verallgemeinern.[br]Die Gleichungen erstelle ich durch User-Def Funktionen: z.B. 1. Polynom zwischen A_0...A_1:[br][br][table][tr][td][math]p(1,x)=a_{13} \; x^{3} + a_{12} \; x^{2} + a_{11} \; x + a_{10} = y[/math][/td][td][size=85][size=85]p(k,x_i)[/size] Splinepolynom k an der Stützstelle x_i[/size][/td][/tr][tr][td][math]p'=dp(1,x)=3 \; a_{13} \; x^{2} + 2 \; a_{12} \; x + a_{11} [/math][/td][td][size=85][size=85]dp(k,x_i)[/size] [size=85]1. Ableitung Splinepolynom k an der Stützstelle x_i[/size][/size][/td][/tr][tr][td][math]p''=ddp(1,x)=6 \; a_{13} \; x + 2 \; a_{12} [/math][/td][td][size=85]ddp(k,x_i) 2. Ableitung Splinepolynom k an der Stützstelle x_i[/size][/td][/tr][/table][br]Anpassung an unterschiedliche viele Stützpunkte A_0...A_9[br][table][tr][td]Lege eine Liste der Stützpunkte an [/td][td][color=#0B5394]L:={A_0,A_1,A_2,A_3,A_4,A_5};[/color][/td][/tr][tr][td]n Splinepolynome[/td][td][color=#0B5394]n:=Length(L)-1[/color][/td][/tr][tr][td]Wandle Punkte A_i in Liste S[br][/td][td][color=#0B5394]S:=Sequence(Flatten(Vector(Element(L, k))),k,1,n+1);[/color][/td][/tr][tr][td]Abgreifen der Koordinaten der Punkte [br]XY(i,1) = x(A_i) und XY(i,2) = y(A_i) i=0..n[/td][td][color=#1155Cc]XY(ii,jj):=Element(S, ii+1,jj);[/color][br][/td][/tr][/table][br]Beispiel LGS für 5 Stützstellen A_0...A_4[br][table][tr][td]11[br][/td][td][size=85]{ddp(1,x(A_0))=0,[/size] [br][/td][td][size=85]Randbedingung A_0[br]2. Ableitung=0[/size][/td][td][size=85][color=#0B5394]A1:={ddp(1,XY(0,1))=0}[/color][/size][/td][td][/td][/tr][tr][td]12[br]13[br][/td][td][size=85]p(1,x(A_0))=y(A_0),[br]p(1,x(A_1))=y(A_1),[br][/size][/td][td][size=85]Spline-Polynome gehen durch die [br]Stützstellen A_0...A_n[/size][/td][td][color=#0B5394][size=85]A2:=Sequence(p(kk,XY(kk-1,1))=XY(kk-1,2),kk,1,n )[br]A3:=Sequence(p(kk,XY(kk,1))=XY(kk,2),kk,1,n )[/size][/color][/td][td][/td][/tr][tr][td]21[br]22[/td][td][size=85]p(2,x(A_1))=y(A_1),[br]p(2,x(A_2))=y(A_2)[/size][/td][td][size=85]von Stützpunkt[/size][br][size=85]zu Stützpunkt[/size][/td][td][/td][td][/td][/tr][tr][td]31[br]32[/td][td][size=85]p(3,x(A_2))=y(A_2),[br]p(3,x(A_3))=y(A_3),[/size][/td][td][/td][td][/td][td][/td][/tr][tr][td]41[br]42[/td][td][size=85]p(4,x(A_3))=y(A_3),[br]p(4,x(A_4))=y(A_4),[/size][/td][td][/td][td][/td][td][/td][/tr][tr][td]14[br]23[br]33[/td][td][size=85]dp(1,x(A_1))-dp(2,x(A_1))=0,[br]dp(2,x(A_2))-dp(3,x(A_2))=0,[br]dp(3,x(A_3))-dp(4,x(A_3))=0,[/size][/td][td][size=85]An den Stützstellen A_1...A_n-1[br]gleiche Steigung[br]1. Ableitung gleich[/size][/td][td][color=#1155Cc][size=85]A4:=Sequence(dp(kk,XY(kk,1)) ,kk,1,n-1)-Sequence(dp(kk+1,XY(kk,1)),kk,1,n-1)[/size][/color][br][br][/td][td][/td][/tr][tr][td]15[br]24[br]34[/td][td][size=85]ddp(1,x(A_1))-ddp(2,x(A_1))=0,[br]ddp(2,x(A_2))-ddp(3,x(A_2))=0,[br]ddp(3,x(A_3))-ddp(4,x(A_3))=0,[/size][/td][td][size=85]An den Stützstellen A_1...A_n-1[br]gleich Krümmung[br]2. Ableitung gleich[/size][/td][td][color=#0B5394][size=85]A5:=Sequence(ddp(kk,XY(kk,1)) ,kk,1,n-1)-Sequence(ddp(kk+1,XY(kk,1)),kk,1,n-1)[/size][/color][/td][td][/td][/tr][tr][td]43[/td][td][size=85]ddp(4,x(A_4))=0}[/size][/td][td][size=85]Randbedingung A_n[br]2. Ableitung = 0[/size][/td][td][color=#0B5394][size=85]A6:={ddp(n,XY(n,1))=0}[/size][/color][/td][td][/td][/tr][tr][td][br][/td][td]Gleichungssystem lösen[br]Splinepolynome erstellen[br][/td][td][br][/td][td][color=#1155Cc]SPL:=Solve(Join(A1,A2,A3,A4,A5,A6),Take(Pa,1,4n))[/color][br][color=#1155Cc]f_i(x):=Substitute(p(i, x),SPL)[/color][br][/td][/tr][/table]In Algebra View (Splineabschnitte zusammensetzen)[br]If(x < x(A_1), f1(x), If(x ≤ x(A_2), f2(x), If(x ≤ x(A_3), f3(x), If(x ≤ x(A_4), f4(x), f5(x)))))[br][br][size=50]http://www.tm-mathe.de/Themen/html/funnatsplines.html[/size]
Kubische Splines im CAS (Aufbau des LGS/der Matrix)
Kubische Spline Funktionen n Stützstellen - Matrix-Version
Kubische Splines Parameter-Kurven

Information: Kubische Splines LGS Matrix