Initial Value DDE of Neutral Type
This example shows how to use ddensd
to solve a system of initial value DDEs (delay differential equations) with time-dependent delays. The example was originally presented by Jackiewicz [1].
The equation is
This equation is an initial value DDE because the time delays are zero at . Therefore, a solution history is unnecessary to calculate a solution, only the initial values are needed:
is the solution of . The values of that satisfy this equation are and .
Since the time delays in the equations are present in a term, this equation is called a neutral DDE.
To solve this equation in MATLAB®, you need to code the equation and delays before calling the delay differential equation solver ddensd
, which is the solver for neutral equations. You either can include the required functions as local functions at the end of a file (as done here), or save them as separate files in a directory on the MATLAB path.
Code Delays
First, write an anonymous function to define the delays in the equation. Since both and have delays of the form , only one function definition is required. This delay function is later passed to the solver twice, once to indicate the delay for and once for .
delay = @(t,y) t/2;
Code Equation
Now, create a function to code the equation. This function should have the signature yp = ddefun(t,y,ydel,ypdel)
, where:
t
is time (independent variable).y
is the solution (dependent variable).ydel
contains the delays for y.ypdel
contains the delays for .
These inputs are automatically passed to the function by the solver, but the variable names determine how you code the equation. In this case:
ydel
ypdel
function yp = ddefun(t,y,ydel,ypdel) yp = 2*cos(2*t)*ydel^(2*cos(t)) + log(ypdel) - log(2*cos(t)) - sin(t); end
Note: All functions are included as local functions at the end of the example.
Solve Equation
Finally, define the interval of integration and the initial values, and then solve the DDE using the ddensd
solver. Pass the initial values to the solver by specifying them in a cell array in the fourth input argument.
tspan = [0 0.1]; y0 = 1; s1 = 2; sol1 = ddensd(@ddefun, delay, delay, {y0,s1}, tspan);
Solve the equation a second time, this time using the alternate value of for the initial condition.
s2 = 0.4063757399599599; sol2 = ddensd(@ddefun, delay, delay, {y0,s2}, tspan);
Plot Solution
The solution structures sol1
and sol2
have the fields x
and y
that contain the internal time steps taken by the solver and corresponding solutions at those times. However, you can use deval
to evaluate the solution at the specific points.
Plot the two solutions to compare results.
plot(sol1.x,sol1.y,sol2.x,sol2.y); legend('y''(0) = 2','y''(0) = .40637..','Location','NorthWest'); xlabel('Time t'); ylabel('Solution y'); title('Two Solutions of Jackiewicz''s Initial-Value NDDE');
Local Functions
Listed here are the local helper functions that the DDE solver ddensd
calls to calculate the solution. Alternatively, you can save these functions as their own files in a directory on the MATLAB path.
function yp = ddefun(t,y,ydel,ypdel) yp = 2*cos(2*t)*ydel^(2*cos(t)) + log(ypdel) - log(2*cos(t)) - sin(t); end
References
[1] Jackiewicz, Z. “One step Methods of any Order for Neutral Functional Differential Equations.” SIAM Journal on Numerical Analysis. Vol. 21, Number 3. 1984. pp. 486–511.
See Also
ddensd
| ddesd
| dde23
| deval