人口增长模型——基于matlab语言

标题数学建模:人口增长模型——基于matlab语言

写文章是为了记录存档,可能排版比较拉跨,但源码皆粘贴可用,若有帮到你,请给个赞以表示鼓励!!!!

一. 建立模型背景:通过已知的人口数据,研究人口变化规律,建立人口数学模型描述人口发展的规律。做出较准确的增长预测,是指定积极、稳妥的人口政策的前提。
二. 人口指数增长模型的建立:当考察一个较大地区的人口随着时间延续而变化的规律时,为了利用微积分这一数学工具。可以将人口看作连续时间t的连续可微函数x(t)。记初始时刻(t=0)的人口为x0.假设单位时间人口增长率为常熟r,rx(t)就是单位时间内x(t)的增量dx/dt,于是得到满足的微分方程和初始条件是dx/dt=rx,x(0)=x0,进而得出x(t)=x0e^(rt);这两个公式称为指数增长模型;
三. 指数增长模型的参数估计:包括两种方法;

  1. 方法一:直接用人口数据和最小和二乘法模型的参数
    1.1求解方法:在matlab中,要通过线性最小二乘法预测参数系数,我们是使用polyfit()函数,通过已知的真实人口数据,就可得出计算结果,计算代码:
% 人口预测
y1=1:22;
p1=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6...
    50.2 62.9 76.0 92.0 105.7 122.8 131.7 150.7...
    179.3 203.2 226.5 248.7 281.4];
% 方法一
r1=polyfit(y1,log(p1),1);
exp(polyval(r1,1790));
plot(y1,p1,'.',y1,exp(polyval(r1,y1)));
grid on

1.2.求解参数结果:r(1)代表增长率,求解r结果截图
在这里插入图片描述
1.3.用方法一绘制图像结果如下:
在这里插入图片描述
1.4.用方法一获取参数计算人口数量如图
在这里插入图片描述
2.方法二:先对人口数据作数值微分,在计算增长率并将其平均值作为r的估计值,x0直接采用原始数据;需要注意的是这里采用的数值微分是利用差分法求其平均值进行的计算;
2.1.求解代码:

% 方法二
x1=zeros(1,22);
x1(1,1)=(-3*p1(1,1)+4*p1(1,2)-p1(1,3))/2/p1(1);
for i=2:21
    x1(1,i)=(p1(1,i+1)-p1(1,i-1))/2/p1(i);
end
x1(1,22)=(p1(1,22-2)-4*p1(1,22-1)+3*p1(1,22))/2/p1(22);
x2=mean(x1);
r2=zeros(1,22);
r2(1)=p1(1);
for i=2:22
    r2(i)=p1(1)*exp(x2*(i-1));
end
plot(y1,p1,'.',y1,r2);

2.2.求解参数结果:
在这里插入图片描述
2.3.用方法二计算参数绘制参数图像如下:
在这里插入图片描述

2.4.用方法二得到的参数计算出的人口数量如下:
在这里插入图片描述

四、改进的指数增长模型
1.改进原因:增长率r从19世纪上半叶的0.03年左右,下降到20世纪末只略大于0.01年,针对这么大的变化,应该改进指数增长模型(4)中人口增长率为常熟的假设,将r视为t的函数r(他),即改写方程为dx/dt=r(t)x=(r0-r1t)*x,x(0)=x0;
2.利用最小二乘法求解改进模型的参数代码:

% 改进的指数增长模型
x3=polyfit(y1,x1,1);
r3=zeros(1,22);
r3(1)=p1(1);
for i=2:22
    r3(i)=p1(1)*exp(0.3252*(i-1)-0.0114*(i-1)^2/2);
end
plot(y1,p1,'*',y1,r3)
grid on

3.用改进的指数增长模型计算美国人口图像如下:
在这里插入图片描述
4.所计算的人口如下:
在这里插入图片描述
五、logistics模型
1.产生原因:在分析人口增长到一定数量后增长率下降的主要原因时,人们注意到,自然资源、环境条件等因素对人口的增长起着阻滞的作用,并且随着人口的增加,阻滞作用越来越大,logistic模型就是考虑到这些因素,对指数增长模型的基本假设进行修改后得到的;
2.logistic方程:dx/dt=rx(1-x/xm);
3.logistics模型的参数估计也有两种方法,方法一是对人口数据进行数值微分后计算增长率,方法二是直接用人口数据和非线性最小二乘法估计r,x0,xm;
4.方法一计算代码:

%原始增长率见p142的表三
t1=0:21;
rr=[0.2949 0.3113 0.2986 0.2969 0.2907 0.3012 0.3082...
    0.2452 0.2435 0.2420 0.2051 0.1914 0.1614 0.1457...
    0.1059 0.1059 0.1579 0.1464 0.1161 0.1004...
    0.1104 0.1349]
%拟合增长率
pp=polyfit(t,rr,1)
RR=polyval(pp,t)
plot(t1,rr,'*',t1,RR,'b');
grid on
%求解人口
x4=polyfit(p1,x1,1);
xm=-x4(2)./x4(1);
xt=xm./(1+(xm./p1(1)-1).*exp(-x4(2).*t));
%axis([0 22 -inf inf])
r4=zeros(1,22);
r4(1)=p1(1);
for i=2:22
    r4(i)=xm./(1+(xm./p1(1)-1).*exp(-x4(2).*(i-1)));
end

plot(y1,p1,'*',y1,r4)
grid on

5.方法一所得参数如下:
在这里插入图片描述
6.方法一获得的人口增长率绘制图像如下:
在这里插入图片描述
7.方法一的参数拟合图像如下:
在这里插入图片描述
8.方法一获得的人口数值如下
在这里插入图片描述
9.方法二计算代码

x4_1=polyfit(p1,x1,2);
xm_1=-x4_1(2)/x4_1(1);
r4_1=zeros(1,22);
r4_1(1)=7.6962;
for i=2:22
    r4_1(i)=443.9931/(1+(443.9931/7.6962-1)*exp(-0.2155*(i-1)));
end

plot(y1,p1,'*',y1,r4_1)
grid on

10.方法二估计参数图像:
在这里插入图片描述
11.方法二估计人口数值
在这里插入图片描述

写文章是为了记录存档,可能排版比较拉跨,但源码皆粘贴可用,若有帮到你,请给个赞以表示鼓励!!!!

猜你喜欢

转载自blog.csdn.net/m0_55704585/article/details/121709836