(完整版)matlab模糊控制工具箱的使用

合集下载

模糊控制在matlab中的实例

模糊控制在matlab中的实例

模糊控制在matlab中的实例模糊控制(模糊逻辑控制)是一种基于模糊数学理论的控制方法,它可以用于控制系统的稳定性、精度和响应速度等方面的优化。

在MATLAB 中,可以使用模糊逻辑工具箱(FLUS)来应用模糊控制。

以下是一个简单的实例,展示了如何使用 MATLAB 中的模糊逻辑工具箱来对温度控制系统进行控制:首先,我们需要创建一个温度控制系统,该系统将使用模糊控制来控制传感器的读数。

假设我们有四个传感器,分别为温度传感器、湿度传感器、压力和传感器,每个传感器读数为实数。

```matlab% 创建模型T = [120 100 80 50]; % 温度控制器输出R1 = [1.2 0.8 0.4 0.2]; % 湿度控制器输出R2 = [0.9 0.1 0.3 0.5]; % 压力控制器输出R3 = [1.4 0.6 0.2 0.1]; % 传感器误差P1 = [125 125 125 125]; % 温度控制器输入P2 = [100 100 90 80]; % 湿度控制器输入P3 = [85 85 80 75]; % 压力控制器输入F1 = [0.3 0.2 0.1 0.1]; % 温度控制器输出F2 = [0.4 0.3 0.2 0.1]; % 湿度控制器输出F3 = [0.5 0.4 0.3 0.1]; % 压力控制器输出y1 = [100 85 75 60]; % 实际温度y2 = [120 95 80 70]; % 实际湿度y3 = [135 110 90 80]; % 实际压力% 创建模糊控制器go1 = @(t,u,v) if t > 100 then ((1-v)*F1 + v*R1 +(1+v)*R2)/(1-v)*y1 else 0;go2 = @(t,u,v) if t < 50 then ((1-v)*F3 + v*R1 +(1+v)*R2)/(1-v)*y2 else 0;go3 = @(t,u,v) if t == 0 then ((1-v)*F1 + v*R1 +(1+v)*R2)/(1-v)*y3 else 0;% 创建模糊控制器的优化器var = [0 0 0 0];go1(0,:,:) = var;matlab.模糊控制.优化器.LevenbergMarquardt(var,go1);% 运行模糊控制器[t,u,v] = ode45(go1,[0 1],[120 100 80 50],y1);% 输出结果disp(["实际温度:" num2str(t)]);disp(["实际湿度:" num2str(u)]);disp(["实际压力:" num2str(v)]);```在这个例子中,我们使用 MATLAB 中的 ode45 工具箱来拟合温度控制器和湿度控制器的输出响应函数。

Fuzzytoolbox4步教你学会使用matlab模煳控制工具箱共3页文档

Fuzzytoolbox4步教你学会使用matlab模煳控制工具箱共3页文档

4步教你学会使用matlab模糊控制工具箱(2008-09-2023:42:02)Matlab模糊控制工具箱为模糊控制器的设计提供了一种非常便捷的途径,通过它我们不需要进行复杂的模糊化、模糊推理及反模糊化运算,只需要设定相应参数,就可以很快得到我们所需要的控制器,而且修改也非常方便。

下面将根据模糊控制器设计步骤,一步步利用Matlab工具箱设计模糊控制器。

首先我们在Matlab的命令窗口(command window)中输入fuzzy,回车就会出来这样一个窗口。

下面我们都是在这样一个窗口中进行模糊控制器的设计。

1.确定模糊控制器结构:即根据具体的系统确定输入、输出量。

这里我们可以选取标准的二维控制结构,即输入为误差e和误差变化ec,输出为控制量u。

注意这里的变量还都是精确量。

相应的模糊量为E,EC和U,我们可以选择增加输入(Add Variable)来实现双入单出控制结构。

2.输入输出变量的模糊化:即把输入输出的精确量转化为对应语言变量的模糊集合。

首先我们要确定描述输入输出变量语言值的模糊子集,如{NB,NM,NS,ZO,PS,PM,PB},并设置输入输出变量的论域,例如我们可以设置误差E(此时为模糊量)、误差变化EC、控制量U的论域均为{-3,-2,-1,0,1,2,3};然后我们为模糊语言变量选取相应的隶属度函数。

在模糊控制工具箱中,我们在Member Function Edit中即可完成这些步骤。

首先我们打开Member Function Edit窗口.然后分别对输入输出变量定义论域范围,添加隶属函数,以E为例,设置论域范围为[-3 3],添加隶属函数的个数为7.然后根据设计要求分别对这些隶属函数进行修改,包括对应的语言变量,隶属函数类型。

3.模糊推理决策算法设计:即根据模糊控制规则进行模糊推理,并决策出模糊输出量。

首先要确定模糊规则,即专家经验。

对于我们这个二维控制结构以及相应的输入模糊集,我们可以制定49条模糊控制规则(一般来说,这些规则都是现成的,很多教科书上都有),如图。

通过算例熟悉MATLAB模糊控制工具箱

通过算例熟悉MATLAB模糊控制工具箱

通过算例熟悉MATLAB模糊控制工具箱设计一个二维模糊控制器控制一个一阶被控对象1()1G sTs=+,然后改变控制对象参数的大小,观察模糊控制的鲁棒性。

1、模糊推理的五个步骤1)输入变量的模糊化这是模糊推理的第一步,是获取输入变量,并确定它们的隶属函数,从而确定属于每个模糊集合的隶属度。

2) 应用模糊算子完成了输入模糊化,就知道了对于每个模糊规则,前提中每一个部分被满足的程度。

如果一个给定规则的前提有多个部分,则要应用模糊算子来获得一个数值,这个数值表示前提对于该规则的满足程度。

3) 应用推理方法推理的类型有mamdani和sugeno 推理。

Mamdani推理法是一种在模糊控制中普遍使用的方法,它本质上仍然是一种合成推理方法,只不过对模糊蕴涵关系取不同的形式而已。

Mamdani型推理,从每个规则的结果中得到的模糊集通过聚类运算后得到结果模糊集,被反模糊化后得到系统输出。

Sugeon型推理:其中每个规则的结果是输入的线性组合,而输出是结果的加权线性组合。

4) 输出的聚类由于决策是在对模糊推理系统中所有规则进行综合考虑的基础上做出的,因此必须以某种方式将规则结合起来以做出决策。

