A system of differential equations (DDEs) with constant delays has the following form:

$${y}^{\prime}(t)=f(t,y(t),y(t-{\tau}_{1}),\dots ,y(t-{\tau}_{k})).$$ | (10-1) |

Here, *t* is the independent variable, *y* is
a column vector of dependent variables, and *y* ′
represents the first derivative of *y* with respect
to *t*. The delays, *τ*_{1},…,*τ*_{k},
are positive constants.

The `dde23`

function solves
DDEs of the form given by Equation 10-1 with history *y*(*t*)
= *S*(*t*) for *t* <*t*_{0}.

The solutions of DDEs are generally continuous, but they have
discontinuities in their derivatives. The `dde23`

function
tracks discontinuities in low-order derivatives. It integrates the
differential equations with the same explicit Runge-Kutta (2,3) pair
and interpolant used by `ode23`

. The Runge-Kutta
formulas are implicit for step sizes bigger than the delays. When *y*(*t*)
is smooth enough to justify steps this big, the implicit formulas
are evaluated by a predictor-corrector iteration.

Equation 10-1 is a special case of

$${y}^{\prime}(t)=f(t,y(t),y(d{y}_{1}),\mathrm{...},y(d{y}_{p}))$$ | (10-2) |

that involves delays, *dy*_{1},..., *dy*_{k},
which can depend on both time, *t*, and state, *y*.
The delays, *dy*_{j}(*t*, *y*),
must satisfy *dy*_{j}(*t*, *y*)
≤ *t* on the interval [*t*_{0}, *t*_{f}]
with *t*_{0} < *t*_{f}.

The `ddesd`

function
finds the solution, *y*(*t*), for
DDEs of the form given by Equation 10-2 with history *y*(*t*)
= *S*(*t*) for *t* < *t*_{0}.
The `ddesd`

function integrates with the classic
four-stage, fourth-order explicit Runge-Kutta method, and it controls
the size of the residual of a natural interpolant. It uses iteration
to take steps that are longer than the delays.

Delay differential equations of neutral type involve delays
in *y* ′ as well as *y*:

$${y}^{\prime}(t)=f(t,y(t),y(d{y}_{1}),\mathrm{...},y(d{y}_{p}),{y}^{\prime}(dy{p}_{1}),\mathrm{...},{y}^{\prime}(dy{p}_{q})).$$ | (10-3) |

The delays in the solution must satisfy *dy*_{i}(*t*,*y*)
≤ *t*. The delays in the first derivative
must satisfy *dyp*_{j}(*t*,*y*)
< *t* so that *y* ′ does
not appear on both sides of the equation.

The `ddensd`

function
solves DDEs of neutral type by approximating them with DDEs of the
form given by Equation 10-2.
For more information, see Shampine [1].

Use the `deval`

function
and the output from any of the DDE solvers to evaluate the solution
at specific points in the interval of integration. For example, ```
y
= deval(sol, 0.5*(sol.x(1) + sol.x(end)))
```

evaluates the
solution at the midpoint of the interval of integration.

When you solve a DDE, you approximate the solution on an interval
[*t*_{0},*t _{f}*]
with

Generally, the first derivative of the solution has a jump at
the initial point. This is because the first derivative of the history
function, *S*(*t*), generally does
not satisfy the DDE at this point. A discontinuity in any derivative
of *y*(*t*) propagates into the
future at spacings of *τ*_{1},…, *τ*_{k} when
the delays are constant, as in Equation 10-1. If the delays are not constant,
the propagation of discontinuities is more complicated. For neutral
DDEs of the form given by Equation 10-1 or Equation 10-2, the discontinuity appears in the next
higher order derivative each time it is propagated. In this sense,
the solution gets smoother as the integration proceeds. Solutions
of neutral DDEs of the form given by Equation 10-3 are qualitatively different. The discontinuity
in the solution does not propagate to a derivative of higher order.
In particular, the typical jump in *y* ′(*t*)
at *t*_{0} propagates as jumps
in *y* ′(*t*) throughout
[*t*_{0}, *t*_{f}].

[1] Shampine, L.F. "Dissipative Approximations
to Neutral DDEs." *Applied Mathematics & Computation*,
Vol. 203, 2008, pp. 641–648.

Was this topic helpful?