《4步教你学会使用matlab模糊控制工具箱.docx》由会员分享,可在线阅读,更多相关《4步教你学会使用matlab模糊控制工具箱.docx(7页珍藏版)》请在优知文库上搜索。
1、4步教你学会运用matlab模糊限制工具箱Matlab模糊限制工具箱为模糊限制器的设计供应了一种特别便捷的途径,通过它我们不须要进行困难的模糊化、模糊推理及反模糊化运算,只须要设定相应参数,就可以很快得到我们所须要的限制器,而且修改也特别便利。卜.面将依据模糊限制器设计步骤,一步步利用MatIab工具箱设计模糊限制器。首先我们在Matlab的吩咐窗口(commandwindow)中输入fuzzy,回车就会出来这样一个窗口。下面我们都是在这样一个窗口中进行模糊限制器的设计。1 .确定模糊限制器结构:即依据详细的系统确定输入、输出量。这里我们可以选取标准的二维限制结构,即输入为误差e和误差改变ec
2、,输出为限制量u。留意这里的变量还都是精确量。相应的模糊量为E,EC和U,我们可以选择增加输入(AddVariable)来实现双入单出限制结构。2 .输入输出变量的模糊化:即把输入输出的精确量转化为对应语言变量的模糊口O首先我们要确定描述输入输出变量语言值的模糊子集,如NB,NM,NS,ZO,PS,PM,PB,并设置输入输出变量的论域,例如我们可以设置误差E(此时为模糊量)、误差改变EC、限制量U的论域均为-3,-2,-1,0,1,2,3;然后我们为模糊语言变量选取相应的隶属度函数。在模糊限制工具箱中,我们在MemberFunctionEdit中即可完成这些步骤。首先我们打开MenIberFu
3、nctionEdit窗口.FileEditUndoCtrl+ZAddVariable.RemoveSelectedVariableCtrl+XMembershipFunctions.Ctr1+2UZZylRules.Ctrl+3Wndal然后分别对输入输出变量定义论域范围,添加隶属函数,以E为例,设置论域范围为-33,添加隶属函数的个数为7.MFtypeFISVanablesMembershpfunctionpWsP,0tPint18?detectedvarwtE123456Close然后依据设计要求分别对这些隶属函数进行修改,包括对应的语言变量,隶属函数类型。3 .模糊推理决策算法设计:即依
4、据模糊限制规则进行模糊推理,并决策出模糊输出量。首先要确定模糊规则,即专家阅历。对于我们这个二维限制结构以及相应的输入模糊集,我们可以制定49条模糊限制规则(一般来说,这些规则都是现成的,许多教科书上都有),如图。制定完之后,会形成一个模糊限制规则矩阵,然后依据模糊输入量依据相应的模糊推理算法完成计算,并决策出模糊输出量。4 .对输出模糊量的解模糊:模糊限制器的输出量是一个模糊集合,通过反模糊化方法判决出一个准确的精确量,凡模糊化方法许多,我们这里选取重心法。Andmethodin二IOrmethodI1!max.Implicationm*13AggregationImaXJ1.)Defuzz
5、ificationIICemOid司5 .然后EXPOrttOdiS匕即可得到一个.fis文件,这就是你所设计的模糊限制器。xianfallMAT1.AB功能强大,许多同学用其做限制算法的仿真但是其中的fuzzylogiccontroller刚起先用经常简洁出错常见报错:1、MinMaxblocksdonotacceptbooleansignals.Theinputsignal(三)ofblockmkkzq1/Subsystem/Fuzzy1.ogicControllerwithRuleviewer/Fuzzy1.ogicController/FISWizard/Defuzzification
6、1/Max(COA)mustbeoneoftheMAT1.AB,uint8,uintl6z,uint32z,int8,z,intl6,int32,single,ordoubledatatypes2、Anerroroccurredwhilepropagatingdatatypebooleanfromblockmkkzq1/Subsystem/Fuzzy1.ogicControllerwithRuleviewer/Fuzzy1.ogicController/FISWizard/Defuzzification1/ZeroStrength(COA),zoutputportI0以下是解决方案:1、fis
7、编辑器(MAT1.AB的CommandWindoW中健入fuzzy打开)中,建立好规则后,file-export-toworkspace2、对于7.0版本,SimUlink模型窗口菜单中,Simulation-ConfigurationParameters-Implementlogicsignalsasbooleandata前面默认的勾选去掉3.而对于6.5及以前版本,则是在SIMU1.ATION-SIMU1.ATIONPARAMETERS-ADVANCED中将booleanlogicSignaIS选为off,剧烈举荐用这个用FlS(Mamdani)设计完模糊限制器之后,连接到限制系统中进行仿
8、真,每次总出现这两个错误:l)BlockerrorMax(coa):MinMaxblocksdonotaccept*boolean1signals.2)blockerrorZerostrength(coa):Anerroroccurredwhilepropagatingdatatype,boolean1fromblock*.,outport1解决方案:在SimUIinkParainCter中,找到advance选项卡,把第一二个选项设为Offomatlab/simulink模糊限制器应用实例前面我们已经利用模糊限制工具箱设计好了一个模糊限制器(假定我们存为fuzzyl.fis),下面我们检验一
9、下,看看我们的限制器究竟怎么样。以一个简洁的电机限制为例,我们在Simulink中建立了它的模糊限制系统如下:在用这个限制器之前,须要用readfis指令将fuzzyl.fis加载到matIab的工作空间,比如我们用这样的指令:myF1.C=readfis(fuzzyl.fis);就创建了一个叫myF1.C的结构体到工作空间,并在fuzzylogicCOntrOIIer中参数设为:myF1.Co可以看到,在模糊限制器的输入和输出均有一个比例系数,我们叫它量化因子,它反映的是模糊论域范围与实际范围之间的比例关系,例如,模糊限制器输入输出的论域范围均为-3,3,而实际误差的范围是TO,10,误差改
10、变率范围是TOO,100,限制量的范围是-24,24,那么我们就可以算出量化因子分别为0.3,0.03,8o量化因子的选取对于模糊限制器的限制效果有很大的影响,因此要依据实际状况仔细选取哦。好,现在我们可以设定仿真步长,比如定步长的IOms,就可以运行了。运行后,产生这样一个错误:MinMaxblocksdonotaccept,boolean*signals.Theinputsignal(三)ofblock,test_fuzzy/Fuzzy1.ogicController/FISWizard/Defuzzificationl/Max(COA),mustbeoneoftheMAT1.AB,uin
11、t8,uintl6,uint32,int8,intl6,int32,single,or,double*datatypes我想许多挚友做模糊限制的时候都会遇到这个状况。没关系,这里供应两个解决方法:1 .干脆在Defuzzificationl这个模块中的那个比较环节后加入数据类型转换模块,将boolean转化为double型,或者双击那个比较模块,选中ShoWadditionalparameters,将输出数据类型改为SPeCifyviadialog,然后选Uint(8)即可;但是在仿真之后,又会发觉许多地方都存在这个问题,因此你不得不一个一个去修改,假如你不怕累的话。2 .其次个方法是最简洁的,干脆在SimUlatiOnParameterS-advanced将booleanlogicSignaIS选为off,剧烈举荐你用这个。好了,这些都解决了,我们就可以仿真了,例如给个方波信号,可以得到仿真曲线如下