首页 » 技术分享 » 数学建模入门之MATLAB实现人口预测

数学建模入门之MATLAB实现人口预测

 

华南理工大学   陈艺荣          邮箱:eecyryou@mail.scut.edu.cn

人口问题是我国最大社会问题之一,估计人口数量和发展趋势是我们制定一系列相关政策的基础。从人口统计年鉴,可查我国从1990年至2010年人口数据资料如下,试根据表中数据,分析人口增长的规律,并以此预测2011年和2012年的人口数量,然后与实际人口数量做对比,评价模型的优劣,并对我国人口政策提出建议。

表 1 不同年份我国的人口数量(万)

年份

1990

1991

1992

1993

1994

1995

1996

1997

数量

114333

115823

117171

118517

119850

121121

122389

123626

年份

1998

1999

2000

2001

2002

2003

2004

2005

数量

124761

125786

126743

127627

128453

129227

129988

130756

年份

2006

2007

2008

2009

2010

 

 

 

数量

131448

132129

132802

133450

134091

 

 

 

  

    本问题要求我们利用已知的人口数据建立相应的人口增长模型,并利用该模型计算2011年和2012年我国的人口数量。

在MATLAB中以多项式为目标函数作数据拟合的函数是polyfit,它的基本使用格式为:

函数:polyfit(x,y,n),其中参数n为指定多项式的阶。

polyfit函数进行2阶多项式拟合、4阶多项式拟合、5阶多项式拟合,用R=dot(y-polyval(p,t),y-polyval(p,t)) 计算拟合残差,再用polyval函数预测2011和2012年的人口。

    其中,人口数据存放在一个命名为renkoushuju.txt的文件当中,设定1990年为第0年,如下列数据所示。在matlab中使用fopen函数和textsan函数获取相关数据。

renkoushuju.txt文件数据如下

0 114333
1 115823
2 117171
3 118517
4 119850
5 121121
6 122389
7 123626
8 124761
9 125786
10 126743
11 127627
12 128453
13 129227
14 129988
15 130756
16 131448
17 132129
18 132802
19 133450
20 134091

代码如下

%renkouyuce.m     我国人口增长规律观测
%           C    年份和人口数据矩阵
%         year    年份
%         num    人口
%           a    2011年预测人口数
%           b    2012年预测人口数
 
%Chen Yirong 修改于2017年04月05日
 
clc;clear all           %清除所有
%提取1990年到2010年的人口数据,数据存储在renkoushuju.txt文件中
renkou=fopen('renkoushuju.txt');  %打开数据总文件
A=textscan(renkou,'%f %f');       %把每一列的数据读入到读入到单元数组A中
C=[A{1} A{2}];                    %从单元数组R中提取每列数据赋值给矩阵C
n=max(size(C));                   %确定读入数据的年份数目
year=C(:,1);num=C(:,2);           %赋值
 
%进行2阶、4阶、5阶拟合
p2= polyfit(year,num,2)        %2阶拟合
p4= polyfit(year,num,4)        %4阶拟合
p5= polyfit(year,num,5)        %5阶拟合
R5= dot(num-polyval(p5,year),num-polyval(p5,year)) %计算拟合残差
R4= dot(num-polyval(p4,year),num-polyval(p4,year)) %计算拟合残差
R2= dot(num-polyval(p2,year),num-polyval(p2,year)) %计算拟合残差

%绘制原始数据和拟合曲线图
hold on;
xlabel('year','color','b');     %设置横坐标名
ylabel('num','color','b');      %设置纵坐标名
title('1990-2010人口增长曲线','color','m');   %设置标题
grid on      %网格线
plot(year,num,'r*',year,polyval(p2,year),year,polyval(p4,year),year,polyval(p5,year)) 
legend('我国人口数量','2阶拟合', '4阶拟合','5阶拟合')

%人口预测
a=polyval(p5,21)    %预测2011年人口数量
b=polyval(p5,22)    %预测2012年人口数量

【作者简介】陈艺荣,男,目前在华南理工大学电子与信息学院广东省人体数据科学工程技术研究中心攻读博士。曾获2次华南理工大学三好学生、华南理工大学“优秀共青团员”、新玛德一等奖学金(3000元,综测第3)、华为奖学金(5000元,综测第3)、汇顶科技特等奖学金(15000元,综测第1),两次获得美国大学生数学建模竞赛(MCM)一等奖,获得2016年全国大学生数学建模竞赛(广东赛区)二等奖、2017年全国大学生数学建模竞赛(广东赛区)一等奖、2018年广东省大学生电子设计竞赛一等奖等科技竞赛奖项,主持一项2017-2019年国家级大学生创新训练项目获得优秀结题,参与两项广东大学生科技创新培育专项资金、一项2018-2019年国家级大学生创新训练项目获得良好结题、4项华南理工大学“百步梯攀登计划”项目,发表SCI论文3篇授权实用新型专利5项,在受理专利17项(其中发明专利13项,11项进入实质审查阶段)。
我的Github
我的CSDN博客
我的Linkedin

转载自原文链接, 如需删除请联系管理员。

原文链接:数学建模入门之MATLAB实现人口预测,转载请注明来源!

0