| Mathematics | ![]() |
Solving ODE Problems
This section uses the van der Pol equation
to describe the process for solving initial value ODE problems using the ODE solvers.
| Note See ODE Solver Basic Syntax for more information. |
Example: Solving an IVP ODE (van der Pol Equation, Nonstiff)
This example explains and illustrates the steps you need to solve an initial value ODE problem.
is a scalar parameter, by making the substitution
. The resulting system of first-order ODEs is
t and y must be the function's first two arguments, the function does not need to use them. The output dydt, a column vector, is the derivative of y.
The code below represents the van der Pol system in the function, vdp1. The vdp1 function assumes that
.
and
become elements y(1) and y(2) of a two-element vector.
Note that, although vdp1 must accept the arguments t and y, it does not use t in its computations.
ode45 on time interval [0 20] with initial values y(1) = 2 and y(2) = 0.
This example uses @ to pass vdp1 as a function handle to ode45. The resulting output is a column vector of time points t and a solution array y. Each row in y corresponds to a time returned in the corresponding row of t. The first column of y corresponds to
, and the second column to
.
Note
See the function_handle (@), func2str, and str2func reference pages, and the Function Handles chapter of "Programming and Data Types" in the MATLAB documentation for information about function handles.
|
plot command to view the solver output.
OutputFcn after each successful time step. Use odeset to set OutputFcn to the desired function. See OutputFcn for more information.
Passing Additional Parameters to an ODE Function
The solver passes any input parameters that follow the options argument to the ODE function and any function you specify in options. For example:
mu parameter, instead of specifying a value for mu explicitly in the code.
mu to the function vdp1 by specifying it after the options argument in the call to the solver. This example uses options = [] as a placeholder.
See the vdpode code for a complete example based on these functions.
Example: The van der Pol Equation, µ = 1000 (Stiff)
This example presents a stiff problem. For a stiff problem, solutions can change on a time scale that is very short compared to the interval of integration, but the solution of interest changes on a much longer time scale. Methods not designed for stiff problems are ineffective on intervals where the solution changes slowly because they use time steps small enough to resolve the fastest possible change.
When
is increased to 1000, the solution to the van der Pol equation changes dramatically and exhibits oscillation on a much longer time scale. Approximating the solution of the initial value problem becomes a more difficult task. Because this particular problem is stiff, a solver intended for nonstiff problems, such as ode45, is too inefficient to be practical. A solver such as ode15s is intended for such stiff problems.
The vdp1000 function evaluates the van der Pol system from the previous example, but with
= 1000.
Note
This example hardcodes in the ODE function. The vdpode example solves the same problem, but passes a user-specified as an additional argument to the ODE function. See Additional ODE Solver Arguments.
|
Now use the ode15s function to solve the problem with the initial condition vector of [2; 0], but a time interval of [0 3000]. For scaling purposes, plot just the first component of y(t).
[t,y] = ode15s(@vdp1000,[0 3000],[2; 0]); plot(t,y(:,1),'-'); title('Solution of van der Pol Equation, \mu = 1000'); xlabel('time t'); ylabel('solution y_1');
| Note For detailed instructions for solving an initial value ODE problem, see Example: Solving an IVP ODE (van der Pol Equation, Nonstiff). |
Evaluating the Solution at Specific Points
The numerical methods implemented in the ODE solvers produce a continuous solution over the interval of integration
. You can evaluate the approximate solution,
, at any point in
using the function deval and the structure sol returned by the solver.
The ODE solvers return the structure sol when called with a single output argument.
The deval function is vectorized. For a vector xint, the ith column of Sxint approximates the solution
.
| Initial Value Problem Solvers | Changing ODE Integration Properties | ![]() |