声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2820|回复: 2

[综合讨论] 模糊PID仿真错误,清高手帮忙

[复制链接]
发表于 2010-3-29 16:33 | 显示全部楼层 |阅读模式

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

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

x
??? Error using ==> parsrule
Output MF index is too high

Error in ==> readfis at 225
  out=parsrule(out,txtRuleList,'indexed');

Error in ==> m329 at 123
          a=readfis('fuzzpid');
代码如下,是<先进PID控制 MATLAB仿真>中第三章中模糊自适应整定PID控制中的例子.但是不出现结果,总出现上面的错误.


clear all; close all;

a=newfis('fuzzpid');

f1=1;
a=addvar(a,'input','e',[-3*f1,3*f1]);
a=addmf(a,'input',1,'NB','zmf',[-3*f1,-1*f1]);
a=addmf(a,'input',1,'NM','trimf',[-3*f1,-2*f1,0]);
a=addmf(a,'input',1,'NS','trimf',[-3*f1,-1*f1,1*f1]);
a=addmf(a,'input',1,'Z','trimf',[-2*f1,0,2*f1]);
a=addmf(a,'input',1,'PS','trimf',[-1*f1,1*f1,3*f1]);
a=addmf(a,'input',1,'PM','trimf',[0,2*f1,3*f1]);
a=addmf(a,'input',1,'PB','smf',[1*f1,3*f1]);

f2=1;
a=addvar(a,'input','ec',[-3*f2,3*f2]);
a=addmf(a,'input',2,'NB','zmf',[-3*f2,-1*f2]);
a=addmf(a,'input',2,'NM','trimf',[-3*f2,-2*f2,0]);
a=addmf(a,'input',2,'NS','trimf',[-3*f2,-1*f2,1*f2]);
a=addmf(a,'input',2,'Z','trimf',[-2*f2,0,2*f2]);
a=addmf(a,'input',2,'PS','trimf',[-1*f2,1*f2,3*f2]);
a=addmf(a,'input',2,'PM','trimf',[0,2*f2,3*f2]);
a=addmf(a,'input',2,'PB','smf',[1*f2,3*f2]);


f3=0.1;
a=addvar(a,'output','u',[-3*f3,3*f3]);
a=addmf(a,'output',1,'NB','zmf',[-3*f3,-1*f3]);
a=addmf(a,'output',1,'NM','trimf',[-3*f3,-2*f3,0]);
a=addmf(a,'output',1,'NS','trimf',[-3*f3,-1*f3,1*f3]);
a=addmf(a,'output',1,'Z','trimf',[-2*f3,0,2*f3]);
a=addmf(a,'output',1,'PS','trimf',[-1*f3,1*f3,3*f3]);
a=addmf(a,'output',1,'PM','trimf',[0,2*f3,3*f3]);
a=addmf(a,'output',1,'PB','smf',[1*f3,3*f3]);


f3=0.02;
a=addvar(a,'output','u',[-3*f3,3*f3]);
a=addmf(a,'output',1,'NB','zmf',[-3*f3,-1*f3]);
a=addmf(a,'output',1,'NM','trimf',[-3*f3,-2*f3,0]);
a=addmf(a,'output',1,'NS','trimf',[-3*f3,-1*f3,1*f3]);
a=addmf(a,'output',1,'Z','trimf',[-2*f3,0,2*f3]);
a=addmf(a,'output',1,'PS','trimf',[-1*f3,1*f3,3*f3]);
a=addmf(a,'output',1,'PM','trimf',[0,2*f3,3*f3]);
a=addmf(a,'output',1,'PB','smf',[1*f3,3*f3]);


f3=1.0;
a=addvar(a,'output','u',[-3*f3,3*f3]);
a=addmf(a,'output',1,'NB','zmf',[-3*f3,-1*f3]);
a=addmf(a,'output',1,'NM','trimf',[-3*f3,-2*f3,0]);
a=addmf(a,'output',1,'NS','trimf',[-3*f3,-1*f3,1*f3]);
a=addmf(a,'output',1,'Z','trimf',[-2*f3,0,2*f3]);
a=addmf(a,'output',1,'PS','trimf',[-1*f3,1*f3,3*f3]);
a=addmf(a,'output',1,'PM','trimf',[0,2*f3,3*f3]);
a=addmf(a,'output',1,'PB','smf',[1*f3,3*f3]);


