1、模糊控制的模糊控制的matlab实现实现 本实验以本实验以Mtlab6.5为开发环境,基于模糊逻辑工具为开发环境,基于模糊逻辑工具箱箱(Fuzzy Logic Toolbox) 通过简单直观的例子,对模通过简单直观的例子,对模糊控制系统进行分析与研究。糊控制系统进行分析与研究。第第4章章4.1 认识实验认识实验1. anfisedit功能:打开功能:打开ANFIS编辑器的编辑器的GUI格式:格式: anfisedit(a) anfisedit(a) anfisedit说明:利用说明:利用anfisedit函数打开函数打开ANFIS编辑器的编辑器的GUI,从中可装入数据集合并训练从中可装入数据集
2、合并训练ANFIS。 利用利用anfisedit(a)可从磁盘中装入名为可从磁盘中装入名为a.fis的的FIS文件,并打开文件,并打开ANFIS编辑器。利用编辑器。利用anfisedit(a)可按同可按同样的方式打开样的方式打开FIS结构变量结构变量a。4.1.1 GUI(图形用户界面图形用户界面) 工具箱函数工具箱函数2. fuzzy功能:调用基本的功能:调用基本的FIS编辑器。编辑器。格式:格式: fuzzy fuzzy(fismat)说明:说明:FIS编辑器可让用户方便地创建或修改编辑器可让用户方便地创建或修改FIS(模模糊推理系统糊推理系统)的高级特性的高级特性3. mfedit功能:
3、隶属度函数编辑器功能:隶属度函数编辑器格式:格式: mfedit (a) mfedit (a) mfedit说明:说明: mfedit (a)可打开隶属度函数编辑器,其中可打开隶属度函数编辑器,其中包含文件包含文件a.fis的隶属度函数,通过编辑器可对其进行的隶属度函数,通过编辑器可对其进行修改。修改。 mfedit (a)可打开保存在工作空间变量可打开保存在工作空间变量a中的中的FIS结构。结构。 mfedit可打开隶属度函数编辑器。可打开隶属度函数编辑器。4. ruleedit功能:功能: ruleedit (a) ruleedit (a)说明:利用说明:利用ruleedit (a)可打开
4、规则编辑器,从中可可打开规则编辑器,从中可以查看或修改文件以查看或修改文件a.fis所对应的所对应的FIS结构中的规则。结构中的规则。 ruleedit (a)格式可用来打开在工作空间中已存在格式可用来打开在工作空间中已存在的名为的名为a的的FIS结构所对应的规则编辑器。结构所对应的规则编辑器。5. ruleview功能:规则观测器和模糊推理框图功能:规则观测器和模糊推理框图格式:格式: ruleview (a) ruleview (a)说明:利用说明:利用ruleview(a)可打开可打开a.fis规则状况的规则观规则状况的规则观测器,从中可对文件测器,从中可对文件a.fis所对应的所对应的
5、FIS结构画出模糊推结构画出模糊推理框图,并可显示整个框图。理框图,并可显示整个框图。 ruleview (a)格式可用来打开在工作空间中已存在格式可用来打开在工作空间中已存在的名为的名为a的的FIS结构所对应的规则观测器。利用可打开结构所对应的规则观测器。利用可打开ruleview规则观测器。规则观测器。6. surfview功能:输出曲面观测器功能:输出曲面观测器格式:格式: surfview (a) surfview (a)说明:利用说明:利用surfview (a)可打开输出曲面观测器,从可打开输出曲面观测器,从中可查看保存在文件中可查看保存在文件a.fis中的单输入或双输入中的单输入
6、或双输入FIS结结构的输出曲面。构的输出曲面。4.1.2 隶属度函数隶属度函数功能:高斯功能:高斯(Gaussian)型隶属度函数型隶属度函数格式:格式:y=gaussmf(x,sig c)说明:对称的高斯型函数取决于个参数说明:对称的高斯型函数取决于个参数(sig)和和c:gaussmf函数的参数以向量函数的参数以向量sig,c形式给出。形式给出。例:例:x = 0:0.1:10;y = gaussmf(x,2 5);plot(x,y);text(0.2,0.88,gaussmf);text(0.2,0.78,P = 2 5);222,cxecxf1. Gaussmf2. sigmf功能:功
7、能:Sigmoid型隶属度函数型隶属度函数格式:格式:y=sigmf(x,a c)说明:说明:Sigmoid型函数由参数型函数由参数a和和c确定:确定:例:例:x = 0:0.1:10;y = sigmf(x,2 4);plot(x,y);text(0.2,0.88,sigmf);text(0.2,0.78,P = 2 4);cxaecaxf11,00bcxcabaxc ,b,a,xfcxcxbbxaax3. trimf功能:三角形隶属度函数功能:三角形隶属度函数格式:格式:y = trimf(x,a b c)说明:三角函数曲线由个参数说明:三角函数曲线由个参数a、 b 、c确定:确定:参数参
8、数a和和c确定三角确定三角形的形的“脚脚”,而,而参数参数b确定三角形确定三角形的的“峰峰”例:例:x = 0:0.1:10;y = trimf(x,3 6 8);plot(x,y);text(0.2,0.88,trimf);text(0.2,0.78,P = 3 6 8);4.1.3 FIS数据结构管理函数数据结构管理函数功能:将隶属度函数添加到功能:将隶属度函数添加到FIS格式:格式:a=addmf(a,varType, varIndex,mfName,mfType,mfParams)addmf函数有个变量函数有个变量(1)a: 工作空间中的工作空间中的FIS结构变量名结构变量名(2)va
9、rType: 要添加的隶属度函数的变量类型要添加的隶属度函数的变量类型(3)varIndex: 要添加的隶属度函数的变量编号要添加的隶属度函数的变量编号(4)mfName: 新添加的隶属度函数名新添加的隶属度函数名(5)mfType: 新隶属度函数的类型新隶属度函数的类型(6)mfParams: 指定隶属度函数的参数向量指定隶属度函数的参数向量1. addmf例:例:a=newfis(Simple);a=addvar(a,input,e,-6,6);a=addmf(a,input,1,NL,trapmf,-6,-6,-5,-3);a=addmf(a,input,1,NS,trapmf,-5,-
10、3,-2,0);a=addmf(a,input,1,ZR,trapmf,-2,0,2)。2. addrule功能:在功能:在FIS中添加规则中添加规则格式:格式:a=addrule(a,ruleList)例:例:ruleList=1 1 1 1 1 ;1 2 2 1 1; a=addrule(a,ruleList);3. addvar功能:在功能:在FIS中添加变量中添加变量格式格式:a=addvar(a,varType,varBounds)例例:a=newfis(Simple); a=addvar(a,input,e,-6,6);功能:对隶属度函数进行反模糊化功能:对隶属度函数进行反模糊化格
11、式格式:out=defuzz(x,mf,type)说明说明:defuzz(x,mf,type)可得到输入为可得到输入为x时隶属度函数时隶属度函数 mf的反模糊值的反模糊值例例:x=-10:0.1:10; mf=trapmf(x,-10 -8 -4 7); xx=defuzz(x,mf,centroid)4. defuzz4.1.4 Simulink仿真模块仿真模块1. fuzblock功能:模糊逻辑控制器仿真模块功能:模糊逻辑控制器仿真模块格式:格式: fuzblock说明:此命令将打开说明:此命令将打开Simulink系统的模糊逻辑模块库,系统的模糊逻辑模块库, 里面含有有关模糊逻辑器件的演
12、示框图。里面含有有关模糊逻辑器件的演示框图。2. sffis功能:功能:Simulink中的模糊推理中的模糊推理S函数函数格式:格式: outputsffis(t,x,u,flag,fismat)说明:用此函数可得到一个由说明:用此函数可得到一个由Simulink使用的使用的MEX文件文件模糊推理系统的任务模糊推理系统的任务4.2 水箱水位控制实验水箱水位控制实验对测量数据进行模糊化对测量数据进行模糊化建立模糊控制规则表建立模糊控制规则表进行输出信息的模糊判决进行输出信息的模糊判决建立模糊推理系统,通常采用两类方法:建立模糊推理系统,通常采用两类方法:(1)利用利用Matlab命令行建立模糊推
13、理系统命令行建立模糊推理系统(2)利用利用GUI建立模糊推理系统建立模糊推理系统水箱水位模糊推理系统水箱水位模糊推理系统(FIS)的建立的建立水位模糊控制系统水位模糊控制系统 设定期望的水位,检测实际的水位,计算水位设定期望的水位,检测实际的水位,计算水位误差,由模糊控制器计算得到阀门控制量,即阀门误差,由模糊控制器计算得到阀门控制量,即阀门开度,从而控制阀门,完成水位的控制。开度,从而控制阀门,完成水位的控制。 取水位误差取水位误差e e和误差变化率和误差变化率ecec作为模糊控制器的作为模糊控制器的输入变量。其中:输入变量。其中:e=r-ye=r-y( (误差设定值测量值误差设定值测量值)
14、 )。选取误差选取误差e e的论域范围:的论域范围:-1-1 +1+1,个语言变量值,个语言变量值为:为:negative、zero、positive,它们的隶属度函数,它们的隶属度函数均取均取gaussmf;水位变化率;水位变化率ecec的论域也为:的论域也为:-0.10.1 +0.1+0.1,个语言变量值为:,个语言变量值为:negative、zero、positive,它们的隶属度函数均取,它们的隶属度函数均取gaussmf;确定输;确定输出变量数为个,名为出变量数为个,名为u u,其论域为,其论域为-1-1 +1+1,个,个语言变量值为语言变量值为close-fast、close-sl
15、ow、no-chang、open-slow、open-fast,隶属度函数选为隶属度函数选为trimf。规则分析:规则分析:根据水箱水位控制的实际经验,可得到如下控制规则:根据水箱水位控制的实际经验,可得到如下控制规则:(1) If e is negative then u is close-fast(2) If e is zero then u is no-chang(3) If e is positive then u is open-fast(4) If e is zero and ec is negative then u is open-slow(5) If e is zero an
16、d ec is positive then u is close-slow4.2.1 利用利用GUI建立建立FIS1. 进入进入FIS编辑器编辑器 在在Matlab的的Command Window窗口的提示下,键窗口的提示下,键入入fuzzy可打开可打开FIS编辑器,默认的文件名是编辑器,默认的文件名是Untitle,默认的系统是默认的系统是Mamdani型。型。 由于本例有个输入变量,因此需要添加个输由于本例有个输入变量,因此需要添加个输入变量,然后给输入、输出变量命名,再保存系统。入变量,然后给输入、输出变量命名,再保存系统。本例创建的系统命名为本例创建的系统命名为WatLevContro
17、l。2. 进入隶属度函数编辑器进入隶属度函数编辑器进入方法进入方法:(1)在在FIS编辑器中双击任意一个输入或输出变量编辑器中双击任意一个输入或输出变量的图框的图框(2)通过菜单通过菜单EditMembership Functions(3)在在Matlab的的Command Window窗口的提示下,窗口的提示下,键入键入mfedit(WatLevControl)编辑过程:编辑过程:u修改各变量的论域范围修改各变量的论域范围u编辑各个输入或输出变量的隶属度函数及各隶属度编辑各个输入或输出变量的隶属度函数及各隶属度函数对应的函数对应的Name、Type、Params。 系统默认每个变量有个隶属度
18、函数,均为系统默认每个变量有个隶属度函数,均为trimf,可根据需要进行删减。可根据需要进行删减。3. 进入规则编辑器进入规则编辑器进入方法:进入方法:(1)在在FIS编辑器中双击规则处理图框编辑器中双击规则处理图框(2)通过菜单通过菜单EditRules(3)在在Matlab的的Command Window窗口的提示下,窗口的提示下,键入键入ruleedit。4. 查看规则观测器查看规则观测器目的:查看模糊规则的推理情况。目的:查看模糊规则的推理情况。可以方便地观察规则情况以及调整不同的输入时可以方便地观察规则情况以及调整不同的输入时所对应的输出的情况。所对应的输出的情况。打开规则观测器的方
19、法:通过菜单打开规则观测器的方法:通过菜单ViewRule5. 查看曲面观测器查看曲面观测器目的:查看模糊规则的曲面输出情况。目的:查看模糊规则的曲面输出情况。打开曲面观测器的方法:通过菜单打开曲面观测器的方法:通过菜单ViewSurface4.2.2 利用利用Matlab命令行建立命令行建立FIS设所建的设所建的FIS结构为结构为wlcontrol,则命令行为则命令行为:1. 建立新的建立新的FIS2. 添加输入输出变量添加输入输出变量 本例的模糊推理系统有个输入变量本例的模糊推理系统有个输入变量e和和ec,个,个输出变量输出变量u,根据它们的论域要求,用,根据它们的论域要求,用add函数添
20、加三函数添加三个变量。个变量。3. 添加隶属函数添加隶属函数4. 设计并添加规则列表设计并添加规则列表5. 保存保存FIS结构结构 用用writefis函数可以将函数可以将Matlab工作空间中的工作空间中的FIS结构变量结构变量wlcontrol保存到磁盘文件中保存到磁盘文件中: writefis(wlcontrol) 此文件将以此文件将以.fis为缺省后缀名为缺省后缀名6. 可以利用下列函数对所建立的可以利用下列函数对所建立的FIS进行操作进行操作plotmf( (绘制隶属度函数绘制隶属度函数) )、surfview( (绘制系统输出曲面绘制系统输出曲面) )plotfis( (绘制绘制F
21、IS系统结构系统结构) )、evalfis( (计算计算FIS输出输出) )、getfis( (获取获取FIS结构的属性结构的属性) )、showfis( (显示显示FIS结构参数结构参数) )evalmf( (计算隶属度函数计算隶属度函数) )wlcontrol=addvar(wlcontrol,input,e,-1 1);wlcontrol=addvar(wlcontrol,input,ec,-0.1 0.1);wlcontrol=addvar(wlcontrol,output,u,-1 1);wlcontrol=addmf(wlcontrol,input,1,negative,gauss
22、mf,0.45 -1);wlcontrol=addmf(wlcontrol,input,1,zero,gaussmf,0.45 0);wlcontrol=addmf(wlcontrol,input,1,positive,gaussmf,0.45 1);wlcontrol=addmf(wlcontrol,input,2,negative,gaussmf,0.045 -0.1);wlcontrol=addmf(wlcontrol,input,2,zero,gaussmf,0.045 0);wlcontrol=addmf(wlcontrol,input,2,positive,gaussmf,0.04
23、5 0.1);wlcontrol=addmf(wlcontrol,output,1,close-fast,trimf,-1.5 -1 -0.5);wlcontrol=addmf(wlcontrol,output,1,close-slow,trimf,-1 -0.5 0);wlcontrol=addmf(wlcontrol,output,1,no-change,trimf,-0.5 0 0.5);wlcontrol=addmf(wlcontrol,output,1,open-slow,trimf,0 0.5 1);wlcontrol=addmf(wlcontrol,output,1,open-f
24、ast,trimf,0.5 1 1.5);rulelist=1 0 1 1 1;2 0 3 1 1;3 0 5 1 1;2 1 4 1 1;2 3 2 1 1;wlcontrol=addrule(wlcontrol,rulelist)writefis(wlcontrol);plotfis(wlcontrol)模模 糊糊 控控 制制 实实 验验1、已知控制对象的传递函数为、已知控制对象的传递函数为 0.5101seH ss 当输入为阶跃值当输入为阶跃值r30时,系统的初始值为零,分别设计时,系统的初始值为零,分别设计常规常规PID控制器和常规模糊控制器,用控制器和常规模糊控制器,用simulink搭建系统结构,搭建系统结构,对整个系统进行仿真,比较两种控制器的控制效果。对整个系统进行仿真,比较两种控制器的控制效果。2、用、用matlab语言编程方法,对二阶环节语言编程方法,对二阶环节 200.4141H sss 设计一个模糊控制器,当输入为单位阶跃函数时,使其设计一个模糊控制器,当输入为单位阶跃函数时,使其输出尽量跟随系统输入,对整个系统进行仿真。输出尽量跟随系统输入,对整个系统进行仿真。4.3 自编程序自编程序