当前位置:文档之家› 模糊控制实验

模糊控制实验

中南大学
模糊控制课程实验报告
学生姓名:彭雄威_____________ 指导教师: ________________ 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 O S O T S O S O O .o rn .000000o o o o o o o o o o o o o m o z o T Z I lr n m % 咨s o m .E o o o o o o o o o o o o o o o m .o o m .o z .o 」l<.o O T Z .O m o O
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 <A_qux(j,i)) max = A_qux(j,i);
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
BB = zeros(l,13); %取BB=B* 如BB司1,0,0,0,0,0,0,0,0,0,0,0,0];
%BB(l,jjj) = EC(jj,jjj);
fori=l:13 % 先取小
forj=l:13
if(BB(j) >Rb(jJ»
B_qux(j,i) = Rb(jJ);
else
B_qux(j,i) = BB{j);
end
end
end
fori=l:13 %再取大,,,求和CiA max = B_qux(lJ);
forj=l:13
if(max <B_qux(j,i))
max = B_qux(j,i);
end
end
CiB(i) = max;
end
%****♦*♦计算CiB,完毕****
%*******计算CT=CiA,交ciB»********
for i=l:13
ifCiA(i) >CiB(i)
Ci(i) = CiB(i);
else
Ci(i)= CiA(i);
end
end
%****♦*♦计算CT完毕♦*♦*♦*♦*****
C((ii-l)*7+jj,:) = Ci; % 将Ci 存到数组C 中,C 是56*13 的数组end
end
%根据式ui=c=cr并CZ并 (3)
for i=l:13
max = C(1J);
for j=l:56
if(max < C(j,i))
max = C(j,i);
end
end
Ui(i) = max;
end
%用重心法进行解模糊运算,并映射为实际的控制量sum_fenz = 0;
sumfenm = 0;
for i=l:13
sumfenz = sumfenz + (i-7)*Ui(i); sum_fenm = sum_fenm + Ui(i);
end
core = sumfenz/sumfenm;
U_control(iiijjj) = core;
end
end
U_control = round(U_controL* 10000)/10000; % 对控制量保留小数点后两位U_control 计算结果:
U control =
实验四
控制系统仿真实验。

利用MATLAB的SIMULINK设计一个控制系统,在库中找到所需的各模块,连接各模块,启动仿真,显示输出曲线,观察控制性能,不理想时适当修改有关参数或控制规则,获得满意的控制效果。

(对象采用二阶以上)
被控对象模型为:
?+ 55+3
simulink结构图如下:
得到如下曲线:。

相关主题