4
$\begingroup$

Is someone able to explain to me exactly what the "odefun" called by the "ode45" ODE solver in MATLAB is supposed to do?

My understanding is that you represent an n-order ODE as a system of n first-order ODEs and that, somehow, from this system, you create the "odefun" which "ode45" uses. My understanding is also that "odefun" should output a column array of derivative values at an the input independent variable value and that the function takes in a column array of values (but I'm not sure what these are).

How do you actually represent the system of first-order ODEs in "odefun"?

Thanks in advance for your help.

1 Answers 1

2

Yes you have to represent n-order ODE as a system of n 1st-order ODEs.

ode45 uses your odefun.

The function definition for ode45 is:

ode45('odefun', tspan, y_0, option1, option2, ...) 

where:

  • tspan : problem domain e.g [-10 10]. If you don't want a step-size picked by matlab you can do -10:0.1:10 for a step-size of 0.1
  • y_0 : Initial conditions for the system. With n 1st-order ODEs, y_0 should be numeric vector of size n. with specification for all of y'(0), y''(0), y'''(0) ... . Of course you will have a translation to 1st-order like y1 = y, y2 = y', y3 = y'', ... .
  • option1, option2, ... : These are meant for odefun.

with that the definition for odefun is:

odefun(t, y_n, option1, option2, ...) 

Note: y_0 in ode45 vs y_n in odefun. y_n are the values at the nth discretization as they are computed by ode45. And t is the current time (assuming a dy/dt ODE)

What is expected of you in odefun?

Compute and return the right-hand side of the 1st-order ODEs. This is numeric vector of the same length as y_n. In most cases, these are some function of y_n

Example: If you have y' = 3 - option1 * y as your 1st-order ODE, then in odefun you return 3 - option1 * y_n. In this case y_n is of size 1 as I am assuming a single 1st-order ODE.