%灰色预测
function gm(x0,m)
%定义函数 gm(x0,m),x0为原始数据,m为预测个数
n=length(x0);
x1=zeros(1,n);
x1(1)=x0(1);
for i=2:n
x1(i)=x1(i-1)+x0(i); %计算累加序列x1
end
%对原始数列平行移位并赋给 y
y(1:n-1)=x0(2:n);
y=y'; %将 y变成列向量
B=ones(n-1,2);
for i=1:n-1;
%计算数据矩阵B的第一列数据
B(i,1)=-0.5*(x1(i)+x1(i+1));
end
au=inv(B'*B)*B'*y;%计算参数 a,u 矩阵
a=au(1);
u=au(2);
t=u/a;
i=1:m+n;
ago(i+1)=(x0(1)-t).*exp(-a.*i)+t;
ago(1)=x0(1);
for j=n+m:-1:2
yc(j)=ago(j)-ago(j-1);
end
for i=2:n;
error(i)=yc(i)-x0(i); %计算残差值
end
c=std(error)/std(x0);
%计算后验差比
p=0;
for i=2:n
if(abs(error(i)-mean(error))<0.6745*std(x0))
p=p+1;
end
end
p=p/(n-1);
w1=min(abs(error));
w2=max(abs(error));
for i=1:n;
%计算关联度
w(i)=(w1+0.5*w2)./(abs(error(i))+0.5*w2);
end
w=sum(w)/(n-1); %
%% 绘图%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
x=1:n;
xs=2:n+m;
yn=yc(2:n+m);
plot(x,x0,'^r',xs,yn,'*-b');
% axis([2009+m,2014+m,1,10]); %x,y,(z)坐标范围
% plot([2009:n+2008],x0,'+',[2009:n+2008+m],yc,'*'); %
% grid on;
% xlabel('年份');
% ylabel('销量(mm)');
% title('销售量灰色模型预测拟和曲线');
% legend('实测值','预测值',4);
% fprintf('a,u值:')
% fprintf('%g ',au) %输出参数 a,u 的值
% fprintf('\n累加数列:\n')
% fprintf('%g ',ago) %输出累加数列 ago 的值
% fprintf('\n原始序列:\n')
% fprintf('%g ',x0) %输出原始序列值
% fprintf('\n预测:\n')
% fprintf('%g ',yc) %输出预测的值
% fprintf('\n残差:\n')
% fprintf('%g ',error) %输出残差的值
% fprintf('\n后验差比:\n')
% fprintf('%g',c) %输出后验差比的值
% fprintf('\n小误差概率:\n')
% fprintf('%g',p) %输出小误差概率的值
% fprintf('\n关联度:\n')
% fprintf('%g\n',w) %输出关联度 w
取消
评论