所謂三次樣條插值對於一個區間(a,b)將區間分成x0 = a < x1 ......xn-1 < b = xn 的n-1個區間,我們需要通過已知的n+1個點來模擬一個未知的函數,在三次樣條插值中我們采用分段的方法來做這件事情。
三次樣條插值得到的分段函數保證一下條件成立,而這些條件也是用來求解每一段樣條插值的條件:
1 模擬出來的函數在已知點的函數值等於f的函數值
2模擬出來的分段函數是二階連續的也就是說導數和二階導數在分段的交界點是相等的
3需要知道在a和b點的二階導數的情況,或者二階導數在這n+1個點的變化規律
下面直接轉載其內在的規律
已知:
a. n+1個數據點[xi, yi], i = 0, 1, …, n
b. 每一分段都是三次多項式函數曲線
c. 節點達到二階連續
d. 左右兩端點處特性(自然邊界,固定邊界,非節點邊界)
根據定點,求出每段樣條曲線方程中的系數,即可得到每段曲線的具體表達式。
插值和連續性:
微分連續性:
樣條曲線的微分式:
將步長 帶入樣條曲線的條件:
由此可得:
c. 將bi, ci, di帶入 (i = 0, 1, …, n-2)可得:
這樣我們可以構造一個以m為未知數的線性方程組,而且在端點條件已知的情況下我們是知道其中幾個未知數的值的
端點條件
由i的取值范圍可知,共有n-1個公式, 但卻有n+1個未知量m 。要想求解該方程組,還需另外兩個式子。所以需要對兩端點x0和xn的微分加些限制。 選擇不是唯一的,3種比較常用的限制如下。
a. 自由邊界(Natural)
則要求解的方程組可寫為:
b. 固定邊界(Clamped)
首尾兩端點的微分值是被指定的,這里分別定為A和B。則可以推出
將上述兩個公式帶入方程組,新的方程組左側為
c. 非節點邊界(Not-A-Knot)
指定樣條曲線的三次微分匹配,即
新的方程組系數矩陣可寫為:
右下圖可以看出不同的端點邊界對樣條曲線的影響:
1.3 算法總結
假定有n+1個數據節點
b. 將數據節點和指定的首位端點條件帶入矩陣方程
c. 解矩陣方程,求得二次微分值。該矩陣為三對角矩陣,具體求法參見我的上篇文章:三對角矩陣的求解。
d. 計算樣條曲線的系數:
其中i = 0, 1, …, n-1