Spline Interpolation 的數學概念
Spline Interpolation演算法,其精神就是在兩相鄰點間,找出一合理的三次多項式。在給定的N個座標點(X1,Y1)、(X2,Y2)、…、(XN,YN),(X1,Y1)和(X2,Y2)間的多項式記作S1,(X2,Y2)和(X3,Y3)間的多項式記作S2,……,(XN-1,YN-1)和(XN,YN)間的多項式記作SN-1。即在(Xi,Yi)和(Xi+1,Yi+1)間,找出
Si(X)=aiX^3+biX^2+ciX+di,i=1∼N-1。
每兩個相鄰點就有一個多項式,每個多項式有a、b、c、d4個未知數,共有N-1道多項式,所以共4N-4個未知數。我們只要把這4N-4個未知數求出來即大功告成。
1.曲線必通過座標點
Si(Xi)=Yi,Si(Xi+1)=Yi+1,i=1∼N-1。
共2N-2個式子。
2.曲線的銜接點必須平滑,及一階導函數和二階導函數值相等。
S'i-1(Xi)=S'i(Xi),i=2∼N-1。
S''i-1(Xi)=S''i(Xi),i=2∼N-1。
共2N-4個式子。
3.兩端點的二階導函數給定初值
給定初值的方法很多,我們採用natural spline的方式,令S''1(X1)=0,S''N-1(XN)=0。共2個式子。
由以上1、2、3我們可得到4N-4個式子,即可求出全部的4N-4個變數。在此,我們不直接解方程式,而改用比較有效率的方法。假設所有的二階導函數在銜接點的值為已知,以Pi(i=2∼N-1)表示,則前面2、3可以改成
S''i-1(Xi)=S''i(Xi),i=2∼N-1。
P1=PN=0
對兩個相鄰點而言,
Si(Xi)=Yi
Si(Xi+1)=Yi+1
S''i(Xi)=Pi
S''i(Xi+1)=Pi+1
所以我們只要把P2∼PN-1求出來就可以了。我們先對S''i做變數轉換,令t=(X-Xi)/(Xi+1-Xi),則
Si(t) = tYi+1 + (1-t)Yi + (Xi+1-Xi)^2 ×〔(t^3-t)Pi+1 + ((1-t)^3-(1-t)) ×Pi〕/ 6
S'i(t) = Zi + (Xi+1-Xi)〔(3t^2-1)Pi+1 + (1-3(1-t)^2)Pi〕/ 6 --ヾ
其中Zi =(Yi+1 - Yi ) / (Xi+1-Xi)。
又S'i-1(1) =S'i(0) ,∴ヾ式可化成
(Xi-Xi-1)Pi-1+2 * (Xi+1-Xi-1)Pi + (Xi+1-Xi)Pi+1 = 6 * (Zi-Zi-1) --ゝ
ゝ式可再化簡成
Ui-1Pi-1+diPi+UiPi+1=Wi,i=2∼N-1。 --ゞ
這是一個聯立方程組,寫成矩陣後會變成所謂的『tridiagonal matrix』
=
再利用高斯消去法,即可求得 P2P3…PN-1之值。如此即可求得相鄰點間的三次曲線函數。