模糊控制查询表的MATLAB实现
北京航空航天大学机械工程及自动化学院 (北京 100191
作业要求
以双输入单输出系统为例,画出模糊控制算法程序流程图,计算出模糊控制器的查询表。假设控制器输入为误差e和误差变化率ec,输出为控制量u,其基本论域分别为[eminemax][ecminecmax][uminumax],对应的语言变量EECU的论域为{-6,-5,,-1,0,1,,5,6}EECU都选7个语言值{NBNMNSZPSPMPB}各语言值的隶属函数采用三角函数,其分布可用表1-1表示,控制规则如表1-2所示。注意:u的去模糊化要采用与你的学号ID的奇偶性对应的方法,设ID=奇数者用最大隶属度法,ID=偶数者用重心法;要有计算查询表时的必要计算步骤,不能只给出最后结果。
1-1 语言变量EECU赋值表
1-2 模糊控制规则表
模糊控制查询表和控制算法流程图
2.1 模糊控制查询表
1)模糊控制算法
一般双输入单输出模糊控制器的控制规则可写成条件语句:
式子中, 为定义在误差、误差变化率和控制量论域XYZ、上的模糊集合。上述条件可以用一个模糊关系描述,即
的隶属度函数为:
当误差及误差变化分别取模糊集时,控制器输出的变化量根据模糊推理合成规则可得:
的隶属度函数为:
2)模糊算法选择
模糊推理用Mamdani推理方法,输出信息的模糊判别用最大隶属度法。
模糊控制查询表的实现,先根据模糊条件推理得出模糊条件所决定的模糊关系,模糊推理关系为:。将所有的模糊关系利用“或”放入关系组合在一起,即 整个系统的控制规则的模糊关系。再根据新的模糊集,求出控制器的输出变化量,即。最后根据最大隶属度法求的模糊判决结果。所有的判决结果组成了模糊控制查询表。最后建立输入变量输出变量的三维曲面。
2.2 程序结构说明
一般情况下,输入量偏差e和偏差变化率△e以及输出变量U的离散论域为13个量化等级{-6-5-4-3-2-10123456}。为方便MATLAB编程,对相关的变量选择进行一些改变。原先的输入变量偏差e和偏差变化率ec以及输出变量U的量化等级{-6-5-4-3-2-10123456}改写为{12345678910111213}。转化后语言变量EECU的赋值表如表2-13所示。
输入变量偏差e和偏差变化率ec以及输出变量U的模糊语言值均为{NBNMNSZPSPMPB}。为了编程方便,将语言值用数字表示为{1234567},与模糊语言值相对应。转化后的模糊控制规则表如表2-2所示。
2-1 语言变量EECU的赋值表
1
2
3
4
5
6
7
8
9
10
11
12
13
1
1
0.5
0
0
0
0
0
0
0
0
0
0
0
2
0
0.5
1
0.5
0
0
0
0
0
0
0
0
0
3
0
0
0
0.5
1
0.5
0
0
0
0
0
0
0
4
0
0
0
0
0
0.5
1
0.5
0
0
0
0
0
5
0
0
0
0
0
0
0
0.5
1
0.5
0
0
0
6
0
0
0
0
0
0
0
0
0
0.5
1
0.5
0
7
0
0
0
0
0
0
0
0
0
0
0
0.5
1
2-2 模糊控制规则表
U
EC
1
2
3
4
5
6
7
E
1
1
1
1
1
2
4
4
2
1
1
1
1
2
4
4
3
2
2
2
2
4
5
5
4
2
2
3
4
5
6
6
5
3
3
4
6
6
6
6
6
4
4
6
7
7
7
7
7
4
4
6
7
7
7
7
程序初始化,输入误差Error、偏差变化率ErrorC和控制量Controlvolume的赋值表及模糊控制规则表。先计算模糊控制隶属度关系矩阵。根据每一条控制规则,查对应的赋值表当中的向量,然后求的的值,再求得单条控制语句的模糊关系的值,单条控制语句的模糊关系模糊关系与模糊控制隶属度关系矩阵Relationship对应位取大,最终得到。得到后,再求控制量。根据XY论域取不同的元素,查询赋值表得到对应的向量,然后求的值,再求得控制量的值,根据最大隶属度法求的判决结果,建立模糊控制器查询表。最后建立输入变量输出变量的三维曲面。
2.3 控制算法流程图
模糊控制查询表
模糊控制查询表结果如表3-1所示
3-1 模糊控制查询表
U
EC
-6
-5
-4
-3
-2
-1
0
1
2
3
4
5
6
E
-6
-6
-6
-6
-6
-6
-6
-6
-6
-4
-4
0
0
0
-5
-6
-6
-6
-6
-6
-6
-6
-6
-4
-4
0
0
0
-4
-6
-6
-6
-6
-6
-6
-6
-6
-4
-4
0
0
0
-3
-6
-6
-6
-6
-6
-6
-6
-6
-4
-4
0
0
0
-2
-4
-4
-4
-4
-4
-4
-4
-4
0
0
2
2
2
-1
-4
-4
-4
-4
-4
-4
-4
-4
0
0
2
2
2
0
-4
-4
-4
-4
-2
-2
0
0
2
2
4
4
4
1
-4
-4
-4
-4
-2
-2
0
0
2
2
4
4
4
2
-2
-2
-2
-2
0
0
4
4
4
4
4
4
4
3
三角函数查询表-2
-2
-2
-2
0
0
4
4
4
4
4
4
4
4
0
0
0
0
4
4
6
6
6
6
6
6
6
5
0
0
0
0
4
4
6
6
6
6
6
6
6
6
0
0
0
0
4
4
6
6
6
6
6
6
6
输入变量输出变量的三维曲面
分别通过Matlab程序及Matlab中的fuzzy工具箱得出输入输出的三维曲面。通过Matlab程序得出的输入输出三维曲面如图4-1所示。通过Matlabfuzzy的工具箱得出的输入输出三维曲面如图4-2所示。Matlab程序见附件一。Matlab工具箱Fuzzy建立双输入单输出模糊系统模型见附件二。
4-1 Matlab程序得出的输入输出三维曲面
4-2  Matlabfuzzy的工具箱得出的输入输出三维曲面
通过对上述两个输入输出三维曲面的比较,不难看出,两个输入输出三维曲面的形状基本相似,只是在局部有差异。可以得出结论:用Matlab程序的建立的模糊控制器正确。产生两个输入输出三维曲面有差异的原因可能是作业所给的隶属度函数为离散的函数,数据量比较少,
得出的结果比较少,则绘制的输入输出三维曲面不够精确。而用Fuzzy工具箱建立的隶属度函数为连续的函数,数据量比较多,得出的结果比较多,绘制出的输入输出三维曲面较准确。

