三次樣條函數插值(Cubic spline function interpolation)

               三次樣條函數插值(Cubic spline function interpolation)

 

預備知識: 什麼是插值?
         已知離散的數據,但不知函數表達式,插值和擬合都是爲了尋找函數表達式。區別在於,插值得到的函數能夠穿過已知的點(在已知的點的函數表達式的值等於已知數值,但容易出現龍格現象),擬合只求函數圖形神似而不求穿過已知點。

 

Spline樣條一詞的來源


      “樣條”這個詞來自於工業繪圖時所使用的一種儀器,他是一個細的,可彎曲的木製或塑料工具,固定於給定的數據點上,從而定義出一條“穿過”每一個給定數據點的光滑曲線。

 

     樣條的英語單詞spline來源於可變形的樣條工具,那是一種在造船和工程製圖時用來畫出光滑形狀的工具。在中國大陸,早期曾經被稱做「齒函數」。後來因爲工程學術語中「放樣」一詞而得名。 

 

那麼問題來了,什麼樣的函數才能既穿過已知點又能避免龍格現象(劇烈的震盪)呢?

答案是分段插值,就是將全部數據分割成若干部分,每個小部分用插值得到不同的函數,最後用很多不同的函數表達原來的序列。

 


問題又來了,不同函數兩端銜接不好怎麼辦?


答案是高次樣條差值,既每個分段函數都採用高次函數形式來構造(三次樣條差值 就是用x的三次方形式構造)這就保證了得到的多個函數之間的銜接保持光滑。(注:不能用過高階的函數,否則抖動太劇烈。)

 

小結

一句話總結:三次樣條插值就是將原始長序列分割成若干段構造多個三次函數(每段一個),使得分段的銜接處具有0階連續,一階導數連續,二階導數連續的性質(也就是光滑銜接)。

 

數學基本原理:

方程:

    

 

                                                             i=0,1,…n-1

 

共n+1個數據點,n個區間。

a,b,c,d四個係數(未知數)每個都有n組,所以方程組共有4n個未知數(需要4n個方程)。

 

 

方程要滿足的條件:

條件1:函數穿過所有已知節點

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

 

 

 

 

條件2:節點處0階連續(保證數據不間斷,無跳變),前一段方程在節點處的函數值和後一段方程在相同節點處的函數值都相等。

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

 

(注:根據條件一可推導出)

 

Tips:

0階導數連續的函數舉例

0階導數不連續的函數舉例

                                                                     上圖中的函數在x=1處是沒有定義的

 

條件3:在所有節點(除了第一節點和最後一個節點)處1階連續(保證節點處有相同的斜率)

 

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

Tips:

1.函數在某一點"有極限"等價於左極限=右極限
2.函數在某一點"連續"等價於左極限=右極限=函數值

 

一階導數函數不連續的函數舉例:

 

一階導數函數連續的函數舉例: 

 

 

換句話說:保證S'(x)的一階連續意味着曲線y=S(x)沒有急轉彎,沒有特別劇烈的跳變。

 

 

條件4:在所有節點(除了第一節點和最後一個節點)處2階連續(保證節點處有相同的曲率,即,相同的彎曲程度)

 

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

 

或者說:保證S''(x)的連續意味着每個點的曲率半徑有定義。

 

以上共有4n-2個方程,還差2個方程。

 

推導過程:

先分別求出函數S(x)的一階導數和二階導數

https://images0.cnblogs.com/blog/477176/201301/26192558-4f365c76cd3444e2a8b6c31814f903f6.png

 

 

 

根據條件1 推導出:

https://images0.cnblogs.com/blog/477176/201301/26192609-31d25583b4064be3a345fb1b569ef3e4.png

 

 

根據條件2推導出:

 

https://images0.cnblogs.com/blog/477176/201301/26192619-6fa7eed9fc254ea78b9f36131f3510e1.png

 

 

 

根據條件3推導出:

 

https://images0.cnblogs.com/blog/477176/201301/26192634-ebe93c200e4449dfa033971afe584a18.png

 

 

根據條件4 推導出:

 

https://images0.cnblogs.com/blog/477176/201301/26192638-ddede7fe3d5d40248431e88b01b151c5.png

 

 

 

https://images0.cnblogs.com/blog/477176/201301/26192643-483a8f3b90634ca0a99cd9f4eb6a0f81.png 可得:

https://images0.cnblogs.com/blog/477176/201301/26192655-dbf978717b2c43d8a74dfc3aa91b3848.png

 

 

後續推導:

https://images0.cnblogs.com/blog/477176/201301/26192702-f3d84f8eaeb34682b0249390116ae1be.png

 

 

https://images0.cnblogs.com/blog/477176/201301/26192706-7fa78cdd7d414d0bbb45520f46c7c85a.png

 

 

 

端點條件(最後增加兩個約束條件,使得方程組數目正好是4n)

 

1,自由邊界(Natural)

     Natural樣條是柔軟又有彈性的木杆經過所有數據點後形成的曲線,讓端點的斜率自由的在某一位置保持平衡,使得曲線的搖擺最小。

 

自由邊界的兩個附加邊界條件:

 

推導過程:

 

自由邊界生成的線性方程組:

                            

 

2,固定邊界/緊壓樣條(Clamped)

     緊壓樣條在端點有固定的斜率。緊壓樣條可想象爲,用外力使柔軟而有彈性得木杆經過數據點,並在端點處使其具有固定得斜率。這樣的樣條對於畫經過多個點的光滑曲線的繪圖員相當有用。

 

緊壓樣條的兩個附加邊界條件:

 

                                                                

推導過程: 

緊壓樣條生成的線性方程組:

                              

 

3,非節點邊界(Not-A-Knot)

      非節點邊界要求第一段S0和第二段S1三次函數在第二個數據點X1處三階導數連續,同時也要求倒數第二段Sn-2和最後一段函數Sn-1在倒數第二個數據點Xn-1處三階導數連續。(也就是說,整個樣條函數中,前兩段函數完全相同,最後兩段的函數也完全相同。同時,0階,1階,2階,3階全都連續保證了數據點兩端的參數a,b,c,d都相同。)

 

非節點邊界的兩個附加邊界條件:

https://images0.cnblogs.com/blog/477176/201301/26192824-ca65aad071af49f599502c65e01b2325.png

 

https://images0.cnblogs.com/blog/477176/201301/26192826-f0c754a39d7d4def8330b9ceb8766468.png

推導過程:  

 

非節點邊界生成的線性方程組:

                   

(全文完)

謝謝收看!

 

鳴謝:

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節)

 

Zacchaeusçåçæå°çµæ

                                                                                     (配圖與本文無關)  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章