hi guys when i try to use the follow s-function in a simulink blocket, i obtain this error:
An error occurred while running the simulation and the simulation was terminated
Caused by:
- Output returned by S-function 'head_4_2' in 'sim_4_1/S-Function2' during flag=3 call must be a real vector of length 1
function [sys,x0,str,ts] = head_4_2(t,x,u,flag)
switch flag
case 0
[sys,x0,str,ts]=mdlInitializeSizes;
case 1
sys=mdlDerivatives(t,x,u);
case 3
sys=mdlOutputs(t,x,u);
case {2,4,9}
sys=[];
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
function [sys,x0,str,ts]=mdlInitializeSizes
sizes=simsizes;
sizes.NumContStates = 1;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 1;
sizes.NumInputs = 10;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0 = [0];
str = [];
ts = [0 0];
function sys=mdlDerivatives(t,x,u)
psid=u(1);
dpsid=u(2);
r=u(3);
psi=u(4);
x_1=u(5);
y=u(6);
dr=u(7);
dpsi=u(8);
dx_1=u(9);
dy=u(10);
a0=0.12;a1=0.35;a2=0.5;
k3=2;k4=1.5;k5=50;
zeta=0.3;G=1.525;
alphau=x(1);
dalphau=(dpsid-k4*(psi-psid)-alphau)/zeta;
sys(1)=dalphau;
function sys=mdlOutputs(t,x,u)
alphau=x(1);
psid=u(1);
dpsid=u(2);
r=u(3);
psi=u(4);
x_1=u(5);
y=u(6);
dr=u(7);
dpsi=u(8);
dx_1=u(9);
dy=u(10);
a0=0.12;a1=0.35;a2=0.5;
k3=2;k4=1.5;k5=50;
zeta=0.3;G=1.525;
dalphau=(dpsid-k4*(psi-psid)-alphau)/zeta;
r=dpsi;
z1=r-alphau;
h=-G*(a0+a1*r+a2*r^3);
sigma=(-h+dalphau-k5*z1)/G;
sys(1)=sigma;