溫馨提示:本文共有3748字,閱讀并理解全文大概需要15-20分鐘
數(shù)模比賽中,常常需要根據(jù)已知的函數(shù)點(diǎn)進(jìn)行數(shù)據(jù)、模型的處理和分析,而有時(shí)候現(xiàn)有的數(shù)據(jù)是極少的,不足以支撐分析的進(jìn)行,這時(shí)就
需要使用一些數(shù)學(xué)的方法,“模擬產(chǎn)生”一些新的但又比較靠譜的值來(lái)滿足需求,這就是插值的作用。
【問(wèn)題引入】
一維插值問(wèn)題:
已經(jīng)有n+1個(gè)節(jié)點(diǎn)(
x
i
x_i
xi?,
y
i
y_i
yi?),其中
x
i
x_i
xi?互不相同,不妨假設(shè)
a
=
x
0
<
x
1
<
…
…
<
x
n
=
b
a=x_0<x_1<……<x_n=b
a=x0?<x1?<……<xn?=b,求任一插值點(diǎn)
x
?
x^*
x?(≠
x
i
x_i
xi?)處的插值
y
?
y^*
y?。
(思路:構(gòu)造函數(shù)
y
=
f
(
x
)
y=f(x)
y=f(x),使得
f
(
x
)
f(x)
f(x)過(guò)所有節(jié)點(diǎn),求
f
(
x
?
)
f(x^*)
f(x?)即可得到
y
?
y^*
y?)
一、插值法的定義
通俗來(lái)說(shuō)就是根據(jù)平面上已有的點(diǎn)來(lái)擬合出一個(gè)函數(shù)過(guò)所有這些點(diǎn),然后我們就可求得這個(gè)函數(shù)其他位置的點(diǎn)的數(shù)據(jù)了,這樣就在原樣本點(diǎn)的基礎(chǔ)上擴(kuò)展了樣本空間。
那么具體如何求這個(gè)插值函數(shù)就是插值法的重點(diǎn)了。
1.插值函數(shù)一共有三種:
- 若 P ( x ) P(x) P(x)是次數(shù)不超過(guò) n n n的代數(shù)多項(xiàng)式,即: P ( x ) = a 0 + a 1 x + … … + a n x n P(x)=a_0+a_1x+……+a_nx^n P(x)=a0?+a1?x+……+an?xn(則稱為插值多項(xiàng)式)
- 若 P ( x ) P(x) P(x)是分段多項(xiàng)式,就成為分段插值
- 若 P ( x ) P(x) P(x)是三角多項(xiàng)式,就成為三角插值
由于三角插值一般要用到傅里葉變化等的復(fù)雜數(shù)學(xué)工具,所以這里暫時(shí)只討論多項(xiàng)式插值和分段插值。在比賽中用的最多的是分段插值
2.多項(xiàng)式插值法原理
定理:設(shè)有
n
+
1
n+1
n+1個(gè)互不相同的節(jié)點(diǎn)(
x
i
,
y
i
x_i,y_i
xi?,yi?) (
i
=
0
,
1
,
2
…
…
n
i=0,1,2……n
i=0,1,2……n)
則存在唯一的多項(xiàng)式:
L
n
(
x
)
=
a
0
+
a
1
x
+
a
2
x
2
+
…
…
+
a
n
x
n
\begin{align} L_n(x)=a_0+a_1x+a_2x^2+……+a_nx^n \end{align}
Ln?(x)=a0?+a1?x+a2?x2+……+an?xn??
使得
L
n
(
x
j
)
=
y
j
L_n(x_j)=y_j
Ln?(xj?)=yj?(
j
=
0
,
1
,
2
,
…
…
,
n
j=0,1,2,……,n
j=0,1,2,……,n)
有興趣的小伙伴可以研究一下證明:
3.分段插值法原理:
分段線性插值就是相鄰兩點(diǎn)之間用直線(一次函數(shù))連接,分段二次插值就是相鄰幾個(gè)點(diǎn)之間用拋物線(二次函數(shù))連接,分段三次插值就是相鄰若干點(diǎn)之間用三次函數(shù)連接。
4.具體如何求插值函數(shù)呢?
(1)多項(xiàng)式插值法之:拉格朗日插值法(了解即可,實(shí)際基本不用)
在數(shù)值分析中,拉格朗日插值法是以法國(guó)十八世紀(jì)數(shù)學(xué)家約瑟夫?路易斯?拉格朗日命名的一種多項(xiàng)式插值方法。在若干個(gè)不同的地方得到相應(yīng)的觀測(cè)值,拉格朗日插值法可以找到一個(gè)多項(xiàng)式,其恰好在各個(gè)觀測(cè)的點(diǎn)取到觀測(cè)到的值。
- 兩個(gè)點(diǎn):
(
x
0
,
y
0
)
,
(x_0,y_0),
(x0?,y0?),,
(
x
1
,
y
1
)
(x_1,y_1)
(x1?,y1?)
- 三個(gè)點(diǎn):
(
x
0
,
y
0
)
,
(x_0,y_0),
(x0?,y0?),,
(
x
1
,
y
1
)
(x_1,y_1)
(x1?,y1?),
(
x
2
,
y
2
)
(x_2,y_2)
(x2?,y2?)
3.四個(gè)點(diǎn):
( x 0 , y 0 ) , (x_0,y_0), (x0?,y0?),, ( 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?)
拉格朗日多項(xiàng)式插值法存在的問(wèn)題:
高次插值會(huì)產(chǎn)生龍格現(xiàn)象,即在兩端處波動(dòng)極大,產(chǎn)生明顯的震蕩。在不熟悉曲線運(yùn)動(dòng)趨勢(shì)的前提下,不要輕易使用高次插值。
(2)多項(xiàng)式插值法之:牛頓插值法(了解即可,實(shí)際基本不用)
評(píng)價(jià):
與拉格朗日插值法相比,牛頓插值法的計(jì)算過(guò)程具有繼承性。(牛頓插值法每次插值只和前n項(xiàng)的值有關(guān),這樣每次只要在原來(lái)
的函數(shù)上添加新的項(xiàng),就能夠產(chǎn)生新的函數(shù))但是牛頓插值也存在龍格現(xiàn)象的問(wèn)題。
兩種插值法的另一個(gè)缺點(diǎn):
上面講的兩種插值僅僅要求插值多項(xiàng)式在插值節(jié)點(diǎn)處與被插函數(shù)有相等的函數(shù)值,而這種插值多項(xiàng)式卻不能全面反映被插值函數(shù)的性態(tài)。
然而在許多實(shí)際問(wèn)題中,不僅要求插值函數(shù)與被插值函數(shù)在所有節(jié)點(diǎn)處有相同的函數(shù)值,它也需要在一個(gè)或全部節(jié)點(diǎn)上插值多項(xiàng)式與被插函數(shù)有相同的低階甚至高階的導(dǎo)數(shù)值。對(duì)于這些情況,拉格朗日插值和牛頓插值都不能滿足。
(3)三次樣條插值算法(重點(diǎn)掌握)
三次樣條多項(xiàng)式滿足的條件:
(4)埃爾米特(Hermite)插值法(了解即可,實(shí)際基本不用)
(5)分段插值法之:分段三次埃爾米特插值法(重點(diǎn)掌握)
直接使用Hermite插值得到的多項(xiàng)式次數(shù)較高,也存在著龍格現(xiàn)象,因此在實(shí)際應(yīng)用中,往往使用分段三次 Hermite 插值多項(xiàng)式 (PCHIP),是由埃爾米特插值法根據(jù)分段思想改進(jìn)得來(lái)的。
用一句話簡(jiǎn)述就是:找最近的四個(gè)點(diǎn)用一個(gè)三次函數(shù)進(jìn)行擬合。
二、基于MATLAB的插值算法實(shí)踐:
1.分段三次埃爾米特插值法
Matlab有內(nèi)置的函數(shù)(實(shí)現(xiàn)過(guò)程已經(jīng)幫我們封裝好了,會(huì)調(diào)用就行了):
p = pchip(x,y, new_x)
x是已知的樣本點(diǎn)的橫坐標(biāo);y是已知的樣本點(diǎn)的縱坐標(biāo);new_x是要插入處對(duì)應(yīng)的橫坐標(biāo)。
返回的p就是橫坐標(biāo)為new_x,根據(jù)擬合函數(shù)算出來(lái)的那些縱坐標(biāo)。
例如:
x = ‐pi:pi; %構(gòu)成一個(gè)等差數(shù)列,公差為1.
y = sin(x);
new_x = ‐pi:0.1:pi;
p = pchip(x,y,new_x);
plot(x, y, 'o', new_x, p, 'r‐')
我們可以看一下已知點(diǎn)一共有幾個(gè):
所以已知點(diǎn)一共有7個(gè)。
而插值的點(diǎn)有多少呢?
插值的點(diǎn)是以0.01為公差的,所以這個(gè)點(diǎn)是很多的。
最后插值完后繪制出的圖像如圖:
plot函數(shù)用法:
plot(x1,y1,x2,y2)
線方式: ‐ 實(shí)線 :點(diǎn)線 ‐. 虛點(diǎn)線 ‐ ‐ 波折線
點(diǎn)方式: . 圓點(diǎn) +加號(hào) * 星號(hào) x x形 o 小圓
顏色: y黃; r紅; g綠; b藍(lán); w白; k黑; m紫; c青
2.三次樣條插值
Matlab有內(nèi)置的函數(shù):
p = spline (x,y, new_x)
x是已知的樣本點(diǎn)的橫坐標(biāo);y是已知的樣本點(diǎn)的縱坐標(biāo);new_x是要插入處對(duì)應(yīng)的橫坐標(biāo)。
返回的p就是橫坐標(biāo)為new_x,根據(jù)擬合函數(shù)算出來(lái)的那些縱坐標(biāo)。
例如:
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‐')
legend('樣本點(diǎn)','三次埃爾米特插值','三次樣條插值',‘Location’,‘SouthEast’) %標(biāo)注顯示在東南方向
插值結(jié)果對(duì)比
說(shuō)明:
legend(string1,string2,string3, …)
分別將字符串1、字符串2、字符串3……標(biāo)注到圖中,每個(gè)字符串對(duì)應(yīng)的圖標(biāo)為畫(huà)圖時(shí)
的圖標(biāo)。
‘Location’用來(lái)指定標(biāo)注顯示的位置
可以看出,三次樣條生成的曲線更加光滑。在實(shí)際建模中,由于我們不知道數(shù)據(jù)的生成過(guò)程,因此這兩種插值都可以使用。
3.n維數(shù)據(jù)的插值(了解)
p = interpn(x1,x2,...,xn, y, new_x1,new_x2,...,new_xn, method)
y是已知的樣本點(diǎn)的縱坐標(biāo)坐標(biāo)
new_x1,new_x2,…,new_xn是要插入點(diǎn)的橫坐標(biāo)
method是要插值的方法
‘linear’:線性插值(默認(rèn)算法);
‘cubic’:三次插值;
‘spline’:三次樣條插值法;(最為精準(zhǔn))
‘nearest’:最鄰近插值算法。
例:
x = ‐pi:pi; y = sin(x);
new_x = ‐pi:0.1:pi;
p = spline(x, y, new_x);
等價(jià)于 p = interpn (x, y, new_x, ’spline’);
plot(x, y, 'o', new_x, p, 'r‐')
三、插值算法用于短期預(yù)測(cè):
根據(jù)過(guò)去10年的中國(guó)人口數(shù)據(jù),預(yù)測(cè)接下來(lái)三年的人口數(shù)據(jù):
年份 | 人口(萬(wàn)) |
---|---|
2009 | 133126 |
2010 | 133770 |
2011 | 134413 |
2012 | 135069 |
2013 | 135738 |
2014 | 136427 |
2015 | 137122 |
2016 | 137866 |
2017 | 138639 |
2018 | 139538 |
population=[133126,133770,134413,135069,135738,136427,137122,137866,138639, 139538];
year = 2009:2018;
p1 = pchip(year, population, 2019:2021) %分段三次埃爾米特插值預(yù)測(cè)
p2 = spline(year, population, 2019:2021) %三次樣條插值預(yù)測(cè)
figure(4);
plot(year, population,'o',2019:2021,p1,'r*-',2019:2021,p2,'bx-')
legend('樣本點(diǎn)','三次埃爾米特插值預(yù)測(cè)','三次樣條插值預(yù)測(cè)','Location','SouthEast')
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-743947.html
四、建模實(shí)例
這個(gè)先挖個(gè)坑,之后再寫(xiě)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-743947.html
到了這里,關(guān)于【數(shù)學(xué)建模筆記】【第三講】拉格朗日插值法,牛頓插值法,分段三次埃爾米特插值法及其MATLAB實(shí)踐的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!