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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/14 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数学建模——人口预测模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

人口預測模型

  • 多項式擬合
    • 假設
    • 特點
    • 代碼實現
      • 代碼實現思路
      • 代碼
  • 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神經網絡預測人口模型不需要任何假設
  • BP神經網絡根據已有的數據推算數據內部之間的關系
  • 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('預測人口數量','實際人口數量')

    結果圖像

    預測未來幾年的人口數量

    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('人口數量/萬人') 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('預測老年人口數量','實際老年人口數量')

    計算結果

    預測

    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('老年人口數量/萬人') legend('預測老年人口數量')

    計算結果

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。