function[sys,x0,str,ts]=fun1(t,x,u,flag)
switch flag
case 0
sizes=simsizes;sizes.NumContStates=0;
sizes.NumDiscStates=0;sizes.NumOutputs=6;
sizes.NumInputs=2;sizes.DirFeedthrough=1;
sizes.NumSampleTimes=1;sys=simsizes(sizes);
x0=[];str=[];ts=[0,0];
case 3
pi=3.1415926;k=0.05;
while(u(2)>=2*pi)
u(2)=u(2)-2*pi;
end
if((u(2)>=0)&&(u(2)<pi/3))
Ea=k*u(1);
Eb=-k*u(1);
Ec=k*u(1)-2*k*u(1)*(u(2)/pi/3);
Q1=1;Q2=1;Q3=0;
end
if((u(2)>=pi/3)&&(u(2)<2*pi/3))
Ea=k*u(1);
Eb=-k*u(1)+2*k*u(1)*(u(2)-pi/3)/(pi/3);
Ec=-k*u(1);
Q1=0;Q2=1;Q3=0;
end
if((u(2)>=2*pi/3)&&(u(2)<pi))
Ea=k*u(1)-2*k*u(1)*(u(2)-2*pi/3)/(pi/3);Eb=k*u(1);Ec=-k*u(1);
Q1=0;Q2=1;Q3=1;
end
if((u(2)>=pi)&&(u(2)<4*pi/3))
Ea=-k*u(1);Eb=k*u(1);Ec=-k*u(1)+2*k*u(1)*(u(2)-pi)/(pi/3);
Q1=0;Q2=0;Q3=1;
end
if((u(2)>=4*pi/3)&&(u(2)<5*pi/3))
Ea=-k*u(1);Eb=k*u(1)-2*k*u(1)*(u(2)-4*pi/3)/(pi/3);Ec=k*u(1);
Q1=1;Q2=0;Q3=1;
end
if((u(2)>=5*pi/3)&&(u(2)<2*pi))
Ea=-k*u(1)+2*k*u(1)*(u(2)-5*pi/3)/(pi/3);Eb=-k*u(1);Ec=k*u(1);
Q1=1;Q2=0;Q3=0;
end
sys=[Ea;Eb;Ec;Q1;Q2;Q3];
case{1,2,4,9}
sys=[];
end
这是我编写的s-function函数