数学建模——人口预测模型
生活随笔
收集整理的這篇文章主要介紹了
数学建模——人口预测模型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
人口預測模型
- 多項式擬合
- 假設
- 特點
- 代碼實現
- 代碼實現思路
- 代碼
- BP神經網絡
- 特點
- 代碼實現
- 實現思路
- 代碼
- Logistic模型
- 特點
- 代碼實現
- 原理
- 代碼
多項式擬合
假設
特點
代碼實現
代碼實現思路
以年份為x軸變量,當年人口為y軸變量,將兩者進行擬合得到人口數模型與時間的關系式
,選取某城市2008到2019年老年人口數量進行模擬測試
代碼
首先是將已有的數據擬合成一條曲線,過程代碼如下所示
close clc; clear all %清除所有 n=5;%擬合多項式的次數 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階擬合 %繪制原始數據和擬合曲線圖 figure(1) hold on; xlabel('year'); %設置橫坐標名 ylabel('num'); %設置縱坐標名 title('2008-2019人口增長曲線'); %設置標題 grid on %網格線 plot(year,num,'r*',year,polyval(p5,year)) legend('人口數量','擬合曲線')運行結果圖
然后預測未來幾年的人口增長數
figure(2) year1=2008:2025; plot(year1,polyval(p5,year1)) people=polyval(p5,year1); legend('人口預測數量')運行的結果圖
BP神經網絡
特點
代碼實現
實現思路
采用三層BP神經網絡,利用已有數據推算出關系式,然后推算出下一年的人口,然后以下一年的人口為基礎繼續推算下下一年的人口
代碼
clear all close clc %原始數據 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); %神經網絡 net=newff(minmax(P),[5,1],{'tansig','purelin'}); net.trainFcn='trainbr'; %設置訓練參數 net.trainParam.show=50; net.trainParam.lr=0.05; net.trainParam.epochs=500; net.trainParam.goal=1e-5; %訓練 [net,tr]=train(net,P,T); %仿真 A=sim(net,P); a=postmnmx(A,Tmin,Tmax); T=postmnmx(T,Tmin,Tmax); %優化后輸入層權值和闕值 inputWeights=net.IW{1,1}; inputbias=net.b{1}; %優化后網絡層權值和闕值 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('人口數量/萬人') legend('預測人口數量','實際人口數量')結果圖像
預測未來幾年的人口數量
結果展示
Logistic模型
特點
代碼實現
原理
Logistic模型認為人口增長有最大值Xm和人口的固有增長率r0。當人口增長到Xm附近,人口將保持這個水準不會有大的變動,數學公式如下
dx/dt=r0(1-x/Xm)x
x(0)=x0
x是人口數量,x0是初始人口數量
解這個方程組得到
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('老年人口數量/萬人') legend('預測老年人口數量','實際老年人口數量')計算結果
預測
計算結果
總結
以上是生活随笔為你收集整理的数学建模——人口预测模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java课设——文本编辑器
- 下一篇: 邮箱服务器未运行,smtp服务器,smt