gusucode.com > 《模式识别与智能计算》matlab源代码 > 《模式识别与智能计算》matlab源代码/《模式识别与智能计算》部分函数的源程序/书程序/第2章/H_k.m
function results=H_k(varargin) r1=length(varargin)-2; test=[varargin{end-1} ones(size(varargin{end-1},1),1)]; type=varargin{end}; num=nchoosek(1:r1,2); for i=1:size(num,1) y1(i)=ifclassify(varargin{num(i,1)},varargin{num(i,2)}); if y1(i)==0 str=['第' num2str(num(i,1)) '和' num2str(num(i,2)) '线性不可分']; disp(str); end end for i=1:r1 [r2(i),c]=size(varargin{i}); varargin{i}=[varargin{i} ones(r2(i),1)]; end w=zeros(c+1,r1); num1=0;flag=1;num2=0; while flag flag=0;num2=num2+1; for i=1:r1 for j=1:r2(i) num1=num1+1; r=zeros(1,r1);r(i)=1; for k=1:r1 d(k)=w(:,k)'*varargin{i}(j,:)'; end for k=1:r1 if k~=i if d(k)<=d(k) flag=1; end end end switch type case 'lm' for k=1:r1 w(:,k)=w(:,k)+varargin{i}(j,:)'*(r(k)-d(k))/num1; end case 'cr' for k=1:r1 if r(k)>d(k) w(:,k)=w(:,k)+varargin{i}(j,:)'/num1; else w(:,k)=w(:,k)-varargin{i}(j,:)'/num1; end end end end end if num2>800 flag=0; end end for k=1:size(test,1) y=w'*test(k,:)'; [a,results(k)]=max(y); end