数学建模(一) 您所在的位置:网站首页 数学建模动态模型的特点 数学建模(一)

数学建模(一)

2024-07-09 19:30| 来源: 网络整理| 查看: 265

一、题目要求二、相关的基础知识2.1 马尔萨斯(Malthus)人口指数增长模型2.2 逻辑斯蒂(Logistic)增长模型2.3 改进的Logistic模型2.4 BP神经网络模型 三、模型的建立与求解3.1 Malthus模型3.2 Logistic模型3.3 改进的Logistic模型3.4 BP神经网络模型 四、人口数量的预测及分析

一、题目要求

        1790-1980年间美国每隔10年的人口数量记录如下表所示。

表1 1790-1980年间美国每隔10年的人口数量记录表 年份17901800181018201830184018501860187018801890190019101920193019401950196019701980人口 ( × 1 0 6 ) \left (\times 10^{6} \right ) (×106)3.95.37.29.612.917.123.231.438.650.262.976.092.0106.5123.2131.7150.7179.3204.0226.5 1.试用以上数据建立马尔萨斯(Malthus)人口指数增长模型,对接下来的每隔十年预测五次人口数量,并查阅实际数据进行比对分析。2.如果数据不相符,再对以上模型进行改进,寻找更为合适的模型进行预测,并对两次预测结果进行对比分析。 二、相关的基础知识

        关于人口增长的模型常用的有马尔萨斯人口指数增长模型、Logistic增长模型以及改进的Logistic模型,它们常被用于预测人口增长。本次问题求解中除了使用这三种常用的人口增长模型外,还使用了BP神经网络模型来预测人口。

2.1 马尔萨斯(Malthus)人口指数增长模型

        提出: 马尔萨斯模型来自于英国经济学家托马斯·罗伯特·马尔萨斯于1798年发表的《人口原理》。         马尔萨斯的人口论指出: 在没有生存资源限制的情况下,人口或生物种群的数量成指数增长。         定义: 关于人口或种群增长的模型。         模型的建立: 人口数量在单位时间内增长的百分比 r r r 是一定的,写成一个微分方程的形式,设 t = 0 t = 0 t=0时刻的人口数量为 N 0 N_{0} N0​,则 t t t 时刻的总人口 N t N_{t} Nt​满足 1 N t d N t d t = r ⇒ N t = N 0 e r t \frac{1}{N_{t}}\frac{dN_{t}}{dt}=r\Rightarrow N_{t}=N_{0}e^{rt} Nt​1​dtdNt​​=r⇒Nt​=N0​ert

        马尔萨斯认为,如果人口长期不受控制的话,指数增长的速度会十分惊人,生存资源的增长速度将无法满足众多人口的生存需要,从而产生一系列人口问题,严重时甚至会爆发饥荒、战争和疾病来除去资源与环境无法承受的过剩人口。

2.2 逻辑斯蒂(Logistic)增长模型

        马尔萨斯人口论自提出以来,就一直是一个备受争议的理论。例如:在受到资源环境限制的情况下,人口还能否做指数爆炸式的增长呢?假设资源环境能承受的人口数量为 K K K,则可以建立一个Logistic方程 1 N t d N t d t = r ( 1 − N t K ) \frac{1}{N_{t}}\frac{dN_{t}}{dt}=r\left (1-\frac{N_{t}}{K} \right ) Nt​1​dtdNt​​=r(1−KNt​​)

这个方程将得出仅在人口 N t < < K N_{t}dtdN(t)​=rN(t)[1−KN(t)​]N(0)=N0​​​​​​​​

        其中, K K K表示最大环境容纳量。                 求解该微分方程模型可解得第 t t t年的人口数量为 N ( t ) = K 1 + ( K N 0 − 1 ) e − r ( t − t 0 ) N\left ( t \right )=\frac{K}{1+\left ( \frac{K}{N_{0}} -1\right )e^{-r(t-t_{0})}} N(t)=1+(N0​K​−1)e−r(t−t0​)K​

