Solve delay differential equations (DDEs) with constant delays
sol = dde23(ddefun,lags,history,tspan)
sol = dde23(ddefun,lags,history,tspan,options)
 Function handle that evaluates the right side of the differential equations $${y}^{\prime}(t)=f\left(t,y(t),y(t{\tau}_{1}),\mathrm{...},y(t{\tau}_{k})\right)$$. The function must have the form dydt = ddefun(t,y,Z) where 
 Vector of constant, positive delays τ_{1}, ..., τ_{k}. 
 Specify

 Interval of integration from 
 Optional integration argument. A structure you create
using the 
sol = dde23(ddefun,lags,history,tspan)
integrates
the system of DDEs
$${y}^{\prime}(t)=f\left(t,y(t),y(t{\tau}_{1}),\mathrm{...},y(t{\tau}_{k})\right)$$
on the interval [t_{0},t_{f}],
where τ_{1}, ..., τ_{k} are
constant, positive delays and t_{0},t_{f}.
The input argument, ddefun
, is a function handle.
Parameterizing Functions explains how to provide additional
parameters to the function ddefun
, if necessary.
dde23
returns the solution as a structure sol
.
Use the auxiliary function deval
and
the output sol
to evaluate the solution at specific
points tint
in the interval tspan = [t0,tf]
.
yint = deval(sol,tint)
The structure sol
returned by dde23
has
the following fields.
 Mesh selected by 
 Approximation to y(x)
at the mesh points in 
 Approximation to y′(x)
at the mesh points in 
 Solver name, 
sol = dde23(ddefun,lags,history,tspan,options)
solves
as above with default integration properties replaced by values in options
,
an argument created with ddeset
. See ddeset
and Types of DDEs for
more information.
Commonly used options are scalar relative error tolerance 'RelTol'
(1e3
by
default) and vector of absolute error tolerances 'AbsTol'
(all
components are 1e6
by default).
Use the 'Jumps'
option to solve problems
with discontinuities in the history or solution. Set this option to
a vector that contains the locations of discontinuities in the solution
prior to t0
(the history) or in coefficients of
the equations at known values of t after t0
.
Use the 'Events'
option to specify a function
that dde23
calls to find where functions $$g\left(t,y(t),y(t{\tau}_{1}),\mathrm{...},y(t{\tau}_{k})\right)$$ vanish. This function must be
of the form
[value,isterminal,direction] = events(t,y,Z)
and contain an event function for each event to be tested. For
the k
th event function in events
:
value(k)
is the value of the k
th
event function.
isterminal(k) = 1
if you want the
integration to terminate at a zero of this event function and 0
otherwise.
direction(k) = 0
if you want dde23
to
compute all zeros of this event function, +1
if
only zeros where the event function increases, and 1
if
only zeros where the event function decreases.
If you specify the 'Events'
option and events
are detected, the output structure sol
also includes
fields:
 Row vector of locations of all events, i.e., times when an event function vanished 
 Matrix whose columns are the solution values corresponding
to times in 
 Vector containing indices that specify which event occurred
at the corresponding time in 
This example solves a DDE on the interval [0, 5] with lags 1
and 0.2. The function ddex1de
computes the delay
differential equations, and ddex1hist
computes
the history for t <= 0
.
Note
The file, 
sol = dde23(@ddex1de,[1, 0.2],@ddex1hist,[0, 5]);
This code evaluates the solution at 100 equally spaced points
in the interval [0,5]
, then plots the result.
tint = linspace(0,5); yint = deval(sol,tint); plot(tint,yint);
ddex1
shows how you can code this problem
using local functions. For more examples see ddex2
.
dde23
tracks discontinuities and integrates
with the explicit RungeKutta (2,3) pair and interpolant of ode23
.
It uses iteration to take steps longer than the lags.
[1] Shampine, L.F. and S. Thompson, "Solving DDEs in MATLAB," Applied Numerical Mathematics, Vol. 37, 2001, pp. 441458.
[2] Kierzenka, J., L.F. Shampine, and S. Thompson, "Solving Delay Differential Equations with dde23"