您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 汽车理论 > 模糊控制在matlab周边实现
•模糊控制在MATLAB中的实现1、采用MATLAB语言根据具体的控制算法编程2、利用MATLAB提供的模糊逻辑工具箱函数3、利用模糊逻辑工具箱的图形界面与Simulink动态仿真环境仿真方法:简单直观复杂但灵活MATLAB工具箱提供的图形化工具模糊系统FISEditor模糊推理系统编辑器(Fuzzy)MFEditor隶属度函数编辑器(Mfedit)RuleEditor模糊规则编辑器(Ruleedit)RuleViewer模糊规则观察器(Ruleview)SurfaceViewer输入输出面视图(Surfview)完成Mamdani型和Sugeno型两类模糊推理系统的结构编辑、模糊子集的隶属函数及其分布的选定查看前三个编辑器完成的编辑工作例:小费问题小费与服务及食物质量有关。输入:服务及食物质量,2个输入。输出:小费,1个输出。语言值:食物:差、好;0—10服务:差、好、很好;0—10小费:少、中等、高;0—30模糊规则:1、如果服务差或食物差,则小费少;2、如果服务中等,则小费中等;3、如果服务好或食物非常可口,则小费高。在matlab工作窗口输入:fuzzy+回车或fuzzy+文件名(.fis)进入图形界面编辑(模糊推理系统编辑器)增加输入变量模糊逻辑区设置输入mfedit或选择编辑隶属度函数菜单输入服务的隶属度函数输入mfedit或选择编辑隶属度函数菜单输入食物的隶属度函数输入mfedit,或选择编辑隶属度函数菜单输出小费的隶属度函数将修改保存到工作空间输入ruleedit,或选择编辑模糊规则菜单模糊规则:1、如果服务差,食物差,则小费少;2、如果服务好,则小费中等;3、如果服务好和食物非常可口,则小费高。模糊子集被否定该规则在被聚合时所占的比重编辑模糊规则时必须用到的如果服务差且食物不好吃则小费就少浏览模糊规则模糊推理输入输出曲面视图,完成模糊推理系统的构建。模糊推理系统的存储:1、选择File→Export菜单将创建的模糊推理系统存成*.fis文件。2、选择File→SavetoWorkspaceas….保存到matlab工作空间,输入变量名(英文命名)。•例:自适应模糊PID控制器•设计一模糊控制器•步骤1.确定e,de和u的论域2.e,de和u语言变量的选取3.规则的制定4.推理方法的确定456.864.15.0228.422sssG假定被控对象的传递函数为:利用Simulink动态仿真•1.根据系统实际情况,选择e,de和U(△Kp,△Ki,△Kd)的论域erange:[-11]derange:[-0.10.1]urange:[02]•2.e,de(误差、误差率输入变量)和u(控制,输出变量)语言变量的选取e8个:NB,NM,NS,NZ,PZ,PS,PM,PBde7个:NB,NM,NS,Z,PS,PM,PBU7个:NB,NM,NS,Z,PS,PM,PB利用MATLAB的Toolbox工具•偏差的隶属度函数输入的隶属度函数•偏差变化的隶属度函数输出的隶属度函数△Kp,△Ki,△Kd根据以上规律得△Kp、△Ki、△Kd的模糊规则表根据设计经验,得出改变PID参数△Kp,△Ki,△Kd的规律当偏差较大时,△Kp=较大(使系统响应加快),Kd=零或较小Ki=0(避免过大的超调)当偏差中等时,△Kp=较小(使系统响应具有较小的超调),Kd=适当(对系统影响较大)Ki=适当当偏差较小时,△Kp=较大(使系统具有良好的稳态性能),Kd=适当(避免在平衡点附近振荡)Ki=较大(使系统具有良好的稳态性能),3.推理方法的制定•推理方法:采用‘mamdani’方法•去模糊方法:加权平均法•选择隶属函数的形式:三角型MATLAB利用模糊逻辑工具箱的图形界面与Simulink动态仿真环境模糊规则:模糊规则:0.11-0.1-102用surfview菜单命令看模糊控制器的输出量整定出的△Kp,△Ki,△Kd代入PID算法的离散差分公式1pidukKekKekKekek1ekekuk式中:1、双击fuzzycontrller,给模糊控制器命名→OK2、在matlab窗口中输入命令:命名=readfis(‘变量名.fis’)将*fis文件导入Simulink模型中的步骤:常用模块库连续系统模块库离散系统模块库逻辑和位操作模块库Simulink中系统模型基本操作方法Scope2Scope1Scope3利用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]);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]);rulelist=[11111;%编辑模糊规则12111;13111;14211;15211;16311;17411;21111;22211;23211;24211;25311;26411;27511;]eecu权系数0-1与“1”或“0”a=addrule(a,rulelist);%添加模糊规则函数showrule(a)%显示模糊规则函数a1=setfis(a,'DefuzzMethod','centroid');%设置模糊系统特性writefis(a1,'fuzzf');%保存模糊系统a2=readfis('fuzzf');%从磁盘读出保存的模糊系统disp('fuzzyControllertable:e=[-3,+3],ec=[-3,+3]');%显示矩阵和数组内容Ulist=zeros(7,7);%全零矩阵fori=1:7forj=1:7e(i)=-4+i;ec(j)=-4+j;Ulist(i,j)=evalfis([e(i),ec(j)],a2);%完成模糊推理计算endendUlist=ceil(Ulist)%朝正无穷方向取整figure(1);plotfis(a2);figure(2);plotmf(a,'input',1);figure(3);plotmf(a,'input',2);figure(4);plotmf(a,'output',1);
本文标题:模糊控制在matlab周边实现
链接地址:https://www.777doc.com/doc-4280115 .html