線性插值 多項式插值 樣條插值 牛頓插值總結

1.什麼是插值

在數值分析中,插值(interpolation)是一種通過已知的、離散的數據點,在範圍內推求新數據點的過程或方法。求解科學和工程的問題時,通常有許多數據點藉由採樣、實驗等方法獲得,這些數據可能代表了有限個數值函數,其中自變量的值。而根據這些數據,我們往往希望得到一個連續的函數(也就是曲線);或者更密集的離散方程與已知數據互相吻合,這個過程叫做擬合。
與插值密切相關的另一個問題是通過簡單函數逼近複雜函數。假設給定函數的公式是已知的,但是太複雜以至於不能有效地進行評估。來自原始函數的一些已知數據點,或許會使用較簡單的函數來產生插值。當然,若使用一個簡單的函數來估計原始數據點時,通常會出現插值誤差;然而,取決於該問題領域和所使用的插值方法,以簡單函數推得的插值數據,可能會比所導致的精度損失更大。

舉個簡單的例子,已知數據:
x1=1,y1=2x2=2,y2=3x3=4,y3=6x_1 = 1, y_1 = 2 \\ x_2 = 2, y_2 = 3 \\ x_3 = 4, y_3 = 6
x=3x = 3時y的值是多少?

2.示例

x f(x)
0 0
1 0 .8415
2 0.9093
3 0.1411
4 -0.7568
5 -0.9589
6 -0.2794

在這裏插入圖片描述
上圖爲數據點在x,y平面的顯示圖

插值就是提供了一些算法估算中間點函數的值。比如當x=2.5時,f(x)=?
有許多不同的插值方法,其中一些在下面描述。 在選擇適當的算法時需要考慮的一些問題是:方法有多準確? 它的計算成本有多高? 插值有多平滑? 需要多少數據點?

3.片段插值,最近鄰插值

最簡單的插值方法是找到最近的數據值,並分配相同的值。這種方法又稱爲最近鄰插值。在簡單的問題中,不太可能使用這種方法,因爲線性插值幾乎一樣容易,但在高維度的多變量插值中,這可能是衡量速度和簡單性的有利選擇。
在這裏插入圖片描述

4.線性插值

假設我們已知座標(x0,y0),(x1,y1)(x_0, y_0), (x_1, y_1),當要求[x0,x1][x_0, x_1]區間內任一位置x在該條直線上的值時,由初中數學知識我們就可以求解:
yy0xx0=y1y0x1x0\frac{y - y_0}{x - x_0} = \frac{y_1 - y_0}{x_1 - x_0}
因爲x值已知,從上面的公式很容易求得y的值。

在這裏插入圖片描述

線性插值經常用於已知函數 f 在兩點的值要近似獲得其它點數值的方法,這種近似方法的誤差定義爲
RT=f(x)p(x)R_{T}=f(x)-p(x)
其中p(x)p(x)表示上面定義的線性插值多項式。
根據羅爾定理,可以證明:如果f(x)有二階連續導數,那麼誤差範圍爲:

RT(x1x0)28maxx0xx1f(x)|R_{T}|\leq {\frac {(x_{1}-x_{0})^{2}}{8}}\max _{x_{0}\leq x\leq x_{1}}|f''(x)|

正如所看到的,函數上兩點之間的近似隨着所近似的函數的二階導數的增大而逐漸變差。從直觀上來看也是這樣:函數的曲率越大,簡單線性插值近似的誤差也越大。

5.多項式插值

多項式插值是線性插值的推廣。線性插值是一個線性函數,我們現在用一個更高階的多項式代替這個插值。 再考慮一下上面給出的問題。以下的六次多項式經歷了所有七個點:
f(x)=0.0001521x60.003130x5+0.07321x40.3577x3+0.2255x2+0.9038xf(x)=-0.0001521x^{6}-0.003130x^{5}+0.07321x^{4}-0.3577x^{3}+0.2255x^{2}+0.9038x

如果將x=2.5帶入,有f(2.5)=0.5965。一般情況下,如果我們有n個數據點,那麼在所有的數據點中只有一個最多n-1次多項式可以完美擬合。此外,插值是一個多項式,因此是無限可微的。所以我們看到多項式插值克服了線性插值的大部分問題。但是,多項式插值也有一些缺點。與線性內插相比,計算內插多項式的成本是昂貴的。此外,多項式插值可能會出現振盪僞像,特別是在端點。

6. 樣條曲線插值

線性插值對每個區間xk,xk+1x_k, x_{k+1}使用線性函數。 樣條插值在每個間隔中使用低階多項式,並選擇多項式以使它們平滑地吻合在一起。 結果函數被稱爲樣條曲線。例如,三次樣條是分片段立方,兩次連續可微。 此外,它的二階導數在終點爲零。 在上表中插入點的三次樣條函數由下式給出
f(x)={0.1522x3+0.9937x,x[0,1],0.01258x30.4189x2+1.4126x0.1396,x[1,2],0.1403x31.3359x2+3.2467x1.3623,x[2,3],0.1579x31.4945x2+3.7225x1.8381,x[3,4],0.05375x30.2450x21.2756x+4.8259,x[4,5],0.1871x3+3.3673x219.3370x+34.9282,x[5,6].f(x)={\begin{cases}-0.1522x^{3}+0.9937x, \qquad x\in [0,1],\\-0.01258x^{3}-0.4189x^{2}+1.4126x-0.1396,\qquad x \in [1,2],\\0.1403x^{3}-1.3359x^{2}+3.2467x-1.3623,\qquad x\in [2,3],\\0.1579x^{3}-1.4945x^{2}+3.7225x-1.8381,\qquad x\in [3,4],\\0.05375x^{3}-0.2450x^{2}-1.2756x+4.8259,\qquad x\in [4,5],\\-0.1871x^{3}+3.3673x^{2}-19.3370x+34.9282,\qquad x\in [5,6].\end{cases}}

在這種情況下,我們得到 f(2.5) = 0.5972。 與多項式插值的方法相比較,樣條跟多項式一樣,其插值誤差會小於線性插值,而且插值更平滑;使用樣條會比使用高階多項式更容易評估。 它也不會受到龍格現象的影響。

7.牛頓插值

有關牛頓插值法的內容發表在大名鼎鼎的《自然哲學的數學原理》的第三卷的引理五中
牛頓多項式(英語:Newton Polynomial)是數值分析中一種用於插值的多項式。
在這裏插入圖片描述
因此,牛頓多項式可以寫作:
N(x)=[y0]+[y0,y1](xx0)++[y0,,yk](xx0)(xx1)(xxk1)N(x)=[y_{0}]+[y_{0},y_{1}](x-x_{0})+\cdots +[y_{0},\ldots ,y_{k}](x-x_{0})(x-x_{1})\cdots (x-x_{k-1})

總結上面的計算方法可以歸納出算法的大致思想:先計算差商表,類似於乘法口訣的思路,兩個for循環就可以計算出,然後對於每一次內for循環以後,計算出了第一列,接着把相對應的f(x)計算出來,接着進入第二列的計算,接着計算相應的f(x)…一直到計算完畢最後一個f(x),把所有的f(x)相加,便是最終的插值。

參考文獻:
1.https://zh.wikipedia.org/wiki/插值
2.https://blog.csdn.net/zb1165048017/article/details/48343861
3.https://www.zhihu.com/question/22320408
4.https://zh.wikipedia.org/wiki/牛頓多項式

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