1 引言
1.1 MATLAB简介
MATLAB软件是一款广泛应用于工程设计、自动化控制、信号与图像处理、金融财务分析建模等领域的数学计算建模软件,使用更加贴近目前电脑用户熟悉的Windows的标准界面与视窗环境,来实现函数运算数值分析、数值信号的界面可视化、非线性动态系统的建模仿真及其他编程软件的接口等专业功能,为众多的专业领域提供强大的工具箱与建模集。
MATLAB提供了一些函数命令来实现模糊控制逻辑系统,这些函数不仅能完全实现图形化方式所提供的功能,同时还可以实现图形化方式所难以实现的功能,特别是对那些复杂的模糊推理系统而言更有优势。
1.2 系统设计要求
(1)输入变量:偏差 e、偏差变化率 de;输出变量:u。相应隶属度函数为:
(2)规则要求:
(3)模糊化方法:平均最大隶属度函数法 mom。
(4)编程实现:程序运行后要求用图形显示输入、输出变量的隶属度函数曲线;显示模糊控制系统的推理过程结构框图,并把此系统保存到 fuzzy.fis 文件中。
2 模糊控制器设计
在MATLAB模糊逻辑工具箱中包含trimf型、smf型、zmf型等11种隶属度函数类型,在工具箱给出的函数类型之外也可以自行设计能够满足用户不同需求的函数类型。
2.1 隶属度函数建立
本文根据题目要求建立该两输入-一输出系统结构相应的控制器输入/输出参数模糊集和隶属度函数。隶属度函数的取值范围必须满足[0,1]的区间,函数方式可分为数值描述方式(论域为离散型)和函数描述方式(论域为连续性)。
(1)输入变量偏差e[-3,3],将偏差模糊集细分为负、零、正三种类型,分别用N、Z、P表示,隶属度函数使用三角型隶属度函数。
(2)输入变量偏差变化率de[-3,3],将偏差变化率模糊集细分为负、零、正三种类型,分别用N、Z、P表示,隶属度函数采用三角型隶属度函数。
(3)输出变量u[-4,4],将输出变量模糊集细分为负大、负小、零、正小、正大五种类型,分别用NB、NS、ZE、PS、PB表示,NB的隶属度函数采用Z函数,NS、ZE、PS的隶属度函数采用三角型隶属度函数,PB的隶属度函数采用S函数。
2.2 模糊控制规则建立
在MATLAB模糊逻辑工具箱中,模糊控制规则用if-then的形式来表示,根据题目要求,可以得出以下9条模糊控制规则:
1. If (e is N) and (de is N) then (u is PB)
2. If (e is N) and (de is Z) then (u is PS)
3. If (e is N) and (de is P) then (u is ZE)
4. If (e is Z) and (de is N) then (u is ZE)
5. If (e is Z) and (de is Z) then (u is ZE)
6. If (e is Z) and (de is P) then (u is NS)
7. If (e is P) and (de is N) then (u is NS)
8. If (e is P) and (de is Z) then (u is NS)
9. If (e is P) and (de is P) then (u is NB)
2.3 平均最大隶属度函数法
通常的模糊集合并非都是正规的和凸的,隶属函数也并非都是一条连续曲线。因此,用隶属度最大点对应的函数值,代表这个模糊集合也是一种简单的方法,称为最大隶属度法。
如果在模糊集合的论域上,有多个点取得最大隶属度值,取这些点的平均值的横坐标作为模糊集合的代表点,这个方法成为最大隶属度平均值。设
则n个点的隶属度都取最大,有:
2.4 模糊控制器的MATLAB编程实现
在MATLAB中建立一个2Input-1Output类型的fuzzy模糊控制结构,其输入、输出变量分别为偏差e、偏差变化率de、输出u。MATLAB程序如下:
clear;
close all;
%模糊控制器设计
a=newfis('fuzzy'); %创建新的模糊推理系统
%输入1
a=addvar(a,'input','e',[-3,3]);
%添加e的模糊语言变量
a=addmf(a,'input',1,'N','trimf',[-3,-3,0]);
%隶属度函数为三角形函数
a=addmf(a,'input',1,'Z','trimf',[-3,0,3]);
a=addmf(a,'input',1,'P','trimf',[0,3,3]);
%图1
figure(1);
plotmf(a,'input',1);
%输入2
a=addvar(a,'input','de',[-3,3]);
%添加de的模糊语言变量
a=addmf(a,'input',2,'N','trimf',[-3,-3,0]);
%隶属度函数为三角形函数
a=addmf(a,'input',2,'Z','trimf',[-3,0,3]);
a=addmf(a,'input',2,'P','trimf',[0,3,3]);
%图2
figure(2);
plotmf(a,'input',2);
%输出
a=addvar(a,'output','u',[-4,4]);
%添加u的模糊语言变量
a=addmf(a,'output',1,'NB','zmf',[-4,-1]);
%隶属度函数为Z函数
a=addmf(a,'output',1,'NS','trimf',[-4,-2,1]);
a=addmf(a,'output',1,'ZE','trimf',[-2,0,2]);
a=addmf(a,'output',1,'PS','trimf',[-1,2,4]);
a=addmf(a,'output',1,'PB','smf',[1,4]); %隶属度函数为S函数
%图3
figure(3);
plotmf(a,'output',1);
%设置规则库
rulelist=[1 1 5 1 1;
1 2 4 1 1;
1 3 3 1 1;
2 1 3 1 1;
2 2 3 1 1;
2 3 2 1 1;
3 1 2 1 1;
3 2 2 1 1;
3 3 1 1 1];
a=addRule(a,rulelist); %添加模糊规则函数
showrule(a) %显示模糊规则函数
a1=setfis(a,'DefuzzMethod','mom'); %模糊化方法为平均最大隶属度函数法mom
writefis(a1,'fuzzy'); %保存模糊控制系统
a2=readfis('fuzzy'); %从磁盘读出保存的模糊系统
disp('fuzzy Controller table:e=[-3,+3],de=[-3,+3]'); %显示矩阵和数组内容
%推理
Ulist=zeros(7,7); %创立一个7×7的全零矩阵
for i=1:7
for j=1:7
e(i)=-4+i;
de(j)=-4+j;
Ulist(i,j)=evalfis([e(i),de(j)],a2); %完成模糊推理计算
end
end
Ulist=ceil(Ulist) %取整(向大数取)
%图4
figure(4);
plotfis(a2);
2.5 程序运行结果
2.5.1 输入输出变量隶属度函数曲线
图1 e的隶属度函数曲线 图2 de的隶属度函数曲线
图3 u的隶属度函数曲线 图4 模糊控制系统结构框图
2.5.2 规则和Ulist矩阵
图5 MATLAB运行规则
图6 Ulist矩阵
根据Ulist矩阵可知,当 e=-1,de=2 时,i=3,j=6,则u=-1;当 e=2,de=1 时,i=6,j=5,则u=-1。
2.6 输入输出关系曲面
将该系统保存到fuzzy.fis文件中,并把已保存的fuzzy.fis文件导入到图形界面可视化工具中,如图7所示:
图7 工具箱中的模糊推理系统
通过曲面观察器(Surface Viewer)查看该模糊推理系统的输入输出关系曲面,如图8所示:
图8 输入输出关系曲面
2.7 用规则观察器查看模糊推理情况
通过规则观察器(Rule Viewer)查看对具体输入的模糊推理及输出情况,输入各种不同的数据,查看模糊推理情况及输出数据。
通过规则观察器可以更加形象地看到对输入变量的模糊推理及输出情况,与前面设置的9条规则完全吻合。
2.8 结论
通过本次基于MATLAB 的模糊逻辑系统设计,我进一步熟悉了模糊控制系统的设计步骤,对模糊系统的两要素论域和隶属函数有了更直观的理解,同时对模糊控制系统的工作原理体会更深刻,并且我学会了基于模糊控制系统的MATLAB编程,以及如何使用模糊逻辑工具箱。
参 考 文 献
[1] 张德丰编著. MATLAB R2017a人工智能算法[M]. 北京:电子工业出版社, 2018.05.
[2] 楼顺天,胡昌华等编著. 基于MATLAB的系统分析与设计 6 模糊系统[M]. 西安:西安电子科技大学出版社, 2001.05.
[3] 李根.基于MATLAB的模糊逻辑控制系统设计[J].机电信息,2020(06):72-73.
[4] 李洪涛.模糊逻辑系统设计分析[J].小型微型计算机系统,1995(05):57-62.
[5] 韦巍,何衍编著. 智能控制基础[M]. 北京:清华大学出版社,2005.61-65