前言
本文主要內(nèi)容是分享博主在學(xué)習(xí)MATLAB插值與擬合過程中的一些筆記與見解,并記錄使用代碼實(shí)現(xiàn)的過程
一、一維插值問題的描述
一維插值問題可描述為:已知函數(shù)在
x
0
,
x
1
,
…
,
x
n
x_0,x_1,…,x_n
x0?,x1?,…,xn?處的值
y
0
,
y
1
,
…
,
y
n
y_0,y_1,…,y_n
y0?,y1?,…,yn?,求簡單函數(shù)
p
(
x
)
p(x)
p(x),使
p
(
x
i
)
=
y
i
.
p(x_i)=y_i.
p(xi?)=yi?.
通俗來說,即已知函數(shù)在某區(qū)間內(nèi)若干點(diǎn)處的值,求函數(shù)在該區(qū)間內(nèi)其他點(diǎn)處的值。
PS:這里可以用范德蒙行列式和克萊姆法則證明,在
x
0
,
x
1
,
…
,
x
n
x_0,x_1,…,x_n
x0?,x1?,…,xn?處取值為
y
0
,
y
1
,
…
,
y
n
y_0,y_1,…,y_n
y0?,y1?,…,yn?的多項(xiàng)式存在且唯一,即插值問題的解唯一存在。(相關(guān)內(nèi)容見線性代數(shù))
二、常用插值方法
1.Lagrange插值法
Lagrange(拉格朗日)插值公式,指的是在節(jié)點(diǎn)上給出節(jié)點(diǎn)基函數(shù),然后做基函數(shù)的線性擬合,組合系數(shù)為節(jié)點(diǎn)函數(shù)值的一種插值多項(xiàng)式。
假設(shè),我們已知函數(shù)
f
(
x
)
f(x)
f(x)在平面坐標(biāo)系上有3個(gè)點(diǎn),坐標(biāo)分別為
(
x
1
,
y
1
)
(x_1,y_1)
(x1?,y1?),
(
x
2
,
y
2
)
(x_2,y_2)
(x2?,y2?),
(
x
3
,
y
3
)
(x_3,y_3)
(x3?,y3?),可以分別根據(jù)這三個(gè)點(diǎn)找出節(jié)點(diǎn)基函數(shù)。例如,首先作出基函數(shù)
f
1
f_1
f1?的圖像,經(jīng)過
(
x
1
,
1
)
(x_1,1)
(x1?,1),
(
x
2
,
0
)
(x_2,0)
(x2?,0),
(
x
3
,
0
)
(x_3,0)
(x3?,0)這三個(gè)點(diǎn),同理可作出
f
2
f_2
f2?分別經(jīng)過點(diǎn)
(
x
1
,
0
)
(x_1,0)
(x1?,0),
(
x
2
,
1
)
(x_2,1)
(x2?,1),
(
x
3
,
0
)
(x_3,0)
(x3?,0)以及
f
3
f_3
f3?。通過尋找這三組基函數(shù)的線性組合,我們不難發(fā)現(xiàn)原函數(shù)可以寫出如下形式:
f
(
x
)
=
y
1
f
1
(
x
)
+
y
2
f
2
(
x
)
+
y
3
f
3
(
x
)
f(x)=y_1f_1(x)+y_2f_2(x)+y_3f_3(x)
f(x)=y1?f1?(x)+y2?f2?(x)+y3?f3?(x)上式可推廣為:
f
(
x
)
=
∑
i
=
0
k
y
i
∏
j
≠
1
x
?
x
j
x
i
?
x
j
f(x)=\sum_{i=0}^{k}{y_i\prod_{j\ne1}\frac {x-x_j} {x_i-x_j}}
f(x)=i=0∑k?yi?j?=1∏?xi??xj?x?xj??Lagrange插值多項(xiàng)式結(jié)構(gòu)緊湊,在理論分析中甚為方便,但是其缺點(diǎn)在于當(dāng)插值節(jié)點(diǎn)增減時(shí),全部插值基函數(shù)均要隨之變化,整個(gè)公式也將發(fā)生變化,在實(shí)際計(jì)算中很不方便。
2.Newton插值法
Newton(牛頓)插值法相對(duì)于拉格朗日插值法具有承襲性的優(yōu)勢(shì),即在增加額外的插值點(diǎn)時(shí),可以利用之前的運(yùn)算結(jié)果以降低運(yùn)算量。
假設(shè)已知n+1個(gè)點(diǎn)相對(duì)多項(xiàng)式函數(shù)
f
f
ff
ff的值為:
(
x
0
,
f
(
x
0
)
)
,
(
x
1
,
f
(
x
1
)
)
,
(
x
2
,
f
(
x
2
)
)
,
?
,
(
x
n
,
f
(
x
n
)
)
(x_0,f(x_0)),(x_1,f(x_1)),(x_2,f(x_2)),?,(x_n,f(x_n))
(x0?,f(x0?)),(x1?,f(x1?)),(x2?,f(x2?)),?,(xn?,f(xn?)),求此多項(xiàng)式函數(shù)
f
f
f.
先從求滿足兩個(gè)點(diǎn)
(
x
0
,
f
(
x
0
)
)
,
(
x
1
,
f
(
x
1
)
)
(x_0,f(x_0)),(x_1,f(x_1))
(x0?,f(x0?)),(x1?,f(x1?))的函數(shù)
f
1
(
x
)
f_1(x)
f1?(x)說起:
假設(shè)
f
1
(
x
)
=
f
(
x
0
)
+
b
1
(
x
?
x
0
)
f_1(x)=f(x_0)+b_1(x?x_0)
f1?(x)=f(x0?)+b1?(x?x0?),
我們?cè)黾右粋€(gè)點(diǎn),
(
x
0
,
f
(
x
0
)
)
,
(
x
1
,
f
(
x
1
)
)
,
(
x
2
,
f
(
x
2
)
)
(x_0,f(x_0)),(x_1,f(x_1)),(x_2,f(x_2))
(x0?,f(x0?)),(x1?,f(x1?)),(x2?,f(x2?)),求滿足這三個(gè)點(diǎn)的函數(shù)
f
2
(
x
)
f_2(x)
f2?(x):
假設(shè)
f
2
(
x
)
=
f
1
(
x
)
+
b
2
(
x
?
x
0
)
(
x
?
x
1
f_2(x)=f_1(x)+b_2(x?x_0)(x?x_1
f2?(x)=f1?(x)+b2?(x?x0?)(x?x1?),
以此類推,我們得到Newton插值法的函數(shù)為:
其優(yōu)點(diǎn)在于:每增加一個(gè)點(diǎn),不會(huì)導(dǎo)致之前的重新計(jì)算,只需要算和新增點(diǎn)有關(guān)的就可以了。
三、高次插值的Runge現(xiàn)象
在研究插值問題的初期,所有人都想當(dāng)然地認(rèn)為插值多項(xiàng)式的次數(shù)越高,插值精度越高。
Runge通過研究發(fā)現(xiàn)有的情況下,并非插值多項(xiàng)式階數(shù)越高結(jié)果就越精確。當(dāng)插值多項(xiàng)式的次數(shù)較高時(shí),結(jié)果會(huì)出現(xiàn)嚴(yán)重的振蕩現(xiàn)象,稱之為Runge現(xiàn)象。
例如,我們?cè)诰鶆蚬?jié)點(diǎn)上對(duì)Runge函數(shù)
f
(
x
)
=
1
1
+
25
x
2
,
x
∈
[
?
1
,
1
]
f(x)=\frac{1}{1+25x^2},x\in[-1,1]
f(x)=1+25x21?,x∈[?1,1]進(jìn)行插值,(如圖)紅色曲線代表插值多項(xiàng)式的階數(shù)為10時(shí)呈現(xiàn)的效果,可以看出,插值區(qū)間的邊緣產(chǎn)生了嚴(yán)重的振蕩現(xiàn)象,誤差很大。因此,在實(shí)際中應(yīng)避免使用高次的插值。通常為避免Runge現(xiàn)象,我們可以將插值區(qū)間分成若干小區(qū)間,在小區(qū)間內(nèi)用低次插值,即分段低次插值,如樣條函數(shù)插值。
四、Matlab插值
1、一維插值
當(dāng)一組數(shù)據(jù)可以表示成平面坐標(biāo)系上的點(diǎn)時(shí),我們可以使用Matlab的一維插值命令:
yi=inter1(x,y,xi,'method')
%x,y為插值點(diǎn),xi,yi為被插值點(diǎn)和結(jié)果,x,y和xi,yi通常為向量
%'method'表示插值方法:常用方法有'nearest''linear''spline''cubic'
‘nearest’——最鄰近插值:插入與其距離最近的值
‘linear’——線性插值:構(gòu)造線性函數(shù)進(jìn)行插值
‘spline’——三次樣條插值:將定義域分成若干個(gè)區(qū)間,在每個(gè)區(qū)間內(nèi)構(gòu)造三次多項(xiàng)式進(jìn)行插值
‘cubic’——立方插值:構(gòu)造立方函數(shù)進(jìn)行插值
ps:'method’缺省時(shí)默認(rèn)為線性插值
2、二維插值
當(dāng)一組數(shù)據(jù)可以表示成空間坐標(biāo)系上的點(diǎn)時(shí),我們可以使用Matlab的二維插值命令:
yi=inter2(x,y,z,xi,yi,'method')
%x,y,z為插值點(diǎn),xi,yi為被插值點(diǎn),zi為輸出的插值結(jié)果,即插值函數(shù)在(xi,yi)處的值;x,y為向量,xi,yi為向量或矩陣,而z和zi則為矩陣
%'method'表示插值方法:常用方法有'nearest''linear''spline''cubic'
‘nearest’——最鄰近插值:插入與其距離最近的值
‘linear’——雙線性插值:構(gòu)造兩組線性函數(shù)進(jìn)行插值
‘spline’——雙三次樣條插值:將定義域分成若干個(gè)區(qū)間,在每個(gè)區(qū)間內(nèi)構(gòu)造三次多項(xiàng)式進(jìn)行插值
‘cubic’——雙立方插值:構(gòu)造立方函數(shù)進(jìn)行插值
默認(rèn)為雙線性插值
3、散亂點(diǎn)插值
當(dāng)插值點(diǎn)(x,y)為散亂點(diǎn),不再是網(wǎng)格上的點(diǎn)時(shí),可以使用griddata命令進(jìn)行二維插值:
griddata(x,y,z,xi,yi,'method')%'method'用法同上
總結(jié)
本文主要展示了數(shù)學(xué)建模中的一些插值方法及原理,并且基于Matlab進(jìn)行實(shí)現(xiàn)的過程。由于作者也是在學(xué)習(xí)階段,此篇文章僅供參考,歡迎大家指正!
參考資料
[1]【【零基礎(chǔ)教程】老哥:數(shù)學(xué)建模算法、編程、寫作和獲獎(jiǎng)指南全流程培訓(xùn)!】 https://www.bilibili.com/video/BV1kC4y1a7Ee?p=24&share_source=copy_web&vd_source=c62a50333f8ab9149f6acfdf0a7c31e7
[2]https://baike.baidu.com/item/%E7%89%9B%E9%A1%BF%E6%8F%92%E5%80%BC%E6%B3%95/7085983文章來源:http://www.zghlxwxcb.cn/news/detail-461354.html
[3]https://zhuanlan.zhihu.com/p/138747068文章來源地址http://www.zghlxwxcb.cn/news/detail-461354.html
到了這里,關(guān)于數(shù)學(xué)建模學(xué)習(xí)筆記(一):插值法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!