三次样条函数插值(Cubic spline function interpolation)

               三次样条函数插值(Cubic spline function interpolation)

 

预备知识: 什么是插值?
         已知离散的数据,但不知函数表达式,插值和拟合都是为了寻找函数表达式。区别在于,插值得到的函数能够穿过已知的点(在已知的点的函数表达式的值等于已知数值,但容易出现龙格现象),拟合只求函数图形神似而不求穿过已知点。

 

Spline样条一词的来源


      “样条”这个词来自于工业绘图时所使用的一种仪器,他是一个细的,可弯曲的木制或塑料工具,固定于给定的数据点上,从而定义出一条“穿过”每一个给定数据点的光滑曲线。

三次样条函数插值(Cubic spline function interpolation)

 

     样条的英语单词spline来源于可变形的样条工具,那是一种在造船和工程制图时用来画出光滑形状的工具。在*,早期曾经被称做「齿函数」。后来因为工程学术语中「放样」一词而得名。 

 

那么问题来了,什么样的函数才能既穿过已知点又能避免龙格现象(剧烈的震荡)呢?

答案是分段插值,就是将全部数据分割成若*分,每个小部分用插值得到不同的函数,最后用很多不同的函数表达原来的序列。

三次样条函数插值(Cubic spline function interpolation)

 


问题又来了,不同函数两端衔接不好怎么办?


答案是高次样条差值,既每个分段函数都采用高次函数形式来构造(三次样条差值 就是用x的三次方形式构造)这就保证了得到的多个函数之间的衔接保持光滑。(注:不能用过高阶的函数,否则抖动太剧烈。)

 

小结

一句话总结:三次样条插值就是将原始长序列分割成若干段构造多个三次函数(每段一个),使得分段的衔接处具有0阶连续,一阶导数连续,二阶导数连续的性质(也就是光滑衔接)。

 

数学基本原理:

方程:

    三次样条函数插值(Cubic spline function interpolation)

 

三次样条函数插值(Cubic spline function interpolation)

                                                             i=0,1,…n-1

 

共n+1个数据点,n个区间。

a,b,c,d四个系数(未知数)每个都有n组,所以方程组共有4n个未知数(需要4n个方程)。

 

 

方程要满足的条件:

条件1:函数穿过所有已知节点

三次样条函数插值(Cubic spline function interpolation)

 i=0,1,2…n-1 (共n个方程)

 

三次样条函数插值(Cubic spline function interpolation)

 

 

 

条件2:节点处0阶连续(保证数据不间断,无跳变),前一段方程在节点处的函数值和后一段方程在相同节点处的函数值都相等。

三次样条函数插值(Cubic spline function interpolation)

i=0,1,2…n-1 (共n个方程)

 

(注:根据条件一可推导出三次样条函数插值(Cubic spline function interpolation))

 

三次样条函数插值(Cubic spline function interpolation)

Tips:

0阶导数连续的函数举例

三次样条函数插值(Cubic spline function interpolation)

0阶导数不连续的函数举例

三次样条函数插值(Cubic spline function interpolation)

                                                                     上图中的函数在x=1处是没有定义的

 

条件3:在所有节点(除了第一节点和最后一个节点)处1阶连续(保证节点处有相同的斜率)

 

三次样条函数插值(Cubic spline function interpolation)

i= 0,1,2…n-2  (共n-1个方程)

Tips:

1.函数在某一点"有极限"等价于左极限=右极限
2.函数在某一点"连续"等价于左极限=右极限=函数值

三次样条函数插值(Cubic spline function interpolation)

 

一阶导数函数不连续的函数举例:

三次样条函数插值(Cubic spline function interpolation)

 

一阶导数函数连续的函数举例: 

三次样条函数插值(Cubic spline function interpolation)

 

 

换句话说:保证S'(x)的一阶连续意味着曲线y=S(x)没有急转弯,没有特别剧烈的跳变。

 

 

条件4:在所有节点(除了第一节点和最后一个节点)处2阶连续(保证节点处有相同的曲率,即,相同的弯曲程度)

 

三次样条函数插值(Cubic spline function interpolation)

i= 0,1,2…n-2 (共n-1个方程)

 

或者说:保证S''(x)的连续意味着每个点的曲率半径有定义。

 

以上共有4n-2个方程,还差2个方程。

 

推导过程:

先分别求出函数S(x)的一阶导数和二阶导数

三次样条函数插值(Cubic spline function interpolation)

 

