模糊控制实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中南大学
模糊控制课程实验报告
学生姓名:彭雄威_____________ 指导教师: ________________ m _______ 学院:信息科学与工程学院
学号:114611167 ______________
实验一:
本系统设计基于MATLAB图形模糊推理系统,设计步骤如下:打开MATLAB,输入指令fuzzy,打开模糊逻辑工具箱的图形用户界面窗口,新建一个Mamdani模糊推理系统。
(1) 增加一个输入变量,将输入变量命名为E、Ec,将输出变量命名U。这样就建立了一个两输入单输出的模糊推理系统。如图1.1所示。
图1.1增加一个输入变量
(2) 设计模糊化模块:设计隶属度函数论域范围
图3.2设计水位误差E模块
3.3设计水位误差EC模块
图3.4设计水位输出U模块
(4)模糊控制器的规则设计
le Editor: fuzzf
(5)通过观察器观察规则情况
在菜单view中的rules和surface选项分别对应得是规则观测器和曲而观测器。123 4567891011121314151617181920212223242526272829”
Input: 20】Plot points: ioi Move: [ left 11 rg ] |down] ( up ]
Opened system tuzzf, 49 rules| 5 Close |
图3.7规则观测器
图3.6曲面观测器(6)保存编辑好的FIS文件
实验二
利用MATLAB软件的M文件编辑器和实验一所生成的fuzzf.FIS文件,在M 文件编辑器中输入:a=readfis('fuzzf');
evalfis([・0.5广0.07;-0.5,0;・0.5,0.07; 0,・0.07;0,0;0,0.07;0.5广0.07;0.5,0;0.5,0.07],a)
便可得fuzzf.FIS文件的模糊控制査询表,其中的数据在水位误差E的论域为[・ 1 1], 误差变化EC的论域为[.0.1 0.1]内可以任意取值。
a=readfis(' fuzzf')
a =
name:' fuzzf'
type: 'mamdani'
andMethod: 'min'
orMethod: 'max'
defuzzMethod: 'centroid'
impMethod: 'min'
aggMethod: 'max'
input: [1x2 struct]
output: [lxl struct]
rule: [1x5 struct]
a=readfis(' fuzzf'); evalfis([-0.5,-0.07;-0.5,0;-0.5,0.07;0,-0.07;0,0;0,0.07;0.5,-0.07;0.5,0;0.5,0.07],a)
ans =
-0.2000
-0.4444
-0.4667
0.1363
-0.0014
-0.2271
0.4000
0.4412
0.1333
实验三
利用MATLAB软件的M文件编辑器(也可选择C语言)完成模糊控制查询表的计算。
注意:全部工作都由程序实现,不利用FIS文件,不使用Fuzzy I具箱,包括模糊关系矩阵的求取及模糊推理、模糊判决。
表控制量的赋值表
状6 m l *z %*n r o l *8%%H oo o z .O T Z o z o o o o o o d o O O O O O O T 9.O T O O O O O o o o o o o z o z o I Z o m o T o o o o o o o o o o rn .o s O T Z O Z .O o o o o o o o o rH o 寸o z o o J forjjj=l:13 %偏差率EC的模糊值控制 for ii=l:8 %偏差E的模糊规则控制 forjj=l:7 %偏差变化率EC的模糊规则控制 A_rulelist = rulelist(iijj); % 査模糊规则表 %******计算C1A************* A = E(ii,:); %取友 C_A = U(A_rulelist,:); %取Ci for i=l:13 %求口人 for j=l:13 if(A(i)>C_A(l,j)) Ra(iJ)= C_A(1J); else Ra(iJ) = A(i); end end end AA = zeros(l,13); %取AA=A' 如AA=[1,0,0,0,0,0,0,0,0,0,0,0,0]; %AA(l,iii) = E(iijii); AA(lJii)=l; for i=l:13 %先取小 forj=l:13 if(AA(j) > Ra(j,i)) A_qux(j,i) = Ra(jJ); else A_qux(jJ) = AA(j); end end end for i=l:13 %再取大…求和CiA max = A_qux(l,i); forj=l:13 if(max end end CiA(i) = max; end %********CiA 计算完毕********* %*******计算 GB*************B = EC(jj/); %取日 ??? C_B = U(A_rulelist/); %取Ci ??? for i=l:13 %求口日 forj=l:13 Rb(iJ) = C_B(l,j); else Rb(Lj) = end end end