MATLAB数学实验报告
------人口统计与预测
指导老师:王宁
实验者:核工程93 孔海宇09032064
核工程93 万承辉09032075
核工程93 张勇09032082
实验日期:2010年5月28日
实验目的
通过对人口预测问题的分析求解,了解利用最小二乘法进行数据拟合的基本思想,熟悉寻找最佳拟合曲线的方法,掌握建立增长数学模型的思想方法。通过拟合图像,对人口进行预测。
实验原理
对
于已知的关于自变量和因变量的一组数据
(1x ,1y ),(22,y x ),…,(n n y x ,),寻找一个合适的类型的函数y=f (x )(如线性函数y=ax+b,多项式函数0111a x a x a a y n n n
n x ++++=--Λ,指数函数bx a e y +=等),使它在观测点n x x x ,,,21Λ处取得的值与
)(,),(),(21n x f x f x f Λ与观测值Λ
,,21y y n y 在某种尺度下最接近,从而可
用函数y=f (x )作为由观测点所反映的规律的近似表达式。
数据拟合(最小二乘法):
对于已知的一组数据(11,y x ),(22,y x )),(n n y x Λ, 设定某一类型的函数y=f (x ) 后, 确定函数中的参数, 使得在各点处的偏差
),,2,1()(n i y x f r i i i Λ=-=的平方和∑=n
i i r 12最小,这种根据偏差平方和最小
的条件确定参数的方法叫做最小二乘法. 在最小二乘问题中函数
)(x f 的选取是非常重要的,但同时又比较困难。对于一般的拟合函
数通常选取为一组线性无关的简单函数类(又称为拟合基函数)
)(,),(),(21x x x n ???Λ的线性组合
)()()()(2211x a x a x a x f m m ???+++=Λ (n m ≤) 通过最小二乘法求出待定常数i a (),,2,1m i Λ=。
多项式曲线拟合:
如果选用的基函数为幂函数类:1,m x x x ,,,2Λ ,此时拟合函数为一个m 次多项式函数0111)(a x a x a x a x f y m m m m ++++==--Λ ,根据最小二乘法拟合思想,问题归结为m+1元函数
∑=---++++=n
i i m i m m i m m y a x a x a x a a a a a Q 120111210)(),,,,(ΛΛ
的最小值问题。利用多元函数取极值的条件 ),,1,0(0)
,,,(10m k a a a a Q k
m ΛΛ==??
得到法方程组
∑=--==-++++n
i k i i i m i m m i m
m k x y a x a x a x a
1
0111),,0(0)(ΛΛ
可以求得多项式系数 .
对于多项式曲线拟合的求解,MATLAB 软件提供了相应的命令polyfit ,格式: p= polyfit(x,y,m)
其中x,y 为已知数据点向量,m 为要拟合的多项式次数,结果返回拟合的m 次多项式系数,从高次到低次存放在向量p 中,再用命令y0=polyval(p,x0)求得多项式在x0处的值y0。
由于高次多项式曲线变化不稳定,因此拟合时多项式次数不宜过高
实验内容
本次实验要求根据美国前100年的人口数据数据,分别用Malthus 和Logistic 模型建立美国人口增长的近似曲线(设美国人口总体容量为10亿),并预测后100年我国的人口数,通过与实际数据相比较,对两种预测结果进行分析。
1790年到1980年各年美国人口的统计数据如下表: 美国人口统计数字(单位:百万)
Malthus 模型
1978
年,英国统计学家Malthus 在进行大量的统计基础上发现了一
个关于生物种群的繁殖规律,就是一个种群中个体数量的增长率与该时刻种群的个体数量成正比。按照此规律,设种群个体数量为0x 时刻开始计时,t 时刻种群个体数为)(t x ,于是得到Malthus 模型:
)(t rx dt
dx
= 求解此方程,得到生物种群繁殖的规律为: rt e x t x 0)(=
由此可见,生物种群个体数量是按照指数方式增长的。
Logistic 模型
1838
年,荷兰生物学家Verhulst 做了进一步的分析后指出,导致
Malthus 模型不符合实际情况的主要原因是Malthus 模型未能考虑生
物种群繁殖过程中“密度制约”因素。事实上,种群生活在一定的环境中,在资源给定的情况下,个体数量越多,每一个个体获得的资源就越少,这将抑制其生育率,增加死亡率。因而,相对增长率不是常数,而应该乘上一个“制约因子”。这个因子随)(t x 的增加而减少,设为)1(k
x -,其中k 为环境的容纳量。于是Verhulst 提出了生物种群增长的Logistic 模型: )1(1k
x
r dt dx x -= 求解方程得:
00
)()(x e x k kx t x rt +-=-
这便是Logistic 模型。
实验问题求解:
Malthus 模型下的求解程序 clear;clf
t=1790:10:1980;
N=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.0 72.0 92.0 106.5 123.2 131.7 150.7 179.3 204.0 226.5]; plot(t,N,'k.','markersize',20); axis([1790 1980 0 1000]) grid;hold on pause(0.5) n=10;
a=sum(t(1:n));
b=sum(t(1:n).*t(1:n)); c=sum(log(N(1:n))); d=sum(t(1:n).*log(N(1:n))) A=[n a;a b]; B=[c;d]; p=inv(A)*B x=1790:10:1980;
y=exp(p(1)+p(2)*x);
plot(x,y,'r-','linewidth',2)
Logistic模型下的求解程序
clear;clf
t=1790:10:1980;
N=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.0 72.0 92.0 106.5 123.2 131.7 150.7 179.3 204.0 226.5];
plot(t,N,'k.','markersize',20);
axis([1790 1980 0 600])
grid;
hold on
pause(0.5)
n=10;
I=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2]
K=[1000 1000 1000 1000 1000 1000 1000 1000 1000 1000]
g=1./I;
h=1./K;
M=g-h;
a=sum(t(1:n));
b=sum(t(1:n).*t(1:n));
c=sum(log(M(1:n)));
d=sum(t(1:n).*log(M(1:n)))
A=[n a;a b];
B=[c;d];
p=inv(A)*B
x=1790:10:1980;
y=1./(0.001+exp(p(1)+p(2)*x));
plot(x,y,'r-','linewidth',2)
实验结果分析
1、在Malthus模型下的求解情况分析
由程序运行解得的a=-49.7954;b=0.0286
由程序运行的曲线如下
2、在Logistic模型下的求解情况分析
由程序运行解得的a=50.7047.7954;b=-0.0291 由程序运行的曲线如下
3、两种人口预测模型的对比
由实验可知,两种模型均可对人口的未来走向有所预测,但很明显,Malthus模型在预测时会产生较大的误差,相比之下,由于Logistic模型考虑到了“密度制约”的因素,引进了一个制约因子,因此修改后的认可预测模型能够更好地对未来的人口加以预测。
下面的图形是将两种模型的曲线在同一个图中加以比较,其中蓝色的线代表的是Malthus模型的人口预测曲线,红色的线代表的是Logistic模型的人口预测曲线,黑点代表实际的人口数目。
由图中二者的对比不难发现,Logistic模型确实比Malthus 模型能更好地对未来人口的走向加以预测。所以Logistic模型是一个更好的人口预测模型。
实验误差分析
虽然两种人口模型均可以对未来的人口走势进行预测,但是,实际的人口数目仍小于预期的人口数目,而且随着时间的增加,这种误差会越来越明显。
这是由于实际情况下的情况更加复杂,除了人口密度的制约因素外,人口增长的因素还受到其他众多因素的影响,比如自然灾害、流行性疾病的发生、战争等等。例如,在20世纪三四十年代,人口的增长出现了短暂的停滞,这应该是由于美国当时正处于大萧条时代,后来又卷入了第二次世界大战的缘故,所以人口的总数会出现减缓增长的现象;而到了60年代前后,那时美国经济正在飞速发展,人口也在以一个较高的速度发展。
这些外在因素的影响导致了实验预测产生误差,而且外在的因素影响越强烈,实验的预测情况与实际情况之间的误差就会越大。
总结与收获
在此次实验中,我们共同合作,学会了用matlab编写简单的数学程序进行一些建模和数学计算,同时我们还掌握了两种人口预测的模型,并且在合作研究之中学会了如何客观全面地分析问题,解决问题。在我们一起合作时,我们也体会到了共同合作学习的重要性,学会了如何团结合作完成一个问题。
总之,此次数学实验让我们受益匪浅,学到了很多知识,收获了很多能力。