• 一、题目要求
  • 二、相关的基础知识
    • 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年的人口数量记录表

年份 1790 1800 1810 1820 1830 1840 1850 1860 1870 1880 1890 1900 1910 1920 1930 1940 1950 1960 1970 1980
人口(×106)\left (\times 10^{6} \right )(×106) 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
  • 1.试用以上数据建立马尔萨斯(Malthus)人口指数增长模型,对接下来的每隔十年预测五次人口数量,并查阅实际数据进行比对分析。
  • 2.如果数据不相符,再对以上模型进行改进,寻找更为合适的模型进行预测,并对两次预测结果进行对比分析。

二、相关的基础知识

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

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

提出: 马尔萨斯模型来自于英国经济学家托马斯·罗伯特·马尔萨斯于1798年发表的《人口原理》。
        马尔萨斯的人口论指出: 在没有生存资源限制的情况下,人口或生物种群的数量成指数增长。
        定义: 关于人口或种群增长的模型。
        模型的建立: 人口数量在单位时间内增长的百分比 rrr 是一定的,写成一个微分方程的形式,设 t=0t = 0t=0时刻的人口数量为N0N_{0}N0​,则 ttt 时刻的总人口NtN_{t}Nt​满足1NtdNtdt=r⇒Nt=N0ert\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)增长模型

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

这个方程将得出仅在人口Nt<<KN_{t}<<KNt​<<K 时,Nt=N0ertN_{t}=N_{0}e^{rt}Nt​=N0​ert才是指数增长的。当接近KKK时,人口的增长明显受到天花板KKK的压制。虽然Nt>KN_{t}> KNt​>K时确实会出现人口的负增长,但不过是平稳地趋近于平衡水平 KKK,而并不会发生马尔萨斯所担心的灾难性人口锐减的行为。下图给出了 KKK 随时间缓慢线性增加时,人口从不同的初条件以不同的生育率 rrr 增长的数值模拟结果。最终人口都达到了跟随 KKK(灰线)的线性增加行为。
        那么是不是可以说由于生存资源 KKK 的算术级增长,人口实际上并不能长期持续地指数增长,而是也会适应KKK 变为算术级增长,所以马尔萨斯其实在杞人忧天地担心一个伪命题?
        逻辑斯蒂方程( Logistic Equation)为马尔萨斯( Malthus) 人口模型的推广。

2.3 改进的Logistic模型

虽然Logistic模型考虑了环境容纳量,认为增长率是随着人口的增加而递减的,但Logistic模型中的增长率是线性递减的。事实上,随着人口的增加,人口基数越来越大,出生率也是增大的,导致增长率的减小是逐渐缓慢的。因此,增长率的逐年递减是非线性的。所以需要对Logistic模型进行改进,使得增长率的变化是非线性的。

2.4 BP神经网络模型

BP(back propagation)神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是应用最广泛的神经网络。
        BP神经网络是一种多层前馈神经网络,该网络的主要特点是:信号前向传播、误差反向传播。在前向传播中,输入信号从输入层经隐含层逐层处理,直至输出层,每一层的神经元状态只影响下一层神经元状态。如果输出层得不到期望输出,则转入反向传播,根据预测误差调整网络权值和阈值,从而使BP神经网络输出不断逼近期望输出。
        BP可以用于数据预测,在已知过去和当前的数据下,可以对未来数据进行估计。

三、模型的建立与求解

针对本次的题目使用了Malthus模型、Logistic模型、改进的Logistics模型、BP神经网络模型四种模型进行建模。
        为了更清楚地反应各模型的预测准确度,令1790-2020年间预测人口数和实际人口数偏差之和为:E=∑t=024∣N(t)−Np(t)∣E=\sum_{t=0}^{24} \left | N(t)-N_{p}(t) \right |E=t=0∑24​∣N(t)−Np​(t)∣

其中,t=0,1,…,24t=0,1,…,24t=0,1,…,24分别表示年份1790,1800,…,2020,N(t)N(t)N(t)和Np(t)Np(t)Np(t)分别表示第ttt个年份的实际人口和预测人口数量。

