Ошибка Matlab S-функции
Я пытаюсь построить отличительный трекер с помощью Matlab S-Function. Тем не менее, это дает мне ошибку, говорящую: "Вывод, возвращаемый S-функцией han_td в ex_han/S-Function во время вызова flag=3, должен быть реальным вектором длины 2".
Я не вижу, что я делаю не так. Ниже приведен код:
function [sys,x0,str,ts]=han_td(t,x,u,flag,r,h,T)
switch flag,
case 0, [sys,x0,str,ts]=mdlInitializeSizes(T);
case 2, sys = mdlUpdates(x,u,r,h,T);
case 3, sys = x;
case {1, 4, 9}, sys = [];
otherwise, error(['Unhandled flag = ',num2str(flag)]);
end;
%initialization function mdlInitializeSizes
function [sys,x0,str,ts] = mdlInitializeSizes(T)
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 2;
sizes.NumOutputs = 2;
sizes.NumInputs = 1;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0 = [0;0];
str = [];
ts = [-1 0];
function sys = mdlUpdates(x,u,r,h,T)
sys=[x(1)+T*x(2); x(2)+T*fst2(x,u,r,h)];
function f=fst2(x,u,r,h)
delta =r*h;
delta0=delta*h;
y0=x(1)-u+h*x(2);
a0=sqrt(delta*delta+8*r*abs(y0));
if abs(y0)<=delta0, a=x(2)+y0/h;
else, a=x(2)+0.5*(a0-delta)*sign(y0); end
if abs(a)<=delta, f=-r*a/delta;
else, f=-r*sign(a);end