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)間,找出

i(X)=aiX^3+biX^2+ciX+dii=1∼N-1

        每兩個相鄰點就有一個多項式,每個多項式有a、b、c、d4個未知數,共有N-1道多項式,所以共4N-4個未知數。我們只要把這4N-4個未知數求出來即大功告成。

1.曲線必通過座標點

i(Xi)=Yi,Si(Xi+1)=Yi+1i=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

1=PN=0

對兩個相鄰點而言,

i(Xi)=Yi

i(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),則

i(t) =  tYi+1  +  (1-t)Y+  (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)   --ゝ

ゝ式可再化簡成

i-1i-1+dii+Uii+1=Wi,i=2∼N-1。   --ゞ

這是一個聯立方程組,寫成矩陣後會變成所謂的『tridiagonal matrix』

   

再利用高斯消去法,即可求得 P2P3…PN-1之值。如此即可求得相鄰點間的三次曲線函數。