清风数学建模---插值算法
數模比賽中,常常需要根據已知的函數點進行數據、模型的處理和分析,而有時候現有的數據是極少的,不足以支撐分析的進行,這時就需要使用一些數學的方法,“模擬產生”一些新的但又比較靠譜的值來滿足需求,這就是插值的作用。
插值的定義
設函數y=f(x)y=f(x)y=f(x)在區間[a,b]上有定義,且已知在點
a≤x0≤x1≤?≤xn≤ba \leq x_0 \leq x_1 \leq \cdots \leq x_n\leq ba≤x0?≤x1?≤?≤xn?≤b
上的值分別為:y0,y1,?,yn,y_0,y_1,\cdots,y_n,y0?,y1?,?,yn?,
若存在一個簡單的函數p(x)p(x)p(x),使
P(xi)=yi,(i=0,1,2?,n)P(x_i)=y_i,(i=0,1,2 \cdots ,n)P(xi?)=yi?,(i=0,1,2?,n)
則稱P(x)P(x)P(x)為f(x)f(x)f(x)的插值函數,點x0,x1,?,xnx_0,x_1,\cdots,x_nx0?,x1?,?,xn?稱為插值節點,鬧含插值節點的區間[a,b][a,b][a,b]稱為插值區間,求插值函數P(x)P(x)P(x)的方法稱為插值法。
插值的分類
- 若P(x)P(x)P(x)是次數不超過nnn的代數多項式,即
P(x)=a0+a1x+?+anxnP(x)=a_0+a_1x+ \cdots +a_nx^nP(x)=a0?+a1?x+?+an?xn - 若P(x)為分段多項式,就成為分段插值。P(x)為分段多項式,就成為分段插值。P(x)為分段多項式,就成為分段插值。
- 若P(x)為三角多項式,就成為三角插值P(x)為三角多項式,就成為三角插值P(x)為三角多項式,就成為三角插值
一般插值多項式的原理
定理 設有n+1n+1n+1個互不相同的節點(xI,yi)(i=0,1,2,...n)(x_I,y_i) (i=0,1,2,...n)(xI?,yi?)(i=0,1,2,...n)
則存在唯一的多項式:
Ln(x)=a0+a1x+a2x2+..+anxnL_n(x)=a_0+a_1x+a_2x^2+..+a_nx^nLn?(x)=a0?+a1?x+a2?x2+..+an?xn
使得 Ln(xj)=yj(j=0,1,2,...n)L_n(x_j)=y_j (j=0,1,2,...n) Ln?(xj?)=yj?(j=0,1,2,...n)
構造方程組
拉格朗日插值法
在若干個不同的地方得到相應的觀測值,拉格朗日插值法可以找到一個多項式,其恰好在各個觀測點渠道觀測到的值
兩個點:(x0,y0),(x1,y1)(x_0,y_0),(x_1,y_1)(x0?,y0?),(x1?,y1?)
f(x)=x?x1x0?x1y0+x?x0x1?x0y1f(x)=\frac{x-x_1}{x_0-x_1}y_0+\frac{x-x_0}{x_1-x_0}y1f(x)=x0??x1?x?x1??y0?+x1??x0?x?x0??y1
同理三個點:(x0,y0),(x1,y1)(x1,y2)(x_0,y_0),(x_1,y_1)(x_1,y_2)(x0?,y0?),(x1?,y1?)(x1?,y2?)
f(x)=(x?x1)(x?x2)(x0?x1)(x0?x2)y0+(x?x0)(x?x2)(x1?x0)(x1?x2)y1+(x?x0)(x?x1)(x2?x0)(x2?x1)y2f(x)=\frac{(x-x_1)(x-x_2)}{(x_0-x_1)(x_0-x_2)}y_0+\frac{(x-x_0)(x-x_2)}{(x_1-x_0)(x_1-x_2)}y_1+\frac{(x-x_0)(x-x_1)}{(x_2-x_0)(x_2-x_1)}y_2f(x)=(x0??x1?)(x0??x2?)(x?x1?)(x?x2?)?y0?+(x1??x0?)(x1??x2?)(x?x0?)(x?x2?)?y1?+(x2??x0?)(x2??x1?)(x?x0?)(x?x1?)?y2?
龍格現象
高次插值會產生龍格現象 ,即在兩端處波動極大,產生明顯的震蕩。在不熟悉曲線運動趨勢的前提下,不要輕易使用高次插值。
分段線性插值
因為插值多項式次數越高攝入誤差可能顯著增大,且插值多項式次數高精度未必顯著提高
因此采用分段低次插值是一種辦法
分段二次插值
牛頓插值法
與拉格朗日插值法相比,牛頓插值法具有繼承性。(牛頓插值法每次插值只有和前n項的值有關,這樣每次只要在原來的函數上添加新的項,就能過產生新的函數)
但是牛頓插值法也存在龍格現象的問題
兩種插值法的另一個卻點
上面講的兩種插值僅僅要求插值多項式在插值節點處與被插函數有相等的函數值,而這種插值多項式卻**不能全面反映被插值函數的性態。**然而在許多實際問題中,不僅要求插值函數與被插值函數在所有節點處有相同的函數值,它也需要在一個或全部節點上插值多項式與被插函數有相同的低階甚至高階的導數值。
對于這些情況,拉格朗日插值和牛頓插值都不能滿足。
Hermite插值法
不但要求在節點上的函數值相等,而且還要求對應的導數值也相等,甚至要求高階導數也相等,滿足這種要求的插值多項式就是Hermite 插值多項式
原理
分段三次Hermite插值
直接使用Hermite插值得到的多項式次數較高,也存在著龍格現象,因此在實際使用中,往往分段三次Hermite插值多項式(PCHIP)。
而這個在matlab中有內置的函數,直接調用就可以了
三次樣條插值
原理不用太深究,會用就好。。。。。
同樣的matlab中有內置的函數
p=spline(x,y,new_x)
x=-pi:pi;y=sin(x); new_x=-pi:0.1:pi; p1=pchip(x,y,new_x); p2=spline(x,y,new_x); plot(x,y,'o',new_x,p1,'r-',new_x,p2,'b-')插值對比圖
可以看出,三次樣條生成的曲線更加光滑。在實際建模中由于我們不知道數據的生成過程,因此這兩種插值都可以使用。
n維數據插值(了解)
總結
以上是生活随笔為你收集整理的清风数学建模---插值算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: B站后台源代码泄露,官方回应声明黑话指南
- 下一篇: python:验证码识别