作业一:模糊控制作业(40分):以双输入—单输出系统为例,1、画出模糊控制程序流程图;2、计算出模糊控制器的查询表,写出必要的计算步骤。假设控制器输入为误差e和误差变化率ec,输出为控制量u,其基本论域分别为[emin,emax],[ecmin,ecmax],[umin,umax],对应的语言变量E、EC和U的论域为{-6,-5,…,-1,0,1,…,5,6},E、EC和U都选7个语言值{NB,NM,NS,Z,PS,PM,PB},各语言值的隶属函数采用三角函数,其分布可用表1表示,控制规则如表2所示。注意:u的去模糊化要采用与你的学号ID的奇偶性对应的方法,设ID=奇数者用最大隶属度法,ID=偶数者用重心法。表1语言变量E、EC和U的赋值表10.500000000000PB00.510.5000000000PM0000.510.50000000PS000000.510.500000Z00000000.510.5000NS0000000000.510.50NM000000000000.51NB6543210-1-2-3-4-5-6表2模糊控制规则表PBPBPBPBPMZZPBPBPBPBPBPMZZPMPMPMPMPMZNSNSPSPMPMPSZNSNMNMZPSPSZNMNMNMNMNSZZNMNBNBNBNBNMZZNMNBNBNBNBNBEPBPMPSZNSNMNBECU10月24-27日交纸质版到新主楼A405一、控制算法流程图(1)模糊控制算法一般双输入—单输出模糊控制器的控制规则可写成条件语句:ifandE=BthenU=C,i=1,2,,;1,2,,;ijijEAnjn式子中,、B、CijijA为定义在误差、误差变化率和控制量论域X、Y、Z上的模糊集合。上述条件可以用一个模糊关系R描述,即1()TijijijRABCR的隶属度函数为,1,1(,,)()()(),,,injmijijijRxyzAxByCzxXyYzZ当误差及误差变化分别取模糊集、BA时,控制器输出的变化量U根据模糊推理合成规则可得2TU=(AB)RU的隶属度函数为xXyYU(z)=A(x)B(y)R(x,y,z)(2)模糊算法选择模糊推理用Mamdani推理方法,输出信息的模糊判别用重心法。模糊控制查询表的实现,先根据模糊条件推理得出模糊条件所决定的模糊关系iR,模糊推理关系为:1()TiiiiRABC。将所有的模糊关系iR利用“或”放入关系组合在一起,即121nniiRRRRR,R整个系统的控制规则的模糊关系。再对误差和误差变化率论域内的每个变量,查出其属于的隶属度最大的模糊集A、B,根据新的模糊集、BA,求出控制器的输出变化量U,即2TU=(AB)R。最后根据重心法去模糊化,求得模糊判决结果。流程图如图1.1所示。图1.1模糊控制查询表流程图二、模糊控制查询表UEC-6-5-4-3-2-10123456E-6-6-6-6-6-6-6-5-5-3-3-2-20-5-6-6-6-6-6-6-5-5-3-3-2-20-4-5-5-5-5-5-5-3-3-2-2-1-11-3-5-5-5-5-5-5-3-3-2-2-1-11-2-4-4-4-4-3-3-2-200002-1-3-3-2-20000002230-2-2000022334441-2-2000022334442-2-2-2-20044444443-2-2-2-20044444444-1-1112233555555-1-11122335555560022335566666三、程序NB=-3;NM=-2;NS=-1;Z=0;PS=1;PM=2;PB=3;divideNum=7;E=[10.500000000000;%误差赋值表00.510.5000000000;0000.510.50000000;000000.510.500000;00000000.510.5000;0000000000.510.50;000000000000.51];EC=E;%误差变化率赋值表U=E;%输出量赋值表Rule=[NBNBNBNBNMZZ;%模糊控制规则表NBNBNBNBNMZZ;NMNMNMNMZPSPS;NMNMNSZPSPMPM;NSNSZPMPMPMPM;ZZPMPBPBPBPB;ZZPMPBPBPBPB];%Rij=((Ai*Bj)^T1)*Uij,R=并Rij(i,j=13)R=zeros(length(E)*length(EC),length(U));%模糊关系forp=1:divideNumforq=1:divideNumdm=directMultiply(E(p,:),EC(q,:));t1=T1(dm);Upq=U(Rule(p,q)-NB+1,:);Rpq=directMultiply(t1,Upq);%求或运算R=max(R,Rpq);endend%Uout=((A*B)^T2)。R%模糊控制查询表LookUp=zeros(length(E),length(EC));forp=1:length(E)[y,index]=max(E(:,p));forq=1:length(EC)[y2,index2]=max(EC(:,q));dm=directMultiply(E(index,:),EC(index2,:));t2=T1(dm);%合成Lpq=zeros(1,length(U));foru=1:length(U)Lpq(1,u)=max(min(t2,R(:,u)));%最小最大法endwSum=(1:length(Lpq))*Lpq';%wSum=加权求和Sum=sum(Lpq);%所有隶属值的和uout=round(wSum/Sum)-7;%取整LookUp(p,q)=uout;endend%%%%%%%%%%%%%---------------------T1.m---------------------%%%%%%%%%%%%%%%%%%%%对矩阵做T1变换,即按行变成列向量functionout=T1(in)[row,col]=size(in);out=zeros(row*col,1);forp=1:rowforq=1:colout((p-1)*col+q,1)=in(p,q);endend%%%%%%%%%%%%--------------------directMultiply.m--------------------%%%%%%%%%%%%%%求两个向量的直积functiony=directMultiply(x1,x2)y=zeros(length(x1),length(x2));forp=1:length(x1)forq=1:length(x2)y(p,q)=min(x1(p),x2(q));endend