灰色预测模型的Matlab代码

灰色预测模型可以解决数据量少、信息贫乏情况下的预测问题,其中最简单的模型是GM(1,1),具体的步骤大家可以自行Google,大致就是先对数据进行检验,看其是否符合灰色预测模型的要求,然后进行灰色预测的求解,最后进行残差检验和偏差检验,如果都小于0.2,那么就是符合一般要求,如果都小于0.1,那么符合较高要求。在我实际使用中只要符合灰色预测模型的数据,预测结果都还是挺靠谱的。

下面给出灰色预测模型中GM(1,1)的Matlab代码,不是网上抄来的,自己看了书然后作了改进的,真实可靠,亲测有效……

[code lang=”matlab”]

function [y,yy,yuce,epsilon,delta,rho]=huise(x0)
%x0即为要预测的数据矩阵
n=length(x0);
%先对数据检验与处理
lamda=x0(1:n-1)./x0(2:n);
range=minmax(lamda);
m1=exp(-2/(n+1));
m2=exp(2/(n+2));
if (range(1)<m1||range(2)>m2)
disp(‘数据不符合,需处理’);
lamda
m1
m2
y=0;yy=0;yuce=0;epsilon=0;delta=0;rho=0;
else
x1=cumsum(x0);
for i=2:n
z(i)=0.5*(x1(i)+x1(i-1));
end
B=[-z(2:n)’,ones(n-1,1)];
Y=x0(2:n)’;
u=BY;
x=dsolve(‘Dx+a*x=b’,’x(0)=x0′);
x=subs(x,{‘a’,’b’,’x0′},{u(1),u(2),x1(1)});
yuce1=subs(x,’t’,[0:n-1]);
digits(6),y=vpa(x); %为提高预测精度,先计算预测值,再显示微分方程的解
yuce=[x0(1),diff(yuce1)];%原数据的预测值
epsilon=x0-yuce ;
delta=abs(epsilon./x0); %计算残差
rho=1-(1-0.5*u(1))/(1+0.5*u(1))*lamda; %计算级比偏差值
yy=subs(x,n)-subs(x,n-1);%预测值,如需预测多组值,继续往下算就行
end

[/code]

其实这个本身写起来就不难,只不过我喜欢把常见程序封装起来,用的时候直接调用。

发表评论

电子邮件地址不会被公开。 必填项已用*标注