人口增长模型
摘要
本文根据某地区的人口统计数据,建立模型估计该地区2010年的人口数量。 首先,通过直观观察人口的变化规律后,我们假设该地区的人口数量是时间的二次函数,建立了一个二次函数模型,并用最小二乘法对已有数据进行拟合得到模型的具体参数,从而可以预测2010年的人口数为333.8668百万。
然后,我们发现从1980年开始该地区的人口增长明显变慢,于是我们假设人口增长率是人口数的线性减函数,即随着人口数的增加,人口的增长速度会慢慢下降,从而我们建立了阻滞增长模型,利用此模型我们最后求出2010年的人口预报数为296.3865。
关键字:人口预报,二次函数模型,阻滞增长模型
问题重述:
根据某地区人口从1800年到2000年的人口数据(如下表),建立模型估计出该地区2010年的人口 ,同时画出拟合效果的图形。
表1 该地区人口统计数据 年 份 人口 年 份 人口 年 份 人口
1800 7.2 1870 48.6 1940 1810 13.8 1880 58.1 1950 1820 17.2 1890 73.3 1960 1830 17.6 1900 89.8 1970 1840 24.7 1910 1850 33.6 1920 1860 36.2 1930 105.6 125.9 149.1 1980 1990 2000 172.2 189.8 230.5 246.7 262.1 271.2 280.3 符号说明
x(t) t时刻的人口数量 x0 初始时刻的人口数量 r 人口增长率
xm 环境所能容纳的最大人口数量,即r(xm)0
1
数学建模_叶客诚
问题分析
首先,我们运用Matlab软件[1]编程(见附件1),绘制出1800年到2000年的人口数据图,如图1。
30025020015010050018001820184018601880190019201940196019802000
图1 1800年到2000年的人口数据图
从图1我们可以看出1800年到2000年的人口数是呈现增长的趋势的,而且类似二次函数增长。 所以我们可以建立了一个二次函数模型,并用最小二乘法对已有数据进行拟合得到模型的具体参数。
于是我们假设人口增长率是人口数的线性减函数,即随着人口数的增加,人口的增长速度会慢慢下降,从而我们可以建立一个阻滞增长模型。
模型一:二次函数模型
模型建立
我们假设该地区t时刻的人口数量的人口数量x(t)是时间t的二次函数,即:
x(t)at2btc
我们可以根据最小二乘法,利用已有数据拟合得到具体参数。即,要求a、b和c,使得以下函数达到最小值:
2
数学建模_叶客诚
E(a,b,c)(ati2bticxi)2
i1n其中xi是ti时刻该地区的人口数,即有:
E(a,b,c)(a18002b1800c7.2)2...a20002b2000c280.3)2
EEE0,0,0,可以得到三个关于a、b和c的一次方程,从而可abc解得a、b和c。
我们用Matlab编程(见附件2),解得a0.006018,b21.357,c18948,即:
令
x(t)0.006018t221.357t18948
从而我们可以预测2010年的人口数为x(2010)333.8668百万。
350原始数据拟合函数300250人口数200150100500180018501900年份195020002050
图2 二次函数模型的拟合效果图
图2是所得到的二次函数模型和原数据点的拟合效果图。 从图2可以看出拟合的效果在1950年之前还可以,但是对后期的数据拟合的不好。
模型二:阻滞增长模型
我们假设人口增长率r是人口数x的线性减函数,即随着人口数的增加,人
3
数学建模_叶客诚
口增长速度会慢慢下降:
r(x)r0sx
人口数量最终会达到饱和,且趋于一个常数xm,当xxm时,增长率为0:
r0sxm0
由上面的关系式可得出:
xr(x)r01
xm把上式代进指数增长模型的方程中,并利用初始条件x(1800)7.2,可以得到:
dxxr10xmdtx(1800)7.2x 解得:
x(t)xm10xm11er(t1800)72
我们可以利用已有数据拟合求解得(程序见附件4):
xm334.36, r-0.027958。
可以预测2010年的人口数为x(2010)296.3865百万。
4
数学建模_叶客诚
300原始数据拟合函数250200人口数150100500180018501900年份195020002050
图4 阻滞增长模型的拟合效果图
图4是阻滞增长模型的拟合效果图。 从图4我们可以看出我们的模型对该地区的人口数据拟合得很好。可以看出阻滞增长模型更客观地反映人口的增长规律,基本上都在拟合曲线上,拟合效果好,特别是后期的数据非常的吻合,所以次模型对未来的人口数预测是很适合的,结果更准确,对未来的预测比指数增长模型更为优越。
参考文献
[1] 刘卫国, 陈昭平, 张颖. MATLAB程序设计与应用[M], 北京:高等教育出版
社, 2002年。 [2] 姜启源, 谢金星, 叶俊. 数学建模(第三版)[M], 北京:高等教育出版社,
2004年。
附录
附件1:1800年到2000年的人口数据图
x=1800:10:2000;
y=[7.2 13.8 17.2 17.6 24.7 33.6 36.2 48.6 58.1 73.3 89.8 105.6 125.9 149.1
5
数学建模_叶客诚
172.2 189.8 230.5 246.7 262.1 271.2 280.3]; figure;
plot(x,y,'r*');
附件2:线性增长模型的拟合代码 x=1800:10:2000;
y=[7.2 13.8 17.2 17.6 24.7 33.6 36.2 48.6 58.1 73.3 89.8 105.6 125.9 149.1 172.2 189.8 230.5 246.7 262.1 271.2 280.3];
plot(x,y,'r*'); % 画点,红色
hold on; % 使得以下图形画在同一个窗口
p = polyfit(x,y,2) % 多项式拟合,返回系数p
xn = 1800:5:2010; % 定义新的横坐标
yn = polyval(p,xn); % 估计多项式p的函数值 plot(xn,yn) % 把(x,yn)定义的数据点依次连起来
% 给图形加上图例 xlabel('年份'); ylabel('人口数');
legend('原始数据','拟合函数',2); box on; grid on;
x1=2010;
y1 = polyval(p,x1) % 估计多项式p在未知点的函数值
附件3:阻滞增长模型的拟合代码 clc; % 清屏幕
clear; % 清除以前的变量
% 数据点(t,y) t=1800:10:2000;
y=[7.2 13.8 17.2 17.6 24.7 33.6 36.2 48.6 58.1 73.3 89.8 105.6 125.9 149.1 172.2 189.8 230.5 246.7 262.1 271.2 280.3]; plot(t,y,'b*');
% 定义需要拟合的函数类型myfun(a,t),a是参数列表,t是变量 myfun = @(a,t)[a(1)./(1+(a(1)./7.2-1)*exp(a(2)*(t-1800)))]; a0=[500,1]; % 初始值
6
数学建模_叶客诚
% 非线性拟合.最重要的函数,第1个参数是以上定义的函数名,第2个参数是初值,第3、4个参数是已知数据点 a=lsqcurvefit(myfun,a0,t,y);
disp(['a=' num2str(a)]); % 显示得到的参数
% 画出拟合得到的函数的图形 ti=1800:10:2010; yi=myfun(a,ti); hold on;
plot(ti,yi,'r');
% 给图形加上图例 xlabel('年份'); ylabel('人口数');
legend('原始数据','拟合函数',2); box on; grid on;
tn=2010; % 预测在未知点的函数值 yn=myfun(a,tn);
disp(['yn=' num2str(yn)]); % 显示得到的参数
7
因篇幅问题不能全部显示,请点此查看更多更全内容