zhenf4 发表于 2010-3-29 16:33

模糊PID仿真错误,清高手帮忙

??? 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',);
a=addmf(a,'input',1,'PB','smf',);

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',);
a=addmf(a,'input',2,'PB','smf',);


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',);
a=addmf(a,'output',1,'PB','smf',);


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',);
a=addmf(a,'output',1,'PB','smf',);


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',);
a=addmf(a,'output',1,'PB','smf',);


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,);
          %sys=tf(133,);
          dsys=c2d(sys,ts,'tustin');
          =tfdata(dsys,'v');
         
          u1=0.0;u2=0.0;u3=0.0;
          y1=0.0;y2=0.0;y3=0.0;
          x=';
         
          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(,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');

yufeng 发表于 2010-3-30 11:30

a=addmf(a,'output',1,'NB','zmf',[-3*f3,-1*f3]);

以下的所有1改成2 和3

zhenf4 发表于 2010-4-2 10:43

回复 沙发 yufeng 的帖子

谢谢.这样改后可以调出来
页: [1]
查看完整版本: 模糊PID仿真错误,清高手帮忙