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);