数学建模——人口预测模型
生活随笔
收集整理的這篇文章主要介紹了
数学建模——人口预测模型
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
人口預(yù)測模型
- 多項式擬合
- 假設(shè)
- 特點(diǎn)
- 代碼實現(xiàn)
- 代碼實現(xiàn)思路
- 代碼
- BP神經(jīng)網(wǎng)絡(luò)
- 特點(diǎn)
- 代碼實現(xiàn)
- 實現(xiàn)思路
- 代碼
- Logistic模型
- 特點(diǎn)
- 代碼實現(xiàn)
- 原理
- 代碼
多項式擬合
假設(shè)
特點(diǎn)
代碼實現(xiàn)
代碼實現(xiàn)思路
以年份為x軸變量,當(dāng)年人口為y軸變量,將兩者進(jìn)行擬合得到人口數(shù)模型與時間的關(guān)系式
,選取某城市2008到2019年老年人口數(shù)量進(jìn)行模擬測試
代碼
首先是將已有的數(shù)據(jù)擬合成一條曲線,過程代碼如下所示
close clc; clear all %清除所有 n=5;%擬合多項式的次數(shù) year=2008:2019; num=[97.42 102.36 105.78 111.16 116.04 121.71 126.26 134.93 137 139 141.89 146];%戶籍人口; p5= polyfit(year,num,n); %5階擬合 %繪制原始數(shù)據(jù)和擬合曲線圖 figure(1) hold on; xlabel('year'); %設(shè)置橫坐標(biāo)名 ylabel('num'); %設(shè)置縱坐標(biāo)名 title('2008-2019人口增長曲線'); %設(shè)置標(biāo)題 grid on %網(wǎng)格線 plot(year,num,'r*',year,polyval(p5,year)) legend('人口數(shù)量','擬合曲線')運(yùn)行結(jié)果圖
然后預(yù)測未來幾年的人口增長數(shù)
figure(2) year1=2008:2025; plot(year1,polyval(p5,year1)) people=polyval(p5,year1); legend('人口預(yù)測數(shù)量')運(yùn)行的結(jié)果圖
BP神經(jīng)網(wǎng)絡(luò)
特點(diǎn)
代碼實現(xiàn)
實現(xiàn)思路
采用三層BP神經(jīng)網(wǎng)絡(luò),利用已有數(shù)據(jù)推算出關(guān)系式,然后推算出下一年的人口,然后以下一年的人口為基礎(chǔ)繼續(xù)推算下下一年的人口
代碼
clear all close clc %原始數(shù)據(jù) P=[97.42 102.36 105.78 111.16 116.04 121.71 126.26 134.93 137;102.36 105.78 111.16 116.04 121.71 126.26 134.93 137 139;105.78 111.16 116.04 121.71 126.26 134.93 137 139 141.89]; T=[111.16 116.04 121.71 126.26 134.93 137 139 141.89 146]; %歸一化處理 [P,Pmin,Pmax,T,Tmin,Tmax]=premnmx(P,T); %神經(jīng)網(wǎng)絡(luò) net=newff(minmax(P),[5,1],{'tansig','purelin'}); net.trainFcn='trainbr'; %設(shè)置訓(xùn)練參數(shù) net.trainParam.show=50; net.trainParam.lr=0.05; net.trainParam.epochs=500; net.trainParam.goal=1e-5; %訓(xùn)練 [net,tr]=train(net,P,T); %仿真 A=sim(net,P); a=postmnmx(A,Tmin,Tmax); T=postmnmx(T,Tmin,Tmax); %優(yōu)化后輸入層權(quán)值和闕值 inputWeights=net.IW{1,1}; inputbias=net.b{1}; %優(yōu)化后網(wǎng)絡(luò)層權(quán)值和闕值 layerWeights=net.LW{2,1}; layerbias=net.b{2}; %畫圖輸出 x=2011:2019; newk=a(1,:); figure(1) plot(x,newk,'r-o',x,T,'b--*') xlabel('年份') ylabel('人口數(shù)量/萬人') legend('預(yù)測人口數(shù)量','實際人口數(shù)量')結(jié)果圖像
預(yù)測未來幾年的人口數(shù)量
結(jié)果展示
Logistic模型
特點(diǎn)
代碼實現(xiàn)
原理
Logistic模型認(rèn)為人口增長有最大值Xm和人口的固有增長率r0。當(dāng)人口增長到Xm附近,人口將保持這個水準(zhǔn)不會有大的變動,數(shù)學(xué)公式如下
dx/dt=r0(1-x/Xm)x
x(0)=x0
x是人口數(shù)量,x0是初始人口數(shù)量
解這個方程組得到
x=Xm/(1+(Xm/x0-1)exp(-r0t))
代碼
clc clear close all x=[97.42 102.36 105.78 111.16 116.04 121.71 126.26 134.93 141.24 141.89 143.2 147];%常駐老年人口 n=length(x); t=0:1:n-1; rk=zeros(1,n); rk(1)=(-3*x(1)+4*x(2)-x(3))/2; rk(n)=(x(n-2)-4*x(n-1)+3*x(n))/2; for i=2:n-1rk(i)=(x(i+1)-x(i-1))/2; end rk=rk./x; p=polyfit(x,rk,1); b=p(2); a=p(1); r0=b; xm=-r0/a; %輸出 pnum=zeros(n,1); for i=0:1:n-1pnum(i+1)=xm/(1+(xm/x(1)-1)*exp(-r0*i)); end year1=2008:2019; plot(year1,pnum,'r--o',year1,x,'k-*') xlabel('年份') ylabel('老年人口數(shù)量/萬人') legend('預(yù)測老年人口數(shù)量','實際老年人口數(shù)量')計算結(jié)果
預(yù)測
計算結(jié)果
總結(jié)
以上是生活随笔為你收集整理的数学建模——人口预测模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java课设——文本编辑器
- 下一篇: 邮箱服务器未运行,smtp服务器,smt