聚类就是这样一个过程,它将表示每个规则输出的模糊集结合成一个单独的模糊集。

聚类方法有max,probor(概率乘),sum。

其中,sum执行的是各规则输出集的简单相加。

5) 解模糊化解模糊化过程也叫反模糊化过程,它的输入是一个模糊集,既上一步的聚类输出模糊集,其输出为一个单值。

模糊集的聚类中包含很多输出值,因此必须进行反模糊化,以从集合中解析出一个单输出值。

2、模糊逻辑工具箱的介绍模糊逻辑工具箱提供的图形用户界面(GUI)工具有五个:模糊推理系统(FIS)编辑器;隶属函数编辑器;模糊规则编辑器;模糊规则观察器;输出曲面观察器。

1)FIS编辑器:Matlab的FIS界面如图1所示。

FIS处理系统有多少个输入变量,输出变量,名称是什么,模糊算子“与”(min,prod乘积,custom自定义),“或”(max大,probor 概率统计方法,custom),推理方法(min,prod,custom),聚类方法(max,probor,sum,custom),解模糊的方法(centroid质心法,bisector中位线法,middle of maximum,largest of maximum,smallest of maximum)。

如何利用Matlab进行模糊逻辑控制

如何利用Matlab进行模糊逻辑控制

如何利用Matlab进行模糊逻辑控制Matlab是一种流行的数学软件,广泛应用于科学和工程领域。

其中一个强大的功能是模糊逻辑控制,它可以帮助人们解决模糊问题。

本文将介绍如何利用Matlab进行模糊逻辑控制,以及其在实际应用中的价值和局限性。

1. 什么是模糊逻辑控制?模糊逻辑控制是一种基于模糊推理的控制方法。

与传统的二值逻辑不同,模糊逻辑可以处理模糊的、不确定的信息。

它将模糊集合和模糊规则引入到控制系统中,使得系统能够根据输入数据和模糊规则进行推理,并输出相应的控制信号。

2. Matlab中的模糊逻辑工具箱Matlab提供了强大的模糊逻辑工具箱,可以用于模糊逻辑控制系统的设计和仿真。

该工具箱包含了模糊集合的定义、模糊规则的建立、模糊控制器的设计等功能。

用户可以通过简单的命令和图形界面进行操作,快速构建模糊逻辑控制系统。

3. 模糊集合的定义模糊集合是模糊逻辑的基础,它用来描述对于一个特定的输入值,它属于某个特定集合的程度。

在Matlab中,我们可以使用模糊集合来定义输入和输出的隶属度函数。

例如,对于一个温度控制系统,我们可以定义一个“冷”的模糊集合和一个“热”的模糊集合,它们分别代表了输入量的不同程度。

4. 模糊规则的建立在模糊逻辑控制系统中,模糊规则用于描述输入和输出之间的关系。

在Matlab 中,我们可以使用模糊规则来定义输入值和输出值之间的映射关系。

例如,对于一个简单的车速控制系统,我们可以定义一个模糊规则,如“如果车速较慢,则增加油门”的规则。

通过组合多个模糊规则,可以构建一个复杂的控制策略。

5. 模糊控制器的设计在Matlab中,我们可以使用模糊控制器对象来设计和实现模糊逻辑控制系统。

模糊控制器对象包含了输入集合、输出集合、模糊规则库等属性,以及推理和解糊过程的方法。

用户可以根据系统需求和实际问题,选择合适的模糊集合、模糊规则和解糊方法,设计出一个有效的模糊控制器。

6. 模糊逻辑控制的应用模糊逻辑控制在实际应用中具有广泛的应用价值。

matlab模糊控制工具箱

matlab模糊控制工具箱

第一章绪论1.1课题的提出和意义随着我国电力事业的发展,电网管理日趋现代化。

负荷预测问题的研究逐渐引起了人们的关注,在电力系统学科中占据了重要的地位,是一个重要的组成部分。

在实际中,制定电力系统规划以及实现电力系统自动化这两项重要的工作,对它们进行应有的负荷预测都是基本要求。

众所周知,电力系统的作用应当是为各类的用户提供可靠而合乎质量要求的电能,使得各种客户的要求得到满足,而所有用户所使用的电能即为负荷。

负荷的大小与特性,对于系统的运行研究以及系统的设计,都是重中之中。

所以,对负荷的变化与特性,有一个事先的估计,是电力系统发展与运行研究的重要内容。

电力系统运行管理现代化中最看重的就是负荷预测,其水平决定了现代化的程度以及技术的高度,能够保证整个系统能够在正确的思维指导下调度和运行。

精准而优良的预测系统不仅在电力系统的安全、可靠、经济运行中起着支柱的作用,在节约能源方面也有着不俗的发挥。

负荷预测会受到很多方面的影响,不单单由以往的数据所决定,还要各方面非电力系统负荷的影响。

那整个系统为什么会要对将来的用电进行预测?因为系统内的可用发电容量,在正常运行的情况下,无论什么时候都要满足客户的需求,即满足所要提供的负荷。

发电容量一旦不够,则必须采取相应的措施来增加其发电容量,比如新增发电机组或从相邻的电网借来所差容量;反之,若发电容量过剩,则也应该采取必要的措施,如有选择性的止某台电机的运行或者向相邻的网络输出多余的电容量。

为了对选择对应的机组,确定所要具备的电源的结构,以及对于燃料的需求等,我们就应该要做到对负荷有一个准确的预测。

负荷曲线的预测可为研究电力系统的峰值、抽水蓄能电站的容量以及发输电设备的协调运行提供数据支持。

电力用户是电力工业的服务对象,电力负荷的不断增长是电力工业发展的根据。

正确地预测电力负荷,既是为了保证无条件供应国民经济各部门及人民生活以充足的电力的需要,也是电力工业自身健康发展的需要。

matlab 模糊工具箱操作

matlab 模糊工具箱操作

