灰色预测模型GM(1,1)

转载文章哦,原文在这里哦Click Here
预备知识
(1)灰色系统
白色系统是指系统内部特征是完全已知的;黑色系统是指系统内部信息完全未知的;而灰色系统是介于白色系统和黑色系统之间的一种系统,灰色系统其内部一部分信息已知,另一部分信息未知或不确定。
(2)灰色预测
灰色预测,是指对系统行为特征值的发展变化进行的预测,对既含有已知信息又含有不确定信息的系统进行的预测,也就是对在一定范围内变化的、与时间序列有关的灰过程进行预测。尽管灰过程中所显示的现象是随机的、杂乱无章的,但毕竟是有序的、有界的,因此得到的数据集合具备潜在的规律。灰色预测是利用这种规律建立灰色模型对灰色系统进行预测。
目前使用最广泛的灰色预测模型就是关于数列预测的一个变量、一阶微分的GM(1,1)模型。它是基于随机的原始时间序列,经按时间累加后所形成的新的时间序列呈现的规律可用一阶线性微分方程的解来逼近。经证明,经一阶线性微分方程的解逼近所揭示的原始时间序列呈指数变化规律。因此,当原始时间序列隐含着指数变化规律时,灰色模型GM(1,1)的预测是非常成功的。
灰色预测模型GM(1,1)_第1张图片
灰色预测模型GM(1,1)_第2张图片
灰色预测模型GM(1,1)_第3张图片
这里写图片描述
灰色预测模型GM(1,1)_第4张图片
灰色预测模型GM(1,1)_第5张图片
灰色预测模型GM(1,1)_第6张图片
灰色预测模型GM(1,1)_第7张图片
灰色预测模型GM(1,1)_第8张图片
灰色预测模型GM(1,1)_第9张图片
灰色预测模型GM(1,1)_第10张图片灰色预测模型GM(1,1)_第11张图片
灰色预测模型GM(1,1)_第12张图片
灰色预测模型GM(1,1)_第13张图片
灰色预测模型GM(1,1)_第14张图片

上面是转载博客的的解释,由于原文给出的是Python代码,但是不会Python,就自己敲一下MATLAB的代码啦。
最近在做数学建模,关于人口预测的一个问题,用到了灰色预测模型。找出了2000-2016年的人口数据,预测未来50年的数据。

clear
clc
syms a b;
c=[a b]';
A=[126743,127627,128453,129227,129988,130756,131448,132129,132802,133450,134091,134735,135404,136072,136782,137462,138271];%原始数据序列
len=length(A);
B=cumsum(A)                           %对A进行累加生成
for i=1:len-1                            %B的紧邻均值序列
    C(i)=-0.5*(B(i)+B(i+1));
end
one=ones(1,len-1);
D=[C;one];                           %构造数据矩阵
for i=2:len                           %原始数据进行平移得到数据列
    y(i-1)=A(i);
end
ans=inv(D*D')*D*y';
a=ans(1);                                 %发展系数
b=ans(2);                                  %灰作用量
F=[];
F(1)=A(1);
for i=2:(len+50)                %得到模型计算值(仍是累加的结果)
    F(i)=(A(1)-b/a)/exp(a*(i-1))+(b/a);
end
G=[];
G(1)=F(1);
for i=2:(len+50)        %累减还原得到还原值即预测的数据
    G(i)=F(i)-F(i-1);
end
disp('预测数据为: ')
G(18:67)
%模型检验
H=G(1:17);
resi=A-H;       %残差序列
delta=abs(resi./A);     %相对误差序列
Q=mean(delta);       %相对误差Q
t1=2000:2016;
t2=2017:5:2067;
%已知总人口
plot(t1,A,'ro')         %这一部分绘出2000-2016年的实际值和预测值
hold on
plot(t1,G(1:17),'b-*')
legend('实际值','预测值')
title('2000-2016年全国总人口实际值及预测值')
ylabel('总人口/万人')
%预测未来50年总人口,由于刻度的原因,不能绘制在一个图形中
% plot(G(17:67),'g-')
% set(gca,'xlim',[0 50],'xTick',0:5:50,'xTickLabel',t2)
% title('未来50年全国总人口走势图')
% ylabel('总人口/万人')

%得到相对误差Q为11.2646

你可能感兴趣的:(灰色预测模型GM(1,1))