三次样条函数插值(Cubic spline function interpolation)

 

 

根据条件1三次样条函数插值(Cubic spline function interpolation) 推导出:

三次样条函数插值(Cubic spline function interpolation)

 

三次样条函数插值(Cubic spline function interpolation)

 

根据条件2三次样条函数插值(Cubic spline function interpolation)推导出:

 

三次样条函数插值(Cubic spline function interpolation)

 

三次样条函数插值(Cubic spline function interpolation)

 

 

根据条件3三次样条函数插值(Cubic spline function interpolation)推导出:

 

三次样条函数插值(Cubic spline function interpolation)

 

三次样条函数插值(Cubic spline function interpolation)

 

根据条件4 三次样条函数插值(Cubic spline function interpolation)推导出:

 

三次样条函数插值(Cubic spline function interpolation)

 

三次样条函数插值(Cubic spline function interpolation)

 

 

三次样条函数插值(Cubic spline function interpolation) 可得:

三次样条函数插值(Cubic spline function interpolation)

 

三次样条函数插值(Cubic spline function interpolation)

 

后续推导:

三次样条函数插值(Cubic spline function interpolation)

 

三次样条函数插值(Cubic spline function interpolation)

 

三次样条函数插值(Cubic spline function interpolation)

 

三次样条函数插值(Cubic spline function interpolation)

 

 

端点条件(最后增加两个约束条件,使得方程组数目正好是4n)

 

1,*边界(Natural)

     Natural样条是柔软又有弹性的木杆经过所有数据点后形成的曲线,让端点的斜率*的在某一位置保持平衡,使得曲线的摇摆最小。

 

*边界的两个附加边界条件:

三次样条函数插值(Cubic spline function interpolation)

 

推导过程:

三次样条函数插值(Cubic spline function interpolation)

三次样条函数插值(Cubic spline function interpolation)

 

*边界生成的线性方程组:

                         三次样条函数插值(Cubic spline function interpolation)   三次样条函数插值(Cubic spline function interpolation)

三次样条函数插值(Cubic spline function interpolation)

 

2,固定边界/紧压样条(Clamped)

     紧压样条在端点有固定的斜率。紧压样条可想象为,用外力使柔软而有弹性得木杆经过数据点,并在端点处使其具有固定得斜率。这样的样条对于画经过多个点的光滑曲线的绘图员相当有用。

 

紧压样条的两个附加边界条件:

 

                                                                三次样条函数插值(Cubic spline function interpolation)三次样条函数插值(Cubic spline function interpolation)

推导过程: 

三次样条函数插值(Cubic spline function interpolation)

三次样条函数插值(Cubic spline function interpolation)

紧压样条生成的线性方程组:

                          三次样条函数插值(Cubic spline function interpolation)    三次样条函数插值(Cubic spline function interpolation)

三次样条函数插值(Cubic spline function interpolation)

 

3,非节点边界(Not-A-Knot)

      非节点边界要求第一段S0和第二段S1三次函数在第二个数据点X1处三阶导数连续,同时也要求倒数第二段Sn-2和最后一段函数Sn-1在倒数第二个数据点Xn-1处三阶导数连续。(也就是说,整个样条函数中,前两段函数完全相同,最后两段的函数也完全相同。同时,0阶,1阶,2阶,3阶全都连续保证了数据点两端的参数a,b,c,d都相同。)

 

非节点边界的两个附加边界条件:

三次样条函数插值(Cubic spline function interpolation)

 

三次样条函数插值(Cubic spline function interpolation)

推导过程:  

三次样条函数插值(Cubic spline function interpolation)

三次样条函数插值(Cubic spline function interpolation)

 

非节点边界生成的线性方程组:

                三次样条函数插值(Cubic spline function interpolation)   三次样条函数插值(Cubic spline function interpolation)

三次样条函数插值(Cubic spline function interpolation)

(全文完)

谢谢收看!

 

鳴謝:

1,Thomas' Calculus (12th Edition)  -Addison Wesley

2,托马斯微积分

3,作者:Winters  链接:https://www.zhihu.com/question/31269601/answer/244310086  来源:知乎

4,http://www.cnblogs.com/xpvincent/archive/2013/01/26/2878092.html

 

《圣经》--- --- 不轻易发怒的,胜过勇士;治服己心的,强如取城。签放在怀里,定事由耶和华。 (箴言 16章32-33节)

 

三次样条函数插值(Cubic spline function interpolation)

                                                                                     (配图与本文无关)