文章內(nèi)容部分參考:建模算法入門筆記-多項(xiàng)式擬合(附源碼) - 嗶哩嗶哩 (bilibili.com)
(9條消息) 數(shù)學(xué)建?!丝陬A(yù)測模型公有木兮木戀白的博客-CSDN博客數(shù)學(xué)建模人口預(yù)測模型
多項(xiàng)式擬合是數(shù)據(jù)擬合的一種,與插值有一定區(qū)別(插值要求曲線經(jīng)過給定的點(diǎn),擬合不一定經(jīng)過給定的點(diǎn))
介紹MATLAB中三種多項(xiàng)式擬合的方法——代碼法、代碼窗口法、窗口法。
根據(jù)這個(gè)例子進(jìn)行三種方法的分析:給定以下點(diǎn)(1,9)(2,5)(3,4)(4,4)(5,2)(6,3)(7,2)(8,4)(9,9),要求進(jìn)行多項(xiàng)式擬合,求出x=5.5、x=10時(shí)的y值。
分析之前要在matlab繪制散點(diǎn)圖:
方法一:通過plot函數(shù)畫離散點(diǎn)圖
打開matlab,在命令行窗口中輸入“x=[1 2 3 4 5 6 7 8 9] y=[9 5 4 4 2 3 2 4 9]”創(chuàng)建離散點(diǎn)數(shù)據(jù),需要注意x,y長度一致
然后輸入plot(x,y,’r.'),其中r是代表紅色,后面的點(diǎn)是繪制的離散點(diǎn)形狀,如圖:

方法二:通過scatter函數(shù)畫離散點(diǎn)圖
在命令行窗口中輸入“scatter(x,y,'k*')”

可以由圖看出,題目給點(diǎn)分布散亂,且x=5.5與x=10的點(diǎn)都不存在,這時(shí)需要擬合曲線,根據(jù)曲線的函數(shù),求出對(duì)應(yīng)的y值(x=5.5在所給x區(qū)間[1,9]內(nèi),這時(shí)求對(duì)應(yīng)的y值為內(nèi)插法,反之x=10在區(qū)間外,此時(shí)求y值為外插法。一般用擬合法求內(nèi)插,外插法多為預(yù)測類。
一、代碼法
MATLAB代碼如下:(使用時(shí)只需修改部分?jǐn)?shù)據(jù)即可)
x=[123456789];
?
y=[954423249];
?
z=polyfit(x,y,3);
?
xi=0:1:10;
?
yi=polyval(z,xi);
?
plot(xi,yi,x,y,'r*');
其中,z=polyfit(x,y,3);的3指擬合的最高次冪為3,該最高次冪需要不斷調(diào)整,以得出最佳擬合方案。

據(jù)圖可以讀出,x=5.5時(shí)y約為2,x=10時(shí)y約為13.5
該方法較為簡便,但是需要自行修改、調(diào)整函數(shù)系數(shù),而且不能得出擬合曲線的具體函數(shù)值。
二、代碼窗口法
先輸入以下代碼,繪出點(diǎn)圖:
x=[123456789];
?
y=[954423249];
?
plot(x,y,'r*')
然后按下面的操作來即可:

一個(gè)是樣條插值,一個(gè)是三次方擬合


不同的擬合方法對(duì)應(yīng)的函數(shù)都不同,根據(jù)函數(shù)圖像,估計(jì)對(duì)應(yīng)的y值即可
三、窗口法
值得注意的是:上述兩種方法都能方便地得到函數(shù)圖像,但是卻不能得到具體的擬合函數(shù)表達(dá)式。而窗口法卻能快速得到表達(dá)式(但是有的表達(dá)式的系數(shù)是以概率表達(dá)的)。
首先輸入給定的x值與y值:x=[1 2 3 4 5 6 7 8 9];y=[9 5 4 4 2 3 2 4 9];
再點(diǎn)擊APP欄的Curve Fitting欄
令X data為x,Y data為y后,選擇擬合方式即可,本圖為一次線性擬合

三次擬合

圖像左側(cè)的Results欄是輸出的函數(shù)表達(dá)式,注意其系數(shù)是按照概率選取的:
Linear model Poly3:
?
f(x) = p1*x^3 + p2*x^2 + p3*x + p4
?
Coefficients (with 95% confidence bounds):
?
? p1 = 0.03535 (-0.04166, 0.1124)
?
? p2 = -0.1407 (-1.308, 1.026)
?
? p3 = -1.795 (-6.95, 3.36)
?
? p4 = 10.14 (3.856, 16.43)
具體的擬合函數(shù)表達(dá)式需要視所用的擬合方法的不同而定。
處理人口模型
1、假設(shè)
把人口增長看做是一個(gè)多項(xiàng)式函數(shù)
人口增長沒有限制,可以一直增長
2、特點(diǎn)
已有數(shù)據(jù)擬合的很好,不論數(shù)據(jù)有沒有規(guī)律可言
預(yù)測未來一兩年比較準(zhǔn)確,越往后越不準(zhǔn)確
預(yù)測的人口數(shù)量在未來會(huì)超出人口限制,且增長速度變快
3、代碼實(shí)現(xiàn)
以年份為x軸變量,當(dāng)年人口為y軸變量,將兩者進(jìn)行擬合得到人口數(shù)模型與時(shí)間的關(guān)系式,選取某城市2008到2019年老年人口數(shù)量進(jìn)行模擬測試
首先是將已有的數(shù)據(jù)擬合成一條曲線,過程代碼如下所示文章來源:http://www.zghlxwxcb.cn/news/detail-441178.html
close
?
clc;
?
clearall %清除所有
?
n=5;%擬合多項(xiàng)式的次數(shù)
?
year=2008:2019;
?
num=[97.42102.36 105.78 111.16 116.04 121.71 126.26 134.93 137139141.89146];%戶籍人口;
?
p5= polyfit(year,num,n); %5階擬合
?
%繪制原始數(shù)據(jù)和擬合曲線圖
?
figure(1)
?
holdon;
?
xlabel('year'); %設(shè)置橫坐標(biāo)名
?
ylabel('num'); %設(shè)置縱坐標(biāo)名
?
title('2008-2019人口增長曲線'); %設(shè)置標(biāo)題
?
gridon %網(wǎng)格線
?
plot(year,num,'r*',year,polyval(p5,year))
?
legend('人口數(shù)量','擬合曲線')

然后預(yù)測未來幾年的人口增長數(shù)文章來源地址http://www.zghlxwxcb.cn/news/detail-441178.html
figure(2)
?
year1=2008:2025;
?
plot(year1,polyval(p5,year1))
?
people=polyval(p5,year1);
?
legend('人口預(yù)測數(shù)量')

到了這里,關(guān)于多項(xiàng)式擬合的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!