模糊控制在MATLAB中的实现

合集下载

用 Matlab 的 Fuzzy 工具箱实现模糊控制

用 Matlab 的 Fuzzy 工具箱实现模糊控制

用 Matlab 的 Fuzzy 工具箱实现模糊控制Matlab, Fuzzy, 模糊控制, 工具箱用Matlab 中的Fuzzy 工具箱做一个简单的模糊控制,流程如下:1、创建一个FIS (Fuzzy Inference System ) 对象,a = newfis(fisName,fisType,andMethod,orMethod,impMethod, aggMethod,defuzzMethod)一般只用提供第一个参数即可,后面均用默认值。

2、增加模糊语言变量a = addvar(a,'varType','varName',varBounds)模糊变量有两类:input 和output。

在每增加模糊变量,都会按顺序分配一个index,后面要通过该index 来使用该变量。

3、增加模糊语言名称,即模糊集合。

a = addmf(a,'varType',varIndex,'mfName','mfType',mfParams)每个模糊语言名称从属于一个模糊语言。

Fuzzy 工具箱中没有找到离散模糊集合的隶属度表示方法,暂且用插值后的连续函数代替。

参数mfType 即隶属度函数(Membership Functions),它可以是Gaussmf、trimf、trapmf等,也可以是自定义的函数。

每一个语言名称也会有一个index,按加入的先后顺序得到,从 1 开始。

4、增加控制规则,即模糊推理的规则。

a = addrule(a,ruleList)其中ruleList 是一个矩阵,每一行为一条规则,他们之间是ALSO 的关系。

假定该FIS 有N 个输入和M 个输出,则每行有N+M+2 个元素,前N 个数分别表示N 个输入变量的某一个语言名称的index,没有的话用0 表示,后面的M 个数也类似,最后两个分别表示该条规则的权重和个条件的关系,1 表示AND,2 表示OR。

模糊控制查询表的MATLAB实现

模糊控制查询表的MATLAB实现

p de c ies n er s rb i deai h way o tl e t h w t get f z y -c tol qu y a e y he o a u z onr — er tbl b t MATL pr AB ogr amm ig. s n Thi cor l a e to —tbl m a be tr d n h c y so e i t e ompue t wi t f m of tbl W hih t he or h a a e. c ca i n mpr e o gr a l te et y h ope ain e f en ySuc a PL r t al fi o ci c h s C co tol rec. o e n r l ,t wh s me o y s v y il a o e m r i er lt te,nd n—l ras nig an s ral e i ne e o n c alo be e i d. z Ke wOrs: z y onr l y d f z c to qu r a eM AT AB. c to,n—l e e o ig u ey t bl. L PI onr l o i ras nn n
级 保持 为 卜6 一 , 4 一 ,2 一 , , ,, , , ,} ,5 一 ,3 一 , 10 12 3 4 5 6。
输 入 变 量偏 差 e和偏 差 变化 率 e c和输 出变 量 A P A i K 、 T 的
模 糊 语 言 值 均 为 { B, N NM, S, O,S, M, B 。 为 了 编 程 方 N Z P P P }
值 , 为 12, 4 7 即 , 3,… 。
表 1 用 数 字 语 言 值表 示 输 入 变 量 × 1及 x 2的 隶 属度 矢 量 表

模糊控制系统及其MATLAB实现

模糊控制系统及其MATLAB实现

1.模糊控制的相关理论和概念1.1 模糊控制的发展模糊控制理论是在美国加州伯克利大学的L. A.Zadeh教授于1965年建立的模糊集合论的数学基础上发展起来的。

之后的几年间Zadeh又提出了模糊算法、模糊决策、模糊排序、语言变量和模糊IF-THEN规则等理论,为模糊理论的发展奠定了基础。

1975年, Mamdan和Assilian创立了模糊控制器的基本框架,并用于控制蒸汽机。

1978年,Holmblad和Ostergaard为整个工业过程开发出了第一个模糊控制器——模糊水泥窑控制器。

20世纪80年代,模糊控制开始在工业中得到比较广泛的应用,日本仙台地铁模糊控制系统的成功应用引起了模糊领域的一场巨变。

