www.gusucode.com > 自动提取模糊规则的matlab程序源码 > code/qsgzqd起始规则确定(488个).m

    function [R1,Rshu,qiangdu]=qsgzqd(Datax1,xcan,R)
% this function getout the genoral rules and it's number and strength
% Datax1 is the input data
% xcan is the first param of the mf
% R is the general rules maxtri
length1=size(R,1);
qiangdu=zeros(1,500);
qiangdu1=zeros(1,length1);
n=1;  %   模糊规则数
flag=0; 
Rshu=zeros(1,500);
Rshu(1)=1;
% 给出第一条模糊规则 
R1(1,:)=R(1,:);
qiangdu(1)=gaussmf(Datax1(1,1),xcan(R(1,1),:))*gaussmf(Datax1(1,2),xcan(R(1,2),:)) ...
  *gaussmf(Datax1(1,3),xcan(R(1,3),:))*gaussmf(Datax1(1,4),xcan(R(1,4),:)) ...
  *gaussmf(Datax1(1,5),xcan(R(1,5),:))*gaussmf(Datax1(1,6),xcan(R(1,6),:)) ...
  *gaussmf(Datax1(1,7),xcan(R(1,7),:))*gaussmf(Datax1(1,8),xcan(R(1,8),:));
for i=2:length1
    i
    P(i,:)=R(i,:);
    qiangdu1(i)=gaussmf(Datax1(i,1),xcan(R(i,1),:))*gaussmf(Datax1(i,2),xcan(R(i,2),:)) ...
                *gaussmf(Datax1(i,3),xcan(R(i,3),:))*gaussmf(Datax1(i,4),xcan(R(i,4),:)) ...
                *gaussmf(Datax1(i,5),xcan(R(i,5),:))*gaussmf(Datax1(i,6),xcan(R(i,6),:)) ...
                *gaussmf(Datax1(i,7),xcan(R(i,7),:))*gaussmf(Datax1(i,8),xcan(R(i,8),:));
       for j=1:n  
        %判断规则是否相同,若相同强度大为规则强度
        Tf=(P(i,:)==R1(j,:));
        if Tf==[1 1 1 1 1 1 1 1] 
            flag=1;                  % 规则相同判断
            R1(j,:)=P(i,:); 
            Rshu(j)=Rshu(j)+1;
            if  qiangdu1(i)>qiangdu(j)
                 qiangdu(j)=qiangdu1(i);
            end
            break
        else flag=0;
        end
       end
      if flag==0
       n=n+1;
       R1(n,:)=P(i,:);              %规则不同,增加新规则
       Rshu(n)=1;
       qiangdu(n)=qiangdu1(i);
   end      
end
y=size(R1,1);
Rshu=Rshu(1:y);
qiangdu=qiangdu(1:y);