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