matlab曲线拟合人口增长模型及其数量预测
- 格式:docx
- 大小:33.25 KB
- 文档页数:6
实验目的[1] 学习由实际问题去建立数学模型的全过程;[2] 训练综合应用数学模型、微分方程、函数拟合和预测的知识分析和解决实际问题; [3] 应用matlab 软件求解微分方程、作图、函数拟合等功能,设计matlab 程序来求解其中的数学模型;[4] 提高论文写作、文字处理、排版等方面的能力;通过完成该实验,学习和实践由简单到复杂,逐步求精的建模思想,学习如何建立反映人口增长规律的数学模型,学习在求解最小二乘拟合问题不收敛时,如何调整初值,变换函数和数据使优化迭代过程收敛。
应用实验(或综合实验)一、实验内容从1790—1980年间美国每隔10年的人口记录如表综2.1所示:表综2.1年 份 1790 1800 1810 1820 1830 1840 1850 人口(×106)3.9 5.3 7.2 9.6 12.9 17.1 23.2 年 份 1860 1870 1880 1890 1900 1910 1920 人口(×106)31.4 38.6 50.2 62.9 76.0 92.0 106.5 年 份 193019401950196019701980人口(×106)123.2 131.7 150.7 179.3 204.0 226.5用以上数据检验马尔萨斯(Malthus)人口指数增长模型,根据检验结果进一步讨论马尔萨斯人口模型的改进,并利用至少两种模型来预测美国2010年的人口数量。
二、问题分析1:Malthus 模型的基本假设是:人口的增长率为常数,记为 r 。
记时刻t 的人口为x (t ),(即x (t )为模型的状态变量)且初始时刻的人口为x 0,于是得到如下微分方程:⎪⎩⎪⎨⎧==0)0(d d x x rxtx2:阻滞增长模型(或Logistic 模型) 由于资源、环境等因素对人口增长的阻滞作用,人口增长到一定数量后,增长率会下降,假设人口的增长率为x 的减函数,如设r(x)=r(1-x/x m ),其中r 为固有增长率(x 很小时),x m 为人口容量(资源、环境能容纳的最大数量),于是得到如下微分方程:⎪⎩⎪⎨⎧=-=0)0()1(d d xx x x rx t xm三、数学模型的建立与求解根据Malthus 模型的基本假设,和Logistic 模型,我们可以分别求得微分方程的解析解,y1=x0*exp(r*x);y2= xm/(1+x0*exp(-r*x))对于1790—1980年间美国每隔10年的人口记录,分别用matlab 工具箱中非线性拟合函数的命令作一般的最小二乘曲线拟合,可利用已有程序lsqcurvefit 进行拟合,检验结果进一步讨论模型的改进,预测美国2010年的人口数量。
MATLAB人口数量预测实验报告一,实验目的:1.、学会用matlab软件进行数据拟合;2、了解利用最小二乘法进行数据拟合的基本思想,掌握用数据拟合法寻找最佳拟合曲线的方法;3、了解多元函数的机制在数据拟合法中的应用;4、通过对实际问题进行分析研究,初步掌握建立数据拟合数学模型的方法。
二.问题分析及建立模型1.多项式拟合对于已知数据点,如果选用拟合基函数为幂函数类1,x,x2,x3….xm,则拟合函数为一个m次多项式函数。
y=f(x)=a m*x m+a m-1*x m-1+…a1*x+a0根据最小二乘法你和思想,问题归结为求m+1元函数Q(a0,a1,…a m)=∑(a m*x i m a m-1*x i m-1+…+a1*x+a0)2的最小值问题,同样的,利用多元可微函数求得极值的必要条件得到法方程组∂Q(a0,a1,…a m)/∂a k=0; k=0,1,2,3…m;此时,矩阵G为一范德蒙矩阵,解此方程可以求的多项式系数a=[a m,a m-1,a0]T模型假设美国的人口满足函数关系x=f(t), f(t)=e a+bt,a,b为待定常数,根据最小二乘拟合的原理,a,b是函数∑=-=niiix tfbaE12))((),(的最小值点。
其中x i是t i时刻美国的人口数。
这是第一种模型。
3.Logistic模型上述模型可以在短时间内较好地拟合实际人口数量,但也存在问题。
即人口是呈指数规律无止境地增长,此时人口的自然增长率随人口的增长而增长,这不可能。
一般说来,当人口较少时增长得越来越快,即增长率在变大;人口增长到一定数量以后,增长就会慢下来,即增长率变小。
这是因为自然资源环境条件等因素不允许人口无限制地增长,它们对人口的增长起着阻滞作用,而且随着人口的增加,阻滞作用越来越大。
而且人口最终会饱和,趋于某一个常数x,假设人口的静增长率为r(1-x(t)/x ),即人口的静增长率随着人口的增长而不断减小,当t 时,静增长率趋于零。
人口问题数据拟合的MATLAB程序拟合%拟合数据人口问题x=[1949 1954 1959 1964 1969 1974 1979 1984 1989 1994];y=[5.4 6.0 6.7 7.0 8.1 9.1 9.8 10.3 11.3 11.8];% 1 线性模型%用一阶多项式b=polyfit(x,y,1)z=b(2)+b(1).*x;plot(x,y,'r*',x,z),xlabel('x')%用矩阵运算A=[ones(size(x))', x'];b=A\y'z=b(1)+b(2).*x;plot(x,y,'r*',x,z),xlabel('x')%用线性回归A=[ones(size(x))', x'];[b,c,r,j,R] =regress(y',A)% b 回归系数 c 回归系数的置信区间r 残差j 拟合数据的置信区间R 相关系数F值、p值z=b(1)+b(2).*x;z1=z+j(:,1)';z2=z+j(:,2)';plot(x,y,'r*',x,z,x,z1,x,z2),xlabel('x')e=sqrt(sum((y-z).^2)/8)zz1=z-1.96*e; zz2=z+1.96*e;plot(x,y,'r*',x,z,x,zz1,x,zz2)% 2 非线性模型y=b(2)exp(b(1)x)%转化为线性函数A=[ones(size(x))', x'];y1=log(y);[b1,r,j,R]=regress(y1',A)b=[exp(b1(1)) b1(2)]z=b(1).*exp(b(2).*x);e=sqrt(sum((y-z).^2)/8)z1=z-1.96*e; z2=z+1.96*eplot(x,y,'r*',x,z,x,z1,x,z2)%用非线性函数拟合(缺点初值不合适,就得不到解)x=[49 54 59 64 69 74 79 84 89 94];y=[5.4 6.0 6.7 7.0 8.1 9.1 9.8 10.3 11.3 11.8];fun=inline('b(1).*exp(b(2).*x)','b','x');b0=[2 0.01];[b,r,j]=nlinfit(x,y,fun,b0)z=b(1).*exp(b(2).*x);plot(x,y,'r*',x,z)nlintool(x,y,fun,b0) %拟合曲线图。
Matlab曲线拟合函数并预测一、背景介绍(300-500字)在科学研究和工程领域,我们经常需要对实验数据进行分析和预测。
而Matlab作为一种强大的数学软件工具,提供了丰富的函数和工具,可以对实验数据进行曲线拟合和预测。
本文将介绍Matlab中的曲线拟合函数,并结合实际案例来展示如何使用这些函数进行数据分析和预测。
二、Matlab曲线拟合技术(800-1000字)1. 数据导入和处理在进行曲线拟合之前,我们首先需要将实验数据导入Matlab,并进行处理。
这包括数据的清洗、预处理以及数据结构的转换等。
Matlab提供了丰富的数据导入和处理函数,可以帮助我们快速地将实验数据准备好,以便进行后续的分析和拟合。
2. 曲线拟合函数在Matlab中,曲线拟合函数是实现曲线拟合的核心工具。
通过这些函数,我们可以根据实验数据的特征以及我们对拟合曲线的要求,选择合适的曲线模型,并进行拟合。
Matlab提供了多种曲线拟合函数,包括多项式拟合、指数拟合、对数拟合等,以满足不同需求的实验数据分析。
3. 曲线拟合参数估计除了选择合适的曲线模型外,曲线拟合还需要进行参数估计。
Matlab提供了丰富的参数估计函数,可以帮助我们对拟合曲线的参数进行准确的估计,从而得到最优的拟合结果。
4. 曲线拟合质量评价作为对曲线拟合结果的评价,我们需要进行拟合质量的评估。
Matlab提供了多种曲线拟合质量评价指标,包括均方差、决定系数等,可以帮助我们评估拟合结果的准确性和可靠性。
三、曲线拟合与预测实例分析(1200-1500字)以某种实验数据为例,我们通过Matlab进行曲线拟合和预测分析。
我们将实验数据导入Matlab,并进行预处理;选择合适的曲线模型进行拟合,并进行参数估计;我们评价拟合结果的质量,并得出结论;基于拟合曲线,我们进行预测分析,并与实际数据进行对比。
通过这个实例分析,我们可以更加深入地理解Matlab曲线拟合技术的应用和价值。
matlab曲线拟合人口增长模型及其数量预测随着人口数量的不断增加,人口增长的预测成为了重要的社会话题。
为了了解和预测人口的发展趋势,人们需要建立各种数学模型,以帮助他们分析人口变化的规律。
首先,我们需要了解什么是曲线拟合。
曲线拟合是一种数学方法,用于找到能够用已知数据点经过的曲线最佳地描述这些数据点的方程。
接下来,我们需要选择合适的模型,以描述人口增长。
常用的模型有线性模型、指数模型、对数模型和幂函数模型。
在这里,我们选择使用幂函数模型,其数学表达式为y=ax^b,其中y表示人口数量,x表示时间,a和b是拟合参数。
为了得到在该模型下的最佳参数值,我们需要使用matlab中的“拟合曲线工具箱”。
该工具箱提供各种函数,可用于拟合各种类型的数据,包括基于模型的数据点。
在使用该工具箱进行拟合之前,我们需要先准备好我们的数据。
我们可以使用已知的人口数量数据,以确定模型的参数,然后在没有人口数量数据的情况下进行预测。
接下来,我们使用“拟合曲线工具箱”中的“幂函数拟合”函数进行拟合。
该函数会自动计算最佳参数值,并提供了一些工具,用于优化和调整拟合曲线。
此外,对于得到的拟合曲线,我们还可以使用matlab中的“预测函数”来预测不同时间点的人口数量。
该函数将基于已知的拟合参数值,预测给定时间点的人口数量。
在得到拟合和预测结果之后,我们可以使用matlab的图表工具,将结果可视化。
这将有助于我们更好地了解数据点和拟合曲线之间的关系,以及预测结果的准确性。
总之,在制定人口增长规划时,建立数学模型是非常重要的。
使用matlab曲线拟合人口增长模型及其数量预测,可以快速、准确地得到所需的结果,帮助社会决策者制定更好的政策。
实验二:人口发展模型实验目的:理解马尔萨斯模型和Logistic模型,利用中国人口数据,进行参数估计,并比较模型的优劣。
实验题目:据统计,建国以来我国人口增长情况如表1:更适合人口的长期预测?并预测2006年至2015年各年人口总数。
马尔萨斯模型假设单位时间内人口增长量与当前时刻人口数成正比,即有,其中,代表增长率,为时刻人口总量,易得,这表明人口按指数变化规律增长。
Logistic模型假设人口增长率是当时人口数量的线性递减函数。
表示按自然资源和环境条件的最大人口容量;表示固有增长率,即人口很少时的增长率;当时,;当时,。
由此建立Logistic模型,求解模型得.实验程序及注释%马尔萨斯模型T=1954:2005;N=[60.2,61.5,62.8,64.6,66,67.2,66.2,65.9,67.3,69.1,70.4,72.5,74.5,76.3,78.5,80. 7,83,85.2,87.1,89.2,90.9,92.4,93.7,95,96.259,97.5,98.705,100.1,101.654,103.008,104. 357,105.851,107.5,109.3,111.026,112.704,114.333,115.823,117.171,118.517,119.85, 121.121,122.389,123.626,124.761,125.786,126.743,127.627,128.453,129.227,129.98 8,130.756];y=log(N); %计算对数值p=polyfit(T,y,1); %线性拟合Malthus=exp(polyval(p,T)); %求线性函数值plot(T,N,'o',T,Malthus) %对原始数据和拟合后的值作图RM=sum((N-Malthus).^2) %求残差平方和%Logistic模型b0=[ 241.9598, 0.02985]; %初始参数值fun=inline('b(1)./(1+(b(1)/60.2-1).*exp(-b(2).*(t-1954)))','b','t');b1=nlinfit(T,x,fun,b0);Logistic=b1(1)./(1+( b1(1)/60.2-1).*exp( -b1(2).*(T-1954))); %非线性拟合的方程plot(T,x,'*',T,Logistic) %对原始数据与曲线拟合后的值作图RL=sum((N-Logistic).^2) %求残差平方和实验数据结果及分析马尔萨斯模型Logistic模型图1 实验结果由上图可以看出,Logistic模型对人口的拟合更加确切,其误差130.8740较马尔萨斯模型的误差757.4464更小。
综合案例 人口增长模型据人口学家们预测,到2033年 ,世界人口将突破100亿,每年增加近1亿人,以后还会迅猛增长。
人们开始考虑,我们赖以生存的地球究竟是否能承受如此的增长。
让我们建立数学模型来预测人口的增长。
我们关心任意时刻的人口总数N (t ),即t 时刻人口中生命个体的总数,而忽略他们的年龄和性别。
影响总人口数的最显著的因素是个体的出生、死亡、以及进出我们所研究区域的个体数。
为了简化问题,我们忽略迁入与迁出的人口,仅考虑时间段∆t 内人口数的变化情况。
很明显,出生和死亡人数的变化将依赖于以下因素:(1) 时间间隔∆t 的长短;(2) 时间间隔开始时的人口总数。
做最简单的假设是正比关系,即时间间隔∆t 内的出生人数= bn(t)∆t 时间间隔∆t 内的死亡人数=dn(t)∆t这里b 和d 分别是出生率和死亡率。
我们得到一个初始模型为N(t+∆t)-N(t)=(b -d)N (t) ∆t (2.35)现在可根据时间区间∆t 的两种情况进一步研究模型. 一种是确定一个有限的时间单位,比如∆t=1年,令N k = N(k)=N (k ∆t), k=1,2,3,… 这样方程(2.35)便是一个关于序列N K ,k=1,2,3, …的差分方程: N k+1= (b -d+1)N k k=1,2,3,…我们可以根据上一年的人口数推算出第二年的人口数以及逐年的人口数。
另一种是考虑很短的时间区间∆t 内的人口变化。
由于一个广阔区域的人口数量很大,可认为人口数N(t)是一个连续变量,因为当N(t)很大时,对应的曲线具有很小的跃变可视为平滑的,这样的处理即简化了模型又不会引起严重误差。
先将式(2.35)改写为tt N t t N t N ∆-∆+)()()(1=b -d令∆t →0,则有d b dtdN N -=1 (2.36)等式左端的表达式可以理解为“相对增长率”,对其作不同的假设可以建立不同的数学模型。
实验目的
[1] 学习由实际问题去建立数学模型的全过程;
[2] 训练综合应用数学模型、微分方程、函数拟合和预测的知识分析和解决实际问题;
[3] 应用matlab软件求解微分方程、作图、函数拟合等功能,设计matlab程序来求解
其中的数学模型;
[4] 提高论文写作、文字处理、排版等方面的能力;
通过完成该实验,学习和实践由简单到复杂,逐步求精的建模思想,学习如何建立反映人口增长规律的数学模型,学习在求解最小二乘拟合问题不收敛时,如何调整初值,变换函数和数据使优化迭代过程收敛。
应用实验(或综合实验)
一、实验内容
从1790—1980年间美国每隔10年的人口记录如表综2.1所示:
表综2.1
用以上数据检验马尔萨斯(Malthus)人口指数增长模型,根据检验结果进一步讨论马尔萨斯人口模型的改进,并利用至少两种模型来预测美国2010年的人口数量。
二、问题分析
1:Malthus 模型的基本假设是:人口的增长率为常数,记为 r。
记时刻t的人口为x(t),(即x(t)为模型的状态变量)且初始时刻的人口为x0,于是得到如下微分方程:
⎪⎩⎪⎨⎧==0
)0(d d x x rx
t
x 2:阻滞增长模型(或Logistic 模型) 由于资源、环境等因素对人口增长的阻滞作用,人口增长到一定数量后,增长率会下降,假设人口的增长率为x 的减函数,如设r(x)=r(1-x/x m ),其中r 为固有增长率(x 很小时),x m 为人口容量(资源、环境能容纳的最大数量),于是得到如下微分方程:
⎪⎩
⎪
⎨⎧=-=0)0()1(d d x
x x x rx t
x
m
三、数学模型的建立与求解
根据Malthus 模型的基本假设,和Logistic 模型,我们可以分别求得微分方程的
解析解,
y1=x0*exp(r*x);
y2= xm/(1+x0*exp(-r*x))
对于1790—1980年间美国每隔10年的人口记录,分别用matlab 工具箱中非线性拟合函数的命令作一般的最小二乘曲线拟合,可利用已有程序lsqcurvefit 进行拟合,检验结果进一步讨论模型的改进,预测美国2010年的人口数量。
四、实验结果及分析
对于Malthus 模型 作一般的最小二乘曲线拟合,可利用已有程序lsqcurvefit 得到拟合函数为y=(3.54e-011)*exp(0.0149*x), 当x=2010时,预测的人口为359.4916
由于资源、环境等因素对人口增长的阻滞作用,人口增长到一定数量后,增长率会下降,运用Logistic 模型对微分方程的解进行拟合,得到y2= 360.4/(1+53.11 *exp(-0.02342*(x-1790)))
到2010年时,预计人口数量为y2 = 275.6894,
作图可以看出两条曲线拟合程度较高相比基本模型,改进模型更接近实际。
1780
1800
1820
1840
1860
1880
1900
1920
1940
1960
1980
0 50
100
150
200
250
x
y
fitted curve
五、附录(程序等)
Malthus 模型
1、编写拟合函数的文件fitful2.m
function y=fitful2(a,x)
y=a(1).*exp(a(2).*x);
2、运行的脚本文件
clc,clear
a0=[50,0.02];x
y
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.9 76.0 92.0 106.5 123.2 131.7 150.7 179.3 204.0 226.5];
[a,resnorm,residual,flag,output]=lsqcurvefit('fitful2',a0,xdata,ydata )
xi=[1790:10:1980];
yi=fitful2(a,xdata)
plot(xdata,ydata,'r-o',xi,yi,'b-+')
xlabel('x'),ylabel('y=f(x)');
Logistic模型
程序:
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.9 76.0 92.0 106.5 123.2 131.7 150.7 179.3 204.0 226.5]';
st_ = [500 30 0.2 ];
ft_ = fittype('a/(1+b*exp(-k*(x-1790)))',...
'dependent',{'y'},'independent',{'x'},...
'coefficients',{'a', 'b','k'});
cf_ = fit(x,y,ft_,'Startpoint',st_)
plot(cf_,'fit',0.95);hold on,plot(x,y,'*')。