Bird
Raised Fist0
MATLABdata~10 mins

ODE solvers (ode45) in MATLAB - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - ODE solvers (ode45)
Define ODE function
↓
Set time span and initial value
↓
Call ode45 solver
↓
Solver runs steps internally
↓
Return time and solution arrays
↓
Plot or analyze results
The flow shows how you define the ODE, set initial conditions, call ode45, which solves step-by-step, then returns results.
Execution Sample
MATLAB
f = @(t,y) -2*y;
tspan = [0 5];
y0 = 1;
[t,y] = ode45(f,tspan,y0);
plot(t,y)
This code solves dy/dt = -2y from t=0 to 5 with y(0)=1 and plots the solution.
Execution Table
Stept (time)y (solution)ActionNotes
101Start at initial conditionInitial time and value
20.10.8187Compute next y using ode45 stepApproximate y at t=0.1
30.20.6703Compute next yApproximate y at t=0.2
40.30.5488Compute next yApproximate y at t=0.3
50.40.4493Compute next yApproximate y at t=0.4
60.50.3679Compute next yApproximate y at t=0.5
.........Continue stepsSolver adapts step size internally
N54.54e-05Final stepReached end of time span
💡 Reached t=5, end of time span for solution
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4After Step 5...Final
t00.10.20.30.40.5...5
y10.81870.67030.54880.44930.3679...4.54e-05
Key Moments - 3 Insights
Why does ode45 return arrays of t and y instead of just one value?
Because ode45 solves the ODE step-by-step over the time span, it returns arrays showing the solution at multiple time points (see execution_table rows 2 to N).
How does ode45 decide the size of each time step?
ode45 adapts the step size internally to keep the solution accurate, so time steps are not always equal (not shown explicitly but mentioned in execution_table notes).
What does the function handle @(t,y) -2*y represent?
It defines the ODE dy/dt = -2y, which ode45 uses to compute slopes at each step (see execution_sample code line 1).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the approximate value of y at step 3?
A0.5488
B0.8187
C0.6703
D0.4493
💡 Hint
Check the 'y (solution)' column at Step 3 in the execution_table.
At which step does the solver reach the end of the time span?
AStep N
BStep 5
CStep 6
DStep 1
💡 Hint
Look at the exit_note and the last row in execution_table.
If the initial value y0 was changed to 2, how would the variable_tracker change after Step 1?
Ay would be about 1.0
By would be about 1.6374 times 2
Cy would be about 1.6374
Dy would be about 1.6374 times 0.5
💡 Hint
Since y0 doubles, the values after Step 1 roughly double too (see variable_tracker y values).
Concept Snapshot
ode45 solves ODEs numerically in MATLAB.
Define the ODE as a function @(t,y).
Set time span and initial value.
Call [t,y] = ode45(odefun,tspan,y0).
 ode45 returns arrays of time and solution.
Use plot(t,y) to visualize results.
Full Transcript
This visual execution shows how MATLAB's ode45 solver works step-by-step. First, you define the ODE as a function of time and solution. Then you set the time range and initial value. Calling ode45 runs the solver, which calculates the solution at many time points by adapting step size for accuracy. The solver returns arrays of time and solution values. The example solves dy/dt = -2y from 0 to 5 starting at y=1. The execution table traces the solution values at each step, showing how y decreases exponentially. Key moments clarify why ode45 returns arrays, how step size adapts, and what the function handle means. The quiz tests understanding of solution values and solver behavior. The snapshot summarizes the main steps to use ode45 in MATLAB.

Practice

(1/5)
1. What does the MATLAB function ode45 primarily do?
easy
A. It solves ordinary differential equations numerically.
B. It plots graphs of functions automatically.
C. It calculates the derivative of a function symbolically.
D. It integrates functions analytically.

Solution

  1. Step 1: Understand the purpose of ode45

    The ode45 function in MATLAB is designed to solve ordinary differential equations (ODEs) using a numerical method called Runge-Kutta.
  2. Step 2: Compare options with ode45's function

    Options A, C, and D describe plotting, symbolic differentiation, and analytical integration, which are not what ode45 does.
  3. Final Answer:

    It solves ordinary differential equations numerically. -> Option A
  4. Quick Check:

    ode45 solves ODEs numerically = B [OK]
Hint: Remember ode45 solves ODEs numerically, not symbolically or graphing [OK]
Common Mistakes:
  • Confusing ode45 with plotting functions
  • Thinking ode45 does symbolic math
  • Assuming ode45 integrates analytically
