灰色预测模型是通过少量的、不完全的信息,建立数学模型做出预测的一种预测方法。是基于客观事物的过去和现在的发展规律,借助于科学的方法对未来的发展趋势和状况进行描述和分析,并形成科学的假设和判断。
下面是一个运用灰色预测的例子的代码
x=g(:,2); //此处的x是直接从excel导入matlab的,所以是table格式,此处摘取了第二列,g为导入的excel表的名字
x1=table2array(x);//将table格式数据转化为矩阵,一定要转换,不然在后续代码中会报错
x1(find(isnan(x1)==1)) = 0;//将原始数据中为空的部分转化为0,此处默认正常数据不会有为0的情况出现
x1(x1(:,1)==0,1) = mean(x1(:,1));//进行数据处理,将为0的部分用所有数据的平均值代替
x3=zeros(1,length(x1)+1);//建立存储预测值的矩阵,此处令其全部为0
//循环进行预测,每次采用六个数来进行预测
for a=7:length(x1)
t=f(x1(a-5:a,1));
t1=str2double(t); //将输出的字符串类型转化为double数据
x3(1,a+1)=t1;
end
x3=x3’;
//灰色预测的函数实现,参考的是网上已有的代码
function z= f(y)
n=length(y);
yy=ones(n,1);
yy(1)=y(1);
for i=2:n
yy(i)=yy(i-1)+y(i);
end
B=ones(n-1,2);
for i=1:(n-1)
B(i,1)=-(yy(i)+yy(i+1))/2;
B(i,2)=1;
end
BT=B';
for j=1:(n-1)
YN(j)=y(j+1);
end
YN=YN';
A=inv(BT*B)*BT*YN;
a=A(1);
u=A(2);
t=u/a;
t_test=1;
i=1:t_test+n;
yys(i+1)=(y(1)-t).*exp(-a.*i)+t;
yys(1)=y(1);
for j=n+t_test:-1:2
ys(j)=yys(j)-yys(j-1);
end
x=1:n;
xs=2:n+t_test;
yn=ys(2:n+t_test);
%plot(x,y,'^r',xs,yn,'*-b');
det=0;
for i=2:n
det=det+abs(yn(i)-y(i));
end
det=det/(n-1);
%disp(['percent absolute error is: ',num2str(det),'%']);
z=num2str(ys(n+1:n+t_test));
end
181

被折叠的 条评论
为什么被折叠?



