人口预测模型

  • 多项式拟合
    • 假设
    • 特点
    • 代码实现
      • 代码实现思路
      • 代码
  • BP神经网络
    • 特点
    • 代码实现
      • 实现思路
      • 代码
  • Logistic模型
    • 特点
    • 代码实现
      • 原理
      • 代码

多项式拟合

假设

  1. 把人口增长看做是一个多项式函数
  2. 人口增长没有限制,可以一直增长

特点

  1. 已有数据拟合的很好,不论数据有没有规律可言
  2. 预测未来一两年比较准确,越往后越不准确
  3. 预测的人口数量在未来会超出人口限制,且增长速度变快

代码实现

代码实现思路

以年份为x轴变量,当年人口为y轴变量,将两者进行拟合得到人口数模型与时间的关系式
,选取某城市2008到2019年老年人口数量进行模拟测试

代码

首先是将已有的数据拟合成一条曲线,过程代码如下所示

close
clc;
clear all           %清除所有
n=5;%拟合多项式的次数
year=2008:2019;
num=[97.42 102.36  105.78  111.16  116.04  121.71  126.26  134.93  137 139 141.89 146];%户籍人口;
p5= polyfit(year,num,n);       %5阶拟合
%绘制原始数据和拟合曲线图
figure(1)
hold on;
xlabel('year');     %设置横坐标名
ylabel('num');      %设置纵坐标名
title('2008-2019人口增长曲线');   %设置标题
grid on      %网格线
plot(year,num,'r*',year,polyval(p5,year))
legend('人口数量','拟合曲线')

运行结果图

然后预测未来几年的人口增长数

figure(2)
year1=2008:2025;
plot(year1,polyval(p5,year1))
people=polyval(p5,year1);
legend('人口预测数量')

运行的结果图

BP神经网络

特点

  1. BP神经网络预测人口模型不需要任何假设
  2. BP神经网络根据已有的数据推算数据内部之间的关系
  3. BP神经网络是非线性的方法

代码实现

实现思路

采用三层BP神经网络,利用已有数据推算出关系式,然后推算出下一年的人口,然后以下一年的人口为基础继续推算下下一年的人口

代码

clear all
close
clc
%原始数据
P=[97.42 102.36    105.78  111.16  116.04  121.71  126.26  134.93  137;102.36  105.78  111.16  116.04  121.71 126.26 134.93 137 139;105.78 111.16  116.04  121.71  126.26 134.93 137 139 141.89];
T=[111.16  116.04  121.71  126.26  134.93 137 139 141.89 146];
%归一化处理
[P,Pmin,Pmax,T,Tmin,Tmax]=premnmx(P,T);
%神经网络
net=newff(minmax(P),[5,1],{'tansig','purelin'});
net.trainFcn='trainbr';
%设置训练参数
net.trainParam.show=50;
net.trainParam.lr=0.05;
net.trainParam.epochs=500;
net.trainParam.goal=1e-5;
%训练
[net,tr]=train(net,P,T);
%仿真
A=sim(net,P);
a=postmnmx(A,Tmin,Tmax);
T=postmnmx(T,Tmin,Tmax);
%优化后输入层权值和阙值
inputWeights=net.IW{1,1};
inputbias=net.b{1};
%优化后网络层权值和阙值
layerWeights=net.LW{2,1};
layerbias=net.b{2};
%画图输出
x=2011:2019;
newk=a(1,:);
figure(1)
plot(x,newk,'r-o',x,T,'b--*')
xlabel('年份')
ylabel('人口数量/万人')
legend('预测人口数量','实际人口数量')

结果图像

预测未来几年的人口数量