num=20;den=[8 6 1];[a1,b1,c1,d]=tf2ss(num,den); T=0.01;h=T;N=500;R=1.5*ones(1,N);%pide=0;de=0;ie=0;kp=4;ki=0.5;kd=1.5;x=[0;0];for k=1:Nu1=-(kp*e+ki*ie+kd*de);k0=a1*x+b1*u1;k1=a1*(x+h*k0/2)+b1*u1;k2=a1*(x+h*k1/2)+b1*u1;k3=a1*(x+h*k2)+b1*u1;x=x+(k0+2*k1+2*k2+k3)*h/6; y=c1*x+d*u1;e1=e;e=y-R(1,k);de=(e-e1)/T;ie=e*T+ie;yy2(1,k)=y;enda=newfis('simple1');a=addvar(a,'input','e',[-5 5]);a=addmf(a,'input',1,'NB','trapmf',[-5,-5,-5,-4]);a=addmf(a,'input',1,'NM','trapmf',[-5,-4,-3,-2]);a=addmf(a,'input',1,'NS','trapmf',[-3,-2,-1,0]);a=addmf(a,'input',1,'ZE','trimf',[-1,0,1]);a=addmf(a,'input',1,'PS','trapmf',[0,1,2,3]);a=addmf(a,'input',1,'PM','trapmf',[2,3,4,5]);a=addmf(a,'input',1,'PB','trapmf',[4,5,5,5]);a=addvar(a,'input','de',[-5 5]);a=addmf(a,'input',2,'NB','trapmf',[-5,-5,-5,-4]);a=addmf(a,'input',2,'NM','trapmf',[-5,-4,-3,-2]);a=addmf(a,'input',2,'NS','trapmf',[-3,-2,-1,0]);a=addmf(a,'input',2,'ZE','trimf',[-1,0,1]);a=addmf(a,'input',2,'PS','trapmf',[0,1,2,3]);a=addmf(a,'input',2,'PM','trapmf',[2,3,4,5]);a=addmf(a,'input',2,'PB','trapmf',[4,5,5,5]);a=addvar(a,'output','kp',[-5 5]);a=addmf(a,'output',1,'NB','trapmf',[-5,-5,-5,-4]);a=addmf(a,'output',1,'NM','trapmf',[-5,-4,-3,-2]);a=addmf(a,'output',1,'NS','trapmf',[-3,-2,-1,0]);a=addmf(a,'output',1,'ZE','trimf',[-1,0,1]);a=addmf(a,'output',1,'PS','trapmf',[0,1,2,3]);a=addmf(a,'output',1,'PM','trapmf',[2,3,4,5]);a=addmf(a,'output',1,'PB','trapmf',[4,5,5,5]);rulelist1=[1 1 7 1 1;1 2 7 1 1;1 3 6 1 1;1 4 6 1 1;1 5 5 1 1;1 6 4 1 1;1 7 4 1 1;2 1 7 1 1;2 2 7 1 1;23 6 1 1;245 1 1;2 5 5 1 1;26 4 1 1;2 73 1 1;3 1 6 1 1;3 2 6 1 1;3 3 6 1 1;345 1 1;3 5 4 1 1;36 3 1 1;3 7 3 1 1;4 1 6 1 1;4 2 6 1 1;4 35 1 1;4 4 4 1 1;4 5 3 1 1;46 2 1 1;4 7 2 1 1;5 1 5 1 1;5 2 5 1 1;5 3 4 1 1;5 4 3 1 1;5 5 3 1 1;56 2 1 1;5 7 2 1 1;6 1 5 1 1;6 2 4 1 1;6 3 3 1 1;6 4 2 1 1;6 5 2 1 1;6 6 2 1 1;6 7 1 1 1;7 1 4 1 1;7 2 4 1 1;7 3 2 1 1;7 4 2 1 1;7 5 2 1 1;7 6 1 1 1;7 7 1 1 1]; a=addrule(a,rulelist1);b=newfis('simple2');b=addvar(b,'input','e',[-5 5]);b=addmf(b,'input',1,'NB','trapmf',[-5,-5,-5,-4]);b=addmf(b,'input',1,'NM','trapmf',[-5,-4,-3,-2]);b=addmf(b,'input',1,'NS','trapmf',[-3,-2,-1,0]);b=addmf(b,'input',1,'ZE','trimf',[-1,0,1]);b=addmf(b,'input',1,'PS','trapmf',[0,1,2,3]);b=addmf(b,'input',1,'PM','trapmf',[2,3,4,5]);b=addmf(b,'input',1,'PB','trapmf',[4,5,5,5]);b=addvar(b,'input','de',[-5 5]);b=addmf(b,'input',2,'NB','trapmf',[-5,-5,-5,-4]);b=addmf(b,'input',2,'NM','trapmf',[-5,-4,-3,-2]);b=addmf(b,'input',2,'NS','trapmf',[-3,-2,-1,0]);b=addmf(b,'input',2,'ZE','trimf',[-1,0,1]);b=addmf(b,'input',2,'PS','trapmf',[0,1,2,3]);b=addmf(b,'input',2,'PM','trapmf',[2,3,4,5]);b=addmf(b,'input',2,'PB','trapmf',[4,5,5,5]);b=addvar(b,'output','ki',[-5 5]);b=addmf(b,'output',1,'NB','trapmf',[-5,-5,-5,-4]);b=addmf(b,'output',1,'NM','trapmf',[-5,-4,-3,-2]);b=addmf(b,'output',1,'NS','trapmf',[-3,-2,-1,0]);b=addmf(b,'output',1,'ZE','trimf',[-1,0,1]);b=addmf(b,'output',1,'PS','trapmf',[0,1,2,3]);b=addmf(b,'output',1,'PM','trapmf',[2,3,4,5]);b=addmf(b,'output',1,'PB','trapmf',[4,5,5,5]);rulelist2=[1 1 1 1 1;1 2 1 1 1;1 3 2 1 1;1 4 2 1 1;1 5 3 1 1;1 6 4 1 1;1 7 4 1 1;2 1 1 1 1;2 2 1 1 1;23 2 1 1;24 3 1 1;25 3 1 1;26 4 1 1;2 7 4 1 1;3 1 1 1 1;3 2 2 1 1;3 3 3 1 1;34 3 1 1;35 4 1 1;36 5 1 1;3 7 5 1 1;4 1 2 1 1;4 2 2 1 1;4 3 3 1 1;4 4 4 1 1;45 5 1 1;46 6 1 1;4 7 6 1 1;5 1 2 1 1;5 2 3 1 1;5 3 4 1 1;5 4 5 1 1;5 5 5 1 1;56 6 1 1;5 7 7 1 1;6 1 4 1 1;6 2 4 1 1;6 3 5 1 1;6 4 5 1 1;6 5 6 1 1;6 67 1 1;6 7 7 1 1;7 1 4 1 1;7 2 4 1 1;7 3 5 1 1;7 4 6 1 1;7 5 6 1 1;7 6 7 1 1;7 7 7 1 1]; b=addrule(b,rulelist2);c=newfis('simple3');c=addvar(c,'input','e',[-5 5]);c=addmf(c,'input',1,'NB','trapmf',[-5,-5,-5,-4]);c=addmf(c,'input',1,'NM','trapmf',[-5,-4,-3,-2]);c=addmf(c,'input',1,'NS','trapmf',[-3,-2,-1,0]);c=addmf(c,'input',1,'ZE','trimf',[-1,0,1]);c=addmf(c,'input',1,'PS','trapmf',[0,1,2,3]);c=addmf(c,'input',1,'PM','trapmf',[2,3,4,5]);c=addmf(c,'input',1,'PB','trapmf',[4,5,5,5]);c=addvar(c,'input','de',[-5 5]);c=addmf(c,'input',2,'NB','trapmf',[-5,-5,-5,-4]);c=addmf(c,'input',2,'NM','trapmf',[-5,-4,-3,-2]);c=addmf(c,'input',2,'NS','trapmf',[-3,-2,-1,0]);c=addmf(c,'input',2,'ZE','trimf',[-1,0,1]);c=addmf(c,'input',2,'PS','trapmf',[0,1,2,3]);c=addmf(c,'input',2,'PM','trapmf',[2,3,4,5]);c=addmf(c,'input',2,'PB','trapmf',[4,5,5,5]);c=addvar(c,'output','kd',[-5 5]);c=addmf(c,'output',1,'NB','trapmf',[-5,-5,-5,-4]);c=addmf(c,'output',1,'NM','trapmf',[-5,-4,-3,-2]);c=addmf(c,'output',1,'NS','trapmf',[-3,-2,-1,0]);c=addmf(c,'output',1,'ZE','trimf',[-1,0,1]);c=addmf(c,'output',1,'PS','trapmf',[0,1,2,3]);c=addmf(c,'output',1,'PM','trapmf',[2,3,4,5]);c=addmf(c,'output',1,'PB','trapmf',[4,5,5,5]);rulelist3=[1 1 1 1 1;1 2 1 1 1;1 3 1 1 1;1 4 1 1 1;1 5 1 1 1;1 6 1 1 1;1 7 1 1 1;2 1 2 1 1;2 2 2 1 1;23 2 1 1;24 2 1 1;25 2 1 1;26 2 1 1;2 7 2 1 1;3 1 3 1 1;3 2 3 1 1;3 3 3 1 1;34 3 1 1;35 3 1 1;36 3 1 1;3 7 3 1 1;4 1 4 1 1;4 2 3 1 1;4 3 3 1 1;4 4 3 1 1;45 3 1 1;46 3 1 1;4 7 4 1 1;5 1 4 1 1;5 2 4 1 1;5 3 4 1 1;5 4 4 1 1;5 5 4 1 1;56 4 1 1;5 7 4 1 1;6 1 5 1 1;6 2 5 1 1;6 3 5 1 1;6 4 5 1 1;6 5 5 1 1;6 6 5 1 1;6 7 4 1 1;7 1 6 1 1;7 2 6 1 1;7 3 6 1 1;7 4 6 1 1;7 5 6 1 1;7 6 6 1 1;7 7 6 1 1]; c=addrule(c,rulelist3);figure(2);gensurf(c)e=0;de=0;ie=0;x=[0;0];ke=30;kd=20;kup=5;kui=0.3;kud=0.7;for k=1:Ne1=ke*e;de1=kd*de;if e1>=5e1=5;elseif e1<=-5e1=-5;endif de1>=5de1=5;elseif de1<=-5de1=-5;endin=[e1 de1];u1=evalfis(in,a);u2=evalfis(in,b);u3=evalfis(in,c);kp=u1/10+kup;ki=u2/10+kui;kd=u3/10+kud;u=-(kp*e+ki*ie+kd*de);k0=a1*x+b1*u;k1=a1*(x+h*k0/2)+b1*u;k2=a1*(x+h*k1/2)+b1*u;k3=a1*(x+h*k2)+b1*u;x=x+(k0+2*k1+2*k2+k3)*h/6; y=c1*x+d*u;yy(1,k)=y;e1=e;e=y-R(1,k);de=(e-e1)/T;ie=ie+T*e;endkk=[1:N]*T;figure(1);plot(kk,R,'k',kk,yy(1,:),'r',kk,yy2(1,:),'g'); gtext('FSA-PID');gtext('PID');num=20;den=[1.6,4.4,1];[a1,b,c,d]=tf2ss(num,den);x=[0;0];T=0.01;h=T;N=1000;%PID CONTROLe=0;de=0;ie=0;kp=5;ki=1.3;kd=0.1;for k=1:Nuu(1,k)=-(kp*e+ki*de+kd*ie); u=uu(1,k);k0=a1*x+b*u;k1=a1*(x+h*k0/2)+b*u;k2=a1*(x+h*k1/2)+b*u;k3=a1*(x+h*k2)+b*u;x=x+(k0+2*k1+2*k2+k3)*h/6;y=c*x+d*u;t(1,k)=k*T;if k<=300R(1,k)=t(1,k)/3;elseif k<=700R(1,k)=1.0;elseif k<=1000R(1,k)=(10-t(1,k))/3;ende1=e;e=y-R(1,k);de=(e-e1)/T;ie=e*T+ie;yy1(1,k)=y;enda=newfis('simple');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]);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]);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]; r1=zeros(prod(size(rr)),3);k=1;for i=1:size(rr,1)for j=1:size(rr,2)r1(k,:)=[i,j,rr(i,j)];k=k+1;endend[r,s]=size(r1);r2=ones(r,2);rulelist=[r1,r2];a=addrule(a,rulelist);e=0;de=0;ke=40;kd=1.5;ku=1;for k=1:Ne1=ke*e;de1=kd*de;if e1>=6e1=6;elseif e1<=-6e1=-6;endif de1>=6de1=6;elseif de1<=-6de1=-6;endin=[e1 de1];uu(1,k)=ku*evalfis(in,a); u=uu(1,k);k0=a1*x+b*u;k1=a1*(x+h*k0/2)+b*u;k2=a1*(x+h*k1/2)+b*u;k3=a1*(x+h*k2)+b*u;x=x+(k0+2*k1+2*k2+k3)*h/6; y=c*x+d*u;t(1,k)=k*T;if k<=300R(1,k)=t(1,k)/3;elseif k<=700R(1,k)=1.0;elseif k<=1000R(1,k)=(10-t(1,k))/3;ende1=e;e=y-R(1,k);de=(e-e1)/T;yy(1,k)=y;endkk=[1:N]*T;figure(1);plot(kk,R,'k',kk,yy,'k',kk,yy1,'r'); gtext('FUZZY');gtext('n');gtext('PID');。

模糊控制介绍及Matlab模糊控制工具箱使用

模糊控制介绍及Matlab模糊控制工具箱使用

模糊控制介绍及Matlab模糊控制工具箱使用目录•一、模糊控制的产生•二、模糊逻辑的理论基础•三、模糊控制Matlab工具箱示例•四、模糊控制的基本思想•五、模糊控制器的基本结构•六、模糊控制器的优缺点一、模糊控制的产生在传统控制领域,对于明确系统有强而有力的控制能力,即被控系统的动态信息越详细,越能达到精确控制的目的。

然而,在多变量、非线性的复杂系统中,往往难以完全描述系统的动态信息。

此时,传统的控制理论则显得无能为力,而有经验的专家或工作人员仍能根据长期实践观察和操作经验进行有效控制。

据此引申,是否可将人的操作经验总结为若干条控制规则以避开复杂模型的建立过程?模糊控制最重要的特征是反应人们的经验及推理规则,而这些经验和推理规则是通过自然语言来表达的,如“水温上升过快,则关小燃气阀”。

在控制系统初期,由于对系统缺乏了解,控制效果可能不好,但若干次探索后终能实现预期的控制,这就是经验对模糊控制系统的重要性。

由于模糊控制实质上是用计算机去执行人的控制策略,因而可以避开复杂模型的建立,对人们关于某个控制问题的成功和失败经验加工,总结出知识,从中提炼出控制规则,实现复杂系统的控制。

