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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

数学建模——人口增长模型的matlab实现以及对2010年人口预测

發(fā)布時間:2023/12/14 循环神经网络 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数学建模——人口增长模型的matlab实现以及对2010年人口预测 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 運行軟件:MATLAB R2012a
    • 實驗數(shù)據(jù)
    • 指數(shù)增長模型
      • 指數(shù)增長模型:方法一
        • 對2010年的人口預(yù)測
      • 指數(shù)增長模型:方法二
        • 對2010年人口預(yù)測
    • 改進的指數(shù)增長模型
        • 對2010人口預(yù)測
    • 邏輯斯蒂(logistic)模型
      • 邏輯斯蒂(logistic)模型:方法一
        • 對2010預(yù)測
      • 邏輯斯蒂(logistic)模型:方法二
        • 對2010預(yù)測

運行軟件:MATLAB R2012a

實驗數(shù)據(jù)

年份17901800181018201830184018501860
人口/百萬3.95.37.29.612.917.123.231.4
增長率/10年0.29490.31130.29860.29690.29070.30120.30820.2452
年份18701880189019001910192019301940
人口/百萬38.650.262.976.092.0105.7122.8131.7
增長率/10年0.24350.24200.20510.19140.16140.14570.10590.1059
年份1950196019701980199020002010
人口/百萬150.7179.3203.2226.5248.7281.4308.7
增長率/10年0.15790.14640.11610.10040.11040.1349

指數(shù)增長模型

滿足人口增長的微分方程和初始條件為:

利用函數(shù)dsolve()可得:

指數(shù)增長模型:方法一

根據(jù)已知數(shù)據(jù)對模型的參數(shù)進行估計又稱為數(shù)據(jù)擬合。
對下面的這個公式同時取對數(shù)

可得

t:代表年份1970取0,依次類推
x:人口數(shù)量,實驗數(shù)據(jù)已知
根據(jù)求出的公式可以求出y;然后利用polyfit()函數(shù)求出r,a的值;當(dāng)a求出來時,根據(jù)上面求出的公式,可以求出x0;將r,x0帶入公式
可求出指數(shù)增長模型方法一的x值

代碼如下:
使用的是matlb函數(shù)

function [ x1 ] = method_1( x ) %方法一:直接用人口數(shù)據(jù)和線性最小二乘法 % 利用函數(shù)polyfit(),dsolve()求解,r年增長率,返回x1模型的估計值y=log(x);t=0:1:21;p=polyfit(t,y,1);r=p(1);a=p(2);x0=exp(a);s=dsolve('Dx=r*x','x(0)=x0','t');x1=eval(s);x1=x1'; end

運行代碼:

x=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76 92 105.7 122.8 131.7 150.7 179.3 203.2 226.5 248.7 281.4]; m=1790:10:2000; m=m'; m(:,2)=x'; m(:,3)=method_1(x);

運行界面:

運行結(jié)果:第一列代表年份;第二列代表實際人口;第三列為指數(shù)增長模型:方法一的預(yù)估值

對2010年的人口預(yù)測

根據(jù)上面算出的結(jié)果,可以得到:r=0.2020 x0=6.0496
直接利用算出來的參數(shù)計算2020年的結(jié)果(t=22)
運行代碼:

>> x=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76 92 105.7 122.8 131.7 150.7 179.3 203.2 226.5 248.7 281.4]; >> y=log(x);t=0:1:21;p=polyfit(t,y,1);r=p(1);a=p(2);x0=exp(a);%若要預(yù)測2010年的人口對t進行更改t=0:1:22;s=dsolve('Dx=r*x','x(0)=x0','t'); >> t=22; >> eval(s)

運行結(jié)果:

指數(shù)增長模型:方法二

先對人口數(shù)據(jù)進行數(shù)值微分,再計算增長率并將其平均值作為 的估計; 直接取原始數(shù)據(jù)。
公式:

