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

    function results=clus_potential(varargin) 

r1=length(varargin)-1;   
test=varargin{end};
num=nchoosek(1:r1,2); 
Training={varargin{1:end-1}};
y=cell(size(num,1),1);
for i=1:size(num,1)
  y{i}=f(Training{num(i,1)},Training{num(i,2)}); 
end
for kk=1:size(test,1)
  for i=1:length(y)
     c=size(y{i},1);
     t=0;
      for j=1:c
        m=k(y{i}(j,1:end-1),test(kk,:));
        t=t+y{i}(j,end)*m;
      end
     if t>0
         result(i)=1;   
     else
         result(i)=0;
     end
     temp(i)=num(i,1).*result(i)+num(i,2).*~result(i); 
  end
   results(kk)=mode(temp,2);       
end

function y=f(x1,x2) 

r1=size(x1,1);r2=size(x2,1);
xx=[x1;x2];
y=[x1(1,:) 1];k1=0;
c=size(y,1);
flag=1;
while  k1<(r1+r2)
   if flag>50
      break
   elseif flag==1
       s=2;
   else
       s=1;
   end
   for i=s:r1+r2
      t=0;
      for j=1:c
        m=k(y(j,1:end-1),xx(i,:));
        t=t+y(j,end)*m;
      end
      if i<=r1 
          if t>0  
           k1=k1+1;
          else
           y=[y;xx(i,:) 1];k1=0; 
          end
      else   
          if t<0  
           k1=k1+1;
          else
           y=[y;xx(i,:) -1];k1=0; 
          end
      end
      c=size(y,1);
   end
   flag=flag+1;
end   

function y=k(x1,x2)
y=exp(-sum((x1-x2).^2));