附件一
Matlab程序
clc;
clear;
%程序初始化,输入误差Error、偏差变化率ErrorC和控制量Controlvolume的赋值表
Error=[1 0.5 0 0 0 0 0 0 0 0 0 0 0
0 0.5 1 0.5 0 0 0 0 0 0 0 0 0
0 0 0 0.5 1 0.5 0 0 0 0 0 0 0
0 0 0 0 0 0.5 1 0.5 0 0 0 0 0
0 0 0 0 0 0 0 0.5 1 0.5 0 0 0
0 0 0 0 0 0 0 0 0 0.5 1 0.5 0
0 0 0 0 0 0 0 0 0 0 0 0.5 1
];
ErrorC=Error;          %输入误差率ErrorC赋值表与误差Error相同
Controlvolume=Error;    %控制量Controlvolume的赋值表与误差Error相同
Rule=[1 1 1 1 2 4 4
      1 1 1 1 2 4 4
      2 2 2 2 4 5 5
      2 2 3 4 5 6 6
      3 3 4 6 6 6 6
      4 4 6 7 7 7 7
      4 4 6 7 7 7 7];%模糊控制规则表
Relationship=zeros(169,13);%申请模糊控制的隶属度关系矩阵
U=zeros(13); %申请模糊控制的查询表矩阵
%计算模糊控制隶属度关系矩阵Relationship
for k=1:7
    for l=1:7
      A=Error(k,:);  %Error的第k
      B=ErrorC(l,:);  %ErrorC的第l
      C=Controlvolume(Rule(k,l),:);  %根据控制规则表查询控制量的向量
      for m=1:13
          for n=1:13
              D(n+(m-1)*13)=min(A(m),B(n)); %根据模糊算法,求的值,对应位取小
          end
      end
    for p=1:169
        for q=1:13
        Relationship0(p,q)=min(D(p),C(q)); %根据模糊算法,求的值,对应位取小,即求得单条控制语句的模糊关系
        end
    end
    for i=1:169
        for j=1:13
Relationship(i,j)=max(Relationship(i,j),Relationship0(i,j)); %单条控制语句的模糊关系模糊关系与模糊控制隶属度关系矩阵Relationship对应位取大,最终得到       
end
    end
    end
end
%计算控制量
for g=1:13
    for h=1:13
      [Y,X]=max(Error);  %Y表示Error每列的最大值,X表示Error每列最大值所在的行
      E=Error(X(g),:);  %Error每列最大值所在行向量
      F=ErrorC(X(h),:);  %ErrorC每列最大值所在行向量
      for s=1:13
          for t=1:13
              G(t+(s-1)*13)=min(E(s),F(t));%根据模糊算法,求的值,对应位取小
          end
      end
      for v=1:13
          for w=1:169
          H(w,v)=min(G(w),Relationship(w,v));%根据模糊算法,求的值,对应位取小
          end
      end
      [Z,W]=max(H);%Z表示的值
      U(g,h)=find(Z>=max(Z),1)-7; %Z的最大值所在的列减7,即用最大隶属度方法得到查询表矩阵
    end
end
%输入变量输出变量的三维曲面
xx=[-6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6];
yy=[-6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6];
[XX,YY]=meshgrid(xx,yy);
mesh(XX,YY,U')
grid on
axis([-6 6 -6 6 -6 6])
xlabel('E')
ylabel('EC')
zlabel('U')

附件二
Matlab工具箱Fuzzy建立双输入单输出模糊系统模型
1.添加E,EC两个输入变量,Defuzzification中选择mom表示最大隶属度法。
1 添加变量
2.添加论域EECU及其隶属度函数

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。