先求rk,再求出r,再根據(jù)公式
求出模型的預(yù)估值
代碼如下:
我是以函數(shù)文件運行:

function [ x2 ] = method_2( x ) %方法二:先對人口數(shù)據(jù)作數(shù)值微分,再計算增長率并將其平均值作為r的估計;x0直接采用原數(shù)據(jù)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-1 rk(i)=(x(i+1)-x(i-1))/2; end rk=rk./x; r=sum(rk)/n; x2=zeros(n,1); x2(1)=x(1); for i=1:n x2(i)=x2(1)*exp(r*t(i)); endend

運行代碼

x=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76 92 105.7 122.8 131.7 150.7 179.3 203.2 226.5 248.7 281.4]; m=1790:10:2000; m=m'; m(:,2)=x'; m(:,3)=method_1(x);m(:,4)=method_2(x);

運行界面:

運行結(jié)果:第一列代表年份;第二列代表實際人口;第三列為指數(shù)增長模型:方法一的預(yù)估值;第四列為指數(shù)增長模型:方法二的預(yù)估值

對2010年人口預(yù)測

已經(jīng)求得r與x0代碼:

x=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76 92 105.7 122.8 131.7 150.7 179.3 203.2 226.5 248.7 281.4]; 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-1 rk(i)=(x(i+1)-x(i-1))/2; end rk=rk./x; r=sum(rk)/n; x2=zeros(n,1); x2(1)=x(1); >> t=22; >> x2(1)*exp(r*t)

運行結(jié)果:

改進的指數(shù)增長模型

指數(shù)增長模型進行改進。改進為:
假設(shè):


利用dsolve()函數(shù)可得:

已知t值,根據(jù)上面我們已經(jīng)求過了rk,所以rk也是已知的,然后利用最小二乘法polyfit()函數(shù)計算出
中的r0和r1,x0=3.9,利用eval()函數(shù)求出結(jié)果
運行代碼:
函數(shù):

function [ x3 ] =method_3( x ) %方法三:改進的指數(shù)增長模型 % Detailed explanation goes here 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-1 rk(i)=(x(i+1)-x(i-1))/2; end rk=rk./x; p=polyfit(t,rk,1); r0=p(2); r1=-p(1); s=dsolve('Dx=(r0-r1*t)*x','x(0)=x0','t'); x0=3.9; x3=zeros(n,1); x3=eval(s); x3=x3'; end

運行代碼:

x=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76 92 105.7 122.8 131.7 150.7 179.3 203.2 226.5 248.7 281.4]; m=1790:10:2000; m=m'; m(:,2)=x'; m(:,3)=method_1(x); m(:,4)=method_2(x);m(:,5)=method_3(x);

運行界面:

運行結(jié)果:第一列代表年份;第二列代表實際人口;第三列為指數(shù)增長模型:方法一的預(yù)估值;第四列為指數(shù)增長模型:方法二的預(yù)估值;第五列改進指數(shù)模型的預(yù)估值

對2010人口預(yù)測

>> x=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76 92 105.7 122.8 131.7 150.7 179.3 203.2 226.5 248.7 281.4]; >> 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-1 rk(i)=(x(i+1)-x(i-1))/2; end rk=rk./x; p=polyfit(t,rk,1); r0=p(2); r1=-p(1); s=dsolve('Dx=(r0-r1*t)*x','x(0)=x0','t'); x0=3.9; >> t=22; >> eval(s)

運行結(jié)果:

邏輯斯蒂(logistic)模型

