人口增长模型.docx

上传人:b****6 文档编号:6572799 上传时间:2023-01-08 格式:DOCX 页数:15 大小:329.74KB
下载 相关 举报
人口增长模型.docx_第1页
第1页 / 共15页
人口增长模型.docx_第2页
第2页 / 共15页
人口增长模型.docx_第3页
第3页 / 共15页
人口增长模型.docx_第4页
第4页 / 共15页
人口增长模型.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

人口增长模型.docx

《人口增长模型.docx》由会员分享,可在线阅读,更多相关《人口增长模型.docx(15页珍藏版)》请在冰豆网上搜索。

人口增长模型.docx

人口增长模型

人口增长模型

 

学院:

专业:

姓名:

学号:

___实验时间:

实验地点:

一、实验项目:

数据拟合与模型参数估计

二、实验目的和要求

a.了解数据拟合的原理和Matlab中的有关命令。

b.建立实用的人口增长模型,包括参数估计、模型检验和人口预测

三、实验内容

问题的描述

建立指数增长模型和阻滞增长模型,根据下表中美国人口数据进行模型的参数估计、检验和预报,便可以分析人口增长趋势,认识人口数量的变化规律,对人口增长做出有效的控制。

下表是用excel表格填写的美国人口数据:

问题的分析

①在理想的情况下,假设人口增长率不变,可以建立指数增长模型;

②由于自然资源、环境条件等因素对人口的增长起着组织作用,并且随着人口的增加,阻滞作用越来越大,考虑到这个因素,建立阻滞增长模型——logistic模型。

模型一、指数增长模型

建立模型

记时刻t的人口为x(t),将x(t)视为连续、可微函数,记初始时刻(t=0)的人口为x0,年增长率为常数r,即单位时间内x(t)的增量dx/dt等于r乘以x(t),于是得到x(t)满足微分方程

  

(1)

由此方程很容易解出

(2)

r>0时,

(2)式表明人口将按指数规律随时间无限增长,称为指数增长模型。

模型求解(代码、计算结果或输出结果)

参数估计:

为了估计指数增长模型中的参数r和x0,需将

(2)式取对数,得到:

y=rt+ay=ln(x)a=ln(x0)(7)

以美国人口实际数据为例,对(7)式作数据拟合。

①如用1790——1900年的数据:

(t以1790—1990间的数字表示,求出的r是以/年为单位)

代码如下:

t=1790:

10:

1900;

c=[3.9,5.3,7.2,9.6,12.9,17.1,23.2,31.4,38.6,50.2,62.9,76.0];

d=log(c);%y=ln(x),所以将c取自然对数

x=polyfit(t,d,1);%因为t用1790—1990表示,所以r=x

(1)(以/年为单位,不是/10

年)x0=x

(2)是最初t=0时的人数,可用z(1790)求出本题中实际意义上的x0,即截屏中的4.2百万

z=polyval(x,t);

z=exp(z);

[t;z]';%输出的1790——1900年的人口计算值

plot(t,c,'k+',t,z,'r')