2. Which of the following is the correct syntax to call ode45 for solving dy/dt = -2y with initial value y(0)=1 over time interval [0 5]?
easy
A. [t,y] = ode45(@(y,t) -2*y, [0 5], 1);
B. [t,y] = ode45(@(t,y) -2*y, [0 5], 1);
C. [t,y] = ode45(@(t,y) 2*y, 0:5, 1);
D. [t,y] = ode45(@(t,y) -2*y, 0, 5, 1);

Solution

  1. Step 1: Check function handle and argument order

    The function handle for ode45 must be @(t,y) for time t and variable y. [t,y] = ode45(@(t,y) -2*y, [0 5], 1); uses @(t,y) correctly with the expression -2*y.
  2. Step 2: Verify time span and initial value format

    Time span must be a vector [0 5], and initial value is a scalar 1. [t,y] = ode45(@(t,y) -2*y, [0 5], 1); matches this format exactly.
  3. Final Answer:

    [t,y] = ode45(@(t,y) -2*y, [0 5], 1); -> Option B
  4. Quick Check:

    Correct syntax: @(t,y), time vector, initial value = A [OK]
Hint: Use @(t,y) for function and time vector in brackets [OK]
Common Mistakes:
  • Swapping t and y in function handle
  • Using colon operator instead of vector for time span
  • Passing time points as separate arguments
3. Consider the code:
f = @(t,y) t - y;
[t,y] = ode45(f, [0 2], 1);
disp(y(end));

What is the output approximately?
medium
A. 1.3
B. 1.0
C. 0.5
D. 2.0

Solution

  1. Step 1: Understand the ODE and initial condition

    The ODE is dy/dt = t - y with y(0) = 1, solved over [0 2]. This is a linear ODE where y tends to follow t but is pulled down by -y.
  2. Step 2: Estimate solution behavior at t=2

    Numerical solution with ode45 typically gives y around 1.3 at t=2 for this ODE and initial value.
  3. Final Answer:

    1.3 -> Option A
  4. Quick Check:

    ode45 output y(end) ≈ 1.3 for dy/dt = t - y [OK]
Hint: Recall ode45 returns solution array; last value is y at final time [OK]
Common Mistakes:
  • Assuming output equals initial value
  • Confusing function input order
  • Ignoring numerical approximation
4. Identify the error in this code snippet:
f = @(y,t) y^2 - t;
[t,y] = ode45(f, [0 1], 0);
plot(t,y);
medium
A. Time span must be a column vector.
B. Initial value cannot be zero.
C. Function handle arguments are in wrong order.
D. Plot command is missing labels.

Solution

  1. Step 1: Check function handle argument order

    ODE functions for ode45 must have arguments in order (t,y), but here it is @(y,t), which is incorrect.
  2. Step 2: Verify other parts of the code

    Initial value zero is allowed, time span as [0 1] is valid, and plot labels are optional, so these are not errors.
  3. Final Answer:

    Function handle arguments are in wrong order. -> Option C
  4. Quick Check:

    Function handle must be @(t,y), not @(y,t) [OK]
Hint: Always use @(t,y) for ode45 function handles [OK]
Common Mistakes:
  • Swapping t and y in function handle
  • Thinking initial value can't be zero
  • Believing time span must be column vector
5. You want to solve the system:
dx/dt = y
dy/dt = -x

with initial conditions x(0)=0, y(0)=1 over [0 10]. Which MATLAB code correctly uses ode45 to solve this system?
hard
A. f = @(t,u) [u(1); u(2)]; [t,u] = ode45(f, [0 10], [0 1]);
B. f = @(t,x,y) [y; -x]; [t,u] = ode45(f, [0 10], [0 1]);
C. f = @(u,t) [u(2); -u(1)]; [t,u] = ode45(f, [0 10], [0 1]);
D. f = @(t,u) [u(2); -u(1)]; [t,u] = ode45(f, [0 10], [0 1]);

Solution

  1. Step 1: Define function handle for system of ODEs

    The system has two variables x and y, combined as vector u where u(1)=x and u(2)=y. The function must be @(t,u) returning [y; -x], which is [u(2); -u(1)].
  2. Step 2: Check initial conditions and call to ode45

    Initial conditions are [0 1] for x=0 and y=1. Time span is [0 10]. f = @(t,u) [u(2); -u(1)]; [t,u] = ode45(f, [0 10], [0 1]); matches this exactly.
  3. Final Answer:

    f = @(t,u) [u(2); -u(1)]; [t,u] = ode45(f, [0 10], [0 1]); -> Option D
  4. Quick Check:

    System ODEs use @(t,u) with vector u = D [OK]
Hint: Use vector input @(t,u) and return derivatives as vector [OK]
Common Mistakes:
  • Using separate arguments for variables in function handle
  • Swapping order of arguments in function handle
  • Returning wrong derivative vector
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard