灰度预测
历届 CUMCM 数据预测题目
有些问题则是需要在求解的过程中进行数据预测,如2009年 CUMCM D 题“会议筹备” 对与会人数的确定等。灰色模型(gray model,又称灰色理论)有严格的理论基础,最大优点是 实用。用灰色模型预测的结果比较稳定,不仅适用于大数据量的预测,在数据量较少时(数据 只要多于3个即可)预测结果依然较准确。
灰色预测的核心知识
- 灰色系统理论认为:系统的行为现象尽管是朦胧的,数据是复杂的,但它毕竟是有序的,是 有整体功能的。
- 原始数据进行预处理,不是寻求它的统计规律和概率分布,而 是将杂乱无章的原始数据列通过一定的方法处理,变成有规律的时间序列数据,即以数找数的规律,再建立动态模型(微分方程模型).
GM(1,1)一阶线性微分方程模型
灰色预测的Matalab实现
典型程序
clear
syms a b;
c=[a b]';
A=[89677,99215,109655,120333,135823,159878,182321,209407,246619,300670];
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+10)
F(i)=(A(1)-b/a)/exp(a*(i-1))+b/a ;
end
G=[];G(1)=A(1);
for i=2:(n+10)
G(i)=F(i)-F(i-1); %得到预测出来的数据
end
t1=1999:2008;
t2=1999:2018;
G
plot(t1,A,'o',t2,G) %原始数据与预测数据的比较
xlabel('年份')
ylabel('利润')
完整运算的代码
function [ G ] = GM( A,num )
%灰度预测模型函数 兰勇,2018.7.20
% A为原始序列,num为预测数目,G为各预测值
syms a b;
c=[a b]';%发展系数和灰作用量
B=cumsum(A); %生成累加序列
n=length(A);
for i=2:n
P(i)=A(i)/B(i-1); %光滑性检验
Q(i)=B(i)/B(i-1); %准指数性检验
end
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+num) %推测之后的num个一次累加序列
F(i)=(A(1)-b/a)/exp(a*(i-1))+b/a;
end
G=[];G(1)=A(1);
for i=2:(n+num) %推测之后的num个原始序列
G(i)=F(i)-F(i-1);
end
%残差计算
for i=1:n %推测之后的num个原始序列
s(i)=abs(A(i)-G(i));
end
sum(s)/n;
%图像可视化
t1=1:n;
t2=1:n+num;
G;
h=plot(t1,A,'o',t2,G,'-'); %原始数据与预测数据的比较
set(h,'LineWidth',1.5);
end
clear
syms a b;
c=[a b]';
A=[174 179 183 189 207 234 220.5 256 270 285];
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+10)
F(i)=(A(1)-b/a)/exp(a*(i-1))+b/a ;
end
G=[];G(1)=A(1);
for i=2:(n+10)
G(i)=F(i)-F(i-1); %得到预测出来的数据
end
t1=1995:2004;
t2=1995:2014;
G, a, b % 输出预测值,发展系数和灰色作用量
plot(t1,A,'o',t2,G) %原始数据与预测数据的比较