如何解决ode23的问题?

How to solve problems with ode23?

我有几个问题:

Array indices must be positive integers or logical values.

Error in task2>diffsys (line 11)
dp = [ -4*y(0)+4*y(1)+1*y(2);

Error in odearguments (line 90)
f0 = feval(ode,t0,y0,args{:});   % ODE15I sets args{1} to yp0.

Error in ode23 (line 114)
    odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);

Error in task2 (line 4)
[t, y] = ode23(@diffsys, tr, p);

这是我的代码:

tr = [0 1]; %tame range
p = [0;0;1]; %vector of initial conditions

[t, y] = ode23(@diffsys, tr, p);
plot(t,y);
grid on;
title('lab');
legend('y0','y1','y2');

function dp = diffsys(t, y)
dp = [ -4*y(0)+4*y(1)+1*y(2);
       2*y(0)-7*y(1)+3*y(2);
       2*y(0)+3*y(1)-4*y(2);
      ];
end

需要注意第一条错误信息和后面两行的错误位置。其他消息是调用堆栈,告诉您错误行是如何从主程序中调用的。

错误是在 Matlab 中,数组索引以 1 开头,而不是 0,因此您需要将所有索引向上移动。

在这种特定情况下,您可以使用 matrix-vector 产品作为

来制定没有索引的 ODE 函数
function dp = diffsys(t, y)
  dp = [ -4 4 1 ;  2 -7 3 ;  2 3 -4 ] * y;
end