matlab计算模糊控制表

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Matlab计算模糊控制表

实现程序如下:

clc; %清空命令窗口

clear; %清空工作空间

e=[1,,,,,0,0,0,0,0,0,0,0;

,,1,,,0,0,0,0,0,0,0,0;

0,,,,1,,,0,0,0,0,0,0;

0,0,0,0,,,1,0,0,0,0,0,0;

0,0,0,0,0,0,1,,,0,0,0,0;

0,0,0,0,0,0,,,1,,,,0;

0,0,0,0,0,0,0,0,,,1,,;

|

0,0,0,0,0,0,0,0,,,,,1] %误差的隶属度函数表,8*13的矩阵

eb=[1,,,0,0,0,0,0,0,0,0,0,0;

,,1,,,0,0,0,0,0,0,0,0;

0,0,,,1,,,0,0,0,0,0,0;

0,0,0,0,,,1,,,0,0,0,0;

0,0,0,0,0,0,,,1,,,0,0;

0,0,0,0,0,0,0,0,,,1,,;

0,0,0,0,0,0,0,0,0,0,,,1] %误差变化率的隶属度函数表,7*13的矩阵;

u=[1,,,0,0,0,0,0,0,0,0,0,0;

,,1,,,0,0,0,0,0,0,0,0;

0,0,,,1,,,0,0,0,0,0,0;

^

0,0,0,0,,,1,,,0,0,0,0;

0,0,0,0,0,0,,,1,,,0,0;

0,0,0,0,0,0,0,0,,,1,,;

0,0,0,0,0,0,0,0,0,0,,,1] %输出控制量u,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=56条规则;for ey=1:13 % 输入变量e的13个取值:-6——6;

for eby=1:13 %输入变量eb的13个取值:-6——6;

for ex=1:8 % 输入变量e的8个语言变量NB----PB;

for ebx=1:7 % 输入变量eb的7个语言变量NB---PB; arule=rulelist(ex,ebx); %取一条规则;

C=u(arule,:);%取这条规则的C的隶属度;代表取一行A=e(ex,:);%取这条规则的A的隶属度;代表取一行

for i=1:13;

for j=1:13;

if (A(i)>C(1,j));

Ra(i,j)= C(1,j);

else

Ra(i,j)=A(i);

end

end

end% 算A—C的蕴含关系;

AP=zeros(1,13);

AP(1,ey)=e(ex,ey);

for i=1:13;

for j=1:13;

if (AP(j)>Ra(j,i));

GDA(j,i)= Ra(j,i);

else

GDA(j,i)=AP(j);

end

end

end%求合成运算开始的取小;

for i=1:13;

max=GDA(1,i);

<

for j=1:13;

if (max

max= GDA(j,i);

end

end

CPA(i)=max;

end % 合成运算取大结束;CPA算出来了;

arule=rulelist(ex,ebx); %取一条规则;

C=u(arule,:);%取这条规则的C的隶属度;代表取一行B=eb(ebx,:);%取这条规则的A的隶属度;代表取一行》

for i=1:13;

for j=1:13;

if (B(i)>C(1,j));

Rb(i,j)= C(1,j);

else

Rb(i,j)=B(i);

end

end

end% 算B—C的蕴含关系;

BP=zeros(1,13);

BP(1,eby)=eb(ebx,eby);

for i=1:13;

for j=1:13;

if (BP(j)>Rb(j,i));

GDB(j,i)= Rb(j,i);

else

GDB(j,i)=BP(j);

end

end

end%求合成运算开始的取小;for i=1:13;

*

max=GDB(1,i);

for j=1:13;

if (max

max= GDB(j,i);

end

CPB(i)=max;

end; % 合成运算取大结束;CPB算出来了;

for i=1:13

if(CPA(i)>CPB(i))

CP(i)=CPB(i);

else

CP(i)=CPA(i);

end

end % 第一个CP1计算结束;将来C是56*13的矩阵;CB((ex-1)*7+ebx,:)=CP;

end

end

for i=1:13;

max=CB(1,i);

|

for j=1:56;

if(max

max=CB(j,i);

end

相关文档
最新文档