matlab的程序,高手帮忙!!!!!!!!!!!!!!!!!!!!!!!

来源:百度知道 编辑:UC知道 时间:2024/06/28 14:37:35
function GM=huise(data,N)
T=length(data);
X0=data;
for i=2:T
X1(1)=X0(1);
X1(i)=X1(i-1)+X0(i); %用AGO生成一阶累加生成模块
end
for i=1:T-1
M(i)=-(0.5*(X1(i)+X1(i+1)));
end
B=zeros(T-1,2); %构造累加矩阵B
for i=1:T-1
for j=1:2
if j<2
B(i,j)=M(i);
elseif j>1
B(i,j)=1;
end
end
end
for i=2:T %构造常数项向量Y
Y(i-1)=X0(i);
end
HCS=inv(B'*B)*B'*Y' %用最小二乘法求灰参数HCS
H=HCS';
for i=2:T+N %计算出累加序列
XR1(i)=(X0(1)-H(2)/H(1))*exp(-1*H(1)*(i-1))+H(2)/H(1);
end
for i=11:T+N %还原计算出预测值
K(i-10)=XR1(i)-XR1(i-1);
end
GM=K;

这是copy的用matlab编灰色理论的程序。有以下问题:
(1)最后的“GM=K”干什么的?也写在m文件中吗?
(2)倒数第四行那个11是怎么回事,写错了没有。
(3)保存这个m文件后,我如我想用数据1.3.5.8.9这五个数带演示

(1)GM=K就是这个函数最后的答案
(2)从程序上看i从11开始,后面一句K(i-10)就是从K1开始,没有问题。
估计程序是为解决特定问题而编,所以从11开始。因为我没有学过灰度理论,从程序上看我只能告诉你T+N必须大于等于11才不会出错。
(3)输入huise([1 3 5 8 9],N)即可,其中N必须大于等于6的整数。

另外从程序上看可以大大简化,下面是简化后的程序。
function GM=huise(data,N)
T=length(data);
X0=data;
X1=cumsum(X0);
X1(1)=X0(1); %用AGO生成一阶累加生成模块
i=1:T-1
M=-(0.5*(X1(i)+X1(i+1)));
%构造累加矩阵B
B=[M',ones(T-1,1)];
i=2:T %构造常数项向量Y
Y=X0(i);
HCS=inv(B'*B)*B'*Y' %用最小二乘法求灰参数HCS
H=HCS';
i=2:T+N; %计算出累加序列
XR1(i)=(X0(1)-H(2)/H(1))*exp(-1*H(1)*(i-1))+H(2)/H(1);
i=11:T+N; %还原计算出预测值
K=XR1(i)-XR1(i-1);
GM=K;