PS:“模糊”是人类感知万物,获取知识,思维推理,决策实施的重要特征。

“模糊”比“清晰”所拥有的信息量更大,更符合客观世界。

二、模糊逻辑的理论基础模糊逻辑是指模仿人脑不确定性的概念判断和推理思维,对于定性的知识和经验,借助隶属度概念、模糊集合,来处理模糊关系。

模糊逻辑实质上是要对模糊性对象进行精确描述和处理。

模糊逻辑的目的是将一个输入空间映射到一个输出空间,主要要靠一系列的if-then规则。

这些规则包含变量和描述这些变量的形容词,被平行评估,因此它们的顺序不重要。

在进行模糊推理之前,先要定义好输入和输出变量以及描述它们的形容词。

模糊推理的流程如下图所示。

模糊推理流程2.1、模糊集合普通情况下,元素a属于集合A(1)或不属于集合A(0),如下图所示,星期一和星期三都是工作日,而苹果和星星则不是。

Matlab-的-Fuzzy-工具箱实现模糊控制(rulelist的确定)

Matlab-的-Fuzzy-工具箱实现模糊控制(rulelist的确定)

引用如何在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下的仿真工作仅仅用于仿真目的,如果实际产品设计能继承仿真的工作成果,将事半功倍。

Matlab 的 Fuzzy 工具箱实现模糊控制(rulelist的确定)

Matlab 的 Fuzzy 工具箱实现模糊控制(rulelist的确定)

引用如何在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下的仿真工作仅仅用于仿真目的,如果实际产品设计能继承仿真的工作成果,将事半功倍。

Matlab模糊控制_2

Matlab模糊控制_2

(2)编辑(Edit)菜单 编辑菜单的功能包括: Add input-添加输入语言变量; Add output-添加输出语言变量; Remove variable-删除语言变量; Undo-恢复。 (3)视图(View)菜单 视图菜单的功能包括: Edit membership functions-打开隶属度函数编辑器; Edit FIS Properties-编辑模糊推理系统的特性; Edit Rules-打开模糊规则编辑器; View Rules-打开模糊规则观察器; View Surface-打开模糊系统输入、输出特性观察器。
3. 使用GUI工具建立FIS系统 3.1 引言
Matlab的模糊逻辑工具箱提供了一系列函数,可以帮助我们 在短时间内完成一个模糊控制系统的设计。同时,也提供了一 个强有力的图形用户界面(GUI),使得我们设计一个模糊控制系 统变得更轻松、容易。 这里结合一个有关小费的例子,我们使用模糊逻辑工具箱提 供的图形用户界面(GUI)来建立它。虽然完全使用模糊逻辑工具 箱的命令行方式也能建立它,一般情况下,使用图形化方法建 立一个系统更容易。在模糊逻辑工具箱中有5个基本工具箱GUI 工具用于建立、编辑和观察模糊推理系统(FIS),它们分别是模 糊推理系统(或FIS)编辑器、隶属度函数编辑器、规则编辑器、 规则观察器和曲面观察器。这些GUI工具之间是动态链接的, 使用它们中的任意一个对FIS的修改将影响任何其它已打开的 GUI中的显示结果。
在FIS编辑器的菜单部分主要提供了如下功能: (1) 文件(File)菜单 文件菜单的主要功能包括: New Mamdani FIS-新建Mamdani型模糊推理系统; New Sugeno FIS-新建Sugeno型模糊推理系统; Open FIS From disk-从磁盘打开一个模糊推理系统文件; Save to disk-将当前的模糊推理系统保存到磁盘文件中; Save to disk as-将当前的模糊推理系统另存为一个文件; Open FIS From workspace-从工作空间加载模糊推理系统; Save to workspace-将当前的模糊推理系统保存到工作空 间中; Save to workspace as-将当前的模糊推理系统另存到工作 空间的某一个FIS矩阵中; Print-打印模糊推理系统的信息; Close window-下面定义与每个变量相关的隶属度函数,为此打开隶属度函 数编辑器。我们可以用下列三种方法之一打开隶属度函数编辑 器。 1) 打开Edit下拉式菜单并选择 Membership Functions… 2) 双击相应变量的图标; 3) 在命令行键入mfedit。 隶属度函数编辑器窗口如下页图所示,图中标注处的含义如 下: ① 表示这些菜单项允许你使用5个基本GUI工具中的任何一个 保存、打开或编辑模糊系统。 ② 表示这些文本域显示当前变量的名字和类型。 ③ 表示此编辑域让你设置当前变量的取值范围。 ④ 表示此编辑域让你设置当前图形的显示范围。 ⑤ 表示此状态行描述了最近的当前操作。

