数学建模——人口增长模型的matlab实现以及对2010年人口预测
文章目錄
- 運(yùn)行軟件:MATLAB R2012a
- 實(shí)驗(yàn)數(shù)據(jù)
- 指數(shù)增長模型
- 指數(shù)增長模型:方法一
- 對(duì)2010年的人口預(yù)測
- 指數(shù)增長模型:方法二
- 對(duì)2010年人口預(yù)測
- 改進(jìn)的指數(shù)增長模型
- 對(duì)2010人口預(yù)測
- 邏輯斯蒂(logistic)模型
- 邏輯斯蒂(logistic)模型:方法一
- 對(duì)2010預(yù)測
- 邏輯斯蒂(logistic)模型:方法二
- 對(duì)2010預(yù)測
運(yùn)行軟件:MATLAB R2012a
實(shí)驗(yàn)數(shù)據(jù)
| 人口/百萬 | 3.9 | 5.3 | 7.2 | 9.6 | 12.9 | 17.1 | 23.2 | 31.4 |
| 增長率/10年 | 0.2949 | 0.3113 | 0.2986 | 0.2969 | 0.2907 | 0.3012 | 0.3082 | 0.2452 |
| 人口/百萬 | 38.6 | 50.2 | 62.9 | 76.0 | 92.0 | 105.7 | 122.8 | 131.7 |
| 增長率/10年 | 0.2435 | 0.2420 | 0.2051 | 0.1914 | 0.1614 | 0.1457 | 0.1059 | 0.1059 |
| 人口/百萬 | 150.7 | 179.3 | 203.2 | 226.5 | 248.7 | 281.4 | 308.7 |
| 增長率/10年 | 0.1579 | 0.1464 | 0.1161 | 0.1004 | 0.1104 | 0.1349 |
指數(shù)增長模型
滿足人口增長的微分方程和初始條件為:
利用函數(shù)dsolve()可得:
指數(shù)增長模型:方法一
根據(jù)已知數(shù)據(jù)對(duì)模型的參數(shù)進(jìn)行估計(jì)又稱為數(shù)據(jù)擬合。
對(duì)下面的這個(gè)公式同時(shí)取對(duì)數(shù)
可得
t:代表年份1970取0,依次類推
x:人口數(shù)量,實(shí)驗(yàn)數(shù)據(jù)已知
根據(jù)求出的公式可以求出y;然后利用polyfit()函數(shù)求出r,a的值;當(dāng)a求出來時(shí),根據(jù)上面求出的公式,可以求出x0;將r,x0帶入公式
可求出指數(shù)增長模型方法一的x值
代碼如下:
使用的是matlb函數(shù)
運(yùn)行代碼:
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);運(yùn)行界面:
運(yùn)行結(jié)果:第一列代表年份;第二列代表實(shí)際人口;第三列為指數(shù)增長模型:方法一的預(yù)估值
對(duì)2010年的人口預(yù)測
根據(jù)上面算出的結(jié)果,可以得到:r=0.2020 x0=6.0496
直接利用算出來的參數(shù)計(jì)算2020年的結(jié)果(t=22)
運(yùn)行代碼:
運(yùn)行結(jié)果:
指數(shù)增長模型:方法二
先對(duì)人口數(shù)據(jù)進(jìn)行數(shù)值微分,再計(jì)算增長率并將其平均值作為 的估計(jì); 直接取原始數(shù)據(jù)。
公式:
先求rk,再求出r,再根據(jù)公式
求出模型的預(yù)估值
代碼如下:
我是以函數(shù)文件運(yùn)行:
運(yùn)行代碼
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);運(yùn)行界面:
運(yùn)行結(jié)果:第一列代表年份;第二列代表實(shí)際人口;第三列為指數(shù)增長模型:方法一的預(yù)估值;第四列為指數(shù)增長模型:方法二的預(yù)估值
對(duì)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)運(yùn)行結(jié)果:
改進(jìn)的指數(shù)增長模型
指數(shù)增長模型進(jìn)行改進(jìn)。改進(jìn)為:
假設(shè):
利用dsolve()函數(shù)可得:
已知t值,根據(jù)上面我們已經(jīng)求過了rk,所以rk也是已知的,然后利用最小二乘法polyfit()函數(shù)計(jì)算出
中的r0和r1,x0=3.9,利用eval()函數(shù)求出結(jié)果
運(yùn)行代碼:
函數(shù):
運(yùn)行代碼:
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);運(yùn)行界面:
運(yùn)行結(jié)果:第一列代表年份;第二列代表實(shí)際人口;第三列為指數(shù)增長模型:方法一的預(yù)估值;第四列為指數(shù)增長模型:方法二的預(yù)估值;第五列改進(jìn)指數(shù)模型的預(yù)估值
對(duì)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)運(yùn)行結(jié)果:
邏輯斯蒂(logistic)模型
xm:表示人口容量
有了人口容量的限制,當(dāng)人口數(shù)量增加時(shí),增長率r減小,用
表示。
邏輯斯蒂(logistic)模型:方法一
開勇函數(shù)dsolve()求解可得
代碼如下:函數(shù)
運(yùn)行代碼:
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);運(yùn)行界面:
運(yùn)行結(jié)果:第一列代表年份;第二列代表實(shí)際人口;第三列為指數(shù)增長模型:方法一的預(yù)估值;第四列為指數(shù)增長模型:方法二的預(yù)估值;第五列改進(jìn)指數(shù)模型的預(yù)估值;第六列邏輯斯蒂方法一預(yù)估值
對(duì)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)運(yùn)行結(jié)果:如果出現(xiàn)結(jié)果有復(fù)數(shù),對(duì)結(jié)果進(jìn)行轉(zhuǎn)換,如下圖
邏輯斯蒂(logistic)模型:方法二
直接用數(shù)據(jù)和非線性最小而成估計(jì)參數(shù):
運(yùn)行代碼:
運(yùn)行代碼:
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);運(yùn)行界面:
運(yùn)行結(jié)果:第一列代表年份;第二列代表實(shí)際人口;第三列為指數(shù)增長模型:方法一的預(yù)估值;第四列為指數(shù)增長模型:方法二的預(yù)估值;第五列改進(jìn)指數(shù)模型的預(yù)估值;第六列邏輯斯蒂方法一預(yù)估值;第七列邏輯斯蒂方法二預(yù)估值
對(duì)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)運(yùn)行結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的数学建模——人口增长模型的matlab实现以及对2010年人口预测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于Django的网上书城系统
- 下一篇: 基于模糊RBF神经网络轨迹跟踪matla