参考文档模糊规则表范文模板 11页Word文档格式.docx
《参考文档模糊规则表范文模板 11页Word文档格式.docx》由会员分享,可在线阅读,更多相关《参考文档模糊规则表范文模板 11页Word文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
偏差变化率de的论域是[-Y,Y],欲把它变换成离散论域[-3,-2,-1,0,1,2,3],则有量化因子qde:
qde=6/2Y=3/Y
显然,对于元素-Y、-2Y/3、-Y/3、0、Y/3、2Y/3、Y,则有相应的离散论域元素dei:
de1=qde*(-Y-0)=-3de2=qde*(-2Y/3-0)=-2de3=qde*(-Y/3-0)=-1de4=qde*(0-0)=0de5=qde*(Y/3-0)=1de6=qde*(2Y/3-0)=2de7=qde*(Y-0)=32、控制量C的论域变换
偏差C的论域是[-W,W],欲把它变换成离散论域[-3,-2,-1,0,1,2,3],则有量化因子qC:
qC=6/2W=3/W
显然,对于元素-W、-2W/3、-W/3、0、W/3、2W/3、W,则有相应的离散论域元素Ci:
C1=qC*(-W-0)=-3C2=qC*(-2W/3-0)=-2C3=qC*(-W/3-0)=-1C4=qC*(0-0)=0C5=qC*(W/3-0)=1C6=qC*(2W/3-0)=2C7=qC*(W-0)=3
定义的模糊集(名称),确定隶属度:
[PBPSZENSNB]模糊集的隶属度函数表
三、
给出模糊控制规则表:
ifeisNB,anddeisPB,thenCisPB.ifeisNB,anddeisPS,thenCisPB.ifeisNB,anddeisZE,thenCisPB.ifeisNB,anddeisNS,thenCisPB.ifeisNS,anddeisZE,thenCisPS.ifeisNS,anddeisPS,thenCisPS.ifeisNS,anddeisPB,thenCisPS.ifeisZE,anddeisZE,thenCisZE.ifeisZE,anddeisPS,thenCisNS.ifeisZE,anddeisPB,thenCisNB
根据这些控制规则,可以列出对应的控制规则表如下:
四、
求取模糊控制表
由于偏差e的离散论域有7个元素{-3,-2,-1,0,1,2,3},而偏差变化率de的离散论域也有7个元素{-3,-2,-1,0,1,2,3},在输入时,e或de的精确值都会量化到5个元素之中的任何一个。
这样,e和de的输入组合就有7*7=49种。
求出这49种输入组合及其对应的输出控制量,即可形
成相对应的模糊控制表。
下面分别考虑偏差e、偏差变化率de为多离散论域元素的情况。
1、e=-3
对于偏差e,有:
NB=1,
1)偏差变化率de=-3,有NB=1,查表,可知:
C=3
2)偏差变化率de=-2,有NB=0.2,NS=0.6,查表,可知:
C=0.2*3+0.6*3=23)偏差变化率de=-1,有NS=0.6,ZE=0.2,查表,可知:
C=0.2*3+0.6*3=2
…
模糊控制表如下:
篇二:
生成模糊规则表
引用在
SIMULINK里把模糊逻辑生成查寻表(原创)
201X-06-0900:
14:
48|分类:
|标签:
|字号大中小订阅
本文引用自foundy《在SIMULINK里把模糊逻辑生成查寻表(原创)》
引用
的在SIMULINK里把模糊逻辑生成查寻表(原创)
李会先
先申明下,针对那些抄袭者,把这些想法和工作毫无遮掩的用于商业目的家伙将受到公众发自内心的鄙视!
我们面临的社会,真的需要一种踏实的精神,而不是抄
来抄去,骗来骗去,仍然是伪劣产品!
在里,使用MATLAB201Xb,同样的任务,使用新版本,其实操作更为简单,我还是以MATLAB下的模糊控制水位系统做演示(MATLAB201Xa),但有些操作或者解释被简化了,不清楚请参看如何在MATLAB下把模
糊推理系统转化为查询表(原创):
第一步:
运行MATLAB201Xa。
第二步:
在MATLAB菜单下Help里点击Demo,到下面图示:
第三步:
在Toolboxes里的FuzzyLogic里打开Demo“WaterLevelControlinaTank”,把仿真停止时间设置为0.2,运行一次,停止。
把
该模型另存为桌面文件,使用默认文件名。
第四步:
然后新建一个模型文件,把WaterLevelControlinaTank模型里的模糊控制模块考到新文件来。
最后的样子如下,也把该文件保
存在桌面,使用默认文件名。
第五步:
点SIMULINK界面里Tools\SystemTest进入系统测试界面。
第六步:
在红框栏右边把第四步保存的模型加进来,也就是这个模型是我们要测试的模型。
鼠标选中MainTest项,在菜单象Insert\Test
Element\Simulink,而后样子如下:
第七步:
在TestVectors项里定义两个测试向量,变量名使用默认的。
TestVector1=[-1:
0.1:
1],TestVector1=[-0.1:
0.02:
0.1],在TestVariables
里定义测试变量,st_signal。
如下图:
第八步:
把测试向量
0.1]分别映射到第四步所建模糊控制器的输入口in1,int2,做为输入测试信号。
把测试变量
st_signal映射到模糊控制器输出口
out1.这就步操作是,在测试界面左
端选中Simulink项。
设置后的界面如下:
输入测试向量到模糊模型输入口映射:
模糊控制器输出保存映射:
第九步,在测试界面点SaveResults项,设置如下:
第十步,运行测试,注意在MainTest(231Iterations)(231次迭代,
运算代价),等待测试结束。
第十一步,测试成功结束后,在系统测试界面点Tools\TestResultsViewer,点工具栏里的SurfPlot表面画,X,Y,Z分别设置为TestVector1,TestVector1,st_signal.点Plot按钮,看到如下图:
第十二步,把TestVector1,TestVector1,st_signal输出到MATLAB空间,在TestResultsViewer界面左端,右击st_signal跳出弹出菜单,
点Export,同理对TestVector1,TestVector1执行同样操作。
篇三:
模糊控制程序实例
5.2.2.6模糊控制器设计实例1、单输入模糊控制器的设计
【例5.12】已知某汽温控制系统结构如图5.10所示,采用喷水减温进行控制。
设计单输入模糊控制器,观察定值扰动和内部扰动的控制效果。
R?
图5.10单回路模糊控制系统
按表5-2确定模糊变量E、U的隶属函数,按表5-3确定模糊控制规则,选择温度偏差e、控制量u
的实际论域:
e?
u?
[?
1.5,1.5],则可得到该系统的单输入模糊控制的仿真程序如FC_SI_main.m所示,仿真结果如图5.11所示。
设温度偏差e、控制量u的实际论域:
1.5,1.5],选择e、u的等级量论域为
E?
U?
{?
3,?
2,?
1,0,?
1,?
3}
量化因子K?
2?
3
?
2。
1.5?
(?
1.5)
选择模糊词集为{NB,NS,ZO,PS,PB},根据人的控制经验,确定等级量E,U的隶属函数曲线如图5-8所示。
根据隶属函数曲线可以得到模糊变量、的赋值表如表5-3所示。
-3
-2
-1
1
2
图5-8E,U的隶属函数曲线
依据人手动控制的一般经验,可以总结出一些控制规则,例如:
若误差E为O,说明温度接近希望值,喷水阀保持不动;
若误差E为正,说明温度低于希望值,应该减少喷水;
若误差E为负,说明温度高于希望值,应该增加喷水。
若采用数学符号描述,可总结如下模糊控制规则:
若E负大,则U正大;
若E负小,则U正小;
若E为零,则U为零;
若E正小,则U负小;
若E正大,则U负大。
写成模糊推理句:
ifE=NBthenU=PBifE=NSthenU=PSifE=ZOthenU=ZOifE=PSthenU=NSifE=PBthenU=NB
由上述的控制规则可得到模糊控制规则表,如表5-4所示。
表5-4模糊控制规则表
模糊控制规则实际上是一组多重条件语句,它可以表示从误差论域E到控制量论域U的模糊关系R。
按着上述控制规则,可以得到该温度偏差与喷水阀门开度之间的模糊关系R:
U
(NBE?
PBU)?
(NSE?
PSU)?
(ZOE?
ZOU)?
(PSE?
NSU)?
(PBE?
NBU)
计算模糊关系矩阵R的子程序如F_Relation_1.m所示。
%模糊关系计算子程序F_Relation_1.c
function[R,mfe,mfu,ne,nu,Me]=F_Relation_1
%#############################输入模糊变量赋值表(表5-3)############################ne=7;
%等级量e的个数nu=7;
%等级量u的个数
Me=[000000.51;
000010.50;
000.510.500;
00.510000;
10.500000];
Mu=Me;
%##定义模糊变量及其语言值1=PB,2=PS,3=O,4=NS,5=NB,并输入模糊控制规则表(表5-4)##mfc=5;
%模糊变量E的语言值个数,控制规则表列数
E=[54321];
UC=[12345];
%########################计算R=E×
U###############################################R=zeros(ne,nu);
fori=1:
mfciu=UC(i);
ie=E(i);
fork=1:
neforl=1:
nu
ifMe(ie,k)<
Mu(iu,l)Reu(k,l)=Me(ie,k);
else
Reu(k,l)=Mu(iu,l);
endendend
nef