人口数量预测模型实验.pdf
M A T L A B 1 人口数量预测模型实验 一实验目的 1.学会用 MATLAB 软件进行数据拟合;2.了解利用最小二乘法进行数据拟合的基本思想,掌握用数据拟合法寻找最佳拟合曲线的方法;3.了解多元函数的极值在数据拟合法中的应用;4通过对实际问题进行分析研究,初步掌握建立数据拟合数学模型的方法.二实验内容 1.数学模型 1 Malthus 模型 根据英国统计学家 Malthus 提出的关于生物种群繁殖模型:种群的个体数量的增长率与该种群的个体数量成正比的理论,设从个体数量为0 x时,t时刻种群个体数量为()x t,有方程:()()dx trx tdt 或者 1()()dx trx tdt,借微分方程得:0()rtx tx e.实验中可以根据此方程建立模型.2 Logistic 模型 显而易见的是根据 Malthus 模型,最终种群数量会趋于,与实际不符.荷兰生物学家 Verhulst 对 Malthus 模型加以改进提出了 Logistic 模型,即让相对增长率又一个常数便成了一个随时间变小的函数(1()/)rx tk,解方程得:000()()rtkxx tkx ex.也可根据此方程建立数学模型.2.算法设计 根据实验要求,用 MATLAB 软件分别用多项式方法,Malthus 模型和 Logistic 模型对实验数据进行拟合,得到相应的经验公式和经验曲线,对未来人口进行预测.3.实验过程 1 实验题目:1970 年到 1980 年间美国人口的统计数据如表所示 M A T L A B 2 年份 1790 1800 1810 1820 1830 1840 1850 1860 1870 1880 统计 3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 年份 1890 1900 1910 1920 1930 1940 1950 1960 1970 1980 统计 62.0 72.0 92.0 106.5 123.2 131.7 150.7 179.3 204.0 226.5 2 根据表中数据分别用多项式法,Malthus模型和 Logistic模型建立美国人口增长曲线模型(Logistic 模型中假设美国人口总容量为 4.5 亿),并预测 2000 年,2010年和 2020 年美国人口数.对三种方法的结果加以比较.3 用多项式函数(三次和六次)拟合 a)实验程序 x=1790:10:1980;y=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(x,y,k.,markersize,15);axis(1790 2020 0 450);p3=polyfit(x,y,3)p6=polyfit(x,y,6)t=1790:10:2020;s=polyval(p3,t);s1=polyval(p6,t);hold on plot(t,s,k-,linewidth,2)plot(t,s1,k-,linewidth,2)grid b)实验结果 做出数据及函数的图像如图示:M A T L A B 3 由拟合得到的三次和六次多项式函数计算出预测结果如表:2000 2005 2010 2015 2020 三次函数 279.5339 294.0309 308.9592 324.3230 340.1266 六次函数 296.2800 316.4179 337.9182 360.8158 385.1299 4 用Malthus模型进行模拟 a)实验程序:function f=nihehanshu(x,xdata)f=exp(x(1)+x(2)*xdata);xdata=1790:10:1980;ydata=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;x0=0,0;x,resnorm=lsqcurvefit(nihehanshu,x0,xdata,ydata);plot(xdata,ydata,k.,markersize,15);axis(1790 2020 0 250);a=x(1)b=x(2)t=1790:10:2020;180018201840186018801900192019401960198020002020050100150200250300350400450年 份六 次 曲 线三 次 曲 线M A T L A B 4 s=exp(a+b*t);hold on plot(t,s,k-,linewidth,2);grid c)运行结果:画出图像如下:求出参数及函数表达式:a=-25.263695152998444 b=0.015525795667149 25.263695152 0.015525795()tx te 预测结果:年份 2000 2005 2010 2015 2020 预测值 326.3258 352.6673 381.1352 411.9010 445.1504 5 用Logistic模型进行拟合 a)实验程序:function f=nihehanshu2(x,xdata)f=1./(1/450+exp(-x(1)-x(2)*xdata);1800 1820 1840 1860 1880 1900 1920 1940 1960 1980 2000 2020050100150200250M A T L A B 5 xdata=1790:10:1980;ydata=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;x0=0,0;x,resnorm=lsqcurvefit(nihehanshu2,x0,xdata,ydata);plot(xdata,ydata,k.,markersize,15);axis(1790 2200 0 450);a=x(1)b=x(2)t=1790:10:2200;s=1./(1/450+exp(-a-b*t);hold on plot(t,s,k-,linewidth,2);grid b)运行结果 画出图像如图:求得参数及函数表达式为:a=-36.147507846565027 b=0.021353559124870 136.147507846 0.0213535591()450 x te 预测结果:180018501900195020002050210021502200050100150200250300350400450M A T L A B 6 年份 2000 2005 2010 2015 2020 预测值 274.8265 286.1048 297.0610 307.6492 317.8306 6 Malthus模型下转化为线性函数球参数:在Malthus模型下,先把所求的函数()a btx te两边取对数化为线性函数再求a和b后再求拟合函数.a)实验程序:function f=malfun(x,xdata)f=x(1)+x(2)*xdata;xdata=1790:10:1980;y=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;ydata=log(y);x0=0,0;x,resnorm=lsqcurvefit(malfun,x0,xdata,ydata)plot(xdata,ydata,k.,markersize,15);axis(1790 2020 0 10);a=x(1);b=x(2);t=1790:10:2020;s=a+b*t;hold on plot(t,s,k-,linewidth,2);grid b)实验结果:画出相应的线性函数如图:M A T L A B 7 求得函数参数和表达式分别为:a=-36.598224654006685 b=0.021406335279011 36.598224654 0.021406335()tx te 得到相应预测的数据为:年份 2000 2005 2010 2015 2020 预测值 499.9189 556.3945 619.2501 689.2065 767.0658 7 比较 将各种方法的结果列表比较如下:2000 2005 2010 2015 2020 三次函数 279.5339 294.0309 308.9592 324.3230 340.1266 六次函数 296.2800 316.4179 337.9182 360.8158 385.1299 Malthus(直接求)326.3258 352.6673 381.1352 411.9010 445.1504 Logistic 274.8265 286.1048 297.0610 307.6492 317.8306 Malthus(转为线性函数)499.9189 556.3945 619.2501 689.2065 767.0658 1800 1820 1840 1860 1880 1900 1920 1940 1960 1980 2000 2020012345678910M A T L A B 8 理论上分析:从上表中容易看出,用多项式拟合的结果和用Logistic模型拟合的结果比较接近,而用Malthus模型,结果偏离的较大,尤其是将其转化为线性函数求结果后,其计算结果偏差更是很大,另外从各个模型对应的图像上,也能看出Malthus模型的最终函数趋势增长率越来越大,而Malthus转为线性函数求得结果中,其增长率也越来越大(其指数上的增长率恒定,对应的函数增长率成指数形式增长).而在多项式函数条件下,其增长率也随时间在增大,不过增长率小于Malthus模型(Malthus增长率为指数形式),而在Logistic模型下,其最终增长率趋近于零.又生物学相关理论可知,在一定的自然条件下,生物的最终数量趋于一个稳定的值,即增长率趋于零.由此可知,Logistic模型比较准确.实际的情况:查阅相关数据可知,2000年美国的实际人口数为281.42百万,2005年为296.40百万,2008年初为331.44百万(而相应的五种模型下的计算结果依次是:302.9358;329.1520;369.4822;292.7202;593.2979),相比较可知,在短期内,三次拟合函数的结果较为符合实际情况,其次接近程度比较好的是Logistic模型和六次函数,而两种方法下的Malthus模型的偏差均很大.综合比较:Logistic应该是最优的,尽管在短期内,其精度没有多项式函数好(实际上偏离的也不是太多),但从长期看,考虑到长时间以后的增长率问题,还是Logistic模型更能反映实际情况,而且,Logistic模型中还有一个不可控的因素是对人口数上限的预测,若此值取得更合适的话,Logistic模型也应该是很准确的.三 实验体会 通过本次实验,我们加深了对数据拟合问题及其相关理论(如最小二乘法等)的认识和理解,巩固了所学知识,也更好地学习了 MATLAB 软件的相关知识和应用,增强了解决实际问题的能力,同时,也感受到了团队合作的重要性,没有我们的默契配合,是做不出结果的.