heyafei 发表于 2009-1-5 20:56

[求助]生成模糊控制表问题

最近做湿度模糊控制,我用MATLAB生成了一个模糊控制表,附件为程序模糊控制表程序,我设输出U论域为{0 1 2 3 4}为什么我的控制表里没有输出论域3呢?希望会模糊控制的同学能给我解答,谢谢!输出如下
      0   0   0   0   0   0   0
      0   0   0   0   0   0   0
      0   0   0   0   0   1   2
      0   0   0   0   1   2   4
      0   0   0   1   2   4   4
      0   0   1   2   4   4   4
      0   0   1   2   4   4   4

[ 本帖最后由 xmwhit 于 2009-1-15 10:22 编辑 ]

fao 发表于 2009-1-7 17:16

你设的是,
u的输出:u =

   0   1   0   3   3   4   4   2   2
   0   1   0   3   4   4   4   2   2
   0   2   0   3   4   4   4   2   2
   0   2   3   4   4   4   4   2   2
   0   2   3   4   4   4   4   2   2
   3   2   4   3   4   2   2   2   2
   3   3   4   4   2   2   2   2   2
   3   3   4   4   2   2   2   2   2
   4   4   4   4   2   2   2   2   2

heyafei 发表于 2009-1-8 19:27

发错了 是下面的程序:
clc
clear all
b=newfis('fis');                                       %建立新的FIS系统%
writefis(b,'fuzzy10');                                    %将名为fis的模糊控制系统保存到磁盘%
b=readfis('fuzzy10');                                     %从磁盘中读取名为fis的模糊控制系统%
b=addvar(b,'input','E',[-3 3]);                           %给FIS添加新的输入变量e%
b=addvar(b,'input','EC',[-3 3]);                        %给FIS添加新的输入变量ec%
b=addvar(b,'output','U',);                        %给FIS添加新的输入变量u%
b=addmf(b,'input',1,'PB','gaussmf',);                %将隶属度函数PL添加到FIS%
b=addmf(b,'input',1,'PM','gaussmf',);         %将隶属度函数PM添加到FIS%
b=addmf(b,'input',1,'PS','trimf',[-1 1 3]);            %将隶属度函数PS添加到FIS%
b=addmf(b,'input',1,'Z','trimf',[-2 0 2]);               %将隶属度函数P0添加到FIS%
b=addmf(b,'input',1,'NS','trimf',[-3 -1 1]);         %将隶属度函数NS添加到FIS%
b=addmf(b,'input',1,'NM','gaussmf',);          %将隶属度函数NM添加到FIS%
b=addmf(b,'input',1,'NB','gaussmf',);          %将隶属度函数NL添加到FIS%
b=addmf(b,'input',2,'PB','trimf',);         %将第二个输入的隶属度函数PL添加到FIS%
b=addmf(b,'input',2,'PM','trimf',);          %将第二个输入的隶属度函数PM添加到FIS%
b=addmf(b,'input',2,'PS','trimf',[-1 1 3]);         %将第二个输入的隶属度函数PS添加到FIS%
b=addmf(b,'input',2,'Z','trimf',[-2 0 2]);            %将第二个输入的隶属度函数0添加到FIS%
b=addmf(b,'input',2,'NS','trimf',[-3 -1 1]);         %将第二个输入的隶属度函数NS添加到FIS%
b=addmf(b,'input',2,'NM','trimf',[-4 -2 0]);         %将第二个输入的隶属度函数NM添加到FIS%
b=addmf(b,'input',2,'NB','trimf',[-5 -3 -1]);         %将第二个输入的隶属度函数NL添加到FIS%
b=addmf(b,'output',1,'PB','gaussmf',);          %将输出的隶属度函数PL添加到FIS%
b=addmf(b,'output',1,'PM','trimf',);         %将输出的隶属度函数PM添加到FIS%
b=addmf(b,'output',1,'PS','trimf',[-1 1 3]);          %将输出的隶属度函数PS添加到FIS%
b=addmf(b,'output',1,'Z','trimf',[-2 0 2]);          %将输出的隶属度函数0添加到FIS%
rulelist=[1 1 1 1 1;1 2 1 1 1;1 3 1 1 1; 1 4 2 1 1;      %定义模糊规则%
          1 5 3 1 1;1 6 4 1 1;1 7 4 1 1; 2 1 1 1 1;
          2 2 1 1 1;2 3 1 1 1;2 4 2 1 1; 2 5 3 1 1;
          2 6 4 1 1;2 7 4 1 1;3 1 1 1 1; 3 2 1 1 1;
          3 3 2 1 1;3 4 3 1 1;3 5 4 1 1; 3 6 4 1 1;
          3 7 4 1 1;4 1 1 1 1;4 2 2 1 1; 4 3 3 1 1;
          4 4 4 1 1;4 5 4 1 1;4 6 4 1 1; 4 7 4 1 1;
          5 1 2 1 1;5 2 3 1 1;5 3 4 1 1; 5 4 4 1 1;
          5 5 4 1 1;5 6 4 1 1;5 7 4 1 1; 6 1 4 1 1;
          6 2 4 1 1;6 3 4 1 1;6 4 4 1 1; 6 5 4 1 1;
          6 6 4 1 1;6 7 4 1 1;7 1 4 1 1; 7 2 4 1 1;
          7 3 4 1 1;7 4 4 1 1;7 5 4 1 1; 7 6 4 1 1;
          7 7 4 1 1];
b=addrule(b,rulelist);                                 %在FIS中添加规则%
writefis(b,'fuzzy10');                                  %将名为fis的模糊控制系统保存到磁盘%
b=setfis(b,'defuzzmethod','mom');                        %采用mom(极大平均法)进行反模糊化
showfis(b);
out=evalfis([-3 3],b)
for i=-3:3                                             %创建模糊矩阵%
    for j=-3:3
      u(i+4,j+4)=round(evalfis(,b));
    end
end
u         
注:程序运行后生成的控制表
   0   0   0   0   0   0   0
   0   0   0   0   0   0   0
   0   0   0   0   0   1   2
   0   0   0   0   1   2   4
   0   0   0   1   2   4   4
   0   0   1   2   4   4   4
   0   0   1   2   4   4   4
再帮忙看看吧,谢谢了!

zhuhuanuaa 发表于 2009-11-8 15:12

哪位高手解答一下,我也希望能搞懂

yufeng 发表于 2009-11-9 09:41

规则里面就没有计算到3 所以才能有这个数值
页: [1]
查看完整版本: [求助]生成模糊控制表问题