Matlab模糊工具箱的使用

Matlab模糊工具箱的使用

模糊控制由于不依赖对象的数学模型而受到广泛的重视,计算机仿真是研究模糊控制系统的重要手段之一。

由Math Works公司推出的Matlab软件,为控制系统的计算机仿真提供了强有力的工具,特别是在Matlab4.2以后的版本中推出的模糊工具箱(Fuzzy Toolbox),为仿真模糊控制系统提供了很大的方便。

由于这样的模块都是由相关领域的著名学者开发的,所以其可信度都是很高的,仿真结果是可靠的。

在Simulink环境下对控制系统进行建模是非常方便的,而模糊控制系统与常见控制系统的结构基本相同,仅仅是控制器不同。

所以,对模糊控制系统的建模关键是对模糊控制器的建模。

Matlab软件提供了一个模糊推理系统(FIS)编辑器,只要在Matlab命令窗口键入fuzzy命令就可进入模糊控制器编辑环境。

一、模糊推理系统编辑器(Fuzzy)模糊推理系统编辑器用于设计和显示模糊推理系统的一些基本信息,如推理系统的名称,输入、输出变量的个数与名称,模糊推理系统的类型、解模糊方法等。

其中模糊推理系统可以采用Mandani或Sugeuo两种类型,解模糊方法有最大隶属度法、重心法、加权平均等。

打开模糊推理系统编辑器,在MATLAB的命令窗(command window)内键入:“fuzzy”命令,弹出模糊推理系统编辑器界面,如下图所示。

首先确定输入、输出变量的个数,在Edit菜单中,选Add variableÆinput,加入新的输入input;选Add variableÆoutput,加入新的输出output。

修改名称二、隶属度函数编辑器(Mfedit)该编辑器提供一个友好的人机图形交互环境,用来设计和修改模糊推理系中各语言变量对应的隶属度函数的相关参数,如隶属度函数的形状、范围、论域大小等,系统提供的隶属度函数有三角、梯形、高斯形、钟形等,也可用户自行定义。

双击任一个输入或输出模块,进入成员函数编辑界面。

4步教你学会使用matlab模糊控制工具箱

4步教你学会使用matlab模糊控制工具箱

4步教你学会使用matlab模糊控制工具箱Matlab模糊控制工具箱为模糊控制器的设计提供了一种非常便捷的途径,通过它我们不需要进行复杂的模糊化、模糊推理与反模糊化运算,只需要设定相应参数,就可以很快得到我们所需要的控制器,而且修改也非常方便。

下面将根据模糊控制器设计步骤,一步步利用Matlab工具箱设计模糊控制器。

首先我们在Matlab的命令窗口〔command window〕中输入fuzzy,回车就会出来这样一个窗口。

下面我们都是在这样一个窗口中进行模糊控制器的设计。

1.确定模糊控制器结构:即根据具体的系统确定输入、输出量。

这里我们可以选取标准的二维控制结构,即输入为误差e和误差变化ec,输出为控制量u。

注意这里的变量还都是精确量。

相应的模糊量为E,EC和U,我们可以选择增加输入(Add Variable)来实现双入单出控制结构。

2.输入输出变量的模糊化:即把输入输出的精确量转化为对应语言变量的模糊集合。

首先我们要确定描述输入输出变量语言值的模糊子集,如{NB,NM,NS,ZO,PS,PM,PB},并设置输入输出变量的论域,例如我们可以设置误差E〔此时为模糊量〕、误差变化EC、控制量U的论域均为{-3,-2,-1,0,1,2,3};然后我们为模糊语言变量选取相应的隶属度函数。

在模糊控制工具箱中,我们在Member Function Edit中即可完成这些步骤。

首先我们翻开Member Function Edit窗口.然后分别对输入输出变量定义论域范围,添加隶属函数,以E为例,设置论域范围为[-3 3],添加隶属函数的个数为7.然后根据设计要求分别对这些隶属函数进行修改,包括对应的语言变量,隶属函数类型。

3.模糊推理决策算法设计:即根据模糊控制规那么进行模糊推理,并决策出模糊输出量。

首先要确定模糊规那么,即专家经验。

对于我们这个二维控制结构以与相应的输入模糊集,我们可以制定49条模糊控制规那么〔一般来说,这些规那么都是现成的,很多教科书上都有〕,如图。

模糊控制在matlab中的实例

模糊控制在matlab中的实例

模糊控制在matlab中的实例模糊控制是一种应用广泛的控制方法,它可以处理那些难以精确建立数学模型的系统。

在Matlab中,使用Fuzzy Logic Toolbox工具箱可以方便地实现模糊控制系统。

以下是一个简单的模糊控制器示例,控制一个小车的速度和方向,使得其能够沿着预设的轨迹行驶。

1. 首先,定义输入和输出变量。

这里我们需要控制小车的速度和转向角度。

代码如下:```speed = newfis("speed");speed = addvar(speed,"input","distance",[0 10]);speed = addmf(speed,"input",1,"slow","trimf",[0 0 5]);speed = addmf(speed,"input",1,"fast","trimf",[5 10 10]); speed = addvar(speed,"output","velocity",[-10 10]);speed = addmf(speed,"output",1,"reverse","trimf",[-10-10 -2]);speed = addmf(speed,"output",1,"stop","trimf",[-3 0 3]); speed = addmf(speed,"output",1,"forward","trimf",[2 10 10]);angle = newfis("angle");angle = addvar(angle,"input","position",[-1 1]);angle = addmf(angle,"input",1,"left","trimf",[-1 -1 0]);angle = addmf(angle,"input",1,"right","trimf",[0 1 1]); angle = addvar(angle,"output","steering",[-1 1]);angle = addmf(angle,"output",1,"hard_left","trimf",[-1 -1 -0.5]);angle = addmf(angle,"output",1,"soft_left","trimf",[-1 -0.5 0]);angle = addmf(angle,"output",1,"straight","trimf",[-0.5 0.5 0.5]);angle = addmf(angle,"output",1,"soft_right","trimf",[0 0.5 1]);angle = addmf(angle,"output",1,"hard_right","trimf",[0.5 1 1]);```2. 然后,定义模糊规则。