xm:表示人口容量
有了人口容量的限制,當(dāng)人口數(shù)量增加時,增長率r減小,用
表示。

  • 當(dāng)x=0時,r(0)=r,則a=r
  • 當(dāng)x=xm時,此時人口不再增長,增長率r=0,于是:b=-r/x0
  • 邏輯斯蒂(logistic)模型:方法一

    開勇函數(shù)dsolve()求解可得


    代碼如下:函數(shù)

    function [ x4 ] = logistic_1( x ) %邏輯斯蒂模型方法一 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-1 rk(i)=(x(i+1)-x(i-1))/2; end rk=rk./x; p=polyfit(x,rk,1); b=p(1); a=p(2); r=a; xm=-r/b; s=dsolve('Dx=r*x*(1-x/xm)','x(0)=x0','t'); x0=3.9; x4=eval(s); x4=x4'; x4=abs(x4); end

    運行代碼:

    x=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76 92 105.7 122.8 131.7 150.7 179.3 203.2 226.5 248.7 281.4]; m=1790:10:2000; m=m'; m(:,2)=x'; m(:,3)=method_1(x); m(:,4)=method_2(x); m(:,5)=method_3(x); m(:,6)=logistic_1(x);

    運行界面:

    運行結(jié)果:第一列代表年份;第二列代表實際人口;第三列為指數(shù)增長模型:方法一的預(yù)估值;第四列為指數(shù)增長模型:方法二的預(yù)估值;第五列改進指數(shù)模型的預(yù)估值;第六列邏輯斯蒂方法一預(yù)估值

    對2010預(yù)測

    代碼:

    >> x=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76 92 105.7 122.8 131.7 150.7 179.3 203.2 226.5 248.7 281.4]; >> 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-1 rk(i)=(x(i+1)-x(i-1))/2; end rk=rk./x; p=polyfit(x,rk,1); b=p(1); a=p(2); r=a; xm=-r/b; s=dsolve('Dx=r*x*(1-x/xm)','x(0)=x0','t'); x0=3.9; >> t=22; >> eval(s)

    運行結(jié)果:如果出現(xiàn)結(jié)果有復(fù)數(shù),對結(jié)果進行轉(zhuǎn)換,如下圖

    邏輯斯蒂(logistic)模型:方法二

    直接用數(shù)據(jù)和非線性最小而成估計參數(shù):
    運行代碼:

    function [ x5 ] = logistic_2( x ) %邏輯斯蒂模型方法二n=length(x); t=0:1:n-1;f=@(a,t)a(1)./(1+(a(1)./a(2)-1).*exp(-a(3).*t));[A,cancha]=lsqcurvefit(f,[500,3.9,0.3],t,x);s=dsolve('Dx=r*x*(1-x/xm)','x(0)=x0','t'); r=A(3); x0=A(2); xm=A(1); x5=eval(s); x5=x5'; x5=abs(x5); end

    運行代碼:

    x=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76 92 105.7 122.8 131.7 150.7 179.3 203.2 226.5 248.7 281.4]; m=1790:10:2000; m=m'; m(:,2)=x'; m(:,3)=method_1(x); m(:,4)=method_2(x); m(:,5)=method_3(x); m(:,6)=logistic_1(x); m(:,7)=logistic_2(x);

    運行界面:

    運行結(jié)果:第一列代表年份;第二列代表實際人口;第三列為指數(shù)增長模型:方法一的預(yù)估值;第四列為指數(shù)增長模型:方法二的預(yù)估值;第五列改進指數(shù)模型的預(yù)估值;第六列邏輯斯蒂方法一預(yù)估值;第七列邏輯斯蒂方法二預(yù)估值

    對2010預(yù)測

    代碼:

    x=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76 92 105.7 122.8 131.7 150.7 179.3 203.2 226.5 248.7 281.4]; >> n=length(x); t=0:1:n-1;f=@(a,t)a(1)./(1+(a(1)./a(2)-1).*exp(-a(3).*t));[A,cancha]=lsqcurvefit(f,[500,3.9,0.3],t,x);s=dsolve('Dx=r*x*(1-x/xm)','x(0)=x0','t'); r=A(3); x0=A(2); xm=A(1); >> t=22; >> eval(s)

    運行結(jié)果:

    總結(jié)

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

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