姜启源《数学模型》——人口增长,MATLAB代码实现

 根据教材上给定的每十年美国的人口数据,预测2020年美国人口数据。

注:本文中的数据省略了数量级

模型一 指数增长模型

\frac{dx}{dt}=rx,x\left( 0 \right) =x_0 x\left( t \right) =x_0e^{rt}

方法一:一元线性回归

\ln x=\ln x_0+rt

注:使用了MATLAB中的cftool工具箱

 结果如下:

方法二:数值微分

x'\left( t_k \right) =\frac{x_{k+1}-x_{k-1}}{2\Delta t},k=1,2...n-1 x'\left( t_0 \right) =\frac{-3x_0+4x_1-x_2}{2\Delta t}, x'\left( t_n \right) =\frac{x_{n-2}-4x_{n-1}+3x_n}{2\Delta t}

lndata=log(data);
dx(1)=(-3*data(1)+4*data(2)-data(3))/20;
for i=2:21
    dx(i)=(data(i+1)-data(i-1))/20;
end
dx(22)=(3*data(22)+data(20)-4*data(21))/20;
r=dx./data;
mean_r=mean(r);
fun=3.9*exp(mean_r.*t);
plot(t,fun);
hold on;
plot(t,data,'.');
hold off;

拟合结果如下: 

方法三   改进的指数增长模型

\frac{dx}{dt}=r\left( t \right) =r_0-r_1t,x\left( 0 \right) =x_0 x\left( t \right) =x_0e^{\left( r_0t-\frac{1}{2}r_1t^2 \right)}

%一次函数拟合增长率
p1=polyfit(t,r,1);
r0=p1(2);
r1=-p1(1);
rt=polyval(p1,t);
plot(rt);
hold on;
plot(r,'.');
hold off;
xt=3.9.*exp(r0.*t-0.5*r1.*t.^2);
plot(xt);
hold on;
plot(data,'.')

 人口的拟合结果如下:

 

模型二 logistic模型 

x\left( t \right) =\frac{x_m}{1+\left( \frac{x_0}{x_m}-1 \right) e^{-rt}} $ $x\left( t \right) =\frac{1}{a+be^{-rt}}

clc,clear;
%准备拟合数据
t=0:10:210;
data=[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];
t1=0:10:220;
data1=[data 308.7];
%根据工具箱cftool求解出参数
a=0.002057
b=0.12
r=0.0208
xm=1.0/a*1e6%单位转换
x0=xm/(b*xm+1)*1e6
%美国人口预测量pre=1/(a+b*exp(-r*230))*1e6

使用MATLAB工具箱cftool的界面

模型效果:

根据logistic部分的代码,即模型预测2020年美国人口数据为3.2674亿人,对比实际数据:查阅资料可知,截至2020年4月1日,美国人口约为3.31亿人,相对误差约为1.3%。

  • 13
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值