matlab计算模糊控制规则表
程序运行结果:输出量的模糊集合表U_control =Columns 1 through 8-5.3500 -5.2353 -5.3500 -5.2353 -5.3500 -5.2353 -4.6923 -4.2581-5.0000 -4.9474 -5.0000 -4.9474 -5.0000 -4.9474 -3.8571 -3.7143-4.6923 -4.5217 -4.6923 -4.5217 -4.6923 -4.5217 -3.0526 -2.9302-4.2581 -4.2581 -4.2581 -4.2581 -4.2581 -4.2581 -2.9302 -2.2909-4.0000 -4.0000 -3.7812 -3.7586 -3.4706 -3.4194 -2.4318 -1.7925-4.0000 -4.0000 -3.3636 -3.0769 -2.4667 -2.1176 -1.5000 -1.0476-3.5882 -3.5484 -2.9250 -2.6000 -0.9600 -0.5094 0 0.5094-2.9231 -2.9231 -2.3333 -1.9057 -0.2632 1.0476 1.5000 2.1176-1.8056 -1.7879 -0.5652 -0.3137 0.4400 1.7925 2.4318 3.4194-1.0000 -1.0000 0.2453 0.9385 1.4211 2.2909 2.9302 4.2581-0.5833 -0.6364 0.6875 1.4211 1.9375 2.9302 3.0526 4.5217-0.2333 -0.2414 1.1190 1.7925 2.3571 3.7143 3.8571 4.94740 0 1.2857 2.0000 2.7143 4.2581 4.6923 5.2353Columns 9 through 13-2.7143 -2.0000 -1.2857 0 0-2.3571 -1.7925 -1.1190 0.2414 0.2333-1.9375 -1.4211 -0.6875 0.6364 0.5833-1.4211 -0.9385 -0.2453 1.0000 1.0000-0.4400 -0.0364 0.1600 1.6000 1.63160.2632 1.9057 2.3333 2.9231 2.92310.9600 2.6000 2.9250 3.5484 3.58822.46673.0769 3.36364.0000 4.00003.4706 3.7586 3.78134.0000 4.00004.2581 4.2581 4.2581 4.2581 4.25814.6923 4.5217 4.6923 4.5217 4.69235.0000 4.9474 5.0000 4.9474 5.00005.3500 5.2353 5.3500 5.2353 5.3500Matlab程序:%作业:计算模糊控制规则表clc;clear;%偏差E的隶属函数表E = [1,0.8,0.7,0.4,0.1,0,0,0,0,0,0,0,0;0.2,0.7,1,0.7,0.3,0,0,0,0,0,0,0,0;0,0.1,0.3,0.7,1,0.7,0.2,0,0,0,0,0,0;0,0,0,0,0.1,0.6,1,0,0,0,0,0,0;0,0,0,0,0,0,1,0.6,0.1,0,0,0,0;0,0,0,0,0,0,0.2,0.7,1,0.7,0.3,0.1,0;0,0,0,0,0,0,0,0,0.2,0.7,1,0.7,0.3;0,0,0,0,0,0,0,0,0.1,0.4,0.7,0.8,1] %8*13的矩阵%偏差E变化率EC的隶属函数表EC =[1,0.7,0.3,0,0,0,0,0,0,0,0,0,0;0.3,0.7,1,0.7,0.3,0,0,0,0,0,0,0,0;0,0,0.3,0.7,1,0.7,0.3,0,0,0,0,0,0;0,0,0,0,0.3,0.7,1,0.7,0.3,0,0,0,0;0,0,0,0,0,0,0.3,0.7,1,0.7,0.3,0,0;0,0,0,0,0,0,0,0,0.3,0.7,1,0.7,0.3;0,0,0,0,0,0,0,0,0,0,0.3,0.7,1] %7*13的矩阵%控制量U的隶属函数表,与偏差变化率隶属函数相同U=[1,0.7,0.3,0,0,0,0,0,0,0,0,0,0;0.3,0.7,1,0.7,0.3,0,0,0,0,0,0,0,0;0,0,0.3,0.7,1,0.7,0.3,0,0,0,0,0,0;0,0,0,0,0.3,0.7,1,0.7,0.3,0,0,0,0;0,0,0,0,0,0,0.3,0.7,1,0.7,0.3,0,0;0,0,0,0,0,0,0,0,0.3,0.7,1,0.7,0.3;0,0,0,0,0,0,0,0,0,0,0.3,0.7,1] %7*13的矩阵%控制规则表,E的模糊分割数为8,EC的模糊分割数为7,包含最大可能的规则数为7*8=56rulelist= [1,1,1,1,2,4,4;1,1,1,1,2,4,4;2,2,2,2,4,5,5;2,2,3,4,5,6,6;2,2,3,4,5,6,6;3,3,4,6,6,6,6;4,4,6,7,7,7,7;4,4,6,7,7,7,7] %8*7的矩阵%********计算模糊控制规则表************for iii=1:13for jjj=1:13for ii=1:8for jj=1:7A_rulelist = rulelist(ii,jj); %模糊控制规则简表对应输出语言值%******计算CiA'************A = E(ii,:); %取Ai'C_A = U(A_rulelist,:); %取Ci' %*****RiA=Ai'与Ci‘对应取小的值,RiA为13*13矩阵*******for i=1:13for j=1:13if(A(i) > C_A(1,j))Ra(i,j) = C_A(1,j);elseRa(i,j) = A(i);endendendAA = zeros(1,13); %取AA=A'AA(1,iii) = 1;for i=1:13 %先取小,C'iA=Ai'。
RiAfor j=1:13if(AA(j) > Ra(j,i))A_qux(j,i) = Ra(j,i);elseA_qux(j,i) = AA(j);endendendfor i=1:13 %再取大,求并得到CiA max = A_qux(1,i);for j=1:13if(max < A_qux(j,i))max = A_qux(j,i);endendCiA(i) = max;end%********CiA计算完毕*********%*******同理计算CiB'*************B = EC(jj,:); %取B'C_B = U(A_rulelist,:); %取Cifor i=1:13 %求RiB=Bi'与Ci'取小for j=1:13if(B(1,i) > C_B(1,j))Rb(i,j) = C_B(1,j);elseRb(i,j) = B(1,i);endendendBB = zeros(1,13); %取BB=B'BB(1,jjj) = 1;for i=1:13 %先取小,CiB'=Bi'。
RiB for j=1:13if(BB(j) > Rb(j,i))B_qux(j,i) = Rb(j,i);elseB_qux(j,i) = BB(j);endendendfor i=1:13 %再取大,求并得CiB max = B_qux(1,i);for j=1:13if(max < B_qux(j,i))max = B_qux(j,i);endCiB(i) = max;end%*******计算CiB'完毕****%*******计算Ci'=CiA'交CiB'*********for i=1:13if CiA(i) > CiB(i)Ci(i) = CiB(i);elseCi(i) = CiA(i);endend%*******计算Ci'完毕************C((ii-1)*7+jj,:) = Ci; % 将Ci存到数组C中,C是56*13的数组endend%**根据式Ui=C'=C1'并C2'并……并C56',计算输出量的模糊集合** for i=1:13max = C(1,i);for j=1:56max = C(j,i);endendUi(i) = max;end%*****用重心法进行清晰化运算*********sum_fenz = 0;sum_fenm = 0;for i=1:13sum_fenz = sum_fenz + (i-7)*Ui(i);sum_fenm = sum_fenm + Ui(i);endcore = sum_fenz/sum_fenm;U_control(iii,jjj) = core;endendU_control = round(U_control.*10000)/10000; %对控制量保留小数点后两位display 输出量的模糊集合表U_control。
模糊控制规则表49条
模糊控制规则表49条1.如果误差小于等于0,则输出为0。
2. 如果误差大于0且小于等于0.5,则输出为0.5-误差。
3. 如果误差大于0.5且小于等于1,则输出为1-误差。
4. 如果误差大于1,则输出为1。
5. 如果误差为0且变化率小于等于0,则输出为0。
6. 如果误差为0且变化率大于0,则输出为0.5。
7. 如果误差小于等于0且变化率小于等于0,则输出为0。
8. 如果误差小于等于0且变化率大于0,则输出为0.5。
9. 如果误差大于0且小于等于0.2且变化率小于等于0,则输出为0.2-误差。
10. 如果误差大于0且小于等于0.2且变化率大于0,则输出为0.6-误差。
11. 如果误差大于0.2且小于等于0.4且变化率小于等于0,则输出为0.4-误差。
12. 如果误差大于0.2且小于等于0.4且变化率大于0,则输出为0.8-误差。
13. 如果误差大于0.4且小于等于0.6且变化率小于等于0,则输出为0.6-误差。
14. 如果误差大于0.4且小于等于0.6且变化率大于0,则输出为1-误差。
15. 如果误差大于0.6且小于等于0.8且变化率小于等于0,则16. 如果误差大于0.6且小于等于0.8且变化率大于0,则输出为1-误差。
17. 如果误差大于0.8且小于等于1且变化率小于等于0,则输出为1-误差。
18. 如果误差大于0.8且小于等于1且变化率大于0,则输出为1。
19. 如果误差小于等于0.1且变化率小于等于0,则输出为0。
20. 如果误差小于等于0.1且变化率大于0,则输出为0.4。
21. 如果误差大于0.1且小于等于0.3且变化率小于等于0,则输出为0.2-误差。
22. 如果误差大于0.1且小于等于0.3且变化率大于0,则输出为0.6-误差。
23. 如果误差大于0.3且小于等于0.5且变化率小于等于0,则输出为0.4-误差。
24. 如果误差大于0.3且小于等于0.5且变化率大于0,则输出为0.8-误差。
模糊控制的MATLAB实现具体过程(强势吐血推荐)
例:fismat=readfis(‘tipper’); //tipper.fis已经存在
③函数getfis
功能:取得模糊推理系统的部分或全部属性。 格式:getfis(a) //显示系统所有属性 //显示系统某一属性
getfis(a,’fisprop’)
getfis(a,’vartype’,varindex,’varprop’)
1 2,2(1):1
6、计算模糊推理输出结果函数evalfis 格式:y=evalfis(U,FIS)
说明:参数U是输入数据,FIS是模糊推理矩阵。 U的每一行是一个特定的输入向量,Y的每一行是 一个特定的输出向量。
如果输入U是M*N矩阵,则系统是N输入的, 返回的Y是M*L矩阵,L是系统的输出的数目。
功能:绘制语言变量所有语言值的隶属度函数曲线。
格式:plotmf(fismat,varType,varIndex) 说明:参数fismat指明模糊推理系统的对应矩阵变量 名称;varType指明变量类型(’input’或’output’); varIndex指明输入或输出语言变量的编号。 例: plotmf(a,’input’,2)
例: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]);
在rulelist的每一行中,前m个数字表示各输入语言 变量的语言值(隶属度函数的编号),随后的n个数字表 示输出语言变量的语言值,第n+m+1个数字是该规则的 权重,权重的值在0到1之间,一般设定为1;第n+m+2 个数字为0或1两者之一,为1表示模糊规则各输入语言 变量之间是and关系,为0则表示是or关系。
模糊控制查询表的MATLAB实现
p de c ies n er s rb i deai h way o tl e t h w t get f z y -c tol qu y a e y he o a u z onr — er tbl b t MATL pr AB ogr amm ig. s n Thi cor l a e to —tbl m a be tr d n h c y so e i t e ompue t wi t f m of tbl W hih t he or h a a e. c ca i n mpr e o gr a l te et y h ope ain e f en ySuc a PL r t al fi o ci c h s C co tol rec. o e n r l ,t wh s me o y s v y il a o e m r i er lt te,nd n—l ras nig an s ral e i ne e o n c alo be e i d. z Ke wOrs: z y onr l y d f z c to qu r a eM AT AB. c to,n—l e e o ig u ey t bl. L PI onr l o i ras nn n
级 保持 为 卜6 一 , 4 一 ,2 一 , , ,, , , ,} ,5 一 ,3 一 , 10 12 3 4 5 6。
输 入 变 量偏 差 e和偏 差 变化 率 e c和输 出变 量 A P A i K 、 T 的
模 糊 语 言 值 均 为 { B, N NM, S, O,S, M, B 。 为 了 编 程 方 N Z P P P }
值 , 为 12, 4 7 即 , 3,… 。
表 1 用 数 字 语 言 值表 示 输 入 变 量 × 1及 x 2的 隶 属度 矢 量 表
系统的模糊控制MATLAB实现
智能控制大作业第一次大作业哈尔滨工业大学2017年5月25日姓名: 周庆强 学号: 1140810106题目:对一个系统——,假设给系统一个阶跃值r=30,采样时间为1s ,系统的初始值为r(0)=0,利用常规的模糊控制器对系统进行控制。
思路:在仿真系统中,不需要考虑信号的A/D 和D/A 转换,模糊控制系统框图如下:1、选择观测量和控制量将偏差e ,即当前位置-目标目标,作为观察量(输入量)1, %将偏差的变化 量ec ,即e(t)-e(t-1),作为观察量(输入量)2,选取阀门开度u 为控制量。
2、输入量和输出量的模糊化将偏差e 划分为5个模糊集,负大(NB)、负小(NS)零(Z0)、正小(PS)正大 (PB , e 为负表示当前水位低于目标水位,e 为正表示当前水位高于目标水位。
设定e 的取inpul ・ output值范围为[-3, 3],隶属度函数如下。
同理,将偏差的变化量ec 划分为5个模糊集,负大(NB)、负小(NS)零 (Z0)正小(PS)正大(PB), ec 为负表示该时刻水位比上一时刻水位小, ec 为郑 表示该时刻水位比上一时刻水位大,。
设定ec 的取值范围为[-3,3],隶属度函数 如下。
d一壬」SEE古•■N 18 G 4 2 OQ o.u a a-LI巴CDqE住告0)2冒0 ec1233、制定模糊规则模糊规则的制定是模糊控制的核心内容, 控制性能的好坏很大程度上由模糊 规则决定。
ecNBNS ZO PS PB NB PB PB PB PB PB NS PB PB PS PS ZO ZO PB PS ZO NS NB PSZO PS NS NB NB PBNBNBNBNBNB将上述用语言描述的规则转化为“ IF A ,THEN B 的语句如下: 1. If (e is NB) and (ec is NB)then (u i s PB 。
2. If (e is NB) and (ec is NS)then (u i s PB) 3. If (e is NB) and (ec is ZO)then (u i s PB) 4. If (e is NB) and (ec is PS)then (u i s PB) 5. If(e is NB) and (ec is PB)then (u i s PB )-4 3 2 -1同样将控制量u 划分为5个模糊集,负大(NB)、负小(NS)零(ZO)正小(PS) 正大(PB ,u 为负表示减小控制量,u 为正表示增大控制量。
Matlab-的-Fuzzy-工具箱实现模糊控制(rulelist的确定)
引用如何在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下的仿真工作仅仅用于仿真目的,如果实际产品设计能继承仿真的工作成果,将事半功倍。
用MATLAB编写模糊控制表计算程序
clc;clear;E = [1,0.8,0.7,0.4,0.1,0,0,0,0,0,0,0,0;0.2,0.7,1,0.7,0.3,0,0,0,0,0,0,0,0;0,0.1,0.3,0.7,1,0.7,0.2,0,0,0,0,0,0;0,0,0,0,0.1,0.6,1,0,0,0,0,0,0;0,0,0,0,0,0,1,0.6,0.1,0,0,0,0;0,0,0,0,0,0,0.2,0.7,1,0.7,0.3,0.1,0;0,0,0,0,0,0,0,0,0.2,0.7,1,0.7,0.3;0,0,0,0,0,0,0,0,0.1,0.4,0.7,0.8,1]%%8*13 EC =[1,0.7,0.3,0,0,0,0,0,0,0,0,0,0;0.3,0.7,1,0.7,0.3,0,0,0,0,0,0,0,0;0,0,0.3,0.7,1,0.7,0.3,0,0,0,0,0,0;0,0,0,0,0.3,0.7,1,0.7,0.3,0,0,0,0;0,0,0,0,0,0,0.3,0.7,1,0.7,0.3,0,0;0,0,0,0,0,0,0,0,0.3,0.7,1,0.7,0.3;0,0,0,0,0,0,0,0,0,0,0.3,0.7,1]%%7*13U=[1,0.7,0.3,0,0,0,0,0,0,0,0,0,0;0.3,0.7,1,0.7,0.3,0,0,0,0,0,0,0,0;0,0,0.3,0.7,1,0.7,0.3,0,0,0,0,0,0;0,0,0,0,0.3,0.7,1,0.7,0.3,0,0,0,0;0,0,0,0,0,0,0.3,0.7,1,0.7,0.3,0,0;0,0,0,0,0,0,0,0,0.3,0.7,1,0.7,0.3;0,0,0,0,0,0,0,0,0,0,0.3,0.7,1]%%7*13rulelist= [1,1,1,1,2,4,4;1,1,1,1,2,4,4;2,2,2,2,4,5,5;2,2,3,4,5,6,6;2,2,3,4,5,6,6;3,3,4,6,6,6,6;4,4,6,7,7,7,7;4,4,6,7,7,7,7]%%8*7for iii=1:13 %偏差E的模糊值控制for jjj=1:13 %偏差率EC的模糊值控制for ii=1:8 %偏差E的模糊规则控制for jj=1:7 %偏差变化率EC的模糊规则控制A_rulelist = rulelist(ii,jj); %查模糊规则表%******计算C1A'************A = E(ii,:); %取A'C_A = U(A_rulelist,:); %取Cifor i=1:13 %求R1Afor j=1:13if(A(i) > C_A(1,j))Ra(i,j) = C_A(1,j);elseRa(i,j) = A(i);endendendAA = zeros(1,13); %取AA=A' 如AA=[1,0,0,0,0,0,0,0,0,0,0,0,0]; %AA(1,iii) = E(ii,iii);AA(1,iii) = 1;for i=1:13 %先取小for j=1:13if(AA(j) > Ra(j,i))A_qux(j,i) = Ra(j,i);elseA_qux(j,i) = AA(j);endendendfor i=1:13 %再取大,,,求和CiAmax = A_qux(1,i);for j=1:13if(max < A_qux(j,i))max = A_qux(j,i);endendCiA(i) = max;end%********CiA计算完毕*********%*******计算CiB'*************B = EC(jj,:); %取B' ???C_B = U(A_rulelist,:); %取Ci ??? for i=1:13 %求R1Bfor j=1:13if(B(1,i) > C_B(1,j))Rb(i,j) = C_B(1,j);elseRb(i,j) = B(1,i);endendendBB = zeros(1,13); %取BB=B' 如BB=[1,0,0,0,0,0,0,0,0,0,0,0,0]; %BB(1,jjj) = EC(jj,jjj);BB(1,jjj) = 1;for i=1:13 %先取小for j=1:13if(BB(j) > Rb(j,i))B_qux(j,i) = Rb(j,i);elseB_qux(j,i) = BB(j);endendendfor i=1:13 %再取大,,,求和CiAmax = B_qux(1,i);for j=1:13if(max < B_qux(j,i))max = B_qux(j,i);endendend%*******计算CiB'完毕****%*******计算C1'=CiA'交CiB'*********for i=1:13if CiA(i) > CiB(i)Ci(i) = CiB(i);elseCi(i) = CiA(i);endend%*******计算C1'完毕************C((ii-1)*7+jj,:) = Ci; % 将Ci存到数组C中,C是56*13的数组endend%根据式Ui=C'=C1'并C2'并……并C56'for i=1:13max = C(1,i);for j=1:56max = C(j,i);endendUi(i) = max;end%用重心法进行解模糊运算,并映射为实际的控制量sum_fenz = 0;sum_fenm = 0;for i=1:13sum_fenz = sum_fenz + (i-7)*Ui(i);sum_fenm = sum_fenm + Ui(i);endcore = sum_fenz/sum_fenm;U_control(iii,jjj) = core;endendU_control = round(U_control.*10000)/10000; %对控制量保留小数点后两位。
基于MATLAB生成模糊控制规则离线查询表
0 引言模糊控制隶属于智能控制,是一种基于规则的近似推理的非线性智能控制。
如果说,传统的控制方式需要被控对象精确的数学模型,而模糊控制则是以人类智能活动的角度为基础实施控制,因此,在实际中,传统控制方法无能为力的非线性场合,模糊控制却能起到很好的控制作用。
因此,实际应用中,由于系统复杂、很难建立精确数学模型的非线性系统,模糊控制已经成为一种最有效的控制方法。
模糊控制规则表是模糊控制的核心,其描述的是输入的偏差、偏差变化量与控制的输出之间的对应关系,采用手工计算方式,量大且费时;采用在线计算方式,往往又影响系统被控对象的实时控制效果。
因此,在应用模糊控制时,首先针对输入的不同组合,采用离线计算方式算出相应的控制输出量,构成模糊控制规则查询表,实际控制时再将模糊控制规则查询表嵌入在各种控制平台,如单片机、PLC 等,实现离线计算、在线查表,这样,一方面减少了模糊控制的在线运算量,同时又实现了模糊控制的实时控制效果。
实际应用中发现,对模糊控制规则表的生成,在离散论域分档较少的条件下,多采用手工计算,而在离散论域分档较多的条件下,手工计算量太大,用MATLAB 软件编程实现,对MATLAB 软件的编程能力要求又较高,因此,本文以二维温度模糊控制规则查询表的生成为例来说明如何简单有效的利用MATLAB 软件生成模糊控制规则离线查询表。
1 实例分析应用MATLAB2014a 软件说明生成模糊规则离线查询表的过程。
设二维温度模糊控制器[1 2]的输入为温度偏差E 和温度偏差变化率EC,输出为温控器输出电压U。
模糊控制器模型见图1。
2 模糊控制规则离线查询表生成步骤[34 5](1)利用模糊逻辑控制工具箱生成温度模糊推理系统在MATLAB2014a 命令窗口中输入fuzzy 打开模糊控制工具箱,编辑输入输出变量的隶属度函数和模糊控制规则,然后将模糊推理系统保存为mytest.fis。
设温度偏差E、偏差变化率EC 和温控器输出电压U 的模糊论域为[-6 6],三者的语言变量赋值均为{NB,NM,NS,Z,PS,PM,PB},各语言值的隶属函数均采用三角函数,如图2所示,并根据温度模糊控制规则表1逐条添加模糊控制规则,清晰化采用加权平均法。
智能控制作业
题目1:求取模糊控制表(课本62-67页,matlab编程求解)解:MATLAB编程如下:%实现功能:计算模糊控制表clcclear%x的隶属度表,其中x代表的是误差eX=[1.0 0.8 0.7 0.4 0.1 zeros(1,8);0.2 0.7 1.0 0.7 0.3 zeros(1,8);0 0.1 0.3 0.7 1.0 0.7 0.2 zeros(1,6);zeros(1,4) 0.1 0.6 1.0 zeros(1,6);zeros(1,6) 1.0 0.6 0.1 zeros(1,4);zeros(1,6) 0.2 0.7 1.0 0.7 0.3 0.1 0;zeros(1,8) 0.2 0.7 1.0 0.7 0.3;zeros(1,8) 0.1 0.4 0.7 0.8 1.0];%y的隶属度表,其中y表示的是误差的导数Y=[1.0 0.7 0.3 zeros(1,10);0.3 0.7 1.0 0.7 0.3 zeros(1,8);0 0 0.3 0.7 1.0 0.7 0.3 zeros(1,6);zeros(1,4) 0.3 0.7 1.0 0.7 0.3 zeros(1,4);zeros(1,6) 0.3 0.7 1.0 0.7 0.3 0 0;zeros(1,8) 0.3 0.7 1.0 0.7 0.3;zeros(1,10) 0.3 0.7 1];%z的隶属度表,其中z表示的是控制量uZ=Y;%模糊控制规则表%其中: 1代表NB,2代表NM,3代表NS% 4代表ZE,5代表PS,6代表PM,7代表PBrule=[1 1 1 1 2 4 4;1 1 1 12 4 4;2 2 2 2 4 5 5;2 23456 6;2 23456 6;3 34 6 6 6 6;4 4 6 7 7 7 7;4 4 6 7 7 7 7];Set=[-6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6]; %模糊集合control_data=[]; %control_data待求的模糊控制表for i=1:13 %控制模糊表的行变量control=[];for j=1:13 %控制模糊表的列变量x0=Set(i);y0=Set(j);CCC=[]; %存放Ci;CCC矩阵将来存放的是56*13维的矩阵for m=1:8 %模糊控制规则表的行变量Ai=X(m,:); %Ai为列向量for n=1:7 %模糊控制规则表的列变量Bi=Y(n,:); %Bi为列向量Ci=Z(rule(m,n),:); %模糊控制规则表的控制变量%得到RiA矩阵RiA=zeros(13,13);for p=1:13for q=1:13RiA(p,q)=min(Ai(p),Ci(q));endend%AA表示A' 矩阵AA=zeros(1,13);[a1,b1]=find(x0==Set);AA(a1,b1)=1;%最小最大原则求取CiACIA_temp=zeros(13,13);for ii=1:13CIA_temp(:,ii)=min(AA',RiA(:,ii));%先取小endCIA=max(CIA_temp);%再取大%%%%%%%%%%%%%%%%%%%%%%%%%得到RiB矩阵RiB=zeros(13,13);for p=1:13for q=1:13RiB(p,q)=min(Bi(p),Ci(q));endend%BB表示B' 矩阵BB=zeros(1,13);[a2,b2]=find(y0==Set);BB(a2,b2)=1;%最小最大原则求取CiBCIB_temp=zeros(13,13);for ii=1:13CIB_temp(:,ii)=min(BB',RiB(:,ii));endCIB=max(CIB_temp);%求CIA和CIB的交C=min(CIA,CIB);CCC=[CCC;C];endend%求出56个Ci的并C_max=max(CCC);%利用重心法解模糊temp=C_max.*Set;control_temp=sum(temp)/sum(C_max);control=[control,control_temp];endcontrol_data=[control_data;control];enddisp('模糊控制表如下:');control_data=roundn(control_data,-2) %保留2位小数且四舍五入fid=fopen('kongzhi.txt','w');count=fprintf(fid,'%d\n',control);fclose(fid);运行结果如下:题目二:被控对象)14)(12(20)(++=s s s G 给定为100,设计一个模糊控制器实现对象系统的控制。
模糊控制的Matlab仿真实例分析
.
18
在Simulink编辑窗口左边的模块浏览区可以看 到在水箱仿真系统中包括水箱子模型、阀门子 模型及 PID 控制子模型。直接在浏览区中点 击或右键点击它们,并在弹出菜单中选择 [ look under mask 】 ,可以看到这些模块实 现的细节结构,如图 所示。
.
19
.
20
.
21
这里暂时不讨论具体的系统模型的构造问题,我们可 以先在这个已经建立好的系统模型上进行修改,体验 模糊逻辑与仿真环境结合使用的优势。
字分别代表服务和食
物的质量( 10 表示
非常好, 0 表示非常
差),这时小费与它
.
们之间的关系又应4当8
如何反映呢?
假设是二元线性关系 用下列 MATLAB 语句可绘出下图 。
.
49
.
50
可以看到,如果不考虑服务质量因素比食物质量因素对 于小费的支付占有更大的比重,上面的关系图形已经能 够反映一些实际的情况了。假如希望服务质量占小费的 80 % , 而食物仅占 20 %。这里可以设定权重因子:
注意将鼠标箭头放置图内,移动鼠标可得到不同 角度的视图,如下图所示。
.
15
Matlab模糊控制仿真演示例子
模型sltank.mdl ——使用模糊控制器对水箱水位进 行控制。
假定水箱有一个进水口和一个出水口,可以通过控 制一个阀门来控制流入的水量(即水位高度),但 是流出的速度取决于出水口的半径(定值)和水箱 底部的压力(随水箱中的水位高度变化)。系统有 许多非线性特性。
真。
.
31
学习 MATLAB 仿真工具的一个快速有效的方法就 是学习示例模型,通过看懂这些模型和模块的功
能以及搭建过程,可以很快熟悉和掌握如何使用 MATLAB 仿真工具来设计和搭建自己独特的模型。
模糊控制实验大纲
实验一熟悉模糊工具箱一、目的和要求1.目的(1)通过本次实验,进一步了解模糊控制的基本原理、模糊模型的建立和模糊控制器的设计过程。
(2)掌握MATLAB模糊逻辑工具箱的图形用户界面设计模糊控制器的过程。
2.要求(1)充分理解实验内容,并独立完成实验报告。
(2)实验报告要求:实验题目、实验具体内容、结果分析、收获或不足。
二、实验内容1、利用matlab中的模糊逻辑工具箱提供的图形用户界面(GUI)工具设计一个两输入、一输出的模糊控制器,控制器的要求如下:(1)设模糊控制器的输入变量为:误差E和误差变化EC,输出量为U。
(2)隶属度函数:◆隶属度函数均为三角函数◆E、EC和U的模糊语言变量集均为{NB,NM,NS,ZO,PS,PM,PB}◆E和EC论域为{-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6}◆U的论域为{-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7}(3)控制规则表如下:表1 模糊控制表三.实验步骤模糊逻辑工具箱提供的图形用户界面(GUI)工具有五个:模糊推理系统(FIS)编辑器;隶属函数编辑器;模糊规则编辑器;模糊规则观察器;输出曲面观察器。
1.模糊控制器结构设计FIS处理系统有多少个输入变量,输出变量,名称是什么,模糊算子“与”(min,prod乘积,custom自定义),“或”(max大,probor 概率统计方法,custom),推理方法(min,prod,custom),聚类方法(max,probor,sum,custom),解模糊的方法(centroid 质心法,bisector中位线法,middle of maximum,largest of maximum,smallest of maximum)。
Matlab的FIS界面如图3所示。
图3 模糊推理系统(FIS)界面2.隶属函数编辑器:确定各个变量的论域和显示范围(左下角编辑区内),如图4所示。
