dsolve/numeric/delay
find numerical solution of delay differential initial value problems
Calling Sequence
Parameters
Description
Examples
Compatibility
dsolve(delaysys, numeric, vars, options)
delaysys
-
set or list; ordinary differential or differential-algebraic equation(s) with delays
numeric
name; instruct dsolve to find a numerical solution
vars
(optional) dependent variable or a set or list of dependent variables for delaysys
options
(optional) equations of the form keyword = value
The dsolve command with the numeric or type=numeric option and a real-valued delay differential initial value problem finds a numerical solution for the delay IVP. If the optional equation method=numericmethod is provided (where numericmethod is one of rkf45, ck45, or rosenbrock), dsolve uses that method to obtain the numerical solution.
The dsolve command is able to detect the presence of delays automatically, but it requires additional information for the case of variable delays (see delaymax later).
In addition to the options described in dsolve[numeric] and dsolve[Error_Control], delay differential systems also have the following options
'delaymax'
=
positive
'delaypts'
positive integer
'delaymax'= positive
This option is required for problems with a variable delay, and is required to specify the maximum delay time for all delays in the system.
'delaypts'= positive integer
This option specifies the maximum point storage to allocate when storing delay data, and must be at least 6, and at that setting will only be able to retain an accurate solution history for the last integration step taken. By default, this value is conservatively set to 10000. Note that if a small value is used, the computation will use less memory, but the results may be inaccurate. A warning is produced if this value is specified below 100.
The delay computation implemented for the numeric solvers utilizes the natural interpolant built into the solvers, storing solution values back to delaymax as the computation proceeds. On initialization, the dependent variable values are assumed to be constants set to the initial values for all times t<t0, and once the delay time for a delay term exceeds t−t0, the interpolant comes into play. Derivatives of the dependent variable values are assumed to be zero for all times t<t0.
In some cases, such as delays for derivatives, use of the initial value or zero is not desirable, and in these cases a constant value for t<t0 can be specified as the second argument to the delay function. For example, y⁡t−1 specifies that for t<1 the initial value of y is used, while y⁡t−1,0 specifies that for t<1 the value 0 be used. Similarly, D⁡y⁡t−1 specifies that for t<1 the value 0 be used, while D1⁡y⁡t−1,1 specifies that for t<1 the value 1 be used.
In the event that a requested delay is so small as to be past the end of the last computed step, extrapolation using the interpolant of the last available step is used.
In the event that insufficient storage is allocated for a problem (in other words, if delaypts was set too small), the storage downgrades. Initially, it reduces to storing only integration step endpoints using a linear interpolant. Then if further downgrading is required, the storing reduces to every second endpoint, and consequently to every fourth, every eighth and so on. Note that solution accuracy is significantly degraded when downgrading is in use, so it is best to make delaypts sufficiently large so that downgrading is unnecessary.
Note that delays can be used with DAE IVPs as well as with events, though events do not support setting of a past value on the trigger of an event. Also, note that the interpolant is only C1 continuous, so any DAE problems where a second derivative of a delay is required will fail to run, as the discontinuities will affect the error control.
Delays can also be used for IVPs with parameters, though parameters cannot be used in the delay itself.
Basic use of a delay
dsys≔diff⁡y⁡t,t=−y⁡t−1,y⁡0=2
dsys≔ⅆⅆty⁡t=−y⁡t−1,y⁡0=2
dsn≔dsolve⁡dsys,numeric
dsn ≔ procx_rkf45_dae...end proc
plotsodeplot⁡dsn,0..10
Variable delay: note that this example shows the subtlety of setting delaymax. Although the delay at t=0 is 12+ⅇ12=2.148721271, it is only needed to store a delay of 1.07, since the value at the initial point is in use until that time and the delay is monotonically decreasing.
dsys≔diff⁡y⁡t,t=−y⁡t−12−exp⁡−t−12,y⁡0=2
dsys≔ⅆⅆty⁡t=−y⁡t−12−ⅇ−t+12,y⁡0=2
dsn≔dsolve⁡dsys,numeric,delaymax=1.07
Initial value specification through delay: this example shows the use of a second argument to the delay function to provide a nonzero derivative value for t<0.
Use of the default (delay value for D(y)(t-1) is 0):
dsys≔diff⁡y⁡t,t,t+diff⁡y⁡t−1,t+y⁡t=0,y⁡0=0,z⁡t=diff⁡y⁡t−1,t,D⁡y⁡0=1:
dsn≔dsolve⁡dsys,numeric:
plotsodeplot⁡dsn,t,y⁡t,color=red,t,z⁡t,color=blue,0..2
So we see a jump in the derivalue value at t=1. We can instead specify that the delay value for D(y)(t-1) is 1 by using D[1](y)(t-1,1):
dsys≔diff⁡y⁡t,t,t+D1⁡y⁡t−1,1+y⁡t=0,y⁡0=0,z⁡t=D1⁡y⁡t−1,1,D⁡y⁡0=1:
As an example of what effect one will see by too small a value of delaypts we compare a correct solution with one obtained by setting the value too small.
dsys≔diff⁡y⁡t,t,t+3⁢y⁡t−y⁡t−2⁢π2=0,y⁡0=0,D⁡y⁡0=1:
dsn1≔dsolve⁡dsys,numeric:
plotsodeplot⁡dsn1,10..4⁢π
dsn2≔dsolve⁡dsys,numeric,delaypts=20:
plotsodeplot⁡dsn2,10..4⁢π
One can see that the concavity of the curve in the second plot is different than the first. This effect is more pronounced for systems that have stiffness, or high rates of change.
Delay with parameters
dsys≔diff⁡y⁡t,t,t+a⁢y⁡t−110,y⁡0=0,D⁡y⁡0=1:
dsn≔dsolve⁡dsys,numeric,parameters=a:
dsn⁡parameters=a=1
a=1.
plotsodeplot⁡dsn,0..4⁢π
dsn⁡parameters=a=2
a=2.
The delaysys parameter was introduced in Maple 2015.
The delaymax and delaypts options were introduced in Maple 2015.
For more information on Maple 2015 changes, see Updates in Maple 2015.
Applications
Numeric Delay Differential Equation Examples
See Also
dsolve/Error_Control
dsolve[ck45]
dsolve[Events]
dsolve[numeric,interactive]
dsolve[numeric,IVP]
dsolve[numeric]
dsolve[rkf45]
dsolve[rosenbrock]
plots[odeplot]
Download Help Document