数学建模——人口预测模型
人口预测模型
- 多项式拟合
- 假设
- 特点
- 代码实现
- 代码实现思路
- 代码
- BP神经网络
- 特点
- 代码实现
- 实现思路
- 代码
- Logistic模型
- 特点
- 代码实现
- 原理
- 代码
多项式拟合
假设
- 把人口增长看做是一个多项式函数
- 人口增长没有限制,可以一直增长
特点
- 已有数据拟合的很好,不论数据有没有规律可言
- 预测未来一两年比较准确,越往后越不准确
- 预测的人口数量在未来会超出人口限制,且增长速度变快
代码实现
代码实现思路
以年份为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神经网络
特点
- BP神经网络预测人口模型不需要任何假设
- BP神经网络根据已有的数据推算数据内部之间的关系
- 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模型
特点
- 考虑了人口能够承受的最大值
- 数据出错时拟合的不够好,必须要有正确的数据才能够拟合
- 数学模型简单,有一定的公式
代码实现
原理
Logistic模型认为人口增长有最大值Xm和人口的固有增长率r0。当人口增长到Xm附近,人口将保持这个水准不会有大的变动,数学公式如下
dx/dt=r0(1-x/Xm)x
x(0)=x0
x是人口数量,x0是初始人口数量
解这个方程组得到
x=Xm/(1+(Xm/x0-1)exp(-r0t))
代码
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('预测老年人口数量')
计算结果
数学建模——人口预测模型相关推荐
- 数学建模——灰色预测模型Python代码
数学建模--灰色预测模型Python代码 """ Spyder Editor This is a temporary script file. ""& ...
- 数学建模-灰色预测模型(预测模型)
灰色预测是指利用GM模型对系统行为特征的发展变化规律进行估计预测,同时也可以对行为特征的异常情况发生的时刻进行估计计算,以及对在特定时区内发生事件的未来时间分布情况做出研究等等.这些工 ...
- 数学建模系列-预测模型(一)灰色预测模型
目录 1 灰色预测模型 1.1 灰色系统的定义与特点 1.2 灰色预测模型优缺点 1.3 灰色生成数列 1.4 灰色模型GM(1,1)实操步骤 1 数据检验 2 构建灰色模型 3 检验预测值 4 灰色 ...
- 数学建模系列-预测模型(六)---微分方程模型
书接上回,我们在这里讨论一下微分方程模型,也是预测模型的最后一节,以后有想到的再补上.()拟合优度对于非线性情况已经没有意义了.. 分类 微分方程模型属于白盒模型,将物理或者其他自然科学的关系与预测目 ...
- 数学建模系列-预测模型(四)---时间序列模型
上回书说到,预测模型中的插值与拟合已经讲述完毕.现在我们研究的是时间序列模型. 分类 与普通的数值拟合不同,时间序列的拟合需要考虑多种因素,本质上是一种高级的拟和方式.同时也是一种黑箱模型, 小结一下 ...
- 数学建模系列--预测模型(二)---灰色预测模型
正如前文所述,目前我们学习预测模型的第二类:灰色预测模型. 在控制领域,有一种方法将系统可以笼统的分为三类: 黑箱.白箱.灰箱. 其中黑箱是完全不可观的,因此只能通过大量的输入.输出数据进行建模,找到 ...
- 数学建模-人口模型Logistic模型与 Malthus模型
一.问题及重述:下表是中国人口数据,请根据这些数据建立适当的数学模型对其进行描述,并预测2002.2003.2004年的中国人口数. 给出模型,求解代码及必要的图形,误差分析结果. 重述: 选取合适的 ...
- 数学建模——灰色预测模型
模型简介 灰色模型 (grey models) 是通过少量的,不完全的信息,建立灰色微分预测模型,对事物发展作出长期性的描述. 与灰色模型相对应的预测方法有回归分析等,但这些预测方法需要较大的样本,如 ...
- 2022年第五届中青杯数学建模-时间序列预测模型及基于多特征条件下的决策优化
开放三孩背景下的生育政策研究 众所周知,人口的数量和结构是影响社会经济发展的重要因素.我国经历了"计划生育"到"全面二孩",再到"放开三孩&quo ...
- 【数学建模】预测模型笔记之灰色预测
学习来源:清风老师 灰色预测 灰色系统 GM(1,1)模型: Grey(Gray) Model GM(1,1)是使用原始的离散非负数据列,通过一次累加生成削弱随机性的较有规律的新的离散数据列,然后通过 ...
最新文章
- Dockerfile ENV和ARG的区别与应用
- Android intent传序列化对象
- 计算机视觉与深度学习 | ORB特征匹配:基于OpenCV+Python(暴力匹配、FLANN)
- iOS之深入解析WKWebView的坑点收录和优化处理
- Python程序开发——第二章 条件语句和循环语句
- dw怎么打开html模板,Dreamweaver中如何使用模板
- LeetCode 525. 连续数组(前缀和+哈希)
- div css 圆角样式
- python 去掉tab_Python使用crontab模块设置和清除定时任务操作详解
- mac下的mysql报错:ERROR 1045(28000)和ERROR 2002 (HY000)的解决办法
- python 修改dataframe列名的几种方法
- scratch3.0教程(持续更新)
- chrome浏览器 json插件【WEB前端助手】
- 杀软EAV/ESS不用“用户名密码”就能更新的方法【各版、6.0.308依然可用】
- php 识别图框,自动识别比例插入CAD图框教程
- Verilog编写FSM有限状态机来检测序列11011,则输出1;可对序列进行重复检测
- 三年工作经历总结(创业公司、中小公司和大厂经历)
- “瘦瘦”让健康管理流行起来
- leetcode-SQL-603. 连续空余座位
- 《Unity Shader入门精要》彩图版免费分享~~~~~
热门文章
- java后端使用freemarker生成echarts图表word
- 电商erp那个收费模式最合算?
- matlab影像阿伯斯投影,D3.js 世界地图(一)投影方式
- 机器学习(Machine Learning)深度学习(Deep Learning)资料
- Navicat for my sql 数据结构导出(制作数据字典)
- 【STM32F429】第5章 ThreadX NetXDUO网络协议栈介绍
- java解析varbinary_java – JdbcTemplate:以字符串形式访问MySQL VARBINARY字段
- 方管图纸标注_图样中型材的标注方法
- R语言软件版本自动更新
- AutoCAD LT 2020 for Mac在升级了MacOS 11后打不开了怎么处理?那么教程来了哦