模糊控制实验演示教学.docx
《模糊控制实验演示教学.docx》由会员分享,可在线阅读,更多相关《模糊控制实验演示教学.docx(16页珍藏版)》请在冰豆网上搜索。
模糊控制实验演示教学
中南大学
模糊控制课程实验报告
学生姓名:
彭雄威
指导教师:
袁艳
学院:
信息科学与工程学院
学号:
114611167
实验一:
本系统设计基于MATLAB图形模糊推理系统,设计步骤如下:
打开MATLAB,输入指令fuzzy,打开模糊逻辑工具箱的图形用户界面窗口,新建一个Mamdani模糊推理系统。
(1)增加一个输入变量,将输入变量命名为E、Ec,将输出变量命名U。
这样就建立了一个两输入单输出的模糊推理系统。
如图1.1所示。
图1.1增加一个输入变量
(2)设计模糊化模块:
设计隶属度函数论域范围
图3.2设计水位误差E模块
3.3设计水位误差Ec模块
图3.4设计水位输出U模块
(4)模糊控制器的规则设计
(5)通过观察器观察规则情况
在菜单view中的rules和surface选项分别对应得是规则观测器和曲面观测器。
图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的论域为[-11],误差变化Ec的论域为[-0.10.1]内可以任意取值。
a=readfis('fuzzf')
a=
name:
'fuzzf'
type:
'mamdani'
andMethod:
'min'
orMethod:
'max'
defuzzMethod:
'centroid'
impMethod:
'min'
aggMethod:
'max'
input:
[1x2struct]
output:
[1x1struct]
rule:
[1x5struct]
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工具箱,包括模糊关系矩阵的求取及模糊推理、模糊判决。
表1偏差E的赋值表
e
E
-6
-5
-4
-3
-2
-1
0
1
2
3
4
5
6
NB
1
0.8
0.7
0.4
0.4
0.1
0
0
0
0
0
0
0
NM
0.2
0.7
1
0.7
0.3
0
0
0
0
0
0
0
0
NS
0
0.1
0.3
0.7
1
0.7
0.2
0
0
0
0
0
0
NO
0
0
0
0
0.1
0.6
1
0
0
0
0
0
0
PO
0
0
0
0
0
0
1
0.6
0.1
0
0
0
0
PS
0
0
0
0
0
0
0.2
0.7
1
0.7
0.3
0.1
0
PM
0
0
0
0
0
0
0
0
0.2
0.7
1
0.7
0.3
PB
0
0
0
0
0
0
0
0
0.1
0.4
0.7
0.8
1
表2偏差变化率Ec的赋值表
ec
Ec
-6
-5
-4
-3
-2
-1
0
1
2
3
4
5
6
NB
1
0.7
0.3
0
0
0
0
0
0
0
0
0
0
NM
0.3
0.7
1
0.7
0.3
0
0
0
0
0
0
0
0
NS
0
0
0.3
0.7
1
0.7
0.3
0
0
0
0
0
0
O
0
0
0
0
0.3
0.7
1
0.7
0.3
0
0
0
0
PS
0
0
0
0
0
0
0.3
0.7
1
0.7
0.3
0
0
PM
0
0
0
0
0
0
0
0
0.3
0.7
1
0.7
0.3
PB
0
0
0
0
0
0
0
0
0
0
0.3
0.7
1
表3推理语言规则表
Ec
E
NB
NM
NS
O
PS
PM
PB
NB
PB
PB
PB
PB
PM
O
O
NM
PB
PB
PB
PB
PM
O
O
NS
PM
PM
PM
PM
O
NS
NS
NO
PM
PM
PS
O
NS
NM
NM
PO
PM
PM
PS
O
NS
NM
NM
PS
PS
PS
O
NM
NM
NM
NM
PM
O
O
NM
NS
NS
NS
NS
PB
O
O
NM
NS
NS
NS
NS
表4控制量U的赋值表
U
-6
-5
-4
-3
-2
-1
0
1
2
3
4
5
6
NB
1
0.7
0.3
0
0
0
0
0
0
0
0
0
0
NM
0.3
0.7
1
0.7
0.3
0
0
0
0
0
0
0
0
NS
0
0
0.3
0.7
1
0.7
0.3
0
0
0
0
0
0
O
0
0
0
0
0.3
0.7
1
0.7
0.3
0
0
0
0
PS
0
0
0
0
0
0
0.3
0.7
1
0.7
0.3
0
0
PM
0
0
0
0
0
0
0
0
0.3
0.7
1
0.7
0.3
PB
0
0
0
0
0
0
0
0
0
0
0.3
0.7
1
程序如下:
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*13
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
rulelist=[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
foriii=1:
13%偏差E的模糊值控制
forjjj=1:
13%偏差率EC的模糊值控制
forii=1:
8%偏差E的模糊规则控制
forjj=1:
7%偏差变化率EC的模糊规则控制
A_rulelist=rulelist(ii,jj);%查模糊规则表
%******计算C1A'************
A=E(ii,:
);%取A'
C_A=U(A_rulelist,:
);%取Ci
fori=1:
13%求R1A
forj=1:
13
if(A(i)>C_A(1,j))
Ra(i,j)=C_A(1,j);
else
Ra(i,j)=A(i);
end
end
end
AA=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;
fori=1:
13%先取小
forj=1:
13
if(AA(j)>Ra(j,i))
A_qux(j,i)=Ra(j,i);
else
A_qux(j,i)=AA(j);
end
end
end
fori=1:
13%再取大,,,求和CiA
max=A_qux(1,i);
forj=1:
13
if(maxmax=A_qux(j,i);
end
end
CiA(i)=max;
end
%********CiA计算完毕*********
%*******计算CiB'*************
B=EC(jj,:
);%取B'?
?
?
C_B=U(A_rulelist,:
);%取Ci?
?
?
fori=1:
13%求R1B
forj=1:
13
if(B(1,i)>C_B(1,j))
Rb(i,j)=C_B(1,j);
else
Rb(i,j)=B(1,i);
end
end
end
BB=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;
fori=1:
13%先取小
for