程序报错:Output returned by S-function 'controller' in

'untitled/S-Function' during flag=3 call must be a real vector of

length 1.

程序如下:

function[sys,x0,str,ts]=controller(t,x,u,flag)

switch flag,

case

0,

[sys,x0,str,ts]=mdlInitializeSizes;

case

1,

sys=mdlDerivatives(t,x,u);

% outputs

case

3,

sys=mdlOutputs(t,x,u);

%unhandled flags

case{2,4,9}

sys=[];

%unexpected flags

otherwise

error(['Unhandled flag =',num2str(flag)]);

end

%mdlinitializesizes

function[sys,x0,str,ts]=mdlInitializeSizes

sizes = simsizes;

sizes.NumContStates = 3;

sizes.NumDiscStates = 0;

sizes.NumOutputs = 1;

sizes.NumInputs = 3;

size.DirFeedthrough = 0;

size.NumsampleTimes = 0;

sys=simsizes(sizes);

x0=[0 0 0 ];

str=[];

ts=[];

function sys=mdlDerivatives(t,x,u)

k1 = 50;

r1 = 200;

r2 = 200;

r3 = 200;

x1d=u(1);

dx1d=2*pi*cos(2*pi*t);

ddx1d=-(2*pi)^2*sin(2*pi*t);

x1=u(2);

z1=x1-x1d;

x2=u(3);

x2d=-k1*z1+dx1d;

z2=x2-x2d;

sys(1)=r1*((1/2)*sec(x1)*tan(x1)*(z2)^2*x2+(z2)*sec(x1)*(k1*(x2-dx1d)-ddx1d));

sys(2)=r2*z2*tan(x1);

sys(3)=r3*((1/2)*sin(x1)*(z2)^2*x2-z2*(x2)^2*sin(x1)-z2*cos(x1)*(k1*(x2-dx1d)-ddx1d));

function sys=mdlOutputs(t,x,u)

k1 = 50;

k2=50;

x1d=u(1);

dx1d=2*pi*cos(2*pi*t);

ddx1d=-(2*pi)^2*sin(2*pi*t);

x1=u(2);

z1=x1-x1d;

x2=u(3);

x2d=-k1*z1+dx1d;

z2=x2-x2d;

ut=-z1-k2*z2-x(1)*((1/2)*sec(x1)*tan(x1)*z2*x2+sec(x1)*(k1*(x2-dx1d)-ddx1d))-x(2)*tan(x1)-x(3)*((1/2)*sin(x1)*z2*x2-(x2)^2*sin(x1)-cos(x1)*(k1*(x2-dx1d)-ddx1d));

sys(1)=ut;

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