到20世纪90年代初,市场上已经出现了大量的模糊消费产品。

近30 年来, 因其不依赖于控制对象的数学模型、鲁棒性好、简单实用等优点, 模糊控制已广泛地应用到图像识别、语言处理、自动控制、故障诊断、信息检索、地震研究、环境预测、楼宇自动化等学科和领域, 并且渗透到社会科学和自然科学许多分支中去, 在理论和实际运用上都取得了引人注目的成果。

1.2 模糊控制的一些相关概念用隶属度法来定义论域U中的集合A,引入了集合A的0-1隶属度函数,用A(x) 表示,它满足:A(x)用0-1之间的数来表示x属于集合A的程度,集合A等价与它的隶属度函数A(x)模糊系统是一种基于知识或基于规则的系统。

它的核心就是由所谓的IF-THEN规则所组成的知识库。

一个模糊的IF-THEN规则就是一个用连续隶属度函数对所描述的某些句子所做的IF-THEN形式的陈述。

例如:如果一辆汽车的速度快,则施加给油门的力较小。

这里的“快”和“较小”分别用隶属度函数加以描述。

模糊系统就是通过组合IF-THEN规则构成的。

构造一个模糊系统的出发点就是要得到一组来自于专家或基于该领域知识的模糊IF-THEN规则,然后将这些规则组合到单一系统中。

不同的模糊系统可采用不用的组合原则。

模糊控制在matlab中的实例

模糊控制在matlab中的实例

模糊控制在matlab中的实例
MATLAB 是一种广泛使用的数学软件,可以用于模糊控制的研究和应用。

以下是一些在 MATLAB 中的模糊控制实例:
1. 模糊控制器的设计:可以通过建立模糊控制器的数学模型,使用 MATLAB 进行建模和优化,以实现精确的控制效果。

2. 模糊控制应用于电动机控制:可以使用 MATLAB 对电动机进行模糊控制,以实现精确的速度和位置控制。

3. 模糊控制在工业过程控制中的应用:在工业过程中,可以使用模糊控制来优化生产过程,例如温度控制、流量控制等。

4. 模糊控制在交通运输中的应用:在交通运输中,可以使用模糊控制来优化车辆的行驶轨迹和速度,以提高交通运输的安全性和效率。

5. 模糊控制在机器人控制中的应用:可以使用模糊控制来优化机器人的运动和操作,以实现更准确和高效的操作。

这些实例只是模糊控制应用的一部分,MATLAB 作为一种强大的数学软件,可以用于各种模糊控制的研究和应用。

如何利用Matlab进行模糊控制

如何利用Matlab进行模糊控制

如何利用Matlab进行模糊控制引言近年来,随着科技的不断发展,模糊控制作为一种重要的控制方法,在各个领域得到了广泛的应用。

而Matlab作为一款功能强大的数学工具软件,对于模糊控制的实现提供了便捷的支持。

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

一、模糊控制简介模糊控制是一种基于模糊逻辑的控制方法,它通过将模糊规则应用于控制系统,使其能够对不确定性和模糊信息进行处理。

与传统的精确控制方法相比,模糊控制更适用于处理复杂系统或无法精确建模的系统。

二、Matlab中的模糊控制工具箱Matlab提供了专门的模糊控制工具箱,可以方便地实现模糊控制系统的建模、仿真和优化等操作。

在Matlab的模糊控制工具箱中,主要包括两个核心部分:模糊推理引擎和模糊控制器。

1. 模糊推理引擎模糊推理引擎是模糊控制系统的核心部分,它负责根据输入和模糊规则,对系统进行推理和输出控制量。

在Matlab中,可以使用命令"newfis"来创建一个新的模糊控制系统,然后通过定义输入和输出变量、设定隶属函数和模糊规则等步骤,来构建一个完整的模糊控制系统。

2. 模糊控制器模糊控制器是模糊控制系统的具体实现,它将模糊推理引擎与输入输出之间的映射关系结合起来。

在Matlab中,可以使用命令"newfis"创建一个新的模糊控制系统,然后使用"addInput"和"addOutput"来添加输入和输出变量,最后通过设定隶属函数和模糊规则等步骤,来实现模糊控制器的搭建。

