《数学建模》报告
完美前传1.摘要
随着人口的增加,人们越来越认识到资源的有限性,人口与资源之间的矛盾日渐突出,人口问题已成为世界上最被关注的问题之一。
问题给出了1790—2000年间美国的人口数据,通过分析近两百年的美国人口统计数据表,得知每10年的人口数和人口增长率的变化。预测美国未来的人口。
首先,人口增长率是变化值。对于问题(1)假设了人口上限因此我们选择建立Logistic模型(模型1) 其次,根据表中的人口数据,进行曲线拟合(甲亢平片模型2),通过Matlab进行人口预测。
2.问题分析
人口预测是一个相当复杂的问题,影响人口增长除了人口数与可利用资源外,还与医药卫生条件的改善,人们生育观念的变化等因素有关……. 可以采取几套不同的假设,做出不同的预测方案,进行比较。
人口预测可按预测期长短分为短期预测 (5清教运动年以下)、中期预测(5~20年)和长期预测(20~50年)
。在参数的确定和结果讨论方面,必须对中短期和长期预测这两种情况分开讨论。中短期预测中所用的各项参数以实际调查所得数据为基础,根据以往变动趋势可较准确加以估计,推算结果容易接近实际,现实意义较大。
关键词:预测模型 人口增长率 Logistic
班级:_ 姓名: 学号:_ __
图1
3.模型建立
模型1
(1.1) 假设美国人口上限为5亿,根据表中给出的人口增长率,进行适当的处理,建立微分方程模型;
(1.2) 利用 (1.1) 5060lu中的模型计算各年人口,与实际人口数量比较,计算模型的计算误差;
(1.3) 利用 (1.1) 中的模型预测美国2010,2020,2030,2040,2050年的人口;
(1.4) 假设人口增长率服从[1.1,1.3]上的均匀分布,结合 (1.1) 中建立微分方程模型,预测美国2010,2020,2030,2040,2050年的人口.
图1为美国1790-2000年的人口数据,人口增长率r为每10年的取值。首先对人口
增长率进行处理求出其他年份相对于1790年的增长率R
其中t1=1800年….. t21=2000年(1<n≤21)
例如1810年相对于1790年的增长率为
(3.11+2.99)/2=3.05 其他年份同理可得如图2;对增长率R求平均直为Rx=2.64%
模型1 为阻滞增长模型 假设人口增长率
r(x)是t时人口x(t)的函数,r(x)应该是x的减函数。一个简单的假设是假设
r(x)为x的线性函数r(x)=r-s*x , s>0.最大人口数量Xm=500 当x=Xm时增长率为零。在线性化假设前提下可以得到
r(x) = r (1 – x / Xm),(公式1)
其中的r我们取之前求得的平均增长率r=0.0264 , Xm=500。在公式1假设下,模型可修改为
(公式2)
=/1+(/-1) (公式3)
e取2.718,t为,求出每10年的rt值带入方程算出各年的人口数以
及和实际值的误差见图3。
2010年的R*t=5.808,预测人口为362.32;
2020年的R*t=6.072,预测人口为387.59;
2030年的R*t=6.336,预测人口为408.16;
2040年的R*t=6.6 ,预测人口为427.35;
2050年的R*t=6.864,预测人口为442.48;
观察预测结果1930年以前只有1800 1810 1820误差较小,其它年份误差正负都稍微偏大,1940年以后预测值逐年大于实际值,说明在给定最大人口数后增长率选择不适当,与给定的最大人口数不匹配,有待改进。
模型2
(2.1) 根据表中的人口数据,进行曲线拟合,建立数学模型;
(2.2) 利用 (2.1) 中的模型计算各年人口,与实际人口数量比较,计算模
型的计算误差;
(2.3) 利用 (2.1) 中的模型预测美国2010,2020,2030,2040,2050年的人口;
利用MATLAB进行曲线拟合,首先在平面上绘出已知数据的分布图,通过直观观察,猜测人口随时间的变化规律,再用函数拟合的方法确定其中的未知参数,从而估计出2010 2020 2030 2040 2050年的美国人口。利用MATLAB作出美国人口统计数据的连线图如图4。
图4 美国人口统计数据连线图 图5 建模方法1的拟合效果图
由图4可以发现美国人口的变化规律曲线近似为一条指数函数曲线,因此我们假设美国的人口满足函数关系x=f(t), f(t)=ea+bt,a, b为待定常数,根据最小二乘拟合的原理,a, b是函数的最小值点。其中xi是ti时刻美国的人口数。利用MATLAB中的曲线拟合程序“curvefit”,编制的程序如下:
首先创建指数函数的函数M——文件
用最小二乘拟合求上述函数中待定常数,以及检验拟合效果的图形绘制程序
m-function, fun1.m
function f=fun1(a,t)
f=exp(a(1)*x + a(2));
t=1790:10:2000;
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 106.5 123.2 131.7 150.7 179.3 204 226.5 251.4 281.4];
plot(t,x,'*',t,x);
a0=[0.001,1];
a=curvefit('fun1',a0,t,x)
ti=1790:5:2050;
xi=fun1(a,ti);
hold on