基于MATLAB生成模糊控制规则离线查询表
- 格式:pdf
- 大小:1.50 MB
- 文档页数:3
实验二 基于MATLAB 的位置跟踪系统模糊控制仿真一、实验目的及要求1.能针对某系统(如二阶系统),设计出能够跟踪某一位置曲线的模糊控制器; 2.能够用MATLAB 软件中的M 文件实现模糊控制器;3.能够用MATLAB 软件的Simulink 工具实现位置跟踪系统,其中控制器由M 文件实现的模糊控制器提供。
二、仪器、设备微型计算机(安装有 MATLAB 软件) 1台 三、实验任务 针对一个二阶系统 s50s 400)(2+=s G试设计模糊控制器,实现其控制输出为正弦信号0.8sin(10t)。
四、利用MATLAB 的Simulink 模块实现位置跟踪系统的模糊控制五、利用MATLAB 的M 文件实现位置跟踪系统的模糊控制器仿真 1. 模糊控制器的设计步骤1) 模糊控制器的结构二输入、单输出的模糊控制器是最常见的结构形式。
System fuzzf: 2 inputs, 1 outputs, 49 rulesec (7)图2-1 模糊控制器的结构示意图2) 定义输入输出模糊集对误差E 、误差变化EC 及控制量u 的模糊集及其论域定义如下:E 、EC 和u 的模糊集均为: {}PB PM PS Z NS NM NB ,,,,,,E 、EC 的论域均为:{-3,-2,-1,0,1,2,3} u 的论域为:{-4.5,-3,-1.5,0,1,3,4.5}3) 定义输入输出隶属函数模糊变量误差E 、误差变化EC 及控制量u 的模糊集和论域确定后,需对模糊语言变量确定隶属函数,确定论域内元素对模糊语言变量的隶属度。
4) 建立模糊控制规则根据人的经验,根据系统输出的误差及误差的变化趋势来设计模糊控制规则。
模糊控制规则语句构成了描述众多被控过程的模糊模型。
5) 建立模糊控制表模糊控制规则可采用模糊规则表2-1来描述,共49条模糊规则,各个模糊语句之间是或的关系,由第一条语句所确定的控制规则可以计算出u1。
如何利用Matlab进行模糊控制引言近年来,随着科技的不断发展,模糊控制作为一种重要的控制方法,在各个领域得到了广泛的应用。
而Matlab作为一款功能强大的数学工具软件,对于模糊控制的实现提供了便捷的支持。
本文将介绍如何利用Matlab进行模糊控制,以及其在实际应用中的优势和局限性。
一、模糊控制简介模糊控制是一种基于模糊逻辑的控制方法,它通过将模糊规则应用于控制系统,使其能够对不确定性和模糊信息进行处理。
与传统的精确控制方法相比,模糊控制更适用于处理复杂系统或无法精确建模的系统。
二、Matlab中的模糊控制工具箱Matlab提供了专门的模糊控制工具箱,可以方便地实现模糊控制系统的建模、仿真和优化等操作。
在Matlab的模糊控制工具箱中,主要包括两个核心部分:模糊推理引擎和模糊控制器。
1. 模糊推理引擎模糊推理引擎是模糊控制系统的核心部分,它负责根据输入和模糊规则,对系统进行推理和输出控制量。
在Matlab中,可以使用命令"newfis"来创建一个新的模糊控制系统,然后通过定义输入和输出变量、设定隶属函数和模糊规则等步骤,来构建一个完整的模糊控制系统。
2. 模糊控制器模糊控制器是模糊控制系统的具体实现,它将模糊推理引擎与输入输出之间的映射关系结合起来。
在Matlab中,可以使用命令"newfis"创建一个新的模糊控制系统,然后使用"addInput"和"addOutput"来添加输入和输出变量,最后通过设定隶属函数和模糊规则等步骤,来实现模糊控制器的搭建。
三、模糊控制的实际应用模糊控制在实际应用中有着广泛的应用领域,例如机器人控制、汽车导航、电力系统等。
下面将以一个模拟小车控制的实例来介绍如何利用Matlab进行模糊控制。
假设有一个小车需要根据距离和角度来控制其行驶方向和速度。
首先要定义输入和输出变量,这里我们将距离划分为近、中、远三个模糊集,角度划分为左、中、右三个模糊集,行驶方向划分为左转、直行、右转三个模糊集,行驶速度划分为慢、中、快三个模糊集。
引用如何在MATLAB下把模糊推理系统转化为查询表(原创)Matlab 2009-12-26 22:05:01 阅读161 评论0 字号:大中小订阅引用foundy的如何在MATLAB下把模糊推理系统转化为查询表(原创)李会先摘要:该文论述了将MATLAB下调试成功的模糊逻辑转换为查询表的一种技巧,这种技巧不直接使用MATLAB的矩阵计算方法,操作者多数情况下只需点击鼠标就可完成任务,效率比较高,该方法使用MATLAB下的系统测试工具,收集构造查询表所需的数据资料,文中以MATLAB中的水位模糊控制演示模型为例,把该系统的模糊控制推理模块用在其基础上生成的查询表代替后再进行水位控制仿真,控制效果与模糊推理模块在线推理控制是一致的。
关键词:模糊控制;查询表;MATLAB;Simulink; 系统测试Abstract:This article discuss a skill that make a translation from fuzzy logic system to Lookup Table in Matlab,It doesn't use matrix computing, user need only to drag and draw the mouse completing this task,It's a efficiency method which to collect data for Lookup Table construction from a fuzzy controller by SystemTest Toolbox in Matlab,in the article,I will discuss the skill by a demo which is the Water Level Control in Tank in the Fuzzy logic Toolbox,at last,I simulate the Water Control in Tank instead of the Fuzzy Controller with the Lookup Table which I have constructed,the test results is verywell.Keywords: Fuzzy Logic, Matlab,Simulink,Lookup Table,SystemTest1. 引言在MATLAB/Simulink下,构建模糊逻辑系统模型和调试其推理规则都是很方便的[3][4],我们当然不希望在MATLAB下的仿真工作仅仅用于仿真目的,如果实际产品设计能继承仿真的工作成果,将事半功倍。
m a t l a b计算模糊控制表(总8页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--Matlab计算模糊控制表实现程序如下:clc; %清空命令窗口clear; %清空工作空间e=[1,,,,,0,0,0,0,0,0,0,0;,,1,,,0,0,0,0,0,0,0,0;0,,,,1,,,0,0,0,0,0,0;0,0,0,0,,,1,0,0,0,0,0,0;0,0,0,0,0,0,1,,,0,0,0,0;0,0,0,0,0,0,,,1,,,,0;0,0,0,0,0,0,0,0,,,1,,;0,0,0,0,0,0,0,0,,,,,1] %误差的隶属度函数表,8*13的矩阵eb=[1,,,0,0,0,0,0,0,0,0,0,0;,,1,,,0,0,0,0,0,0,0,0;0,0,,,1,,,0,0,0,0,0,0;0,0,0,0,,,1,,,0,0,0,0;0,0,0,0,0,0,,,1,,,0,0;0,0,0,0,0,0,0,0,,,1,,;0,0,0,0,0,0,0,0,0,0,,,1] %误差变化率的隶属度函数表,7*13的矩阵;u=[1,,,0,0,0,0,0,0,0,0,0,0;,,1,,,0,0,0,0,0,0,0,0;0,0,,,1,,,0,0,0,0,0,0;0,0,0,0,,,1,,,0,0,0,0;0,0,0,0,0,0,,,1,,,0,0;0,0,0,0,0,0,0,0,,,1,,;0,0,0,0,0,0,0,0,0,0,,,1] %输出控制量u,7*13的矩阵;rulelist=[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;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] %控制规则表,为8*7=56条规则;for ey=1:13 % 输入变量e的13个取值:-6——6;for eby=1:13 %输入变量eb的13个取值:-6——6;for ex=1:8 % 输入变量e的8个语言变量NB----PB;for ebx=1:7 % 输入变量eb的7个语言变量NB---PB;arule=rulelist(ex,ebx); %取一条规则;C=u(arule,:);%取这条规则的C的隶属度;代表取一行A=e(ex,:);%取这条规则的A的隶属度;代表取一行for i=1:13;for j=1:13;if (A(i)>C(1,j));Ra(i,j)= C(1,j);elseRa(i,j)=A(i);endendend% 算A—C的蕴含关系;AP=zeros(1,13);AP(1,ey)=e(ex,ey);for i=1:13;for j=1:13;if (AP(j)>Ra(j,i));GDA(j,i)= Ra(j,i);elseGDA(j,i)=AP(j);endendend%求合成运算开始的取小;for i=1:13;max=GDA(1,i);for j=1:13;if (max<GDA(j,i))max= GDA(j,i);endendCPA(i)=max;end % 合成运算取大结束;CPA算出来了;arule=rulelist(ex,ebx); %取一条规则;C=u(arule,:);%取这条规则的C的隶属度;代表取一行B=eb(ebx,:);%取这条规则的A的隶属度;代表取一行for i=1:13;for j=1:13;if (B(i)>C(1,j));Rb(i,j)= C(1,j);elseRb(i,j)=B(i);endendend% 算B—C的蕴含关系;BP=zeros(1,13);BP(1,eby)=eb(ebx,eby);for i=1:13;for j=1:13;if (BP(j)>Rb(j,i));GDB(j,i)= Rb(j,i);elseGDB(j,i)=BP(j);endendend%求合成运算开始的取小;for i=1:13;max=GDB(1,i);for j=1:13;if (max<GDB(j,i))max= GDB(j,i);endendCPB(i)=max;end; % 合成运算取大结束;CPB算出来了;for i=1:13if(CPA(i)>CPB(i))CP(i)=CPB(i);elseCP(i)=CPA(i);endend % 第一个CP1计算结束;将来C是56*13的矩阵;CB((ex-1)*7+ebx,:)=CP;endendfor i=1:13;max=CB(1,i);for j=1:56;if(max<CB(j,i))max=CB(j,i);endendU(i)=max;end %56个CP整理结束;sumFZ=0;sumFM=0;for i=1:13;sumFZ=sumFZ+(i-7)*U(i);sumFM=sumFM+U(i);endcore=sumFZ/sumFM;UB(ey,eby)=core; % 一个控制表中的元素算出来了endendUB=round(UB*100)/100;%保留两位display(UB);程序运行结果如下:程序结果分析:综合MATLAB程序运算出来的结果和智能控制理论与技术(孙增圻)第二版上的结果,完全一致,证明程序运算结果正确!。
引用如何在MATLAB下把模糊推理系统转化为查询表(原创) Matlab 2009-12-26 22:05:01 阅读161 评论0 字号:大中小订阅引用foundy的如何在MATLAB下把模糊推理系统转化为查询表(原创)李会先摘要:该文论述了将MATLAB下调试成功的模糊逻辑转换为查询表的一种技巧,这种技巧不直接使用MATLAB的矩阵计算方法,操作者多数情况下只需点击鼠标就可完成任务,效率比较高,该方法使用MATLAB下的系统测试工具,收集构造查询表所需的数据资料,文中以MATLAB中的水位模糊控制演示模型为例,把该系统的模糊控制推理模块用在其基础上生成的查询表代替后再进行水位控制仿真,控制效果与模糊推理模块在线推理控制是一致的。
关键词:模糊控制;查询表;MATLAB;Simulink; 系统测试Abstract:This article discuss a skill that make a translation from fuzzy logic system to Lookup Table in Matlab,It doesn't use matrix computing, user need only to drag and draw the mouse completing this task,It's a efficiency method which to collect data for Lookup Table construction from a fu zzy controller by SystemTest Toolbox in Matlab,in the article,I will discuss the skill by a demo which is the Water Level Control in Tank in the Fuzzy logic Toolbox,at last,I simulate the Water Control in Tank instead of the Fuzzy Controller with the Lookup Table which I have constructed,the test results is verywell.Keywords: Fuzzy Logic, Matlab,Simulink,Lookup Table,SystemTest1. 引言在MATLAB/Simulink下,构建模糊逻辑系统模型和调试其推理规则都是很方便的[3][4],我们当然不希望在MATLAB下的仿真工作仅仅用于仿真目的,如果实际产品设计能继承仿真的工作成果,将事半功倍。
实例:MATLABSimulink实现模糊PID控制被控对象:Ts = 0.1;Plant = c2d(zpk([],[-1 -3 -5],1),Ts); %零极点模型,并离散化根据对象Plant,确定PID参数:C0 = pid(1,1,1,'Ts',Ts,'IF','B','DF','B'); % 定义PID结构C = pidtune(Plant,C0) %对PID参数进行优化[Kp, Ki, Kd] = piddata(C); % 输出参数得出PID结构及其参数值:接下来根据求出的PID参数确定GCE、GE 、GCU 和GU的取值:由模糊PID控制结构可得如下等式:Kp = GCU * GCE + GU * GEKi = GCU * GEKd = GU * GCE形式转换如下:GE = 10; %根据模糊控制的论语直接确定GCE = GE*(Kp-sqrt(Kp^2-4*Ki*Kd))/2/Ki=3.4285;GCU = Ki/GE=2.8631;GU = Kd/GCE=2.0138;模糊PID控制系统结构(连续模糊控制器):图中的离散时间积分和微分块直接调用。
模糊控制器输入输出结构:模糊控制器输入输出隶属度函数:模糊控制器规则表:模糊控制器规则曲面图:连续模糊PID控制器,仿真结果:模糊PID控制系统结构(离散模糊控制器):离散模糊控制器查询表:离散模糊PID控制器,仿真结果:主要代码如下:(1)、对象模型:Ts = 0.1;Plant = c2d(zpk([],[-1 -3 -5],1),Ts);(2)、PID参数优化:C0 = pid(1,1,1,'Ts',Ts,'IF','B','DF','B');C = pidtune(Plant,C0)[Kp, Ki, Kd] = piddata(C);(3)、比例因子确定:GE = 10;GCE = GE*(Kp-sqrt(Kp^2-4*Ki*Kd))/2/Ki;GCU = Ki/GE;GU = Kd/GCE;(4)、连续模糊PID控制建立:FIS = newfis('FIS','sugeno');%%% 定义输入E:FIS = addvar(FIS,'input','E',[-10 10]);FIS = addmf(FIS,'input',1,'Negative','gaussmf',[7 -10]); FIS = addmf(FIS,'input',1,'Positive','gaussmf',[7 10]); %%% 定义输入CE:FIS = addvar(FIS,'input','CE',[-10 10]);FIS = addmf(FIS,'input',2,'Negative','gaussmf',[7 -10]); FIS = addmf(FIS,'input',2,'Positive','gaussmf',[7 10]); %%% 定义输出u:FIS = addvar(FIS,'output','u',[-20 20]);FIS = addmf(FIS,'output',1,'Min','constant',-20);FIS = addmf(FIS,'output',1,'Zero','constant',0);FIS = addmf(FIS,'output',1,'Max','constant',20);% 定义规则:%% # If |E| is Negative and |CE| is Negative then |u| is -20 % # If |E| is Negative and |CE| is Positive then |u| is 0% # If |E| is Positive and |CE| is Negative then |u| is 0% # If |E| is Positive and |CE| is Positive then |u| is 20 ruleList = [1 1 1 1 1;... % Rule 11 2 2 1 1;... % Rule 22 1 2 1 1;... % Rule 32 23 1 1]; % Rule 4FIS = addrule(FIS,ruleList);gensurf(FIS) %生成模糊控制器(5)、离散模糊控制器查询表:Step = 2;E = -10:Step:10;CE = -10:Step:10;N = length(E);LookUpTableData = zeros(N);for i=1:Nfor j=1:N% compute output u for each combination of break points LookUpTableData(i,j) = evalfis([E(i) CE(j)],FIS);endend。
clc;clear;E = [1,0.8,0.7,0.4,0.1,0,0,0,0,0,0,0,0;0.2,0.7,1,0.7,0.3,0,0,0,0,0,0,0,0;0,0.1,0.3,0.7,1,0.7,0.2,0,0,0,0,0,0;0,0,0,0,0.1,0.6,1,0,0,0,0,0,0;0,0,0,0,0,0,1,0.6,0.1,0,0,0,0;0,0,0,0,0,0,0.2,0.7,1,0.7,0.3,0.1,0;0,0,0,0,0,0,0,0,0.2,0.7,1,0.7,0.3;0,0,0,0,0,0,0,0,0.1,0.4,0.7,0.8,1]%%8*13 EC =[1,0.7,0.3,0,0,0,0,0,0,0,0,0,0;0.3,0.7,1,0.7,0.3,0,0,0,0,0,0,0,0;0,0,0.3,0.7,1,0.7,0.3,0,0,0,0,0,0;0,0,0,0,0.3,0.7,1,0.7,0.3,0,0,0,0;0,0,0,0,0,0,0.3,0.7,1,0.7,0.3,0,0;0,0,0,0,0,0,0,0,0.3,0.7,1,0.7,0.3;0,0,0,0,0,0,0,0,0,0,0.3,0.7,1]%%7*13U=[1,0.7,0.3,0,0,0,0,0,0,0,0,0,0;0.3,0.7,1,0.7,0.3,0,0,0,0,0,0,0,0;0,0,0.3,0.7,1,0.7,0.3,0,0,0,0,0,0;0,0,0,0,0.3,0.7,1,0.7,0.3,0,0,0,0;0,0,0,0,0,0,0.3,0.7,1,0.7,0.3,0,0;0,0,0,0,0,0,0,0,0.3,0.7,1,0.7,0.3;0,0,0,0,0,0,0,0,0,0,0.3,0.7,1]%%7*13rulelist= [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;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]%%8*7for iii=1:13 %偏差E的模糊值控制for jjj=1:13 %偏差率EC的模糊值控制for ii=1:8 %偏差E的模糊规则控制for jj=1:7 %偏差变化率EC的模糊规则控制A_rulelist = rulelist(ii,jj); %查模糊规则表%******计算C1A'************A = E(ii,:); %取A'C_A = U(A_rulelist,:); %取Cifor i=1:13 %求R1Afor j=1:13if(A(i) > C_A(1,j))Ra(i,j) = C_A(1,j);elseRa(i,j) = A(i);endendendAA = zeros(1,13); %取AA=A' 如AA=[1,0,0,0,0,0,0,0,0,0,0,0,0]; %AA(1,iii) = E(ii,iii);AA(1,iii) = 1;for i=1:13 %先取小for j=1:13if(AA(j) > Ra(j,i))A_qux(j,i) = Ra(j,i);elseA_qux(j,i) = AA(j);endendendfor i=1:13 %再取大,,,求和CiAmax = A_qux(1,i);for j=1:13if(max < A_qux(j,i))max = A_qux(j,i);endendCiA(i) = max;end%********CiA计算完毕*********%*******计算CiB'*************B = EC(jj,:); %取B' ???C_B = U(A_rulelist,:); %取Ci ??? for i=1:13 %求R1Bfor j=1:13if(B(1,i) > C_B(1,j))Rb(i,j) = C_B(1,j);elseRb(i,j) = B(1,i);endendendBB = zeros(1,13); %取BB=B' 如BB=[1,0,0,0,0,0,0,0,0,0,0,0,0]; %BB(1,jjj) = EC(jj,jjj);BB(1,jjj) = 1;for i=1:13 %先取小for j=1:13if(BB(j) > Rb(j,i))B_qux(j,i) = Rb(j,i);elseB_qux(j,i) = BB(j);endendendfor i=1:13 %再取大,,,求和CiAmax = B_qux(1,i);for j=1:13if(max < B_qux(j,i))max = B_qux(j,i);endendend%*******计算CiB'完毕****%*******计算C1'=CiA'交CiB'*********for i=1:13if CiA(i) > CiB(i)Ci(i) = CiB(i);elseCi(i) = CiA(i);endend%*******计算C1'完毕************C((ii-1)*7+jj,:) = Ci; % 将Ci存到数组C中,C是56*13的数组endend%根据式Ui=C'=C1'并C2'并……并C56'for i=1:13max = C(1,i);for j=1:56max = C(j,i);endendUi(i) = max;end%用重心法进行解模糊运算,并映射为实际的控制量sum_fenz = 0;sum_fenm = 0;for i=1:13sum_fenz = sum_fenz + (i-7)*Ui(i);sum_fenm = sum_fenm + Ui(i);endcore = sum_fenz/sum_fenm;U_control(iii,jjj) = core;endendU_control = round(U_control.*10000)/10000; %对控制量保留小数点后两位。
用模糊控制实现水箱水温的恒温控制。
水箱由底部的电阻性电热元件加热,由电动搅拌器实现均温.设控制的目标温度为25ºC,以实测温度T与目标温度R之差,即误差e=T-R,以及误差变化率ec为输入,以固态继电器通电时间的变化量u(以一个控制周期内的占空比表示,控制电加热器的功率)为输出.设e的基本论域为[-5,5] ºC,其语言变量E的论域为[-5,5];ec的基本论域为[-1,1] ºC/s,其语言变量EC的论域为[—5,5];控制量u的基本论域为[—5,5]单位,其语言变量U的论域为[—5,5]。
E、EC和U都选5个语言值{NB,NM,NS,Z,PS,PM,PB},各语言值的隶属函数采用三角函数,其分布可用表1和表2表示,控制规则如表3所示。
要求:1、画出模糊控制程序流程图;2、计算出模糊控制器的查询表,写出必要的计算步骤。
表1 语言变量E、EC的赋值表表2 语言变量U的赋值表解:步骤:1)输入输出语言变量的选择。
输入变量选为实测温度T与目标温度R之差,即误差e,及误差变化率ec;输出语言变量选固态继电器通电时间的变化量u,故模糊控制系统为双输入—单输出的基本模糊控制器.2)建立各语言变量的赋值表。
设误差e的基本论域为[-5,5].C,输入变量E的论域为[-5,—4,-3,—2,-1,0,1,2,3,4,5],误差的量化因子为ke=5/5=1。
语言变量E选取5个语言值:PB PS ZE NS NB。
表1为语言变量E、EC的赋值表,表2为语言变量U的赋值表,,,,表1语言变量E、EC的赋值表表2 语言变量U的赋值表3)建立模糊控制规则表,总结控制策略,得出一组由25条模糊条件语句构成的控制规则,据此建立模糊控制规则表,如表3所示.表中行与列交叉处的每个元素及其所在列的第一行元素和所在行的第一列元素,对应于一个形式为”if E and EC then U”的模糊语句,根据该模糊语句可得相应的模糊关系i R ,则总控制规则的总模糊关系为251=i i R U R =。
0 引言
模糊控制隶属于智能控制,是一种基于规则的近似推理的非线性智能控制。
如果说,传统的控制方式需要被控对象精确的数学模型,而模糊控制则是以人类智能活动的角度为基础实施控制,因此,在实际中,传统控制方法无能为力的非线性场合,模糊控制却能起到很好的控制作用。
因此,实际应用中,由于系统复杂、很难建立精确数学模型的非线性系统,模糊控制已经成为一种最有效的控制方法。
模糊控制规则表是模糊控制的核心,其描述的是输入的偏差、偏差变化量与控制的输出之间的对应关系,采用手工计算方式,量大且费时;采用在线计算方式,往往又影响系统被控对象的实时控制效果。
因此,在应用模糊控制时,首先针对输入的不同组合,采用离线计算方式算出相应的控制输出量,构成模糊控制规则查询表,实际控制时再将模糊控制规则查询表嵌入在各种控制平台,如单片机、PLC 等,实现离线计算、在线查表,这样,一方面减少了模糊控制的在线运算量,同时又实现了模糊控制的实时控制效果。
实际应用中发现,对模糊控制规则表的生成,在离散论域分档较少的条件下,多采用手工计算,而在离散论域分档较多的条件下,手工计算量太大,用MATLAB 软件编程实现,对MATLAB 软件的编程能力要求又较高,因此,本文以二维温度模糊控制规则查询表的生成为例来说明如何简单有效的利用MATLAB 软件生成模糊控制规则离线查询表。
1 实例分析
应用MATLAB2014a 软件说明生成模糊规则离线查询表的过程。
设二维温度模糊控制器[1 2]的输入为温度偏差E 和温度偏差变化率EC,输出为温控器输出电压U。
模糊控制器模型见图1。
2 模糊控制规则离线查询表生成步骤[
3
4 5]
(1)利用模糊逻辑控制工具箱生成温度模糊推理系统在MATLAB2014a 命令窗口中输入fuzzy 打开模糊控制工具箱,编辑输入输出变量的隶属度函数和模糊控制规则,然后将模糊推理系统保存为mytest.fis。
设温度偏差E、偏差变化率EC 和温控器输出电压U 的模糊论域为[-6 6],三者的语言变量赋值均为{NB,NM,NS,Z,PS,PM,PB},各语言值的隶属函数均采用三角函数,如图2所示,并根据温度模糊控制规则表1逐条添加模糊控制规则,清晰化采用加权平均法。
(2)建立模糊逻辑控制器的MATLAB-Simulink 仿真模型在该模型中,模糊逻辑控制模块需要输入FIS matrix 参数,故
popularizing various practical applications with fuzzy control technology as the core.Key words : Fuzzy Control;Fuzzy Control Rules Off-line Query Table;MATLAB
图1 二维温度模糊控制器
61
3 模糊逻辑控制器的MATLAB-Simulink 仿真模型
图4 仿真模型中模糊逻辑控制模块参数设置
(3)测试MATLAB-Simulink 仿真模型fuzzymodel ①首先添加测试仿真模型:
Simulink 环境下,由fuzzymodel 窗口中菜单栏Tools →SystemTest →launch SystemTest,进入测试界面。
选中左侧Main Test,再由测试界面菜单栏 Insert →Test Element →Simulink,在右侧填入已建立的MATLAB-Simulink 仿真模型 fuzzymodel。
②其次,添加与仿真模型匹配的输入测试向量和输出测试变量:
选中左侧Test Vectors,右侧单击New 新建,添加两个测试向量input1和input2,取值范围Expression 均为[-6:1:6];在Test Variables 里添加测试变量output。
③将输入测试向量和输出测试变量与仿真模型输入输出进行变量映射:
选中左侧Main Test 下Simulink,将测试向量input1、input2分别映射到模糊控制器的输入口In1、In2,见图5。
将测试变量output 映射到模糊控制器输出口Out1,见图6。
④最后预先保存测试数据:
选中左侧Main Test 下Save results,单击右侧new
图5 测试向量映射结果
图6 测试变量映射结果
⑤点击Run 运行测试:
由于测试输入向量input1、input2的取值范围Expression 均为[-6:1:6],因此,Main Test 会进行169次迭代。
(4)查看测试结果:
测试成功,测试结果保存在变量stresults 中。
对模糊控制规则查询表的查看有多种方法,这里主要介绍常用的较table_data=reshape(temp,13,13)
MATLAB 命令窗口中显示最终的模糊控制查询结果:
②点击左侧工作区中变量table_data,则模糊控制查询结果以表格的形式显示在命令窗口的上端:
在这个表中,左侧对应E,顶端对应EC,范围均为[1..13],对应理论分析的离散论域范围[-6:1:6]。
实际应用此表进行模糊控制查询时,仍然用[1..13],便于查询式编程。
(下转第70页)
函数时,也出现了梯度消失的问题。
使用Leaky ReLU 函数时不会出现梯度消失问题,计算效率高,快速收敛,避免了前两
个函数遇到的问题。
[2]姚青,张超,王正,等.分布式移动农业病虫害图像采集与
诊断系统设计与试验[J].农业工程学报,2017,33(S1): 184-191.
③利用二维真值表查看
重新建立二维真值表仿真模型,见图7,二维真值表模块参数设置见图8。
与图3的区别在于用二维真值表取代模糊控制器。
图7 二维真值表仿真模型
图8 二维真值表模块参数设置
点击二维真值表仿真模型工作窗口菜单项Edit → Lookup Table Editor 即可以查看模糊控制规则查询表。
3 结论
鉴于模糊控制的应用越来越广泛,因此,学习如何利用
MATLAB 仿真工具,方便而迅速地建立模糊控制规则离线查询表,对于我们在各种控制平台,应用和推广模糊控制技术定
会带来极大的地帮助。
参考文献
[1]罗兵等.智能控制技术[M].北京:清华大学出版社,2011.
[2]刘金琨.智能控制[M].北京:电子工业出版社,2009.[3]李祖欣.MATAB 在模糊控制系统设计和仿真的应用[J].
系统仿真学报,2003 (1) :132-143.
[4]叶伊莎等.基于Matlab 的模糊查询表生成方法探讨[J].
实验室研究与探索,2014,5:101-106
[5]刘天龙等.模糊控制查询表的快速获取及在造纸污水过程
中的应用[J].造纸科学与技术,2011.30 (04) :78-82.
(上接第61页)。