rulelist=[1 1 7 1 5 1 1;
          1 2 7 1 3 1 1;
          1 3 6 2 1 1 1;
          1 4 6 2 1 1 1;
          1 5 5 3 1 1 1;
          1 6 4 4 2 1 1;
          1 7 4 4 5 1 1;
         
          2 1 7 1 5 1 1;
          2 2 7 1 3 1 1;
          2 3 6 2 1 1 1;
          2 4 5 3 2 1 1;
          2 5 5 3 2 1 1;
          2 6 4 4 3 1 1;
          2 7 3 4 4 1 1;
         
          3 1 6 1 4 1 1;
          3 2 6 2 3 1 1;
          3 3 6 3 2 1 1;
          3 4 5 3 2 1 1;
          3 5 4 4 3 1 1;
          3 6 3 5 3 1 1;
          3 7 3 5 4 1 1;
         
         
          4 1 6 2 4 1 1;
          4 2 6 2 3 1 1;
          4 3 5 3 3 1 1;
          4 4 4 4 3 1 1;
          4 5 3 5 3 1 1;
          4 6 2 6 3 1 1;
          4 7 2 6 4 1 1;
         
         
          5 1 5 2 4 1 1;
          5 2 5 3 4 1 1;
          5 3 4 4 4 1 1;
          5 4 3 5 4 1 1;
          5 5 3 5 4 1 1;
          5 6 2 6 4 1 1;
          5 7 2 7 4 1 1;
         
         
          6 1 5 4 7 1 1;
          6 2 4 4 5 1 1;
          6 3 3 5 5 1 1;
          6 4 2 5 5 1 1;
          6 5 2 6 5 1 1;
          6 6 2 7 5 1 1;
          6 7 1 7 7 1 1;
         
         
          7 1 4 4 7 1 1;
          7 2 4 4 6 1 1;
          7 3 2 5 6 1 1;
          7 4 2 6 6 1 1;
          7 5 2 6 5 1 1;
          7 6 1 7 5 1 1;
          7 7 1 7 7 1 1];
      
          a=addrule(a,rulelist);
          a=setfis(a,'DefuzzMethod','centroid');
          writefis(a,'fuzzpid');
         
          a=readfis('fuzzpid');
         
         
          %pid controller
          ts=0.001;
          sys=tf(5.235e005,[1,87.35,1.047e004,0]);
          %sys=tf(133,[1,25,0]);
          dsys=c2d(sys,ts,'tustin');
          [num,den]=tfdata(dsys,'v');
         
          u1=0.0;u2=0.0;u3=0.0;
          y1=0.0;y2=0.0;y3=0.0;
          x=[0,0,0]';
         
          error1=0;
          e1=0.0;
          ec1=0.0;
         
          kp0=0.40;
          kd0=1.0;
          ki0=0.0;
         
          for k=1:1:500
              time(k)=k*ts;
              rin(k)=1;
              %using fuzzy inference to tunning PID
              kpid=evalfis([e1,ec1],a);
              kp(k)=kp0+kpid(1);
              ki(k)=ki0+kpid(2);
              kd(k)=kd0+kpid(3);
              u(k)=kp(k)*x(1)+kd(k)*x(2)+ki(k)*x(3);
              if k==300
                  u(k)=u(k)+1.0;
              end
              if u(k)>=10
                  u(k)=10;
              end
              if u(k)<=-10
                  u(k)=-10;
              end
              yout(k)=-den(2)*y1-den(3)*y2-den(4)*y3+num(1)*u(k)+num(2)*u1+num(3)*u2+num(4)*u3;
              error(k)=yout(k)-rin(k);
              ei=ei+error(k)*ts;
              
              
              u3=u2;
              u2=u1;
              u1=u(k);
              y3=y2;
              y2=y1;
              y1=yout(k);
              
              x(1)=error(k);
              x(2)=error(k)-error1;
              x(3)=x(3)+error(k);
              
              
              
              e1=x(1);
              ec1=x(2);
              
              error2=error1;
              error1=error(k);
          end
          figure(1);
          plot(time,rin,'b',time,yout,'r');
          xlabel('Time(second)');ylabel('rin,yout');
回复
分享到:

使用道具 举报

发表于 2010-3-30 11:30 | 显示全部楼层
a=addmf(a,'output',1,'NB','zmf',[-3*f3,-1*f3]);

以下的所有1改成2 和3
 楼主| 发表于 2010-4-2 10:43 | 显示全部楼层

回复 沙发 yufeng 的帖子

谢谢.这样改后可以调出来
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-28 19:26 , Processed in 0.081178 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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