Pnew=[139;141.89;146];
OldNum=zeros(15,1);
for i=1:15SamNum=size(Pnew,2);Pnewn=tramnmx(Pnew,Pmin,Pmax);HiddenOut=tansig(inputWeights*Pnewn+repmat(inputbias,1,SamNum));anewn=purelin(layerWeights*HiddenOut+repmat(layerbias,1,SamNum));anewn=postmnmx(anewn,Tmin,Tmax);Pnew(1:3,:)=[Pnew(2:3,:);anewn];OldNum(i)=anewn;
end
%画图输出
x1=2011:2034;
figure(2)
NUM=[newk,OldNum'];
plot(x1,NUM,'r--o')
xlabel('年份')
ylabel('人口数量/万人')
legend('预测人口数量')

结果展示

Logistic模型

特点

  1. 考虑了人口能够承受的最大值
  2. 数据出错时拟合的不够好,必须要有正确的数据才能够拟合
  3. 数学模型简单,有一定的公式

代码实现

原理

Logistic模型认为人口增长有最大值Xm和人口的固有增长率r0。当人口增长到Xm附近,人口将保持这个水准不会有大的变动,数学公式如下
dx/dt=r0(1-x/Xm)x
x(0)=x0
x是人口数量,x0是初始人口数量
解这个方程组得到
x=Xm/(1+(Xm/x0-1)exp(-r0
t))

代码

clc
clear
close all
x=[97.42 102.36    105.78  111.16  116.04  121.71  126.26  134.93  141.24  141.89  143.2   147];%常驻老年人口
n=length(x);
t=0:1:n-1;
rk=zeros(1,n);
rk(1)=(-3*x(1)+4*x(2)-x(3))/2;
rk(n)=(x(n-2)-4*x(n-1)+3*x(n))/2;
for i=2:n-1rk(i)=(x(i+1)-x(i-1))/2;
end
rk=rk./x;
p=polyfit(x,rk,1);
b=p(2);
a=p(1);
r0=b;
xm=-r0/a;
%输出
pnum=zeros(n,1);
for i=0:1:n-1pnum(i+1)=xm/(1+(xm/x(1)-1)*exp(-r0*i));
end
year1=2008:2019;
plot(year1,pnum,'r--o',year1,x,'k-*')
xlabel('年份')
ylabel('老年人口数量/万人')
legend('预测老年人口数量','实际老年人口数量')

计算结果

预测

figure(2)
fnum=zeros(n+16,1);
for i=0:1:n+15fnum(i+1)=xm/(1+(xm/x(1)-1)*exp(-r0*i));
end
year2=2008:2035;
plot(year2,fnum,'r--o')
xlabel('年份')
ylabel('老年人口数量/万人')
legend('预测老年人口数量')

计算结果

数学建模——人口预测模型相关推荐

  1. 数学建模——灰色预测模型Python代码

    数学建模--灰色预测模型Python代码 """ Spyder Editor This is a temporary script file. ""& ...

  2. 数学建模-灰色预测模型(预测模型)

            灰色预测是指利用GM模型对系统行为特征的发展变化规律进行估计预测,同时也可以对行为特征的异常情况发生的时刻进行估计计算,以及对在特定时区内发生事件的未来时间分布情况做出研究等等.这些工 ...

  3. 数学建模系列-预测模型(一)灰色预测模型

    目录 1 灰色预测模型 1.1 灰色系统的定义与特点 1.2 灰色预测模型优缺点 1.3 灰色生成数列 1.4 灰色模型GM(1,1)实操步骤 1 数据检验 2 构建灰色模型 3 检验预测值 4 灰色 ...

  4. 数学建模系列-预测模型(六)---微分方程模型

    书接上回,我们在这里讨论一下微分方程模型,也是预测模型的最后一节,以后有想到的再补上.()拟合优度对于非线性情况已经没有意义了.. 分类 微分方程模型属于白盒模型,将物理或者其他自然科学的关系与预测目 ...

  5. 数学建模系列-预测模型(四)---时间序列模型

    上回书说到,预测模型中的插值与拟合已经讲述完毕.现在我们研究的是时间序列模型. 分类 与普通的数值拟合不同,时间序列的拟合需要考虑多种因素,本质上是一种高级的拟和方式.同时也是一种黑箱模型, 小结一下 ...

  6. 数学建模系列--预测模型(二)---灰色预测模型

    正如前文所述,目前我们学习预测模型的第二类:灰色预测模型. 在控制领域,有一种方法将系统可以笼统的分为三类: 黑箱.白箱.灰箱. 其中黑箱是完全不可观的,因此只能通过大量的输入.输出数据进行建模,找到 ...

  7. 数学建模-人口模型Logistic模型与 Malthus模型

    一.问题及重述:下表是中国人口数据,请根据这些数据建立适当的数学模型对其进行描述,并预测2002.2003.2004年的中国人口数. 给出模型,求解代码及必要的图形,误差分析结果. 重述: 选取合适的 ...

  8. 数学建模——灰色预测模型

    模型简介 灰色模型 (grey models) 是通过少量的,不完全的信息,建立灰色微分预测模型,对事物发展作出长期性的描述. 与灰色模型相对应的预测方法有回归分析等,但这些预测方法需要较大的样本,如 ...

  9. 2022年第五届中青杯数学建模-时间序列预测模型及基于多特征条件下的决策优化

    开放三孩背景下的生育政策研究   众所周知,人口的数量和结构是影响社会经济发展的重要因素.我国经历了"计划生育"到"全面二孩",再到"放开三孩&quo ...

  10. 【数学建模】预测模型笔记之灰色预测

    学习来源:清风老师 灰色预测 灰色系统 GM(1,1)模型: Grey(Gray) Model GM(1,1)是使用原始的离散非负数据列,通过一次累加生成削弱随机性的较有规律的新的离散数据列,然后通过 ...

最新文章

  1. Dockerfile ENV和ARG的区别与应用
  2. Android intent传序列化对象
  3. 计算机视觉与深度学习 | ORB特征匹配:基于OpenCV+Python(暴力匹配、FLANN)
  4. iOS之深入解析WKWebView的坑点收录和优化处理
  5. Python程序开发——第二章 条件语句和循环语句
  6. dw怎么打开html模板,Dreamweaver中如何使用模板
  7. LeetCode 525. 连续数组(前缀和+哈希)
  8. div css 圆角样式
  9. python 去掉tab_Python使用crontab模块设置和清除定时任务操作详解
  10. mac下的mysql报错:ERROR 1045(28000)和ERROR 2002 (HY000)的解决办法
  11. python 修改dataframe列名的几种方法
  12. scratch3.0教程(持续更新)
  13. chrome浏览器 json插件【WEB前端助手】
  14. 杀软EAV/ESS不用“用户名密码”就能更新的方法【各版、6.0.308依然可用】
  15. php 识别图框,自动识别比例插入CAD图框教程
  16. Verilog编写FSM有限状态机来检测序列11011,则输出1;可对序列进行重复检测
  17. 三年工作经历总结(创业公司、中小公司和大厂经历)
  18. “瘦瘦”让健康管理流行起来
  19. leetcode-SQL-603. 连续空余座位
  20. 《Unity Shader入门精要》彩图版免费分享~~~~~

热门文章

  1. java后端使用freemarker生成echarts图表word
  2. 电商erp那个收费模式最合算?
  3. matlab影像阿伯斯投影,D3.js 世界地图(一)投影方式
  4. 机器学习(Machine Learning)深度学习(Deep Learning)资料
  5. Navicat for my sql 数据结构导出(制作数据字典)
  6. 【STM32F429】第5章 ThreadX NetXDUO网络协议栈介绍
  7. java解析varbinary_java – JdbcTemplate:以字符串形式访问MySQL VARBINARY字段
  8. 方管图纸标注_图样中型材的标注方法
  9. R语言软件版本自动更新
  10. AutoCAD LT 2020 for Mac在升级了MacOS 11后打不开了怎么处理?那么教程来了哦