Why Index exceeds the number of array elements (1) if I change the input order in the anonymous function?

1 view (last 30 days)
Here is the funciton:
function [Y] = d_o(X,t,m,k,c)
x = X(1);
y = X(2);
Y(1,1)=y;
Y(2,1)=1/m*(-k*x-c*y);
end
Here is the script:
T = 0:0.1:100;
y0 = [0.1,1];
m = 1; k = 0.1; c = 0.05;
d_o_an = @(X,t) d_o(X,t,m,k,c);
[tout,yout] = ode45(d_o_an,T,y0);
plot(tout, yout);
I think the problem is in the anonymous function, if I change @(X,t) to @(t,X), the code can run. But why?
  3 Comments
VBBV
VBBV on 24 Nov 2020
Edited: VBBV on 24 Nov 2020
%if
%d_o_an = d_o(X,t,m,k,c);
[tout,yout] = ode45(@d_o,T,y0);
plot(tout, yout);
Use @ to invoke the function d_o directly

Sign in to comment.

Accepted Answer

Jan
Jan on 24 Nov 2020
ode45 calls the function to be integrated as f(t, Y) . So the time must be the first input.

More Answers (0)

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!