声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2503|回复: 4

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

[复制链接]
发表于 2009-1-5 20:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
最近做湿度模糊控制,我用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 编辑 ]

matlab模糊控制表程序.txt

2.91 KB, 下载次数: 29

回复
分享到:

使用道具 举报

发表于 2009-1-7 17:16 | 显示全部楼层
你设的是[0 6],
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
 楼主| 发表于 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',[0 4]);                          %给FIS添加新的输入变量u%
b=addmf(b,'input',1,'PB','gaussmf',[1.5 3]);                %将隶属度函数PL添加到FIS%
b=addmf(b,'input',1,'PM','gaussmf',[1.399 2]);           %将隶属度函数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',[1.399 -2]);          %将隶属度函数NM添加到FIS%
b=addmf(b,'input',1,'NB','gaussmf',[1.5 -3]);          %将隶属度函数NL添加到FIS%
b=addmf(b,'input',2,'PB','trimf',[1 3 5]);           %将第二个输入的隶属度函数PL添加到FIS%
b=addmf(b,'input',2,'PM','trimf',[0 2 4]);          %将第二个输入的隶属度函数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',[1.5 4]);          %将输出的隶属度函数PL添加到FIS%
b=addmf(b,'output',1,'PM','trimf',[0 2 4]);         %将输出的隶属度函数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([i j],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
再帮忙看看吧,谢谢了!
发表于 2009-11-8 15:12 | 显示全部楼层
哪位高手解答一下,我也希望能搞懂
发表于 2009-11-9 09:41 | 显示全部楼层
规则里面就没有计算到3 所以才能有这个数值
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-24 19:36 , Processed in 0.062577 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表