www.gusucode.com > 锅炉水位系统模糊控制的实例matlab源码程序 > code/08000215/fc_regular.m
function r=fc_regular(re,rde,ru,reg) %if 1 and b then c %用书上的极大极小法进行解模糊 x0=size(re,2);%e的量化个数 y0=size(rde,2);%de的量化个数 z0=size(ru,2);%u的量化个数 x1=size(re,1);%e的语言变量个数 y1=size(rde,1);%de的语言变量个数 z1=size(ru,1);%u的语言变量个数 for i=1:x0 for j=1:y0 count=1; for m=1:x1 if(re(m,i)~=0) test0=minx(re(m,:)); for n=1:y1 if(rde(n,j)~=0) test1=minx(rde(n,:)); rr(count,:)=ru(reg(m,n),:); test2=min(test0,test1); for l=1:z0 if(rr(count,l)>test2) rr(count,l)=test2; end end count=count+1; end end end end for ii=1:z0 rrr(1,ii)=max(rr(:,ii)); end weight=-(z0-1)/2:1:(z0-1)/2; r(i,j)=sum((rrr.*weight))/sum(rrr); %对控制表的值进行整定 test1=r(i,j)-weight; test2=abs(test1); test3=min(test2); test4=r(i,j); if(test4-test3==fix(r(i,j))) r(i,j)=test4-test3; elseif(test4+test3==fix(r(i,j)+1)) r(i,j)=test4+test3; % elseif(test4-test3==fix(r(i,j))-1) % r(i,j)=fix(r(i,j))-1; %elseif(test4+test3==fix(r(i,j))) % r(i,j)=fix(r(i,j)); end if(r(i,j)<0) r(i,j)=fix(r(i,j))-1; end end end