曲線座標系與直角座標系轉換(二)——基礎:三次樣條插值原理(cubic spline)
一、引入
上一篇提到插值多項式,幾次函式就稱為幾次樣條函式如,
二次樣條函式為:f(x) = a*x^2 + b*x + c
三次樣條函式為:f(x) = a*x^3 + b^x^2 + c*x +d
x=[1,3,5,7,9];
y=[2,4,6,8,10];有5個節點,4個區間
對於二次樣條函式,需要求4*3 = 12個引數,根據已知端點(1,5):2個方程;中間曲線方程在節點處的值必須相等(2,3,4):3*2 = 6個方程;中間節點處的一階導數的值必須相等(2,3,4):3個方程;假設第一個方程的二階導數為0,即a1=0,1個方程;一共 2+6+3+1=12個方程。
對於三次樣條函式4*4=16個引數,也就是找出16個方程就解決了問題,除與上面相同外,中間的二階導相等,3個方程,假設第一個方程的二階導數為0,即a1=0,b1=0,2個方程,一共16個方程。
二、原理
簡而言之,就是依然對每一個小區間進行插值(每一個區間都是一個三次多項式),但是我們不需要依賴於導數的已知;由於我們要做的就是使得端點出滿足某種條件的光滑(一般來說,三次樣條插值就是要滿足二階導數連續),根據這個要求,我們就可以在未知導數的情況下推匯出樣條函式。具體方法看下面
樣條函式確定:
N個區間上,每個區間求三次樣條插值函式,顯然一共需要4n個條件
依然按照第一部分的方法,對中間點區間段,端點,這裡分為對中間的節點部分顯示條件,隱式條件
1. 顯式條件:
則n個區間各有2個條件,共2n個。
2. 隱式條件:
三次樣條插值,一次導數連續且二次導數連續,即滿足:
這樣,n個區間可以找出n-1對導數相等條件。至此,可以找出2n+2(n-1) = 4n-2個條件。
3. 邊界條件:
一般來說,在整個插值區間[a,b]上,會對邊界[a,b]端點有狀態的要求。這就是邊界條件,有了這兩個邊界條件,就得到了需要的4n個條件。
邊界條件一般有三種:
1) 一階條件
即,給出端點處的一階導數值。
2) 二階條件
即,給出端點處的二階導數值。
3) 迴圈(週期)條件
即,f(x)是一個周期函式時,端點a,b處的一階導數值、二階導數值分別相等。
具體解法:
設分段樣條函式s(x)在0到n個節點處的二階導數值,為:
積分,得:每一區間上的樣條函式 :
對於引入的兩個常數c1,c2,使用兩個邊界條件,自然可以求解得到:
對所有區間,整理後得到關於Mj-1,Mj,Mj+1的方程:
其中:
這稱作“三彎矩方程”。
最終,由著n-1個方程,再加兩個邊界條件(這裡我使用一階條件),直接帶入,聯立n+1個方程,得到:
至此,樣條插值變為求解此矩陣形式的方程組。
可以看到,係數矩陣嚴格對角佔優,矩陣可逆,方程組存在唯一解,從而可以解出M0…Mn。而此方程組的解法並不困難,計算非常快捷
三、三次樣條插值總結
根據上述求解係數方程總結為矩陣形式
演算法總結
參考:
三次樣條插值: https://blog.csdn.net/flyingleo1981/article/details/53008931/