数模竞赛-人口问题

学校最近的数学建模比赛,刚好组内同学也有想参加的,就一起报名了,其实我也是第一次参加数模比赛,什么都不会,但还是抄出一篇论文来了。真正比赛是只有三天时间,学校的比赛给了两周,但是这个月都在忙斗舞秀,是真的忙,中午排练晚上排练,累死。只能说大学里面的时间真的很贵,做一件事情首先你要付出时间和精力,不然肯定得不到相应的回报,不说废话了。先放题目。

人口问题

在全面两孩政策正式实施之前,卫计委牵头进行了全面两孩政策影响生育的预测研究。
根据最后完成的《实施全面两孩政策人口变动测算总报告》,
2016年放开全面两孩,2017到2021年5年间增加两孩出生数将为1719.5万人,平均每年增加340万左右。
其中,2017年出生人口总量将达到2109.9万人,2018年达到峰值,为2188.6万人。
国家统计局2018年01月18日公布数据显示,去年全国出生人口数量和人口出生率双双下降。
2017年全年共出生人口1723万人,比预测数据“少了387万人”,低于2016年的1786万人。
人口出生率也同样出现了明显下降,去年全国人口出生率为12.43‰,2016年这一数据为12.95‰。
由于与之前预测相差甚远,这个数据甚至令不少人口学界人士感到意外。

建立数学模型分析下列问题:

(1) 在现有政策下预测未来人口的变化趋势。
(2) 如何才可达到《实施全面两孩政策人口变动测算总报告》的预测效果。
(3) 分析人口变化的主要因素,建立人口增长与这些因素间的关系。
(4) 依据你的研究给政府相关部门写一份800字左右的报告。

拿到手感觉还不算难吧,网上应该有很多这样的分析,但是网上大部分都是时间有点久的,这个是考虑全面开放二胎后得人口变化,主要还是用近年的数据,这样得分会高一些。

人口预测模型

先说我查到的几个模型吧,指数模型,灰度预测模型(这个网上被吐槽得很水),logistic模型,Leslie矩阵,大概就这几个了,然后论文里面用得是灰度预测和logistic模型,Leslie矩阵我很想加进去,因为它用当前人口年龄结构来预测未来的人口,感觉很切合题目。但是没找到合适的,就不了了之了。

灰度预测

先说公式推导
mathType的公式好像无法在makedown上面显示,我就截图吧
这里写图片描述
这里写图片描述
这里写图片描述
上面就是公式的推导,下面是matlab的代码

clc,clear;  
syms a b;  
c=[a b]';  
%2012-2017
A=[ 135404   136072   136782   137462   138271   139008];
B=cumsum(A);  %原始数据累加  
n=length(A);  
for i=1:(n-1)  
    C(i)=(B(i)+B(i+1))/2; %生成累加矩阵  
end  
%计算待定参数的值  
D=A;D(1)=[];  
D=D';  
E=[-C;ones(1,n-1)];  
c=inv(E*E')*E*D;  
c=c';  
a=c(1);b=c(2);  
%预测后续数据  
F=[];F(1)=A(1);  
for i=2:(n+5)  %只推测后5个数据,可以从此修改  
    F(i)=(A(1)-b/a)/exp(a*(i-1))+b/a;  
end  
G=[];G(1)=A(1);  
for i=2:(n+5)  %只推测后5个数据,可以从此修改  
    G(i)=F(i)-F(i-1);  %得到预测出来的数据  
end  
t1=2012:2017;  
t2=2012:2022;  %多10组数据  
G
h=plot(t1,A,'o',t2,G,'-'); %原始数据与预测数据的比较  
set(h,'LineWidth',1.5);

这是Excel里面的人口数据
这里写图片描述
最后得出的结论,感觉还是挺靠谱的。
这里写图片描述

logistic模型

前面说了灰度预测只适合用于样本量少的短期预测,logistic更适合中长期预测。
这里写图片描述

clear  
clc  
% 读入人口数据(19712000年)  1997 - 2017
Y=[123626 124761 125786 126743 127627 128453 129227 129988 130756 131448 132129 132802 133450 134091 134735 135404 136072 136782 137462 138271 139008]; 
% 读入时间变量数据(t=年份-1970T=1997:2017;
% 线性化处理  
for t = 1:21,   
   x(t)=exp(-t);  
   y(t)=1/Y(t);  
end  
% 计算,并输出回归系数B,即计算回归方程 y'=a+bx' 中的ab的值  
c=zeros(21,1)+1;  
X=[c,x'];%相当于30个方程组,求解a和b 的值.  
B=inv(X'*X)*X'*y'  
for i=1:21,  
% 计算回归拟合值      
    z(i)=B(1,1)+B(2,1)*x(i);  
% 计算离差  
    s(i)=y(i)-sum(y)/21;  
% 计算误差      
    w(i)=z(i)-y(i);  
end  
% 计算离差平方和S  
S=s*s';  
% 回归误差平方和Q  
Q=w*w';  
% 计算回归平方和U  
U=S-Q;  
% 计算,并输出F检验值  
F=28*U/Q  
% 计算非线性回归模型的拟合值 
for j=1:21,  
    p(j)=1/(B(1,1)+B(2,1)*exp(-j));  
end  
% 输出非线性回归模型的拟合曲线(Logisic曲线)  
plot(T,Y,'r*')
hold on
plot(T,p);

最后拟合出来的效果,无敌爆炸烂好吧,我也不知道为什么,等自己以后会了再来改吧:)
这里写图片描述

猜你喜欢

转载自blog.csdn.net/hhmy77/article/details/80355611