如何解决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
我有几个问题:
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