如何在MATLAB中进行模糊控制

如何在MATLAB中进行模糊控制

如何在MATLAB中进行模糊控制模糊控制是一种基于模糊逻辑理论的控制方法,它通过建立模糊规则、模糊集合和模糊推理等步骤,实现对复杂系统的控制。

在MATLAB中,我们可以利用模糊控制工具箱进行模糊控制设计和仿真。

本文将从模糊控制的基本原理、MATLAB中的模糊控制工具箱的使用以及实例应用等方面进行讨论。

一、模糊控制基本原理模糊控制的基本原理是将人类的经验和模糊逻辑理论应用于系统控制中。

它不需要准确的数学模型,而是通过模糊集合、模糊规则和模糊推理等方法来描述和制定控制策略。

下面我们将简要介绍一下模糊控制中的基本概念。

1. 模糊集合模糊集合是一种可以容纳不确定性的集合。

与传统集合论不同,模糊集合中的元素可以部分地、模糊地属于该集合。

在模糊控制中,我们通常使用隶属度函数来描述元素对模糊集合的隶属程度。

2. 模糊规则模糊规则是一种将输入和输出间的关系表示为一组语义规则的方法。

它基于专家的经验和知识,将输入变量的模糊集合与输出变量的模糊集合之间建立映射关系。

模糊规则通常采用IF-THEN的形式表示,例如:“IF 温度冷 AND 湿度高 THEN 空调制冷”。

3. 模糊推理模糊推理是基于模糊规则进行推理和决策的过程。

它通过对模糊集合的隶属度进行运算,计算出输出变量的模糊集合。

常用的推理方法有模糊关联、模糊交集和模糊合取等。

二、MATLAB中的模糊控制工具箱MATLAB提供了一套完整的模糊控制工具箱,包括模糊集合的创建、模糊规则的定义、模糊推理和模糊控制系统的仿真等功能。

下面我们将逐步介绍这些功能的使用方法。

1. 模糊集合的创建在MATLAB中,我们可以使用fuzzymf函数来创建模糊集合的隶属度函数。

该函数可以根据用户指定的类型和参数生成不同形状的隶属度函数。

常用的隶属度函数有三角型函数、梯形函数和高斯型函数等。

2. 模糊规则的定义在MATLAB中,我们可以使用addrule函数来定义模糊规则。

该函数将用户指定的输入变量、模糊集合和输出变量、模糊集合之间的关系转化为模糊规则,并添加到模糊推理系统中。

模糊控制的MATLAB实现具体过程(强势吐血推荐)

模糊控制的MATLAB实现具体过程(强势吐血推荐)

1 2,2(1):1
6、计算模糊推理输出结果函数evalfis 格式:y=evalfis(U,FIS)
说明:参数U是输入数据,FIS是模糊推理矩阵。 U的每一行是一个特定的输入向量,Y的每一行是 一个特定的输出向量。
如果输入U是M*N矩阵,则系统是N输入的, 返回的Y是M*L矩阵,L是系统的输出的数目。
min prod (乘积法)
3. 输出的合成计算Aggregation(模糊规则综合采用的方法) max prober(a,b)=a+b-ab Aggregation sum(求和法) prober (概率法)
4. 逆模糊化计算(Defuzzification)
centroid(重心法) bisector(面积平分法) lom(最大隶属度函数中的取最大值法) som(最大隶属度函数中的取最小值法)
mom(平均最大隶属度法)
⑵ 在命令窗口键 入mfedit可激活隶 属度函数编辑器
MATLAB的FIS结构和存储 1、FIS(模糊推理系统)结构 模糊推理系统是以一种FIS的结构来表示和存储的 ①GUI工具 访问方法 ②函数 ③结构名.成员名 2、存储( .fis文件) 访问 readfis-读 writefis-写
命令函数
1、隶属度函数 ①函数trimf(表示triangular membership function) 功能:建立三角形隶属度函数。 格式:y=trimf(x,[a b c])
其中:参数x指定变量论域范围,参数a,b和c指定三角形 函数的形状,该函数在b点处取最大值1,a,c点为0。 例:建立三角形隶属度函数并绘制曲线。
centroid(重心法:系统默认) lom(最大隶属度函数中的取最大值法) bisector(面积平分法) mom(平均最大隶属度法) som(最大隶属度函数中的取最小值法)

方法二用MATLAB的模糊逻辑工具箱实现

方法二用MATLAB的模糊逻辑工具箱实现

方法二:用MATLAB 的模糊逻辑工具箱(Fuzzy toolbox)实现(陈老师整理)一、模糊逻辑推理系统的总体特征模糊控制由于不依赖对象的数学模型而受到广泛的重视,计算机仿真是研究模糊控制系统的重要手段之一。

由Math Works 公司推出的Matlab 软件,为控制系统的计算机仿真提供了强有力的工具,特别是在Matlab4.2 以后的版本中推出的模糊工具箱(Fuzzy Toolbox) ,为仿真模糊控制系统提供了很大的方便。

由于这样的模块都是由相关领域的著名学者开发的,所以其可信度都是很高的,仿真结果是可靠的。

在Simulink 环境下对PID 控制系统进行建模是非常方便的,而模糊控制系统与PID 控制系统的结构基本相同,仅仅是控制器不同。

所以,对模糊控制系统的建模关键是对模糊控制器的建模。

Matlab 软件提供了一个模糊推理系统( FIS)编辑器,只要在Matlab 命令窗口键入Fuzzy 就可进入模糊控制器编辑环境。

二、Matlab模糊逻辑工具箱仿真1. 模糊推理系统编辑器( Fuzzy )模糊推理系统编辑器用于设计和显示模糊推理系统的一些基本信息,如推理系统的名称,输入、输出变量的个数与名称,模糊推理系统的类型、解模糊方法等。

其中模糊推理系统可以采用Mandani或Sugeuo两种类型,解模糊方法有最大隶属度法、重心法、加权平均等。

打开模糊推理系统编辑器,在MATLAB的命令窗 ( commandw indow)内键入:fuzzy 命令,弹出模糊推理系统编辑器界面,如下图所示。

