【数学与算法】【分段三次Hermite插值】和【分段三次样条插值】
光滑曲線在數學上的定義是什么??
原文鏈接:光滑曲線在數學上的定義是什么?
回答1:
定義:切線隨切點的移動而連續轉動。
若函數f(x)f(x)f(x)在區間(a,b)(a,b)(a,b)內具有一階連續導數,則其圖形為一條處處有切線的曲線。則為光滑曲線。簡言之,若f′(x)f'(x)f′(x)連續,則曲線光滑。
但反之,不成立。比如圓,圓在直角坐標系下,有兩條豎直的切線,導數不存在(為∞大)。
回答2:
不敢保證對。但同糾結這個問題,想了許久,有點心得,拿來探討。希望有緣破解心中迷霧:
- 1.光滑,從直觀上是不突兀,流線的。臺階本質上是折線,因此在轉折處感覺尖銳,突兀,是為不光滑。例如y=丨x丨y=丨x丨y=丨x丨在x=0x=0x=0處就很尖銳。y=x2y=x^2y=x2在 x=0x=0x=0處是一段曲線,看上去用手摸了不會扎手。
- 2.存在切線,就是在一點附近,曲線無限接近于一條直線。曲線被磨平了,只有這樣,才不扎手。要求切線隨著點連續轉動,就是表達曲線不會一下子過度太快,無限接近的兩點形狀無限接近。
至于判斷,先直觀想象圖像,再證明。
求一次導,相當于把函數的變化過程放大一次。因此嚴格的光滑定義要求無限階可導,也就是不管怎么拉大拉平,都是不扎手。
分段差值:
分段插值: 通常可能指的是直接分段低次線插, 通俗來說 這樣出來的線條不是很平滑. 因為在節點上不一定可導.
直接hermite插值就和一樓說的差不多三次樣條與分段 Hermite 插值的根本區別在于S(x)自身光滑(考慮了二階倒數),不需要知道 f 的導數值(除了在2個端點可能需要);
而Hermite插值依賴于f 在所有插值點的導數值。(S(x)為插值基函數,f為你要插值的函數)
分段三次埃爾米特插值:
可以參考:數值分析(4)-多項式插值: 埃爾米塔插值法
Hermite 插值就是要求插值函數不僅經過所給節點,而且要保證在該點的導數也相等。
以3個點為例,想要使用分段3次Hermite 插值求出這三個點的插值函數:
分析一下,每一段三次hermite插值多項式 f(x)=a+b?x+c?x2+d?x3\color{blue}f(x)=a+b*x+c*x^2+d*x^3f(x)=a+b?x+c?x2+d?x3都有4個未知系數需要求解,三個點就是兩段,那么就有2*4=8個未知數。8個未知數,就需要聯立8元一次方程組,需要8個方程:
S0(x0)=y0S0(x1)=y1S1(x1)=y1S1(x2)=y2S0′(x1)=S1′(x1):一階導數值相等\color{blue} S_0(x_0)=y_0 \\ S_0(x_1)=y_1 \\ S_1(x_1)=y_1 \\ S_1(x_2)=y_2\\ S_0'(x_1)=S_1'(x_1) :一階導數值相等 S0?(x0?)=y0?S0?(x1?)=y1?S1?(x1?)=y1?S1?(x2?)=y2?S0′?(x1?)=S1′?(x1?):一階導數值相等
上面有5個方程,還差3個方程,這三個方程從定義中可知,需要知道每個點x0、x1、x2\color{blue}x_0、x_1、x_2x0?、x1?、x2?處的導數。即S0′(x0)、S1′(x1)、S1′(x2)\color{blue}S_0'(x_0)、S_1'(x_1)、S_1'(x_2)S0′?(x0?)、S1′?(x1?)、S1′?(x2?)的導數值必須已知,但是實際工程中是不太可能知道每個點的導數值的。因為,你連原函數都不知道,怎么能知道導數值呢?
總結一下:Hermite插值在實際使用的時候沒有多大意義,同時知道點和導數,還假裝不知道原函數的情況,不多(PS:都知道導數了有什么計算的必要?)
所以,一般用牛頓,牛頓大法好!
分段三次樣條插值:
推薦參考【三次樣條(cubic spline)插值】
可以參考【數值分析(5)-分段低次插值和樣條插值】
三次多項式有兩種形式,很自然的,我們會想到第一種,如下:
y=ai+bix+cix2+dix3(1)y=a_i+b_ix+c_ix^2+d_ix^3 \tag{1} y=ai?+bi?x+ci?x2+di?x3(1)
我們還有第二種寫法,下面的曲線表達式經過(xi,yi)(x_i,y_i)(xi?,yi?):
y=ai+bi(x?xi)+ci(x?xi)2+di(x?xi)3(2)y=a_i+b_i(x-x_i)+c_i(x-x_i)^2+d_i(x-x_i)^3 \tag{2} y=ai?+bi?(x?xi?)+ci?(x?xi?)2+di?(x?xi?)3(2)
把上面(2)這個展開后,變成了:
y=(ai?bixi+cixi2?dixi3)+(bi?2cixi+3dixi2)x+(ci?3dixi)x2+dix3y=\color{blue}(a_i-b_ix_i+c_ix_i^2-d_ix_i^3)+\color{red}(b_i-2c_ix_i+3d_ix_i^2)x+\color{green}(c_i-3d_ix_i)x^2+\color{brown}d_ix^3 y=(ai??bi?xi?+ci?xi2??di?xi3?)+(bi??2ci?xi?+3di?xi2?)x+(ci??3di?xi?)x2+di?x3
所以兩種形式的寫法都對,最終求出來的ai、bi、ci、dia_i、b_i、c_i、d_iai?、bi?、ci?、di?雖然是不同的值,但是最終的表達式肯定是一樣的。因為第二種寫法的ai、bi、ci、dia_i、b_i、c_i、d_iai?、bi?、ci?、di?并不是真正的系數,不過第二種寫法在推導數學公式時很方便。
有點類似于我們小學時候學的y=kx+by=kx+by=kx+b和y?yi=k(x?xi)y-y_i=k(x-x_i)y?yi?=k(x?xi?)的樣子,都是兩種表示方法。
對于分段三次樣條插值,就比分段三次hermite多項式插值多了一個條件,即各點的二階導數相等。還是以三個點為例:
S0(x0)=y0S0(x1)=y1S1(x1)=y1S1(x2)=y2S0′(x1)=S1′(x1):x1處一階導數值相等S0′′(x1)=S1′′(x1):x1處二階導數相等\color{blue} S_0(x_0)=y_0\\ S_0(x_1)=y_1\\ S_1(x_1)=y_1\\ S_1(x_2)=y_2\\ S_0'(x_1)=S_1'(x_1) :x_1處一階導數值相等\\ S_0''(x_1)=S_1''(x_1):x_1處二階導數相等 S0?(x0?)=y0?S0?(x1?)=y1?S1?(x1?)=y1?S1?(x2?)=y2?S0′?(x1?)=S1′?(x1?):x1?處一階導數值相等S0′′?(x1?)=S1′′?(x1?):x1?處二階導數相等
然后再利用三類邊界條件中的其中一種邊界條件,即可以從兩個端點x0、x2\color{blue}x_0、x_2x0?、x2?處再得到兩個方程。
三類邊界條件:
用下面的解釋更容易明白:
例如一系列節點 x0、x1、......、xn?1、xn\color{blue}x_0、x_1、......、x_{n-1}、x_nx0?、x1?、......、xn?1?、xn?,其中x0、xn\color{blue}x_0、x_nx0?、xn?是兩個端點(也叫邊界點),三類邊界條件如下:
- 自然邊界:
兩個端點即邊界點的二階導都為0;
S0′′(x0)=0\color{blue}S_0''(x_0)=0S0′′?(x0?)=0
Sn′′(xn?1)=0\color{blue}S_n''(x_{n-1})=0Sn′′?(xn?1?)=0。 - 夾持邊界:
由邊界點一階導數給定,例如分別給兩個邊界點的一階導數設定為A\color{blue}AA和B\color{blue}BB;
S0′(x0)=A\color{blue}S_0'(x_0)=AS0′?(x0?)=A
Sn′(xn?1)=B\color{blue}S_n'(x_{n-1})=BSn′?(xn?1?)=B。 - 非扭結邊界:
使兩個邊界端點的三階導與這兩端點的鄰近點的三階導相等。那么令
S0′′′(x0)=S0′′′(x1)\color{blue}S_0'''(x_0)=S_0'''(x_1)S0′′′?(x0?)=S0′′′?(x1?)
Sn′′′(xn?1)=Sn′′′(xn)\color{blue}S_n'''(x_{n-1})=S_n'''(x_n)Sn′′′?(xn?1?)=Sn′′′?(xn?)。
總結
以上是生活随笔為你收集整理的【数学与算法】【分段三次Hermite插值】和【分段三次样条插值】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【数学与算法】贝塞尔曲线
- 下一篇: 【数学与算法】二部图、匈牙利匹配、稳定婚