使用s函数实现变论域模糊控制,以e de n为输入,三个输出,仿真一半时出错
function[sys,x0,str,ts]=bly(t,x,u,flag)

switch flag,
    case 0
        [sys,x0,str,ts]=mdlInitializeSizes; 
    case 3
        sys=mdlOutputs(t,x,u);
    case {1,2,4,9}
    sys=[];
    otherwise
    error(['unhandled flag=',num2str(flag)]);
end

function[sys,x0,str,ts]=mdlInitializeSizes
sizes=simsizes; 
sizes.NumContStates=0; 
sizes.NumDiscStates=0; 
sizes.NumOutputs=3; 
sizes.NumInputs=3; 
sizes.DirFeedthrough=1; 
sizes.NumSampleTimes=1; 
sys=simsizes(sizes);
x0=[];
str=[];
ts=[-1 0];



function sys=mdlOutputs(t,x,u)

n=u(3);

a=newfis('bly');
a=addvar(a,'input','e',[-6*n 6*n]);
a=addmf(a,'input',1,'NB','zmf',[-6,-2.667]*n);
a=addmf(a,'input',1,'NM','trimf',[-6,-2.667,-0.667]*n);
a=addmf(a,'input',1,'NS','trimf',[-2.667,-0.667,0]*n);
a=addmf(a,'input',1,'ZO','trimf',[-0.667,0,0.667]*n);
a=addmf(a,'input',1,'PS','trimf',[0,0.667,2.667]*n);
a=addmf(a,'input',1,'PS','trimf',[0.667,2.667,6]*n);
a=addmf(a,'input',1,'PB','smf',[2.667,6]*n);

a=addvar(a,'input','de',[-6*n 6*n]);
a=addmf(a,'input',2,'NB','zmf',[-6,-2.667]*n);
a=addmf(a,'input',2,'NM','trimf',[-6,-2.667,-0.667]*n);
a=addmf(a,'input',2,'NS','trimf',[-2.667,-0.667,0]*n);
a=addmf(a,'input',2,'ZO','trimf',[-0.667,0,0.667]*n);
a=addmf(a,'input',2,'PS','trimf',[0,0.667,2.667]*n);
a=addmf(a,'input',2,'PS','trimf',[0.667,2.667,6]*n);
a=addmf(a,'input',2,'PB','smf',[2.667,6]*n);

a=addvar(a,'output','u',[-6 6]);
a=addmf(a,'output',1,'NB','zmf',[-6,-2.667]);
a=addmf(a,'output',1,'NM','trimf',[-6,-2.667,-0.667]);
a=addmf(a,'output',1,'NS','trimf',[-2.667,-0.667,0]);
a=addmf(a,'output',1,'ZO','trimf',[-0.667,0,0.667]);
a=addmf(a,'output',1,'PS','trimf',[0,0.667,2.667]);
a=addmf(a,'output',1,'PS','trimf',[0.667,2.667,6]);
a=addmf(a,'output',1,'PB','smf',[2.667,6]);

a=addvar(a,'output','i',[-6 6]);
a=addmf(a,'output',2,'NB','zmf',[-6,-2.667]);
a=addmf(a,'output',2,'NM','trimf',[-6,-2.667,-0.667]);
a=addmf(a,'output',2,'NS','trimf',[-2.667,-0.667,0]);
a=addmf(a,'output',2,'ZO','trimf',[-0.667,0,0.667]);
a=addmf(a,'output',2,'PS','trimf',[0,0.667,2.667]);
a=addmf(a,'output',2,'PS','trimf',[0.667,2.667,6]);
a=addmf(a,'output',2,'PB','smf',[2.667,6]);

a=addvar(a,'output','d',[-6 6]);
a=addmf(a,'output',3,'NB','zmf',[-6,-2.667]);
a=addmf(a,'output',3,'NM','trimf',[-6,-2.667,-0.667]);
a=addmf(a,'output',3,'NS','trimf',[-2.667,-0.667,0]);
a=addmf(a,'output',3,'ZO','trimf',[-0.667,0,0.667]);
a=addmf(a,'output',3,'PS','trimf',[0,0.667,2.667]);
a=addmf(a,'output',3,'PS','trimf',[0.667,2.667,6]);
a=addmf(a,'output',3,'PB','smf',[2.667,6]);
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);
e1=u(1);
de1=u(2);
if e1>6*n
    e1=6*n;%限制误差在基本论域
end
if e1<-6*n
   e1=-6*n;
end
if de1>6*n
    de1=6*n; %限制误差变化率
end 
if de1<6*n
    de1=-6*n;
end
in=[e1,de1];
sys=evalfis(in,a);