lvlianggan
2008-11-07, 10:53
我写了一个GM(1,1)的求解函数,但是GM(1,1)只是计算行向量或是列向量,我现在想用这个函数计算一个矩阵中没一行的值,然后把计算出来的结果放到一个列向量里面,计算GM(1,1)函数测试通过,但是在记录到列向量的时候出错,请大家帮帮忙,谢谢!
代码:
gm.m
function gm(x0)
n=length(x0);
%由数列x0生成数列x1;
s=0;
for i=1:n
s=s+x0(i);
x1(i)=s;
end
%由数列x1生成矩阵B和Y;
for i=1:(n-1);
Q(i)=-(x1(i)+x1(i+1))/2;
end
M=ones(n-1,1);
B=[Q' M];
for i=1:(n-1);
C(i)=x0(i+1);
end
Y=C';
beta=inv(B'*B)*B'*Y;
%计算出a和u;
a=beta(1);
u=beta(2);
(x0(1)-u/a)*(1-exp(a))*exp(-a*3)
test.m
C=[0.8 0.9 0.6; 1.0 0.9 0.9;1 2 3];
f=zeros(3,1);
for a = 1: 3;
% eval(['X',num2str(a),'=','C(a,:)']);
% eval(['x',num2str(a),'=','gm(C(a,:))'])
f(:,1)= gm(C(a,:));
end
代码:
gm.m
function gm(x0)
n=length(x0);
%由数列x0生成数列x1;
s=0;
for i=1:n
s=s+x0(i);
x1(i)=s;
end
%由数列x1生成矩阵B和Y;
for i=1:(n-1);
Q(i)=-(x1(i)+x1(i+1))/2;
end
M=ones(n-1,1);
B=[Q' M];
for i=1:(n-1);
C(i)=x0(i+1);
end
Y=C';
beta=inv(B'*B)*B'*Y;
%计算出a和u;
a=beta(1);
u=beta(2);
(x0(1)-u/a)*(1-exp(a))*exp(-a*3)
test.m
C=[0.8 0.9 0.6; 1.0 0.9 0.9;1 2 3];
f=zeros(3,1);
for a = 1: 3;
% eval(['X',num2str(a),'=','C(a,:)']);
% eval(['x',num2str(a),'=','gm(C(a,:))'])
f(:,1)= gm(C(a,:));
end