%gray.m
%建立灰色预测模型,用前n个数据,预测第n+1个数据,还未进行残差判断
%gray(A),其中A为原始一维序列,结果xx0的最后一个变量即为预测值,而前n个为逆和值,用于作误差分析
%copyright.GuoYi2007
function output=gray(X0)
a=0;u=0;
%X0=[1.6 1.4 1.0 1.1 1.0 1.0 1.1];%例:一周收视率的走势
n=size(X0,2);
for k=1:n%一阶累加形成数据序列
X1(k)=sum(X0(1:k));
end
B=zeros(n-1,2);
Y=zeros(n-1,1);
for i=1:n-1
Y(i)=X0(i+1);
B(i,:)=[-0.5*(X1(i)+X1(i+1)) 1];
end
R=inv(B'*B)*B'*Y;%利用最小二乘法求超定方程
a=R(1);
u=R(2);
xx1(1)=X1(1);
for k=1:n+1
xx1(k+1)=(X0(1)-u/a)*exp(-a*k)+u/a;
end
xx1
xx0=zeros(1,n);
xx0(1)=X0(1);
for k=2:n+1
xx0(1,k)=(1-exp(a))*(X0(1)-u/a)*exp(-a*(k-1));
end%到原序的拟合数
xx0
output=xx0;
plot(1:n,X0,'*r',1:n+1,output,'ob')
legend('原始数据','预测拟和数据')