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)=[];