Mathematics Stack Exchange is a question and answer site for people studying math at any level and professionals in related fields. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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.

share|cite|improve this question

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, ...)


  • 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.

share|cite|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.