Bird
Raised Fist0
MATLABdata~20 mins

ODE solvers (ode45) in MATLAB - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
ODE Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of ode45 with a simple exponential decay
What is the output of the following MATLAB code snippet using ode45 to solve dy/dt = -2y with initial condition y(0) = 1 at t = 1?
MATLAB
odefun = @(t,y) -2*y;
[t,y] = ode45(odefun, [0 1], 1);
y(end)
A0.1353
B0.3679
C0.5000
D1.0000
Attempts:
2 left
💡 Hint
Recall the exact solution of dy/dt = -2y is y(t) = exp(-2t).
❓ Predict Output
intermediate
2:00remaining
Number of output points from ode45 with specified time vector
Given the code below, how many points will the output y have?
MATLAB
odefun = @(t,y) y;
[t,y] = ode45(odefun, 0:0.5:2, 1);
length(y)
A6
B3
C5
D4
Attempts:
2 left
💡 Hint
When you provide a vector of time points to ode45, it returns solutions at those points.
❓ Predict Output
advanced
2:00remaining
Output of ode45 solving a system of ODEs
What is the value of y(end,1) after running this code?
MATLAB
odefun = @(t,y) [y(2); -y(1)];
[t,y] = ode45(odefun, [0 pi/2], [0 1]);
y(end,1)
A1.0000
B0.0000
C-1.0000
D0.7071
Attempts:
2 left
💡 Hint
This system models a simple harmonic oscillator with initial position 0 and velocity 1.
❓ Predict Output
advanced
2:00remaining
Error type when odefun returns wrong size output
What error does MATLAB produce when the function passed to ode45 returns a vector of incorrect size?
MATLAB
odefun = @(t,y) [y; y];
[t,y] = ode45(odefun, [0 1], 1);
ANo error, code runs successfully.
BIndex exceeds matrix dimensions.
CUndefined function or variable 'odefun'.
DError using ode45: The function must return a column vector of the same length as y.
Attempts:
2 left
💡 Hint
ode45 expects the function to return a derivative vector matching the size of the initial condition.
🧠 Conceptual
expert
2:00remaining
Behavior of ode45 with stiff equations
Which statement best describes the behavior of ode45 when solving stiff ordinary differential equations?
Aode45 is efficient and stable for stiff problems without any modifications.
Bode45 may require very small time steps and become inefficient for stiff problems.
Code45 automatically switches to a stiff solver when stiffness is detected.
Dode45 cannot solve stiff problems and will always produce errors.
Attempts:
2 left
💡 Hint
Consider the nature of explicit Runge-Kutta methods like ode45 and their suitability for stiff problems.

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