gtext('+代表:

实际数据')

代码截屏:

指数增长拟合图形(1790—1900年)

②用1790——1990年的数据进行参数估计(t以0—21间的数字表示,求出的r以/10年为单位)

t=0:

1:

21;

c=[c92.0106.5123.2131.7150.7179.3204.0226.5251.4281.4];

d=log(c);

x=polyfit(t,d,1)%r=x

(1)以10年为单位,x

(2)=ln(x0),即x0=exp(x

(2))

exp(x

(2))%x0值,因为是用0:

21表示t,所以x0就是1790年的计算值

z=polyval(x,t);

z=exp(z);

[t;z]';%计算1790—2000年的人口值

plot(t,c,'k+',t,z,'r')

gtext('+代表:

实际数据')

代码截屏:

指数增长模型拟合图形(1790—2000年)

从图像可看出,指数增长模型对人口的预计,随时间的增长人口数量趋近于无穷,t越大,拟合的数据误差越大。

模型二、阻滞增长模型——logistic模型

由模型一可知,人口无限增长的分析显然不能成立,为了使人口预报特别是长期预报更好地符合实际情况,必须修改指数增长模型关于人口增长率是常数这个基本假设,故建立阻滞增长模型。

阻滞作用体现在对人口增长率r的影响上,使得r随着人口数量x的增加而下降,若将r表示为x的函数r(x),则它应是减函数,于是有

      (3)

对r(x)做简单的假定,设r(x)为x的线性函数,即 r(x)=r-sx (r,s>0)(4)

这里r称固有增长率,表示人口很少时(理论上x=0)的增长率。

引入自然资源和环境条件所能容纳的最大人口数量xm,称人口容量。

当x=xm时,人口不再增长。

即x=xm时,r(xm)=0,代入(3),得到

,x(0)=x0(5)

方程右端的因子rx体现人口自身的增长趋势,因子

则体现了环境和资源对人口增长的阻滞作用。

显然,x越大,前一因子rx越大,后一因子

越小,人口增长是两个因子共同作用的结果,(5)式便称为阻滞增长模型。

以x为横轴,以

为纵轴作出方程(5)的图形,可以分析人口增长速度

随着x的增加而变化的情况,从而大致地看出x(t)的变化规律。

图形代码:

>>x=3.0:

300.0;

>>y=0.2.*x.*(1-x./300.0);

>>plot(x,y)

>>gtext('dx/dt')

>>gtext('xm/2')

实际上,利用分离变量法,由(5)很容易得到

(6)

由计算机画出(6)式的图形,如图:

图形代码:

>>symsxtrxmx0

>>x=dsolve('Dx=r*x*(1-x/xm)','x(0)=x0','t');

>>y=subs(x,{x0,r,xm},{3.9,0.21,384.0});

>>ezplot(y,[0,50])

>>gtext('x0-----')

>>gtext('xm/2--------------------------------------')

>>gtext('xm---------------------------')

模型求解(代码、计算结果或输出结果)

用阻滞增长模型进行人口预报,要先作参数估计,除了初始值人口r和x0外,需估计xm,他们可利用数据拟合得到。

1.对于r和xm的估计:

将(5)改为:

(8)

①可以以从实际人口数据用数值微分算出,右端r,s是线性的,用差分法估计参数:

我们利用1790:

1990的数据进行参数估计:

c=[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,106.5,123.2,131.7,150.7,179.3,204.0,226.5,251.4];

b=diff(c)

b=%用前向差分进行数值微分,b即:

dx

Columns1through14

1.40001.90002.40003.30004.20006.10008.20007.200011.600012.700013.100016.000014.500016.7000

Columns15through20

8.500019.000028.600024.700022.500024.9000

b1=[8131519];

b(b1)=[];%为估计更准确,去掉b向量中的第8、13、15、19个异常数据

b2=[19141620];

e=c;%e是(dx/dt)/x中的x向量,先令其为c(1790—1900的所有数据)

e(b2)=[];%去掉e中的第1、9、14、16、20个数值

dxx=b./e;%dxx即:

(dx/dt)/x,因为dt=1,所以dxx也为dx/x=b./e

a=polyfit(e,dxx,1)%r=a

(2),xm=-r/a

(1)

x0=3.9;

r=a

(2);

xm=-r/a

(1);

t=0:

1:

21;%用估计的参数计算1790——2000年的所有人口数值

f=inline('xm./(1+(xm/x0-1)*exp(-r*t))','t','xm','r','x0');

c(22)=281.4;

plot(t,f(t,xm,r,x0),'-r',t,c,'+b');

g=xm./(1+(xm/x0-1)*exp(-r*t))%g为计算的1790----2000年的人口数值

a1=[g(20)g(21)g(22)];%计算1980、1990的误差,估计2000的人口数量并计算误差

b1=[c(20)c(21)c(22)];

wu=(b1-a1)./a1%误差结果显示

>>gtext('用数值微分作参数估计:

')

代码及输出截屏:

用数值积分拟合的阻滞增长模型图形

结果分析:

由该图像可看出,拟合数据与真实数据变化趋势一致,且吻合较好,误差在10%以内,但还是有点大,这是因为数据选择的原因,在这里是用全部1790—1990年间的数据,去掉了其中的个别异常数据进行的参数估计,而书上是用1860---1990年间的数据,去掉了其中的个别异常数据。

因为情况太多,可能与书上真实实验时的数据不一致,所以,结果误差相对较大。

②用

进行参数估计:

functionf=curve2(x,tdata)%.m文件

f=x

(1)./(1+(x

(1)/x(3)-1)*exp(-x

(2)*tdata));%x

(1):

xmx

(2):

rx(3):

x0

t=0:

1:

21;

tdata=t;%命令窗口的输入

c=[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.0106.5123.2131.7150.7179.3204.0226.5251.4281.4];

cdata=c;

x0=[300.0,0.02,3.9];

x=lsqcurvefit('curve2',x0,tdata,cdata)

x=

444.28920.21607.6576%x

(1):

xmx

(2):

r/10年x(3):

x0(1790年)

f=x

(1)./(1+(x

(1)/x(3)-1)*exp(-x

(2)*tdata))%1790—2000人口计算值

>>plot(t,f,'r',t,c,'b+')

代码及图形截屏:

误差分析:

用1980.1990.2000年的实际数据与计算值比较,得到:

△(1990)=|f(1980)-c(1980)|/c(1980)=0.48%;

△(1990)=|f(1990)-c(1990)|/c(1990)=1.09%;

△(2000)=|f(2000)-c(2000)|/c(2000)=0.56%

这说明拟合的计算值已与实际值相当接近,模型建立成功,可用于进一步的研究。

检验及预测:

据美国人口普查局公布,截止到2010年4月,美国总人口为3.087,亿现在用上面的结果对2010年的数据进行模型检验和模型预测:

预测得到的结果说明,预测的误差为3.49%,这已经说明该模型具有很好的实用性了。

(因为标准误差是5%,一般认为在5%以内的误差均是允许误差),这也是对该模型的检验。

结果分析:

由上误差分析和拟合图形可知,用该方式拟合的数据误差极小,则说明该模型建立成功且实用性强,可用于进行较为准确的人口的预测。

对于以上两种方式的阻滞增长模型进行预测时,并没有达到书上那么准确的结果,这是由于书上的数据是以1860—1990年(去掉其中个别异常数据)进行的拟合,而从这些数据中去掉异常数据,最大会有(2^14-1)中可能,所以由于数据的选择性,没有实现书上那么小的误差。

4种拟合方式人口数据拟合的结果

四、实验总结

1.指数增长模型:

从两种表现形式的指数增长模型可看出,若用0—21间的数表示t,则r是以/年为单位,而若用1790—2000间的数表示,便是以/10年为单位;

2.阻滞增长模型:

阻滞增长模型,书上是用1860——1990年的数据(去掉个别异常数据)拟合的,因不知道书上到底是去掉了哪几个数据,我试了几种可能,但都没出现书上误差那么小的结果,所以,最后直接用了全部的数据做估计,误差相对书上结果而言较大,但最后一种拟合方式的误差较小,在误差允许范围内也可用于人口预测。

由上分析,也可知,误差的原因可能是由于数据的选择不当。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 法语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1