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

本文介绍了一种基于模糊逻辑的控制器设计方法,详细阐述了如何利用误差和误差变化作为输入,设计模糊控制器,并通过Simulink进行仿真验证。文章展示了模糊规则的定义、隶属度函数的设计以及控制器的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:题目描述

二:控制器和规律描述

假设系统输入为 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);

 

 

 

 

评论 86
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值