学校最近的数学建模比赛,刚好组内同学也有想参加的,就一起报名了,其实我也是第一次参加数模比赛,什么都不会,但还是抄出一篇论文来了。真正比赛是只有三天时间,学校的比赛给了两周,但是这个月都在忙斗舞秀,是真的忙,中午排练晚上排练,累死。只能说大学里面的时间真的很贵,做一件事情首先你要付出时间和精力,不然肯定得不到相应的回报,不说废话了。先放题目。
人口问题
在全面两孩政策正式实施之前,卫计委牵头进行了全面两孩政策影响生育的预测研究。
根据最后完成的《实施全面两孩政策人口变动测算总报告》,
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
% 读入人口数据(1971-2000年) 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=年份-1970)
T=1997:2017;
% 线性化处理
for t = 1:21,
x(t)=exp(-t);
y(t)=1/Y(t);
end
% 计算,并输出回归系数B,即计算回归方程 y'=a+bx' 中的a和b的值
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);
最后拟合出来的效果,无敌爆炸烂好吧,我也不知道为什么,等自己以后会了再来改吧:)