gusucode.com > 《模式识别与智能计算》matlab源代码 > 《模式识别与智能计算》matlab源代码/《模式识别与智能计算》部分函数的源程序/书程序/第13章/grayallasso.m

    function y=grayallasso(varargin)   
if (~exist('sita','var'))
   sita=0.5;
   num=length(varargin);
else
   num=length(varargin)-1;
end 
for i=1:num    
    a=find(isnan(varargin{i}));
   while ~isempty(a)
          for j=1:length(a)
            if ~isnan(varargin{i}(a(1)+j))
                m=round(mean([a(1)-1 a(1)+j]));
                varargin{i}(m)=mean([varargin{i}(a(1)-1),varargin{i}(a(1)+j)]);
             break
            else
             continue
            end
          end
        a=find(isnan(varargin{i}));
   end
   b1=varargin{i}(1);
   for j=1:length(varargin{i})
     x1{i}(j)=varargin{i}(j)-b1;
     x2{i}(j)=varargin{i}(j)/b1;
   end
    b2=x2{i}(1);
   for j=1:length(varargin{i})
     x2{i}(j)=x2{i}(j)-b2;
   end 
   s1(i)=abs(sum(x1{i}(2:end-1))+0.5*x1{i}(end));
   s2(i)=abs(sum(x2{i}(2:end-1))+0.5*x2{i}(end));
end
for i=2:num
    s1i(i)=abs(sum(x1{i}(2:end-1)-x1{1}(2:end-1))+0.5*(x1{i}(end)-x1{1}(end)));
    s2i(i)=abs(sum(x2{i}(2:end-1)-x2{1}(2:end-1))+0.5*(x2{i}(end)-x2{1}(end)));
    y1(i)=(1+s1(1)+s1(i))/(1+s1(1)+s1(i)+s1i(i));
    y2(i)=(1+s2(1)+s2(i))/(1+s2(1)+s2(i)+s2i(i));
    y(i)=sita*y1(i)+(1-sita)*y2(i);
end
y(1)=[];