1. 程式人生 > >曲線座標系與直角座標系轉換(二)——基礎:三次樣條插值原理(cubic spline)

曲線座標系與直角座標系轉換(二)——基礎:三次樣條插值原理(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. 顯式條件

對於給定節點:image

函式值:image

對於樣條函式S(x),滿足:image

則n個區間各有2個條件,共2n個。

2. 隱式條件:

三次樣條插值,一次導數連續且二次導數連續,即滿足:

image

這樣,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個節點處的二階導數值,為:

image

那麼,在區間image上,image顯然是線性函式,且知:

image

那麼,顯然可以由線性插值,得到每一區間image的線性表示式。

積分兩次,就可以得到每一個image

積分,得:每一區間上的樣條函式 :

image

對於引入的兩個常數c1,c2,使用兩個邊界條件,自然可以求解得到:

image

對所有區間,整理後得到關於Mj-1,Mj,Mj+1的方程:

image

其中:

clip_image106

這稱作“三彎矩方程”。

最終,由著n-1個方程,再加兩個邊界條件(這裡我使用一階條件),直接帶入,聯立n+1個方程,得到:

clip_image107

至此,樣條插值變為求解此矩陣形式的方程組。

可以看到,係數矩陣嚴格對角佔優,矩陣可逆,方程組存在唯一解,從而可以解出M0…Mn。而此方程組的解法並不困難,計算非常快捷

三、三次樣條插值總結

根據上述求解係數方程總結為矩陣形式

演算法總結

參考:

 三次樣條插值: https://blog.csdn.net/flyingleo1981/article/details/53008931/

各種插值方法及原理:https://www.cnblogs.com/duye/p/8671820.html

栗子:https://blog.csdn.net/deramer1/article/details/79034201