【精品】数学建模-2010年美国人口预测报告
2010年美国人口预测报告
实验目的,
1( 掌握利用MATLAB软件解决拟合问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
的方法
2( 学会用拟合方法解决实际问题
实验内容,
给出美国人口从1790年到1990年间的人口如
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
1(每10年为一个间隔),请估计出美国2010年的人口。
表1 美国人口统计数据
年 份 1790 1800 1810 1820 1830 1840 1850
人口(×3.9 5.3 7.2 9.6 12.9 17.1 23.2 610)
年 份 1860 1870 1880 1890 1900 1910 1920
人口(×31.4 38.6 50.2 62.9 76.0 92.0 106.5 610)
年 份 1930 1940 1950 1960 1970 1980
人口(×123.2 131.7 150.7 179.3 204.0 226.5 610)
实验
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
,
首先在平面上绘出已知数据的分布图,通过直观观察,猜测人口随时间的变化规律,再用函数拟合的方法确定其中的未知参数,从而估计出2010年的美国人口。利用MATLAB软件作出美国人口统计数据的连线图如图1。
300450
400250350
200300
250150200
100150
1005050
001750180018501900195020001750180018501900195020002050
图1 美国人口统计数据连线图 图2 建模方法1的拟合效果图
建模方法1,
由图1可以发现美国人口的变化规律曲线近似为一条指数函数曲线,因此我们假设美国
a+bt的人口满足函数关系x=f(t), f(t)=e,a,b为待定常数,根据最小二乘拟合的原理,a,b
n2E(a,b),(f(t),x)的最小值点。其中x是t时刻美国的人口数。利用是函数ii,ii,1i
MATLAB软件中的曲线拟合程序“curvefit”,编制的程序如下:
指数函数的函数M——文件
function f=fun1(a,t)
f=exp(a(1)*x+a(2));
用最小二乘拟合求上述函数中待定常数,以及检验拟合效果的图形绘制程序 t=1790:10:1990;
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];
plot(t,x,'*',t,x);
a0=[0.001,1];
a=curvefit('fun1',a0,t,x)
ti=1790:5:2020;
xi=fun1(a,ti);
hold on
plot(ti,xi);
t1=2010;
x1=fun1(a,t1)
hold off
在MATLAB命令窗口运行该程序,输出结果a = 0.0148 -23.8311;x1 =358.4822
因此,参数a=0.0148, b=-23.8307,拟合函数在2010处的函数值f(2010)=358.4822。但在求解时,出现提示“矩阵接近奇异或尺度不好,结果可能不准确”。通过作图,我们来看看拟合的误差如何,见图2。从图中可看出,拟合曲线与原数据还是比较吻合,因此,预测美国在2010年的人口数为358.4822百万。
建模方法2,
上述模型对过去的统计数据吻合得较好,但也存在问题,即人口是呈指数规律无止境地增长,此时人口的自然增长率随人口的增长而增长,这不可能。一般说来,当人口较少时增长得越来越快,即增长率在变大;人口增长到一定数量以后,增长就会慢下来,即增长率变小这是因为,自然资源、环境条件等因素不允许人口无限制地增长,它们对人口的增长起着阻滞作用,而且随着人口的增加,阻滞作用越来越大。而且人口最终会饱和,趋于某一个常数x,我们假设人口的静增长率为r(1-x(t)/x),即人口的静增长率随着人口的增长而不断减,,
小,当t,,时,静增长率趋于零。
按照这个假设,得到
dxx,r(1),,,dtx (1) ,,
,x(t)x,00,
这便是荷兰数学家Verhulst于19世纪中叶提出的阻滞增长模型(logistic模型)。 在MATLAB命令窗口键入
dsolve(‘Dx=r*x*(1-x/c)’,’x(1790)=3.9’)
输出:
ans=
c/(1+1/39*exp(-r*t)*exp(1790*r)*(10*c-39)) 其中c=x。 ,
因此,人口的变化规律为:
x, (2) x,,(t,1790)r101,(x,1)e,39
利用MATLAB软件中的“curvefit”命令和函数(2) 来拟合所给的人口统计数据,从而确定出(2)中的待定参数r和x。编制的MATLAB程序如下: ,
定义函数(2)的函数M——文件
function f=fun3(a,t)
f=a(1)./(1+(a(1)/3.9-1)*exp(-(t-1790)*a(2)));
用该函数来对所给的美国人口数据作最小二乘拟合,并作出图形观察拟合效果,编制的M——文件如下:
x=1790:10:1990;
y=[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];
plot(x,y,'*',x,y);
a0=[0.001,1];
a=curvefit('fun3',a0,x,y)
xi=1790:5:2020;
yi=fun3(a,xi);
hold on
plot(xi,yi);
x1=2010;
y1=fun3(a,x1)
hold off
300300
250250
200200
150150
100100
5050
0017501800185019001950200020501750180018501900195020002050
图3 a0=[0.001,1]时的拟合效果图 图4 a0=[300,1.2]时的拟合效果图
运行该程序输出a =[140.8449 0.0389],y1 =139.8928,并伴随有提示说“超过了最大迭代次数”。即(2)中的r=0.0389, x=140.8449,拟合效果见图3。从图形看出,拟合效果不好,,
特别是越过拐点之后,在1950年之后,与实际情况的偏离越来越大,转折太早,导致过早进入人口饱和期,极限人口x=140.8449也太小,不合实际。其原因何在呢,是否是a的初值取,
得不好,导致迭代次数很多,超过了预设值,都还没收敛到最优解,改变a的初值,取a0=[300, 1.2]时,误差更大,拟合曲线紧贴着横轴,近似于一条直线,如图4。
再将r(即a(2))的初值取为小于1的数,比如取a=[200, 0.1]时,得到
a =[311.9557 0.0280], y1 =267.1959,即(2)中的r=0.0280, x=311.9557,2010年美国,
的人口预计为267.1959百万人。这个结果还比较合理,当t,,时,静增长率趋于零,人口数趋于311.9557百万人,即极限人口x=311.9557百万。拟合效果见图5,效果比前面两种,
情形都好。
300
250
200
150
100
50
0 1750180018501900195020002050
图5 a0=[200,0.1]时的拟合效果
只要取初值a0(2)在0与1之间,a0(1)大于150小于2000,结果均相同,因此,拟合中使用的优化方法对该问题来说是比较稳定的。
建模方法3:
从图5 看出,在前一段吻合得比较好,但在最上面,若拟合曲线更接近原始数据,对将来人口的预测应该更好。因此,把用函数(2)来拟合所给人口统计数据的评价准则略加修改,看效果如何。将拟合准则改为:
n2122minE(a),(f(t),x),w(f(t),x) (3) ,,iiiii,i,n,11
其中w为右端几个点的误差权重,在此处应该取为大于1的数,这样会使右边的拟合误差减小,相应的,其他点的误差会有所增加。如何才能使这些误差的增减恰当呢,可以通过调整w和n的具体取值,比较他们取各种不同值时的拟合效果,从而确定出一个合适的数值。
实现这些功能的MATLAB程序如下:
先编写一个函数M——文件,以定义优化问题(3)中的目标函数。
function f=fun5(a)
n=16;w=2;
x=1790:10:1990;x1=x(1:n);x2=x(n+1:21); y=[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];
y1=y(1:n);y2=y(n+1:21);
f=[fun3(a,x1),w*fun3(a,x2)]-[y1,w*y2];
主程序:
t=1790:10:1990;
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];
plot(t,x,'*',t,x);a0=[300,0.03];
a=leastsq('fun5',a0)
ti=1790:5:1990;
xi=fun3(a,ti);
hold on;
plot(ti,xi,t,x,'*');
x1=fun3(a,2010)
hold off
1) 先取n=17,w=1.5,运行上述程序,得到结果a = [324.0666, 0.0276]; x1 = 272.7996.
2) 再取n=16,w=2,运行上述程序,得到结果a=[345.1439,0.0270];x1=280.0539.
我们把两种情况的拟合曲线画在同一个坐标系中,很容易作出比较,见图6.第二种情形后半段的变化趋势与原始数据更吻合,因此,对将来人口的预测应该更好。
300
250
2001) n=17,w=1.52) n=16,w=2
150
100
50
01750180018501900195020002050
图6 建模方法3的拟合效果比较
实验结果,
经过不断修改模型,调整参数,我们得到了一个较满意的结果,人口增长率r=0.0270,极限人口x=345.1439(百万),并预测2010年美国人口为280.0539百万。 ,
实验心得体会,
不仅要学会熟练使用软件工具,而且要善于使用软件工具,但不能迷信软件工具。它可以大大提高你的工作效率,多数情况下,它都能给出正确的
答案
八年级地理上册填图题岩土工程勘察试题省略号的作用及举例应急救援安全知识车间5s试题及答案
。但它在处理复杂问题时,也有不足之处,因为许多算法并非是无条件的,并非适合于任何情形,有时收敛,有时奇异,有时收敛太慢。这就要求你对结果进行检验,看是否合乎实际,是否合理。若不合理,应找原因,针对不同情况,想出解决问题的办法,进行实验、验证,直到结果满意为止。