Matlab 的 Fuzzy 工具箱实现模糊控制(rulelist的确定)
方式二用MATLAB的模糊逻辑工具箱(Fuzzytoolbox)实现
![方式二用MATLAB的模糊逻辑工具箱(Fuzzytoolbox)实现](https://img.taocdn.com/s3/m/993358cc915f804d2a16c1d0.png)
方式二:用MATLAB的模糊逻辑工具箱(Fuzzy toolbox)实现(陈教师整理)一、模糊逻辑推理系统的整体特点模糊操纵由于不依托对象的数学模型而受到普遍的重视,运算机仿真是研究模糊操纵系统的重要手腕之一。
由Math Works公司推出的Matlab软件,为操纵系统的运算机仿真提供了强有力的工具,专门是在以后的版本中推出的模糊工具箱(Fuzzy Toolbox),为仿真模糊操纵系统提供了专门大的方便。
由于如此的模块都是由相关领域的闻名学者开发的,因此其可信度都是很高的,仿真结果是靠得住的。
在Simulink环境下对PID操纵系统进行建模是超级方便的,而模糊操纵系统与PID操纵系统的结构大体相同,仅仅是操纵器不同。
因此,对模糊操纵系统的建模关键是对模糊操纵器的建模。
Matlab软件提供了一个模糊推理系统(FIS)编辑器,只要在Matlab命令窗口键入Fuzzy就可进入模糊操纵器编辑环境。
二、Matlab模糊逻辑工具箱仿真1.模糊推理系统编辑器(Fuzzy)模糊推理系统编辑器用于设计和显示模糊推理系统的一些大体信息,如推理系统的名称,输入、输出变量的个数与名称,模糊推理系统的类型、解模糊方式等。
其中模糊推理系统能够采纳Mandani或Sugeuo两种类型,解模糊方式有最大隶属度法、重心法、加权平均等。
打开模糊推理系统编辑器,在MATLAB的命令窗(command window)内键入:fuzzy 命令,弹出模糊推理系统编辑器界面,如以下图所示。
因为咱们用的是两个输入,因此在Edit菜单中,选Add variable… ->input,加入新的输入input,如以下图所示。
选择input(选中为红框),在界面右边文字输入处键入相应的输入名称,例如,温度输入用tmp-input, 磁能输入用 mag-input,等。
2.隶属度函数编辑器(Mfedit)该编辑器提供一个友好的人机图形交互环境,用来设计和修改模糊推理系中各语言变量对应的隶属度函数的相关参数,如隶属度函数的形状、范围、论域大小等,系统提供的隶属度函数有三角、梯形、高斯形、钟形等,也可用户自行概念。
Fuzzytoolbox4步教你学会使用matlab模煳控制工具箱共3页文档
![Fuzzytoolbox4步教你学会使用matlab模煳控制工具箱共3页文档](https://img.taocdn.com/s3/m/79380d1ff01dc281e43af035.png)
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的模糊逻辑工具箱(Fuzzytoolbox)实现.
![方法二用MATLAB的模糊逻辑工具箱(Fuzzytoolbox)实现.](https://img.taocdn.com/s3/m/c54f870a11a6f524ccbff121dd36a32d7375c7e9.png)
⽅法⼆⽤MATLAB的模糊逻辑⼯具箱(Fuzzytoolbox)实现.⽅法⼆:⽤MATLAB的模糊逻辑⼯具箱(Fuzzy toolbox)实现(陈⽼师整理)⼀、模糊逻辑推理系统的总体特征模糊控制由于不依赖对象的数学模型⽽受到⼴泛的重视,计算机仿真是研究模糊控制系统的重要⼿段之⼀。
由Math Works公司推出的Matlab软件,为控制系统的计算机仿真提供了强有⼒的⼯具,特别是在Matlab4.2以后的版本中推出的模糊⼯具箱(Fuzzy Toolbox),为仿真模糊控制系统提供了很⼤的⽅便。
由于这样的模块都是由相关领域的著名学者开发的,所以其可信度都是很⾼的,仿真结果是可靠的。
在Simulink环境下对PID控制系统进⾏建模是⾮常⽅便的,⽽模糊控制系统与PID控制系统的结构基本相同,仅仅是控制器不同。
所以,对模糊控制系统的建模关键是对模糊控制器的建模。
Matlab软件提供了⼀个模糊推理系统(FIS)编辑器,只要在Matlab命令窗⼝键⼊Fuzzy就可进⼊模糊控制器编辑环境。
⼆、Matlab模糊逻辑⼯具箱仿真1.模糊推理系统编辑器(Fuzzy)模糊推理系统编辑器⽤于设计和显⽰模糊推理系统的⼀些基本信息,如推理系统的名称,输⼊、输出变量的个数与名称,模糊推理系统的类型、解模糊⽅法等。
其中模糊推理系统可以采⽤Mandani或Sugeuo两种类型,解模糊⽅法有最⼤⾪属度法、重⼼法、加权平均等。
打开模糊推理系统编辑器,在MATLAB的命令窗(command window)内键⼊:fuzzy 命令,弹出模糊推理系统编辑器界⾯,如下图所⽰。
因为我们⽤的是两个输⼊,所以在Edit菜单中,选Add variable… ->input,加⼊新的输⼊input,如下图所⽰。
选择input(选中为红框),在界⾯右边⽂字输⼊处键⼊相应的输⼊名称,例如,温度输⼊⽤tmp-input, 磁能输⼊⽤ mag-input,等。
方法二用MATLAB的模糊逻辑工具箱(Fuzzy toolbox)实现.
![方法二用MATLAB的模糊逻辑工具箱(Fuzzy toolbox)实现.](https://img.taocdn.com/s3/m/91e05904227916888486d752.png)
方法二:用MATLAB的模糊逻辑工具箱(Fuzzy toolbox)实现(陈老师整理)一、模糊逻辑推理系统的总体特征模糊控制由于不依赖对象的数学模型而受到广泛的重视,计算机仿真是研究模糊控制系统的重要手段之一。
由Math Works公司推出的Matlab软件,为控制系统的计算机仿真提供了强有力的工具,特别是在Matlab4.2以后的版本中推出的模糊工具箱(Fuzzy Toolbox),为仿真模糊控制系统提供了很大的方便。
由于这样的模块都是由相关领域的著名学者开发的,所以其可信度都是很高的,仿真结果是可靠的。
在Simulink环境下对PID控制系统进行建模是非常方便的,而模糊控制系统与PID控制系统的结构基本相同,仅仅是控制器不同。
所以,对模糊控制系统的建模关键是对模糊控制器的建模。
Matlab软件提供了一个模糊推理系统(FIS)编辑器,只要在Matlab命令窗口键入Fuzzy就可进入模糊控制器编辑环境。
二、Matlab模糊逻辑工具箱仿真1.模糊推理系统编辑器(Fuzzy)模糊推理系统编辑器用于设计和显示模糊推理系统的一些基本信息,如推理系统的名称,输入、输出变量的个数与名称,模糊推理系统的类型、解模糊方法等。
其中模糊推理系统可以采用Mandani或Sugeuo两种类型,解模糊方法有最大隶属度法、重心法、加权平均等。
打开模糊推理系统编辑器,在MATLAB的命令窗(command window)内键入:fuzzy 命令,弹出模糊推理系统编辑器界面,如下图所示。
因为我们用的是两个输入,所以在Edit菜单中,选Add variable… ->input,加入新的输入input,如下图所示。
选择input(选中为红框),在界面右边文字输入处键入相应的输入名称,例如,温度输入用tmp-input, 磁能输入用 mag-input,等。
2.隶属度函数编辑器(Mfedit)该编辑器提供一个友好的人机图形交互环境,用来设计和修改模糊推理系中各语言变量对应的隶属度函数的相关参数,如隶属度函数的形状、范围、论域大小等,系统提供的隶属度函数有三角、梯形、高斯形、钟形等,也可用户自行定义。
matlab 模糊工具箱操作
![matlab 模糊工具箱操作](https://img.taocdn.com/s3/m/356db8b61a37f111f1855b15.png)
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-的-Fuzzy-工具箱实现模糊控制(rulelist的确定)
![Matlab-的-Fuzzy-工具箱实现模糊控制(rulelist的确定)](https://img.taocdn.com/s3/m/32e257db4afe04a1b071dee3.png)
引用如何在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下的仿真工作仅仅用于仿真目的,如果实际产品设计能继承仿真的工作成果,将事半功倍。
defuzz matlab代码
![defuzz matlab代码](https://img.taocdn.com/s3/m/0891b723ae1ffc4ffe4733687e21af45b307fea3.png)
defuzz matlab代码以下是一个简单的模糊逻辑解模糊的 MATLAB 代码示例: matlab.% 创建模糊逻辑系统。
fis = newfis('fis');% 添加输入变量。
fis = addvar(fis, 'input', 'Input1', [0 10]);fis = addvar(fis, 'input', 'Input2', [0 10]);% 添加输出变量。
fis = addvar(fis, 'output', 'Output1', [0 10]); % 添加隶属函数。
fis = addmf(fis, 'input', 1, 'Low', 'trimf', [0 0 5]);fis = addmf(fis, 'input', 1, 'High', 'trimf', [0 5 10]); fis = addmf(fis, 'input', 2, 'Low', 'trimf', [0 0 5]);fis = addmf(fis, 'input', 2, 'High', 'trimf', [0 5 10]); fis = addmf(fis, 'output', 1, 'Low', 'trimf', [0 0 5]);fis = addmf(fis, 'output', 1, 'High', 'trimf', [0 5 10]);% 添加模糊规则。
ruleList = [1 1 1 1 1;2 2 1 1 1;1 2 2 1 1];fis = addrule(fis, ruleList);% 模糊化输入。
模糊控制在matlab中的实例
![模糊控制在matlab中的实例](https://img.taocdn.com/s3/m/dcbb7c59b94ae45c3b3567ec102de2bd9605deb2.png)
模糊控制在matlab中的实例以下是一个简单的模糊控制器在 MATLAB 中的实例:假设你有一个被控对象,它的输出值 y 取决于输入值 u。
你想要设计一个模糊控制器来控制该对象。
首先,你需要定义模糊控制器的输入和输出变量以及它们的隶属度函数。
示例中,我们定义了两个输入变量 x1 和 x2 以及一个输出变量y,每个变量都由三个隶属度函数组成。
```matlab% 定义输入和输出变量及其隶属度函数x1 = fuzzyvar("input", [-5 5], "bellmf", [1 2 3]);x2 = fuzzyvar("input", [-5 5], "trimf", [-4 0 4]);y = fuzzyvar("output", [-10 10], "trimf", [-8 0 8]);```接下来,我们需要定义规则库。
规则库是一系列模糊规则的集合,每条规则由前提和结论组成。
在这个示例中,我们定义了九条规则,将输入变量 x1 和 x2 映射到输出变量 y。
```matlab% 定义规则库ruleList = ["If (x1 is 1) and (x2 is 1) then (y is -7)";"If (x1 is 1) and (x2 is 2) then (y is -9)";"If (x1 is 1) and (x2 is 3) then (y is -9)";"If (x1 is 2) and (x2 is 1) then (y is -5)";"If (x1 is 2) and (x2 is 2) then (y is -7)";"If (x1 is 2) and (x2 is 3) then (y is -8)";"If (x1 is 3) and (x2 is 1) then (y is -3)";"If (x1 is 3) and (x2 is 2) then (y is -5)";"If (x1 is 3) and (x2 is 3) then (y is -6)";];```现在我们可以创建模糊控制器,并将输入变量和输出变量与规则库相结合。
模糊控制的matlab实现
![模糊控制的matlab实现](https://img.taocdn.com/s3/m/ef31effd01f69e31433294c7.png)
6. surfview
功能:输出曲面观测器 格式: surfview (‘a’)
surfview (a) 说明:利用surfview (‘a’)可打开输出曲面观测器,从 中可查看保存在文件a.fis中的单输入或双输入FIS结 构的输出曲面。
4.1.2 隶属度函数
1. Gaussmf
功能:高斯(Gaussian)型隶属度函数 格式:y=gaussmf(x,[sig c]) 说明:对称的高斯型函数取决于2个参数σ(sig)和c:
0
x
a
f
x,
a
,b,c
b c
a x
c b
例:
0
xa
a x b
b
x
c
x c
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]’);
参数a和c确定三角 形的“脚”,而 参数b确定三角形 的“峰”
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’);
x c 2
f
x, ,c
e
2 2
gaussmf函数的参数以向量[sig,c]形式给出。
例:
x = 0:0.1:10;
模糊控制在matlab中的实例
![模糊控制在matlab中的实例](https://img.taocdn.com/s3/m/1a6cfa50f4335a8102d276a20029bd64783e622b.png)
模糊控制在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中的实现](https://img.taocdn.com/s3/m/d195a358fbd6195f312b3169a45177232f60e4f9.png)
模糊控制在MATLAB中的实现模糊控制是一种基于模糊逻辑的控制方法,可以处理输入模糊或模糊输出的问题。
在MATLAB中,模糊控制可以通过Fuzzy Logic Toolbox实现。
Fuzzy Logic Toolbox提供了一套用于设计、模拟和分析模糊逻辑系统的工具。
它允许用户定义模糊集、模糊规则和模糊推理过程,从而实现模糊控制。
在实现模糊控制之前,首先需要确定输入和输出的模糊集以及它们之间的关系。
可以通过定义模糊集合的成员函数来描述输入和输出的模糊集。
常见的成员函数有三角形、梯形、高斯等。
例如,对于一个温度控制系统,可以定义三个模糊集:"冷","舒适"和"热"用于描述温度的状态。
每个模糊集可以具有不同的成员函数。
接下来,需要定义模糊规则,规则用于描述输入和输出之间的关系。
例如,当温度"冷"时,可以设定输出为"加热",当温度"舒适"时,输出为"保持",当温度"热"时,输出为"冷却"。
在MATLAB中,可以使用Fuzzy Logic Toolbox的命令createFIS来创建一个模糊逻辑系统(FIS),并使用addInput和addOutput命令来定义输入和输出的模糊集。
例如,以下代码片段演示了如何创建一个简单的模糊逻辑系统:```MATLABfis = createFIS('fuzzy_system');fis = addInput(fis, [0 100], 'Temperature');fis = addOutput(fis, [0 10], 'Control');fis = addMF(fis, 'input', 1, 'cold', 'trimf', [-10 0 10]);fis = addMF(fis, 'input', 1, 'hot', 'trimf', [40 100 160]);fis = addMF(fis, 'output', 1, 'cool', 'trimf', [-5 0 5]);fis = addMF(fis, 'output', 1, 'maintain', 'trimf', [0 5 10]);fis = addMF(fis, 'output', 1, 'heat', 'trimf', [5 10 15]);ruleList = [1 1 2 3 1;22221;33211];fis = addRule(fis, ruleList);```在定义模糊逻辑系统之后,可以使用evalfis命令对系统进行模糊推理和模糊控制。
fuzzy工具箱使用规则
![fuzzy工具箱使用规则](https://img.taocdn.com/s3/m/b18ea00a844769eae009ed61.png)
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的fuzzy工具箱实现模糊控制
![matlab的fuzzy工具箱实现模糊控制](https://img.taocdn.com/s3/m/1176b96810661ed9ad51f3b2.png)
Matlab 的 Fuzzy 工具箱实现模糊控制(rulelist的确定)用 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。
fuzzy工具箱使用规则
![fuzzy工具箱使用规则](https://img.taocdn.com/s3/m/b18ea00a844769eae009ed61.png)
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实现具体过程](https://img.taocdn.com/s3/m/b3ee4e83964bcf84b8d57b3a.png)
在rulelist的每一行中,前m个数字表示各输入语言 变量的语言值(隶属度函数的编号),随后的n个数字表 示输出语言变量的语言值,第n+m+1个数字是该规则的 权重,权重的值在0到1之间,一般设定为1;第n+m+2 个数字为0或1两者之一,为1表示模糊规则各输入语言 变量之间是and关系,为0则表示是or关系。
PPT学习交流
16
例:a=newfis(‘tipper’); a=addvar(a,’input’,’service’,[0 10]); a=addmf(a,’input’,1,’poor’,’guassmf’,[1.5 0]); a=addmf(a,’input’,1,’good’,’guassmf’,[1.5 5]); a=addmf(a,’input’,1,’excellent’,’guassmf’,[1.5 10]); plot(a,’input’,1)
注意:对于添加到同一个模糊推理系统的语言变量,按 先后顺序自动编号,编号从1开始,逐渐递增。对于分属 于输入与输出的不同语言变量则独立地分别编号。
例:a=newfis(‘tipper’); //创建并返回一个新的FIS系统
a=addvar(a,’input’,’service’,[0 10]);
getfis(a,’input’,1) /P/P取T学习得交流FIS的部分或全部属性
如果输入U是M*N矩阵,则系统是N输入的, 返回的Y是M*L矩阵,L是系统的输出的数目。
例:fis=readfis(‘tipper’);
PPT学习交流
11
③ 函数gaussmf 功能:建立高斯型隶属度函数。
格式:y=gaussmf(x,[sig c])
其中:参数x指定变量论域范围,参数c决定了函数的中心 点,sig决定了函数曲线的宽度σ。
MATLAB实现模糊控制
![MATLAB实现模糊控制](https://img.taocdn.com/s3/m/afce5b9370fe910ef12d2af90242a8956becaae9.png)
MATLAB实现模糊控制⼀、简介MATLAB软件有提供⼀个模糊推理系统编辑器,利⽤模糊⼯具箱在matlab命令窗⼝输⼊Fuzzy命令进⼊模糊控制编辑环境⼆、主要步骤1、接受输⼊变量2、输⼊变量模糊化3、利⽤模糊规则进⾏推理得出结论4、综合步骤3利⽤结论从模糊⾪属度得到实际的输出值5、输出结果三、MATLAB运⾏结果输⼊ e 的模糊语⾔变量及其⾪属度函数:输⼊ ec 的模糊语⾔变量及其⾪属度函数:输出结果:四、总结在本次实验中设置了两个模糊输⼊变量(e和ec),⼀个模糊输出变量u 。
在规则库中建⽴了7x7=49条规则,模糊规则中第⼀个和第⼆个为输⼊,第三个数表输出,后俩个数分别是规则权重和AND OR选项。
模糊变量的⾪属函数分别设置成了“Z型”、“三⾓形”、“S型”五、代码部分%模糊控制器设计a=newfis('fuzzf'); %创建新的模糊推理系统%输⼊1f1=1;a=addvar(a,'input','e',[-6*f1,6*f1]);%添加 e 的模糊语⾔变量a=addmf(a,'input',1,'NB','zmf',[-6*f1,-2*f1]);%添加 e 的模糊语⾔变量的⾪属度函数(z型)a=addmf(a,'input',1,'NM','trimf',[-6*f1,-4*f1,-1]);%⾪属度函数为三⾓形a=addmf(a,'input',1,'NS','trimf',[-6*f1,-2*f1,1*f1]);a=addmf(a,'input',1,'Z','trimf',[-4*f1,0,4*f1]);a=addmf(a,'input',1,'PS','trimf',[-2*f1,0*f1,2*f1]);a=addmf(a,'input',1,'PM','trimf',[0,4*f1,6*f1]);a=addmf(a,'input',1,'PB','smf',[2*f1,6*f1]);%输⼊2f2=1;a=addvar(a,'input','ec',[-6*f2,6*f2]);%添加 ec 的模糊语⾔变量a=addmf(a,'input',2,'NB','zmf',[-6*f2,-2*f2]);a=addmf(a,'input',2,'NM','trimf',[-6*f2,-4*f2,-1]);a=addmf(a,'input',2,'NS','trimf',[-6*f2,-2*f2,1*f2]);a=addmf(a,'input',2,'Z','trimf',[-4*f2,0,4*f2]);a=addmf(a,'input',2,'PS','trimf',[-2*f2,0*f2,2*f2]);a=addmf(a,'input',2,'PM','trimf',[0,4*f2,6*f2]);a=addmf(a,'input',2,'PB','smf',[2*f2,6*f2]);%输出f8=1.5;a=addvar(a,'output','u',[-6*f8,6*f8]);%添加 u 的模糊语⾔变量a=addmf(a,'output',1,'NB','zmf',[-6*f8,-2*f8]);a=addmf(a,'output',1,'NM','trimf',[-6*f8,-4*f8,-1]);a=addmf(a,'output',1,'NS','trimf',[-6*f8,-2*f8,2*f8]);a=addmf(a,'output',1,'Z','trimf',[-4*f8,0,4*f8]);a=addmf(a,'output',1,'PS','trimf',[-2*f8,0*f8,6*f8]);a=addmf(a,'output',1,'PM','trimf',[1,4*f8,6*f8]);a=addmf(a,'output',1,'PB','smf',[2*f8,6*f8]);%规则库rulelist=[11111; %编辑模糊规则,后俩个数分别是规则权重和AND OR选项12111;13111;14211;15211;16311;17411;21111;22211;23211;24211;25311;26411;27511;31711;32611;33511;34411;35311;36211;37111;41711;42611;43511;44411;45311;46211;47111;51711;52611;53511;54411;55311;56211;57111;61711;62611;63511;64411;65311;66211;67111;71711;72611;73511;74411;75311;76211;77111;];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); %全零矩阵for i=1:7for j=1:7e(i)=-4+i;ec(j)=-4+j;Ulist(i,j)=evalfis([e(i),ec(j)],a2); %完成模糊推理计算 endend% Ulist=ceil(Ulist) %朝正⽆穷⽅向取整 Ulist %朝正⽆穷⽅向取整%画出模糊系统figure(1); plotfis(a2);figure(2);plotmf(a,'input',1);figure(3);plotmf(a,'input',2);figure(4);plotmf(a,'output',1);。
Matlab-的-Fuzzy-工具箱实现模糊控制(rulelist的确定)
![Matlab-的-Fuzzy-工具箱实现模糊控制(rulelist的确定)](https://img.taocdn.com/s3/m/32e257db4afe04a1b071dee3.png)
引用如何在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下的仿真工作仅仅用于仿真目的,如果实际产品设计能继承仿真的工作成果,将事半功倍。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
引用如何在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里,还没有把模糊推理系统直接转化为查询表的工具,尽管Fuzzy Logic 提供的gensurf(FIS)指令可生成响应面的数据,但用这种方法获得的数据生成查询表控制效果不理想,借助于MATLAB下的系统测试工具是另一种实现这一目标的方法。
因为查询表用于一些廉价的嵌入式系统效率比较高,也节省系统资源,所以在MATLAB下实现这种转化是非常有意义的。
我们知道,模糊逻辑推理系统是输入变量空间到输出变量空间的一种映射,而查询表也是实现输入变量空间到输出变量空间的一种映射,它们只不过是可实现非线性映射的两种方法而已。
当通过Simulink/Fuzzy Logic Toolbox实现了一个模糊推理系统,不妨把它看成一个黑箱按系统辩识的思路来测试它,这时我们只关心它的输入与输出,每当在这个黑箱的输入端馈入一个输入,那么它的输出就相应有一个输出响应,能否在这个黑箱输入端送入所有输入变量的可能组合来观测输出呢?答案是肯定的,查询表的构造正需要这些输入输出数据组,有了这些数据,建立一个查询表就简单了。
一般来说输入变量有一定义范围,计算机的A/D变换和模糊系统模糊化处理时都存在量化过程,在这个黑箱的输入端送入的测试变量值当然也是离散化了的,一个两变量的系统,如果每个变量被离散化为10个值,那么总共就需要100次测试,随着系统变量的增加或量化等级的提高,需做的输入测试成级数快数增长,借助与MATLAB里的系统测试工具,可以快速做这类测试并收集系统输出数据。
2. 系统测试准备下面以MATLAB下的一简单的模糊控制演示系统为例来阐述把模糊逻辑转化为查询表的过程。
2.1 准备模糊控制系统模型在MATLAB的Fuzzy Logic下打开Water Level Control in a Tank(水槽水位控制),另保存到一个不同的目录下,名字为sltankrule,该演示Simulink模型如下:图1 水槽水位模糊控制系统该演示模型目的比较模糊控制和PID控制水位的效果,其中Fuzzy Controller with Ruleviever模块里的tank模糊推理系统已经做好了,这里不在熬述,在其两个输入中,水位误差输入变量范围是[-1 1],水位变化率输入变量范围是[-0.1 0.1],输出变量阀门开度范围是[-1 1]。
2.2 准备模糊控制系统测试模型把这个模型修改成如下样字,另存为一个文件名,比如sltankruletotest。
图2 水槽水位模糊控制系统测试模型修改成这种样字后,A、B分别模拟该模糊系统水位误差输入、水位变化率,Out1模拟阀门的开度,注意把Simulation Stop Time设置为0.02。
2.3 准备查询表模型在Simulink下建一个二维查询表模型,另存为一个文件名,比如FuzzyLookup,这样做是为了以后查询表调试好后,可用Simulink的代码生产工具把它生成C代码,样子如下:图3 查询表模型3. 系统测试操作模型切换到sltankruletotest ,点击Tools\SytemTest…样子如下:图4 系统测试设置1在系统测试main Test里加入Simulink组件,该组件Mappings下的Define Model overrides属性项可以把Simulink模型的输入参数映射到用户自定义的测试向量,该组件Mappings下的Define Map Simulink Data to Test Variables 属性项把Simulink模型的输出参数映射到用户自定义的测试变量,这里把被测试模糊模型sltankruletotest里的A、B映射到自定义测试向量TestVector1、TestVector2,TestVector1定义为[-1:0.2 : 1]、TestVector2定义为[-0.1:0.01 :0.1],模糊模型输出out1映射到自定义测试变量st_signal.最后选择系统测试环境Test Browser下的Save Results项,设置成下面的样子:图5 系统测试设置2在SystemTest环境下,点击Run,开始系统测试,系统进行迭代测试,测试结束后点击File\Save Test Results as保存测试结果在T.mat文件下,以备后用,测试结束后,可以查看如下系统输入输出曲面结果:图6 水槽水位模糊系统测试输入输出结果界面切换到MATLAB主界面,点击File/Open,打开T.mat,在命令窗下键入命令whos,会看到如下结构变量:stresults 1x1 2268 struct,该结构保存了模型sltankruletotest的输入变量的测试数据,输出变量响应数据,它们分别是:两输入测试向量数据组:stresults.testvector.TestVector1stresults.testvector.TestVector2一输出向量数据组:stresults.variable.st_signal可以在MATLAB命令行键入以上命令看这些变量具体数据内容。
界面切换到FuzzyLookup,双击LookupTable (2-D),界面属性设置如下:图7 查询表模块参数设置再点击该属性窗上的Edit…,Simulink自动生成如下样式的表格:图8 查询表模块数据查询表生成后样子如下:图9 生成查询表模块外观4. 用查询表替代模糊控制器测试水位控制效果把生成的查询表考贝到sltankrule,替换掉原来的模糊推理组件,样子如下:图10 用查询替换模糊控制器后的控制系统查询表采用interplolation-extrapolstion查寻方法,现在再仿真该水位控制系统,通过看水位控制动画表示,查寻表水位的控制和原来的模糊规则控制效果已经相当,如果换一种查询表查询方法,比如use input nearest查寻方法,控制效果就差了,究其原因是在测试环节我们的测试向量量化等级不足所致,如果把测试向量修改一下,比如:TestVector1定义为[-1:0.08 : 1]、TestVector2定义为[-0.1:0.01 :0.1]再做测试收集数据,生成查询表,那么查询表无论采用那一种查询方法,水位的控制效果都很好了,这时查询表表格变大了些。
获得这个表格后,对于嵌入式系统,即使用汇编语言写出该表的查询程序也是很容易了。
5. 总结本文讲述了在MATLAB 环境下,把模糊逻辑系统转化为查询表的一种方法,这种方法简单易行,查询表控制也达到了模糊控制的同样效果,按以上思路,也容易理解在MATLAB 下,用其它方法建立的部分系统模型,如果有必要的话,也可使用同样的的方法把它转化成查询表,从工程角度出发,这种方法使得工程技术人员在产品设计中轻松实现模糊逻辑建模仿真到实际应用的连贯设计流程。
Matlab 的Fuzzy 工具箱实现模糊控制(rulelist的确定) 用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)每个模糊语言名称从属于一个模糊语言。