Bootstrap

智能控制技术_基于Matlab的二阶系统模糊控制仿真实例_课程学习

一:题目描述

二:控制器和规律描述

假设系统输入为 r = 1. 0 ,可取系统输出误差e和误差变化ec作为模糊控制器的输入 ,模糊控制器的输出u作为被控对象的控制输入。则可根据系统输出的误差和误差变化设计出模糊控制器fz,并根据一系列的模糊推理过程推导出最终的输出控制量u。其中误差e,误差变化量ec以及输出u所对应的模糊语言变量分别为E、EC和U。表示如下:

E={-6,-5,-4,-3,-2,-1,0,+1,+2,+3,+4,+5,+6}

EC={-6,-5,-4,-3,-2,-1,0,+1,+2,+3,+4,+5,+6}

U={-6,-5,-4,-3,-2,-1,0,+1,+2,+3,+4,+5,+6}

建立双输入,单输出的结构如图:

隶属度函数图像如下:

模糊规则定义:

表1 模糊控制规则

对规则进行编辑:

 

规则编辑界面图

Simulink仿真:

三:Simulink仿真图像:

代码:

% -----------------------------------------
% 典型二阶系统的模糊控制
% -----------------------------------------
 
a=newfis('fuzzy');
f1=1;
a=addvar(a,'input','e',[-6 6]);                       %添加误差输入变量
a=addmf(a,'input',1,'NB','trapmf',[-6,-6,-5,-3]);     %添加误差隶属函数
a=addmf(a,'input',1,'NS','trapmf',[-5,-3,-2 0]);
a=addmf(a,'input',1,'ZR','trimf',[-2,0,2]);
a=addmf(a,'input',1,'PS','trapmf',[0,2,3,5]);
a=addmf(a,'input',1,'PB','trapmf',[3,5,6,6]);
f2=1;
a=addvar(a,'input','de',[-6 6]);                      %添加误差变化输入变量
a=addmf(a,'input',2,'NB','trapmf',[-6,-6,-5,-3]);     %添加误差变化隶属函数
a=addmf(a,'input',2,'NS','trapmf',[-5,-3,-2,0]);
a=addmf(a,'input',2,'ZR','trimf',[-2,0,2]);
a=addmf(a,'input',2,'PS','trapmf',[0,2,3,5]);
a=addmf(a,'input',2,'PB','trapmf',[3,5,6,6]);
f3=1.5;
a=addvar(a,'output','u',[-3 3]);                      %添加输出变量
a=addmf(a,'output',1,'NB','trapmf',[-3,-3,-2,-1]);    %添加输出隶属函数
a=addmf(a,'output',1,'NS','trimf',[-2,-1,0]);
a=addmf(a,'output',1,'ZR','trimf',[-1,0,1]);
a=addmf(a,'output',1,'PS','trimf',[0,1,2]);
a=addmf(a,'output',1,'PB','trapmf',[1,2,3,3]);
 
rr =[5 5 4 4 3;                            %以下为建立控制规则表
    5 4 4 3 3; 
    4 4 3 3 2;
    4 3 3 2 2;
    3 3 2 2 1;
    
    1 1 5 1 1;
    1 2 5 1 1;
    1 3 4 1 1;
    1 4 4 1 1;
    1 5 3 1 1;
    
    3 1 4 1 1;
    3 2 4 1 1;
    3 3 3 1 1;
    3 4 3 1 1;
    3 5 2 1 1;
    
    4 1 4 1 1;
    4 2 3 1 1;
    4 3 3 1 1;
    4 4 2 1 1;
    4 5 2 1 1;
    
    5 1 3 1 1;
    5 2 3 1 1;
    5 3 2 1 1;
    5 4 2 1 1;
    5 5 1 1 1;
    ];
 
 
a=addrule(a,rulelist);               %添加模糊规则到模糊控制器
a1=setfis(a, 'DefuzzMethod', 'mom'); %设置去模糊化方法
writefis(a1,'fuzzf');
a2=readfis('fuzzf');
Ulist=zeros(7,7);
for i=1:7
    for j=1:7
        e(i) = -4+i;
        ec(j) = -4+j;
        Ulist(i, j) = evalfis([e(i), ec(j)], a2);
    end
end
 
 
figure(1);
plotfis(a2);
 
figure(2);
plotmf(a, 'input', 1);
 
figure(3);
plotmf(a, 'input', 2);
 
figure(4);
plotmf(a, 'output', 1);

 

 

 

 

;