三、模糊控制的实际应用模糊控制在实际应用中有着广泛的应用领域,例如机器人控制、汽车导航、电力系统等。

下面将以一个模拟小车控制的实例来介绍如何利用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 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实现具体过程(强势吐血推荐)

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

plot(a,’input’,1)
注意:对于每个语言变量的隶属度函数按该函数被添加的顺 序编号,编号从1开始,依次递增。
3、FIS系统相关操作
① 函数newfis
功能:创建并返回一个新的模糊推理系统。
格式:a=newfis(‘fisName’) ②函数readfis 功能:从磁盘中读出并返回模糊推理系统结构变量。 格式:Fismat=readfis(‘filename’) 说明:打开一个由filename指定的数据文件(.fis),并将 其加载到当前的工作空间(Workspace)中的变量Fismat中。
例:fis=readfis(‘tipper’);
out=evalfis([2 1; 4 9],fis) 输出结果:out=7.0169
19.6810
MATLAB模糊控制系统设计实例1
一、设计目的:了解用MATLAB模糊工具箱的图形界面可视化 工具实现模糊控制系统的方法。 二、系统设计要求: 1、输入变量:偏差e、偏差变化率de;输出变量:u 相应隶属度函数为:
②函数addmf
功能:向模糊推理系统的语言变量添加隶属度函数。
格式:a=addmf(a, varType, varIndex,mfName,mfType, mfParams)
说明:隶属度函数只能为模糊推理系统中已经存在的某 一语言变量的语言值添加隶属度函数。参数列表中,a为 模糊推理系统对应的矩阵变量名, varType指定语言变量 类型的字符串(如‘input’或‘output’); varIndex指定 语言变量编号的数字;mfName指定隶属度函数名称; mfType指定隶属度函数类型; mfParams指定隶属度函数 的参数。
③ 函数gaussmf 功能:建立高斯型隶属度函数。

模糊控制matlab

模糊控制matlab

模糊控制matlab模糊控制是一种基于模糊数学理论的控制方法,它可以有效地处理非线性系统和模糊系统的控制问题。

在模糊控制中,通过将输入、输出和中间变量用模糊集合表示,设计模糊逻辑规则以实现控制目标。

本文将介绍如何用Matlab实现模糊控制,并通过实例讲解其应用和效果。

1. 模糊集合的表示在Matlab中,我们可以使用fuzzy工具箱来构建和操纵模糊系统。

首先,我们需要定义输入和输出的模糊集合。

例如,如果我们要控制一个直线行驶的自动驾驶汽车,可以定义速度和方向作为输入,定义方向盘角度作为输出。

我们可以将速度和方向分别划分为缓慢、中等、快速三个模糊集合,将方向盘角度划分为左转、直行、右转三个模糊集合。

可以使用Matlab的fuzzy工具箱中的fuzzy集合函数实现:slow = fuzzy(fis,'input',[-10 -10 0 20]);gap = fuzzy(fis,'input',[0 20 60 80 100]);fast = fuzzy(fis,'input',[60 80 110 110]);其中,fis为模糊系统对象,输入和输出的模糊集合分别用fuzzy函数定义,分别用输入或输出、模糊集合变量名、模糊集合界限参数表示,如fuzzy(fis,'input',[-10 -10 0 20])表示定义一个输入模糊集合,变量名为slow,其界限参数为[-10 -10 0 20],即表示此模糊集合上下界是[-10,-10]和[0,20]。

2. 设计模糊控制规则在Matlab中,可以使用fuzzy工具箱的ruleviewer函数来设计模糊控制的规则库。

规则库由模糊条件和模糊结论构成,用if-then形式表示。

例如,定义类别均为slow和keep的输入,输出为类别均为left的控制操作的规则如下:rule1 = "if (slow is slow) and (keep is keep) then (left is left);";其中,slow和keep为输入的模糊变量名,left为输出的模糊变量名。

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

