matlab 索引超出数组元素的数目 1,索引超出数组元素的数目(1)

时间:2025-03-01 13:06:36

希望路过的大神看到后,能帮忙解决一下!这是controller模块的代码:function [sys,x0,str,ts,simStateCompliance] = Controller(t,x,u,flag)

switch flag

case 0

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

case 3

sys=mdlOutputs(t,x,u);

case {1, 2, 4, 9 }

sys=[];

otherwise

('Simulink:blocks:unhandledFlag', num2str(flag));

end

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

sizes = simsizes;

  = 0;

  = 0;

     = 1;

      = 2;

= 1;

= 1;   % at least one sample time is needed

sys = simsizes(sizes);

x0  = [];

str = [];

ts  = [0 0];

simStateCompliance = 'UnknownSimState';

% end mdlInitializeSizesm

function sys=mdlOutputs(t,x,u)

x1 = u(1);

y = u(2);

a = 1;

b = 1;

k = 1;

k2 = 1;

yd = (a*x1^2+k*x1)/(x1^2+1);

ey = yd-y;

d1_yd =( (2*a*x1+k)*(x1^2+1)-2*x1*(a*x1^2+k*x1))/(x1^2+1)^2;

ut = (d1_yd-sin(x1)+k2*ey+x1(x1^2+1))/b;

sys = ut;

这是dynamic模块的代码:

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

switch flag

case 0,

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

case 3,

sys=mdlOutputs(t,x,u);

case {1, 2, 4, 9 }

sys=[];

otherwise

('Simulink:blocks:unhandledFlag', num2str(flag));

end

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

sizes = simsizes;

  = 0;

  = 0;

     = 2;

      = 3;

= 1;

= 1;   % at least one sample time is needed

sys = simsizes(sizes);

x0  = [];

str = [];

ts  = [-1 0];

simStateCompliance = 'UnknownSimState';

% end mdlInitializeSizes

function sys=mdlOutputs(t,x,u)

x1 = u(1);

y = u(2);

ut = u(3);

a = 1;

b = 1;

d1_x1 = a*x1^2-(x1^2+1)*y;

d1_y = b*ut+sin(x1);

sys = [d1_x1;d1_y];