日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数学建模——人口预测模型

發(fā)布時間:2023/12/14 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数学建模——人口预测模型 小編覺得挺不錯的,現(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è)

  • 把人口增長看做是一個多項式函數(shù)
  • 人口增長沒有限制,可以一直增長
  • 特點(diǎn)

  • 已有數(shù)據(jù)擬合的很好,不論數(shù)據(jù)有沒有規(guī)律可言
  • 預(yù)測未來一兩年比較準(zhǔn)確,越往后越不準(zhǔn)確
  • 預(yù)測的人口數(shù)量在未來會超出人口限制,且增長速度變快
  • 代碼實現(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)

  • BP神經(jīng)網(wǎng)絡(luò)預(yù)測人口模型不需要任何假設(shè)
  • BP神經(jīng)網(wǎng)絡(luò)根據(jù)已有的數(shù)據(jù)推算數(shù)據(jù)內(nèi)部之間的關(guān)系
  • BP神經(jīng)網(wǎng)絡(luò)是非線性的方法
  • 代碼實現(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ù)量

    Pnew=[139;141.89;146]; OldNum=zeros(15,1); for i=1:15SamNum=size(Pnew,2);Pnewn=tramnmx(Pnew,Pmin,Pmax);HiddenOut=tansig(inputWeights*Pnewn+repmat(inputbias,1,SamNum));anewn=purelin(layerWeights*HiddenOut+repmat(layerbias,1,SamNum));anewn=postmnmx(anewn,Tmin,Tmax);Pnew(1:3,:)=[Pnew(2:3,:);anewn];OldNum(i)=anewn; end %畫圖輸出 x1=2011:2034; figure(2) NUM=[newk,OldNum']; plot(x1,NUM,'r--o') xlabel('年份') ylabel('人口數(shù)量/萬人') legend('預(yù)測人口數(shù)量')

    結(jié)果展示

    Logistic模型

    特點(diǎn)

  • 考慮了人口能夠承受的最大值
  • 數(shù)據(jù)出錯時擬合的不夠好,必須要有正確的數(shù)據(jù)才能夠擬合
  • 數(shù)學(xué)模型簡單,有一定的公式
  • 代碼實現(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ù)測

    figure(2) fnum=zeros(n+16,1); for i=0:1:n+15fnum(i+1)=xm/(1+(xm/x(1)-1)*exp(-r0*i)); end year2=2008:2035; plot(year2,fnum,'r--o') xlabel('年份') ylabel('老年人口數(shù)量/萬人') legend('預(yù)測老年人口數(shù)量')

    計算結(jié)果

    總結(jié)

    以上是生活随笔為你收集整理的数学建模——人口预测模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。