3.1 Malthus模型

  • 模型的建立
            在最简单的情况下,人口预测采用指数增长函数,建模的思路如下:假定t0=1790t_{0}=1790t0​=1790年的人口数为N0N_{0}N0​,人口增长率rrr为常数,则第ttt年的人口为N(t)N\left ( t \right )N(t)。其数学模型为:{N(t)=N0er(t−t0)=N0erΔtN(0)=N0\left\{\begin{matrix} N\left ( t \right )=N_{0}e^{r\left ( t-t_{0} \right )}=N_{0}e^{r\Delta t }\\ N\left ( 0 \right )=N_{0}\begin{matrix} & & & & & & & \end{matrix} \end{matrix}\right.{N(t)=N0​er(t−t0​)=N0​erΔtN(0)=N0​​​​​​​​​​
  • 模型的求解
    使用MATLAB的cftool工具箱对数据进行拟合:


    拟合得:r=0.02222r = 0.02222r=0.02222
    模型为:N(t)=3.9∗exp(0.02222∗(t−1790))N(t)= 3.9*exp(0.02222*(t-1790))N(t)=3.9∗exp(0.02222∗(t−1790))

3.2 Logistic模型

  • 模型的建立
            马尔萨斯模型虽然在一定程度上反映了人口数量随着时间的推移的变化规律,但是根据马尔萨斯模型随着时间的推移人口成指数增长,这显然是不符合事实的。当人口数量较少时,自然资源比较丰富,人口增长相对较快,自然增长率可以在短期维持一个常数。但当人口达到一定水平后,受到自然资源相对稀缺的影响,人口增长率开始下降。设人口自然增长率r(t)=rN(t)[1−N(t)K]r(t)=rN(t)\left [ 1-\frac{N(t)}{K} \right]r(t)=rN(t)[1−KN(t)​],则其数学模型为:{dN(t)dt=rN(t)[1−N(t)K]N(0)=N0\left\{\begin{matrix} \frac{dN\left ( t \right )}{dt}=rN\left ( t \right )\left [ 1-\frac{N\left ( t \right )}{K} \right ]\\ N\left ( 0 \right )=N_{0}\begin{matrix} & & & & & \end{matrix} \end{matrix}\right.{dtdN(t)​=rN(t)[1−KN(t)​]N(0)=N0​​​​​​​​

其中,KKK表示最大环境容纳量。
                求解该微分方程模型可解得第ttt年的人口数量为N(t)=K1+(KN0−1)e−r(t−t0)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.0287k =285.9,r = 0.0287k=285.9,r=0.0287
    模型为: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)))x(t)=285.9/(1+(285.9/3.9−1)∗exp(−0.0287∗(t−1790)))

3.3 改进的Logistic模型

  • 模型的建立
            虽然Logistic模型考虑了环境容纳量,认为增长率是随着人口的增加而递减的,但是Logistic模型中的增长率是线性递减的。事实上,随着人口的增加,人口基数越来越大,出生率也是增大的,导致增长率的减小是逐渐缓慢的。因此,增长率的逐年递减是非线性的。设人口自然增长率r(t)=rN(t)[1−lnN(t)lnK]r(t)=rN(t)\left [ 1-\frac{lnN(t)}{lnK} \right]r(t)=rN(t)[1−lnKlnN(t)​],则其数学模型为:{dN(t)dt=rN(t)[1−lnN(t)lnK]N(0)=N0\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​​​​​​​​​

求解该微分方程模型可解得第ttt年的人口数量为N(t)=K[(N0K)e−r(t−t0)lnK]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.04687k =1084,r =0.04687k=1084,r=0.04687
    模型为:x(t)=1084∗((3.9/1084)x(t)= 1084*((3.9/1084)x(t)=1084∗((3.9/1084)^exp(−0.04687∗(t−1790)/log(1084)))exp(-0.04687*(t-1790)/log(1084)))exp(−0.04687∗(t−1790)/log(1084)))

3.4 BP神经网络模型

  • 模型的建立
            我们将BP神经网络模型用于对人口增长的预测,在建立的BP神经网络模型中,输入为年份ttt,输出为年份对应的人口数量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年的人口数量与真实值之间的误差和EEE。

表2 1990-2030年间美国每隔10年的人口数量记录表

年份 1990 2000 2010 2020 2030
人口(×106)\left (\times 10^{6} \right )(×106) 250.181 282.413 310.483 326.767 ——
  • Malthus模型

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

年份 1990 2000 2010 2020 2030
人口(×106)\left (\times 10^{6} \right )(×106) 331.9474 414.5429 517.6900 646.5022 807.3656

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

  • Logistic模型

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

年份 1990 2000 2010 2020 2030
人口(×106)\left (\times 10^{6} \right )(×106) 231.9765 243.4314 252.8001 260.3193 266.2630

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

  • 改进的Logistic模型

表5 改进的Logistic模型对1990-2030年间美国每隔10年的人口数量进行预测的结果

年份 1990 2000 2010 2020 2030
人口(×106)\left (\times 10^{6} \right )(×106) 248.8625 273.7884 299.3514 325.4116 351.8302

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

  • BP神经网络模型

表6 BP神经网络模型对1990-2030年间美国每隔10年的人口数量进行预测的结果

年份 1990 2000 2010 2020 2030
人口(×106)\left (\times 10^{6} \right )(×106) 252.1015 277.7805 303.0367 327.2741 349.9891

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

  • 四种模型预测结果对比

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


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

数学建模(一)—— 人口增长模型的确定相关推荐

  1. 数学建模——逻辑回归模型Python代码

    数学建模--逻辑回归模型详解Python代码 程序用到的测试数据: 链接:https://pan.baidu.com/s/1LGD1MAxk2lxO93smSPNyZg 提取码:uukr 代码正文 i ...

  2. 数学建模——TOPSIS综合评价模型Python代码

    数学建模--TOPSIS综合评价模型Python代码 正常代码 import numpy as np # 导入numpy包并将其命名为np ##定义正向化的函数 def positivization( ...

  3. 常染色体的隐性疾病数学建模(代数模型)

    常染色体的隐性疾病数学建模(代数模型) 摘要:本文研究随交配代数的增长,常染色体隐性疾病的基因分布变化问题.使用代数模型,在正常人不与显性患者交配,但隐性患者可与正常人.隐性患者交配的情况下时,探究基 ...

  4. 数学建模基本算法模型Chapter1--线性规划

    数学建模基本算法模型Charpter1–线性规划(LP) By 进栈需检票 一.线性规划基本概念 1.Linear Programming (LP问题) 列出方程组不等式求解(基本形式) 包含目标函数 ...

  5. 数学建模优化模型简单例题_数学建模之优化模型:存储模型

    点击上方「蓝字」关注我们 最近,为申报市级精品课程,我为我校"数学建模与科学计算"课程录制了讲课视频,下面是3.1节优化模型的第一个例子:存储模型.敬请大家批评指正! 优化模型是数 ...

  6. 【数学建模】线性规划模型MATLAB求解(最优化)

    文章目录 一.算法介绍 二.适用问题 三.算法总结 1.可以转化为线性规划的问题 四.应用场景举例 1. 例1.1: 2. 解: 2. 例1.2: 2. 解: 五.MATLAB操作 六.实际案例(投资 ...

  7. 【数学建模】非线性规划模型与01规划模型(最优化)

    文章目录 一.算法介绍 1. 01规划模型 二.适用问题 三.算法总结 四.应用场景举例 1.非线性规划模型 2.01规划模型 五.LINGO代码 1.非线性规划模型 2.01规划模型 六.实际案例 ...

  8. 二维动态规划降维误差一般为多少_数学建模常用算法模型

    数学模型的分类 按模型的数学方法分: 几何模型.图论模型.微分方程模型.概率模型.最优控制模型.规划论模型.马氏链模型等 按模型的特征分: 静态模型和动态模型,确定性模型和随机模型,离散模型和连续性模 ...

  9. 数学建模基本算法模型

    全国大学生数学建模竞赛中常用的算法模型包括但不限于以下几种: 线性回归模型:用于建立变量之间线性关系的模型,常用于预测和分析数据. 逻辑回归模型:用于建立变量之间的非线性关系,常用于分类问题和概率预测 ...

  10. 数学建模——统计回归模型

    前言:看完数学建模的统计回归模型,更是感到了数学建模的"细腻"之处,对比与机器学习,如果说机器学习像是"打一场仗",那数学建模更是像"做一场手术&qu ...

最新文章

  1. 字节跳动(今日头条),为何战斗力如此凶猛?
  2. jquery flexigrid 增加行双击事件
  3. 【+】Linux Socket编程
  4. 【iVX 初级工程师培训教程 10篇文拿证】02 数值绑定及自适应网站制作
  5. webdriver高级应用- 右键另存为下载文件
  6. 现在的年轻人不够努力了吗?是什么原因?
  7. 反编译工具reflector破解方法
  8. js html json 压缩工具,JS格式化/压缩JSON数据
  9. 企查查python爬虫实例
  10. 袁国宝:从“人口红利”到“人才红利”,我们的机会在哪?
  11. BTSP——HDU2224The shortest path
  12. 策略模式、工厂模式、装饰者模式总结解析
  13. golang开发工程师-第一步:golang入门基础教学
  14. 四年嵌入式技术沉淀,处女作《STM32CubeMX系列实战教程》诞生
  15. win10dnf服务器未响应,win101903玩DNF卡顿 ,掉线,死机的解决办法
  16. AI+教育 I 69天流利说APP学习浅谈自适应学习
  17. MySQL的upsert
  18. 信者的路,读《病隙碎笔》——leo鉴书(16)
  19. 水果库存系统(基础版)
  20. JS方法篇:vue.js判断滚动条触底

热门文章

  1. scala linux环境变量配置,Scala 下载安装并配置环境
  2. iptv错误代码2003什么意思_IPTV部分错误代码及原因解释
  3. TP5 ZipArchive 的坑
  4. XJad(Java反编译工具)v2.2绿色版
  5. reactos操作系统实现(108)
  6. java怎么开发app_如何开发一款APP
  7. Python 自定义模块
  8. ArcGIS教程 - 2 ArcGIS基础知识
  9. XMind--思维导图
  10. 使用微软Monaco Editor 编写代码比对工具