matlab数学实验报告doc.docx
《matlab数学实验报告doc.docx》由会员分享,可在线阅读,更多相关《matlab数学实验报告doc.docx(10页珍藏版)》请在冰豆网上搜索。
matlab数学实验报告doc
MATLAB数学实验报告
------人口统计与预测
指导老师:
王宁
实验者:
核工程93孔海宇09032064
核工程93万承辉09032075
核工程93张勇09032082
实验日期:
2010年5月28日
实验目的
通过对人口预测问题的分析求解,了解利用最小二乘法进行数据拟合的基本思想,熟悉寻找最佳拟合曲线的方法,掌握建立增长数学模型的思想方法。
通过拟合图像,对人口进行预测。
实验原理
对于已
知的关于自变量和因变量的一组数据(
),(
),…,(
),寻找一个合适的类型的函数y=f(x)(如线性函数y=ax+b,多项式函数
指数函数
等),使它在观测点
处取得的值与
与观测值
在某种尺度下最接近,从而可用函数y=f(x)作为由观测点所反映的规律的近似表达式。
数据拟合(最小二乘法):
对于已知的一组数据(
),(
)
设定某一类型的函数y=f(x)后,确定函数中的参数,使得在各点处的偏差
的平方和
最小,这种根据偏差平方和最小的条件确定参数的方法叫做最小二乘法.在最小二乘问题中函数
的选取是非常重要的,但同时又比较困难。
对于一般的拟合函数通常选取为一组线性无关的简单函数类(又称为拟合基函数)
的线性组合
(
)
通过最小二乘法求出待定常数
(
。
多项式曲线拟合:
如果选用的基函数为幂函数类:
1,
,此时拟合函数为一个m次多项式函数
,根据最小二乘法拟合思想,问题归结为m+1元函数
的最小值问题。
利用多元函数取极值的条件
得到法方程组
可以求得多项式系数.
对于多项式曲线拟合的求解,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在进行大量的统计基础上发现了一个关于生物种群的繁殖规律,就是一个种群中个体数量的增长率与该时刻种群的个体数量成正比。
按照此规律,设种群个体数量为
时刻开始计时,t时刻种群个体数为
,于是得到Malthus模型:
求解此方程,得到生物种群繁殖的规律为:
由此可见,生物种群个体数量是按照指数方式增长的。
Logistic模型
1838年,荷兰生物学家Verhulst做了进一步的分析后指出,导致Malthus模型不符合实际情况的主要原因是Malthus模型未能考虑生物种群繁殖过程中“密度制约”因素。
事实上,种群生活在一定的环境中,在资源给定的情况下,个体数量越多,每一个个体获得的资源就越少,这将抑制其生育率,增加死亡率。
因而,相对增长率不是常数,而应该乘上一个“制约因子”。
这个因子随
的增加而减少,设为
,其中k为环境的容纳量。
于是Verhulst提出了生物种群增长的Logistic模型:
求解方程得:
这便是Logistic模型。
实验问题求解:
Malthus模型下的求解程序
clear;clf
t=1790:
10:
1980;
N=[3.95.37.29.612.917.123.231.438.650.262.072.092.0106.5123.2131.7150.7179.3204.0226.5];
plot(t,N,'k.','markersize',20);
axis([1790198001000])
grid;holdon
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=[na;ab];
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.95.37.29.612.917.123.231.438.650.262.072.092.0106.5123.2131.7150.7179.3204.0226.5];
plot(t,N,'k.','markersize',20);
axis([179019800600])
grid;
holdon
pause(0.5)
n=10;
I=[3.95.37.29.612.917.123.231.438.650.2]
K=[1000100010001000100010001000100010001000]
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=[na;ab];
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编写简单的数学程序进行一些建模和数学计算,同时我们还掌握了两种人口预测的模型,并且在合作研究之中学会了如何客观全面地分析问题,解决问题。
在我们一起合作时,我们也体会到了共同合作学习的重要性,学会了如何团结合作完成一个问题。
总之,此次数学实验让我们受益匪浅,学到了很多知识,收获了很多能力。