因为我们用的是两个输入,所以在Edit 菜单中,选Add variable ⋯->input, 加入新的输入input, 如下图所示。

选择input(选中为红框), 在界面右边文字输入处键入相应的输入名称,例如, 温度输入用tmp-input,磁能输入用mag-input ,等。

2. 隶属度函数编辑器(Mfedit)该编辑器提供一个友好的人机图形交互环境,用来设计和修改模糊推理系中各语言变量对应的隶属度函数的相关参数,如隶属度函数的形状、范围、论域大小等,系统提供的隶属度函数有三角、梯形、高斯形、钟形等,也可用户自行定义。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

matlab模糊控制工具箱的使用
本学期选修了周川老师的智能控制及应用这门课程,大三时候曾上过周老师的英文版的控制工程基础这门课程,比较喜欢周老师上课的风格,智能控制这门课也收获不小,模糊控制是课程中讲到的第一个智能控制算法。

模糊不是真的模糊,模糊是为了精确。

模糊控制中涉及到一个隶属度的概念,通常我们认为一个事物属于一个概念与否是确定的,比如数字电路的0与1,但是实际情况或者人们的思维习惯却不是这样的。

比如规定18到30岁为青年,那么还差一天到18岁的人算不算青年呢?照规定看不算,但是如果我们加入概率的概念,比如说这个人90%属于青年人,可能更符合人们的思维习惯。

L.A.Zadeh在其《不相容原理》所述:“随着系统的复杂程度不断提高,人们对其精确而有意义地描述的能力不断的降低,以致在达到某一个阈值之后,系统的精确性和复杂性之间呈现出几乎是相互完全排斥的性质”。

我们通常所用的控制算法一般是建立在模型比较确定的情况下,而模糊控制不依赖于对象的模型就可以进行控制决策,而且对系统参数变化具有较强的适应性。

对于模糊控制的原理,我不是很清楚,也没有这个心情去搞清楚,感觉知道大概怎么用就可以了。

Matlab中集成了模糊控制工具箱,可以使用图像界面进行模糊控制器的设计,极大的简化了设计过程。

下面介绍利用模糊工具箱进行控制系统设计的过程。

在matlab的主窗口中输入fuzzy即可调出模糊工具箱界面,退出界面的时候会提示保存,保存格式为fis,如果我们将文件保存为njust.fis,那么下次使用这个文件的时候在主窗口中输入fuzzy njust即可。

模糊控制器的建立过程如下:(1)设定误差E、误差变化率EC和控制量U的论域为,一般为[-6 6]。

(2)设定E、EC、U的模糊集。

一般可设为{NB、NM、NS、ZO、PS、PM、PB}。

(3)设定隶属度函数。

有高斯型隶属度函数、三角型隶属度函数等。

(4)设定模糊控制规则。

常用的模糊控制规则如图1所示,当然可以根据特定的控制对象和要求进行相应的调整。

图1 常用模糊控制规则
图2 添加变量
点击Edit->Add Variable即可进行变量的添加,在右下方可以进行名称的修改,左下方是与或运算方式、去模糊化方式等的选择,一般可以使用默认方式即可。

图3 添加论域与隶属度函数
双击图2中左右两侧的矩形图像即可进行论域与隶属度函数编辑,点击Edit->Add MFs即可进行隶属度函数的添加,右下方可以选择隶属度函数类型,左下方可以修改论域以及显示范围。

图4 添加控制规则
双击图2中中间的矩形图像即可进行模糊控制规则的编辑,根据if e or(and) ec then u的形式进行添加规则,可以修改规则权重。

点击下方的Add rule和Delete rule即可进行规则添加和删除。

至此完成模糊控制器的搭建。

使用菜单栏中的View->Rules即可观察设计规则,如图5所示。

拖动输入变量中间的竖直线,可以看到控制量的变化情况。

图5 观察设计规则
使用菜单栏中的View->Surface即可观察输入变量输出变量的三维曲面,如图6所示。

图6 输入输出曲面
模糊控制系统的框图如图7所示,其中虚线内即为建立好的模糊控制器。

图8为在matlab 中建立的某模糊控制系统实例。

其中的fuzzy logic controller模块在simulink中的Fuzzy Logic Toolbox内,若是找不到的话可以使用搜索功能即可。

若我们保存的模糊控制器文件为njust.fis,那么双击图8中的模糊控制器模块,输入njust即可。

一般来说这个模糊控制器模块是两输入一输出的,所在输入前要添加一个向量组合工具mux。

图7 模糊控制系统结构框图
图8 matlab模糊控制系统实例
我们看到图7中有Ke、Kec和Ku三个权系数,查阅文献可知ke和kec对系统的动态性能影响较大,它们的大小意味着对输入误差和误差变化的不同加权程度,ke变大缩短上升时间,但是增大系统超调;kec变大减小系统超调,但是响应速率变慢。

输出比例因子ku也影响模糊控制系统的性能,ku过小,系统的动态响应过程变长,ku过大会导致系统震荡。

综合调整以上三个因子,获得所需要的控制性能。

当然它们有一定的计算方法,没有深入研究过,不过所谓的计算方法好像也是存在问题的。

这里特别要注意的是饱和模块的上下限就是我们设定的论域范围。

最后进行模糊控制系统仿真的时候有两点需要注意:一是仿真算法的设置。

如果使用默认的算法,会发现速度很慢,几乎没有进度,需要在Simulation->Configuration Parameters中对取消过零点的限制。

如图9所示。

图9 仿真算法的修改
另外需要注意的一点是模糊控制器的加载。

看到论坛上很多人问为什么会报错,很大程度上原因是因为模糊控制文件fis没有加载到空间中。

在主窗口中调出所保存的fis文件,进行File->Export->To Workspace即可。

当然了,也可以使用文件形式进行模糊控制器的设计,这里不讨论了,很多参考书上都有相应的函数介绍或者程序。

2010年8月18日下午njust 电工楼204房间
参考文献
[1] 刘金琨.智能控制[M].北京: 电子工业出版社,2009.
[2] 李国勇.智能控制及其Matlab实现[M].北京: 电子工业出版社,2005.
[3] 张国良,曾静,柯熙政等.模糊控制及其Matlab应用[M].西安: 西安交通大学出版社,2002.。

相关文档
最新文档