当前位置:文档之家› 模糊控制规则表生成程序

模糊控制规则表生成程序

模糊控制规则表生成程序
%偏差E的赋值表
E=[1.0 0.8 0.7 0.4 0.1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.2 0.7 1.0 0.7 0.3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.1 0.3 0.7 1.0 0.7 0.2 0.0 0.0 0.0 0.0 0.0 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.0
0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.6 0.1 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.2 0.7 1.0 0.7 0.3 0.1 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.2 0.7 1.0 0.7 0.3
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.1 0.4 0.7 0.8
1.0];
%偏差变换率EC的赋值表
Ec=[1.0 0.7 0.3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.3 0.7 1.0 0.7 0.3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.3 0.7 1.0 0.7 0.3 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.3 0.7 1.0 0.7 0.3 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.3 0.7 1.0 0.7 0.3 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.3 0.7 1.0 0.7 0.3
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.3 0.7
1.0];
%输出U的赋值表
u=[1.0 0.7 0.3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.3 0.7 1.0 0.7 0.3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.3 0.7 1.0 0.7 0.3 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.3 0.7 1.0 0.7 0.3 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.3 0.7 1.0 0.7 0.3 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.3 0.7 1.0 0.7 0.3
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.3 0.7 1.0];
%推理语言规则表
gz=[ 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 ];
i=1;
for gzh=1:8
for gzl=1:7
a=E(gzh,:); %取E 的赋值表的莫一行,并赋值给a
a=a'; %a 取专置
b=Ec(gzl,:); %取Ec 的赋值表的莫一行,并赋值给b
% T E Ec •
for m=1:13
for n=1:13
if a(m,1)>=b(1,n)
r(m,n)=b(1,n);
else
r(m,n)=a(m,1);
end
end
end
% 把T E Ec •得到的矩阵变为行向量
k=1;
for m=1:13
for n=1:13
Ei_Eci(1,k)=r(m,n);
k=k+1;
end
end
Ei_Eci=Ei_Eci'; %把刚才得到的行向量变为列向量,方便与U 的行向量相乘
m=gz(gzh,gzl); %取U 的某一行
U=u(m,:);
%T E Ec U •⨯
for m=1:169
for n=1:13
if Ei_Eci(m,1)>=U(1,n)
Rii(m,n)=U(1,n);
else
Rii(m,n)= Ei_Eci(m,1);
end
end
end
%得到一条规则的Ri ,并且把Ri 变成行向量,以方便程序实现1n i R Ri ==U k=1;
for m=1:169
for n=1:13
Ri(i,k)=Rii(m,n);
k=k+1;
end
end
i=i+1;
end
end
%1n i R Ri
==U
Ri=Ri';
for m=1:2197
for n=1:i-1
if Ri(m,1)>=Ri(m,n)
Ri(m,1)=Ri(m,1);
else
Ri(m,1)=Ri(m,n);
end
end
end
%得到R
k=1;
for m=1:169
for n=1:13
R(m,n)=Ri(k,1);
k=k+1;
end
end
%()[()()]U k E k Ec k R =⨯o
aa=[0 0 0 0 0 0 0 0 0 0 0 0 0 ]; %对E ,Ec 采用单点集 for j=1:13
bbb=[0 0 0 0 0 0 0 0 0 0 0 0 0 ];
aa(1,ii)=1;
bbb(1,j)=1;
a=aa';
b=bbb;
k=1;
%()()E k Ec k ⨯
for m=1:13
for n=1:13
if a(m,1)>=b(1,n)
d(1,k)=b(1,n);
k=k+1;
else
d(1,k)=a(m,1);
k=k+1;
end
end
end
%[()()]E k Ec k R ⨯o
for m=1:13
for n=1:169
if d(1,n)>=R(n,m)
g(1,n)=R(n,m);
else
g(1,n)=d(1,n);
end
end
for n=1:169
if g(1,1)>=g(1,n)
g(1,1)=g(1,1);
else
g(1,1)=g(1,n);
end
end
f(j,m)=g(1,1);
end
%利用加权平均法得到u
i=-6;z=0;k=0;
z=f(j,m)*i+z;
k=f(j,m)+k;
i=i+1;
end
bb=z/k;
u(ii,j)=bb; %u为控制表的矩阵end
end
附录二实验二控制规则表。

相关主题