模型的求解 使用MATLAB的cftool工具箱对数据进行拟合: 在这里插入图片描述在这里插入图片描述 拟合得: k = 285.9 , r = 0.0287 k =285.9,r = 0.0287 k=285.9,r=0.0287 模型为: x ( t ) = 285.9 / ( 1 + ( 285.9 / 3.9 − 1 ) ∗ e x p ( − 0.0287 ∗ ( t − 1790 ) ) ) x(t) = 285.9/(1+(285.9/3.9-1)*exp(- 0.0287*(t-1790))) x(t)=285.9/(1+(285.9/3.9−1)∗exp(−0.0287∗(t−1790))) 3.3 改进的Logistic模型 模型的建立         虽然Logistic模型考虑了环境容纳量,认为增长率是随着人口的增加而递减的,但是Logistic模型中的增长率是线性递减的。事实上,随着人口的增加,人口基数越来越大,出生率也是增大的,导致增长率的减小是逐渐缓慢的。因此,增长率的逐年递减是非线性的。设人口自然增长率 r ( t ) = r N ( t ) [ 1 − l n N ( t ) l n K ] r(t)=rN(t)\left [ 1-\frac{lnN(t)}{lnK} \right] r(t)=rN(t)[1−lnKlnN(t)​],则其数学模型为: { d N ( t ) d t = r N ( t ) [ 1 − l n N ( t ) l n K ] N ( 0 ) = N 0 \left\{\begin{matrix} \frac{dN\left ( t \right )}{dt}=rN\left ( t \right )\left [ 1-\frac{lnN(t)}{lnK} \right ]\\ N\left ( 0 \right )=N_{0}\begin{matrix} & & & & & & \end{matrix} \end{matrix}\right. {dtdN(t)​=rN(t)[1−lnKlnN(t)​]N(0)=N0​​​​​​​​​

                求解该微分方程模型可解得第 t t t年的人口数量为 N ( t ) = K [ ( N 0 K ) e − r ( t − t 0 ) l n K ] N(t)=K\left [ (\frac{N_{0}}{K})e^{\frac{-r(t-t_{0})}{lnK}} \right ] N(t)=K[(KN0​​)elnK−r(t−t0​)​]

模型的求解 使用MATLAB的cftool工具箱对数据进行拟合: 在这里插入图片描述在这里插入图片描述拟合参数得: k = 1084 , r = 0.04687 k =1084,r =0.04687 k=1084,r=0.04687 模型为: x ( t ) = 1084 ∗ ( ( 3.9 / 1084 ) x(t)= 1084*((3.9/1084) x(t)=1084∗((3.9/1084)^ e x p ( − 0.04687 ∗ ( t − 1790 ) / l o g ( 1084 ) ) ) exp(-0.04687*(t-1790)/log(1084))) exp(−0.04687∗(t−1790)/log(1084))) 3.4 BP神经网络模型 模型的建立         我们将BP神经网络模型用于对人口增长的预测,在建立的BP神经网络模型中,输入为年份 t t t,输出为年份对应的人口数量 N ( t ) N(t) N(t)。输入和输出神经元个数均为1,由于三层神经元网络可以实现对任意非线性问题的逼近,因此设隐藏层为1,神经元个数为2。BP神经网络结构图如下图所示: 在这里插入图片描述模型的求解         用1790-1980年间美国每隔10年的人口数量作为训练集,用1990-2030年间美国每隔10年的人口数量作为测试集,设训练次数为1000,训练目标最小误差为0.1,学习速率为0.01。代码如下: %利用BP神经网络对人口进行预测 clear clc %%% 读取原始数据 num=xlsread('E:\MATLAB\R2012a\bin\数学建模\1790-1980间美国人口数据.xlsx'); %num返回的是excel中的数据 year=num(1,:); population=num(2,:); %%% 利用已知数据训练BP网络 x=year; y=population; net=newff(x,y,2); %生成输入、输出均为一个神经元,隐含层2个神经元的BP网络 net.trainParam.epochs = 1000; % 训练次数,这里设置为1000次(训练的最大次数) net.trainParam.goal = 0.1; % 训练目标最小误差,这里设置为0.1 net.trainParam.lr = 0.01; % 学习速率,这里设置为0.01 net=train(net,x,y); %训练网络 %%% 预测1790-1980间人口数量 population_pre=sim(net,year); plot(year,population,'*b','MarkerSize',8);hold on plot(year,population_pre,'or','MarkerSize',8);hold on plot(year,population,'b','LineWidth',2);hold on plot(year,population_pre,'r','LineWidth',2);grid on legend('人口自然增长','拟合曲线') xlabel('年份') ylabel('人口/百万') title('利用BP神经网络进行人口预测') %%% 预测1980-2030间人口数量 Year_pre=1790:10:2030; Population_pre_BP=sim(net,Year_pre);% 在m文件中向Simulink模型传递参数,并运行模型,得到模型运行的结果数据 POPUS=[population,250.181,282.413,310.483,326.767]; errors=sum(abs(Population_pre_BP(1:end-1)-POPUS)); fprintf('总误差:%f\n',errors) save Population_pre_BP Population_pre_BP

在这里插入图片描述

四、人口数量的预测及分析

        用1790-1980年间美国每隔10年的人口数量作为训练集去拟合模型,用拟合好的模型去预测1990-2030年间美国每隔10年的人口数量,并计算每个模型所预测的1790-2030年间美国每隔10年的人口数量与真实值之间的误差和 E E E。

表2 1990-2030年间美国每隔10年的人口数量记录表 年份19902000201020202030人口 ( × 1 0 6 ) \left (\times 10^{6} \right ) (×106)250.181282.413310.483326.767—— Malthus模型 表3 Malthus模型对1990-2030年间美国每隔10年的人口数量进行预测的结果 年份19902000201020202030人口 ( × 1 0 6 ) \left (\times 10^{6} \right ) (×106)331.9474414.5429517.6900646.5022807.3656

经过预测后计算可得, Malthus模型预测的总误差为1070.944344(百万)。

Logistic模型 表4 Logistic模型对1990-2030年间美国每隔10年的人口数量进行预测的结果 年份19902000201020202030人口 ( × 1 0 6 ) \left (\times 10^{6} \right ) (×106)231.9765243.4314252.8001260.3193266.2630

经过预测后计算可得, Logistic模型预测的总误差为265.616329(百万)。

改进的Logistic模型 表5 改进的Logistic模型对1990-2030年间美国每隔10年的人口数量进行预测的结果 年份19902000201020202030人口 ( × 1 0 6 ) \left (\times 10^{6} \right ) (×106)248.8625273.7884299.3514325.4116351.8302

经过预测后计算可得, 改进的Logistic模型预测的总误差为67.551021(百万)。

BP神经网络模型 表6 BP神经网络模型对1990-2030年间美国每隔10年的人口数量进行预测的结果 年份19902000201020202030人口 ( × 1 0 6 ) \left (\times 10^{6} \right ) (×106)252.1015277.7805303.0367327.2741349.9891

经过预测后计算可得, BP神经网络模型预测的总误差为54.471387(百万)。

四种模型预测结果对比 表7 四种模型对1990-2030年间美国每隔10年的人口数量进行预测的结果进行对比

在这里插入图片描述         四种模型对1990-2030年的美国人口进行预测的结果进行对比如上表所示,可以看出Malthus模型、Logistic模型、改进的Logistic模型、BP神经网络模型四种模型中Malthus模型的误差是最大的,而BP神经网络模型的误差是最小的,可以说明对这一时期的美国人口而言,BP神经网络模型的效果是比较好的。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有