增加输入变量
输入mfedit或选择编辑隶属度函数菜单
输入服务的隶属度函数
输入mfedit或选择编辑隶属度函数菜单
输入食物的隶属度函数
输入mfedit,或选择编辑隶属度函数菜单
输出小费的隶属度函数
将修改保存到工作空间
输入ruleedit,或选择编辑模糊规则菜单
模糊规则: 1、如果服务差,食物差,则小费少; 2、如果服务好,则小费中等; 3、如果服务好和食物非常可口,则小费高。
输入的隶属度函数
•偏差的隶属度函数
•偏差变化的隶属度函数
输出的隶属度函数
△Kp,△Ki,△Kd
根据设计经验,得出改变PID参数△Kp,△Ki,△Kd的规律 当偏差较大时, △Kp=较大(使系统响应加快), Kd=零或较小 Ki=0(避免过大的超调) 当偏差中等时, △Kp=较小(使系统响应具有较小的超调), Kd=适当(对系统影响较大) Ki=适当 当偏差较小时, △Kp=较大(使系统具有良好的稳态性能), Kd=适当(避免在平衡点附近振荡) Ki=较大(使系统具有良好的稳态性能),
1
-0.1
0.1
0
2
用surfview菜单命令看模糊控制器的输出量
整定出的△Kp,△Ki,△Kd代入PID算法的离散 差分公式
u k K p e k Ki e k K d e k e k 1 式中: ek e k u k 1
将*fis文件导入Simulink模型中的步骤: 1、双击fuzzy contrller,给模糊控制器命名→OK 2、在matlab窗口中输入命令: 命名=readfis(‘变量名. fis’)
Scope 1
Scope 2
Scope 3
利用MATLAB提供的模糊逻辑工具箱函数
创建一个新的模糊推理系统(模糊控制器) 输入输出的量化等级都为7级 e、ec、 u ={-3,-2,-1,0,1,2,3} 各取7个语言值,可取:模糊子集:负大、负中、负 小、零、正小、正中、正大 e、ec的论域 =[-3,3] u的论域 =[-4.5, 4.5] 隶属度函数任意确定。
f2=1; a=addvar(a,'input','ec',[-3*f2,3*f2]); %添加 ec 的模糊语言变量 a=addmf(a,'input',2,'NB','zmf',[-3*f2,-1*f2]); a=addmf(a,'input',2,'NM','trimf',[-3*f2,-2*f2,0]); a=addmf(a,'input',2,'NS','trimf',[-3*f2,-1*f2,1*f2]); a=addmf(a,'input',2,'Z','trimf',[-2*f2,0,2*f2]); a=addmf(a,'input',2,'PS','trimf',[-1*f2,1*f2,3*f2]); a=addmf(a,'input',2,'PM','trimf',[0,2*f2,3*f2]); a=addmf(a,'input',2,'PB','smf',[1*f2,3*f2]);
rulelist=[1 1 1 1 1; 1 2 1 1 1; 1 3 1 1 1; 1 4 2 1 1; 1 5 2 1 1; 1 6 3 1 1; 1 7 4 1 1; e 2 1 1 1 1; 2 2 2 1 1; 2 3 2 1 1; 2 4 2 1 1; 2 5 3 1 1; 2 6 4 1 1; 2 7 5 1 1;
根据以上规律得△Kp 、△Ki、△Kd的模糊规则表
3.模糊规则确定p65.推理方法的制定• 推理方法: 采用 ‘mamdani’方法 • 去模糊方法:加权平均法 • 选择隶属函数的形式:三角型
MATLAB
利用模糊逻辑工具箱的图形界面与Simulink动态仿真环境
模糊规则:
模糊规则:
-1
浏览模糊规则
模糊推理输入输出曲面视图,完成模糊推理系统的构建。
模糊推理系统的存储:
1、选择File→Export菜单将创建的模糊推理系统 存成*.fis文件。 2、选择File→Save to Workspace as …. 保存到matlab工作空间,输入变量名(英文命名)。
• 例:自适应模糊PID控制器
FIS Editor
隶属度函数编辑器(Mfedit) MF Editor
Rule Editor
模糊系统
Rule Viewer 模糊规则观察器(Ruleview)
Surface Viewer 输入输出面视图(Surfview)
例:小费问题
语言值: 食物:差、好;0—10
小费与服务及食物质量有关。
输出:小费,1个输出。
利用Simulink动态仿真
假定被控对象的传递函数为:
4.228 G2 s 0.5 s 2 1.64s 8.456


• 设计一模糊控制器 • 步骤
1. 2. 3. 4.
确定e,de和u的论域 e,de和u语言变量的选取 规则的制定 推理方法的确定
利用MATLAB的Toolbox工具 • 1. 根据系统实际情况,选择e,de和U (△Kp, △Ki,△Kd)的论域 e range : [-1 1] de range: [-0.1 0.1] u range: [0 2] • 2. e,de和u语言变量的选取 e 8个:NB,NM,NS,NZ,PZ,PS,PM,PB de 7个:NB,NM,NS,Z,PS,PM,PB U 7个:NB,NM,NS,Z,PS,PM,PB
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 Ulist=ceil(Ulist) %朝正无穷方向取整
figure(1); plotfis(a2); figure(2);plotmf(a,'input',1); figure(3);plotmf(a,'input',2); figure(4);plotmf(a,'output',1);
%编辑模糊规则
与“1” 或“0” 权系数 0-1
ec
u
a=addrule(a,rulelist); %添加模糊规则函数 showrule(a) %显示模糊规则函数 a1=setfis(a,'DefuzzMethod','centroid'); %设置模糊系统特性 writefis(a1,'fuzzf'); %保存模糊系统 a2=readfis('fuzzf'); %从磁盘读出保存的模糊系统 disp('fuzzy Controller table:e=[-3,+3],ec= [-3,+3]');%显示矩阵和数组内容 Ulist=zeros(7,7); %全零矩阵
输入:服务及食物质量,2个输入。
服务:差、好、很好;0—10 小费:少、中等、高;0—30 模糊规则: 1、如果服务差或食物差,则小费少; 2、如果服务中等,则小费中等; 3、如果服务好或食物非常可口,则小费高。
在matlab工作窗口输入:fuzzy+回车或fuzzy + 文件名(.fis) 进入图形界面编辑
• 模糊控制在MATLAB中的实现
仿真方法:
1、采用MATLAB语言根据具体的控制算法编程 2、利用MATLAB提供的模糊逻辑工具箱函数 复杂但灵活 简单
3、利用模糊逻辑工具箱的图形界面与Simulink动态仿真环境 直观
MATLAB工具箱提供的图形化工具:
模糊推理系统编辑器(Fuzzy)
模糊规则编辑器(Ruleedit)
f3=1.5; a=addvar(a,'output','u',[-3*f3,3*f3]); %添加 u 的模糊语言变量 a=addmf(a,'output',1,'NB','zmf',[-3*f3,-1*f3]); a=addmf(a,'output',1,'NM','trimf',[-3*f3,-2*f3,0]); a=addmf(a,'output',1,'NS','trimf',[-3*f3,-1*f3,1*f3]); a=addmf(a,'output',1,'Z','trimf',[-2*f3,0,2*f3]); a=addmf(a,'output',1,'PS','trimf',[-1*f3,1*f3,3*f3]); a=addmf(a,'output',1,'PM','trimf',[0,2*f3,3*f3]); a=addmf(a,'output',1,'PB','smf',[1*f3,3*f3]);
%模糊控制器设计 a=newfis('fuzzf'); %创建新的模糊推理系统 f1=1; a=addvar(a,'input','e',[-3*f1,3*f1]); %添加 e 的模糊语言变量 a=addmf(a,'input',1,'NB','zmf',[-3*f1,-1*f1]); %添加 e 的模糊语言变量的隶属度函数(z型) a=addmf(a,'input',1,'NM','trimf',[-3*f1,-2*f1,0]); %隶属度函数为三角形 a=addmf(a,'input',1,'NS','trimf',[-3*f1,-1*f1,1*f1]); a=addmf(a,'input',1,'Z','trimf',[-2*f1,0,2*f1]); a=addmf(a,'input',1,'PS','trimf',[-1*f1,1*f1,3*f1]); a=addmf(a,'input',1,'PM','trimf',[0,2*f1,3*f1]); a=addmf(a,'input',1,'PB','smf',[1*f1,3*f1]);
相关文档
最新文档