matlab计算模糊控制规则表
模糊控制规则表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,设计一个模糊控制器实现对象系统的控制。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序运行结果:输出量的模糊集合表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。