# DDE of Neutral Type

This example shows how to use `ddensd`

to solve a neutral DDE (delay differential equation), where delays appear in derivative terms. The problem was originally presented by Paul [1].

The equation is

${\mathit{y}}^{\prime}\left(\mathit{t}\right)=1+\mathit{y}\left(\mathit{t}\right)-2{\mathit{y}\left(\frac{\mathit{t}}{2}\right)}^{2}-{\mathit{y}}^{\prime}\left(\mathit{t}-\pi \right)$.

The history function is$\mathit{y}\left(\mathit{t}\right)=\mathrm{cos}\left(\mathit{t}\right)$ for $\mathit{t}\le 0$.

Since the equation has time delays in a ${\mathit{y}}^{\prime}$ term, the equation is called a *neutral DDE*. If the time delays are only present in $\mathit{y}$ terms, then the equation would be a constant or state-dependent DDE, depending on what form the time delays have.

To solve this equation in MATLAB®, you need to code the equation, delays, and history before calling the delay differential equation solver `ddensd`

. You either can include these 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 functions to define the delays in the equation. The first term in the equation with a delay is $\mathit{y}\left(\frac{\mathit{t}}{2}\right)$.

function dy = dely(t,y) dy = t/2; end

The other term in the equation with a delay is ${\mathit{y}}^{\prime}\left(\mathit{t}-\pi \right)$.

function dyp = delyp(t,y) dyp = t-pi; end

In this example, only one delay for $\mathit{y}$ and one delay for ${\mathit{y}}^{\prime}$ are present. If there were more delays, then you can add them in these same function files, so that the functions return vectors instead of scalars.

*Note: All functions are included as local functions at the end of the example.*

### 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 $\mathit{y}$.`ypdel`

contains the delays for ${\mathit{y}}^{\prime}=\frac{\mathrm{dy}}{\mathrm{dt}}$.

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`

$\text{\hspace{0.17em}\hspace{0.17em}\hspace{0.17em}}\to \text{\hspace{0.17em}}\text{\hspace{0.17em}}\mathit{y}\left(\frac{\mathit{t}}{2}\right)$`ypdel`

$\text{\hspace{0.17em}}\to \text{\hspace{0.17em}}{\mathit{y}}^{\prime}\left(\mathit{t}-\pi \right)\text{\hspace{0.17em}}$

function yp = ddefun(t,y,ydel,ypdel) yp = 1 + y - 2*ydel^2 - ypdel; end

### Code Solution History

Next, create a function to define the solution history. The solution history is the solution for times $\mathit{t}\le {\mathit{t}}_{0}$.

function y = history(t) y = cos(t); end

### Solve Equation

Finally, define the interval of integration $\left[{\mathit{t}}_{0\text{\hspace{0.17em}}}\text{\hspace{0.17em}\hspace{0.17em}}{\mathit{t}}_{\mathit{f}}\right]$ and solve the DDE using the `ddensd`

solver.

tspan = [0 pi]; sol = ddensd(@ddefun, @dely, @delyp, @history, [0,pi]);

### Plot Solution

The solution structure `sol`

has the fields `sol.x`

and `sol.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.

Evaluate the solution at 20 equally spaced points between `0`

and `pi`

.

tn = linspace(0,pi,20); yn = deval(sol,tn);

Plot the calculated solution and history against the analytical solution.

th = linspace(-pi,0); yh = history(th); ta = linspace(0,pi); ya = cos(ta); plot(th,yh,tn,yn,'o',ta,ya) legend('History','Numerical','Analytical','Location','NorthWest') xlabel('Time t') ylabel('Solution y') title('Example of Paul with 1 Equation and 2 Delay Functions') axis([-3.5 3.5 -1.5 1.5])

### 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) % equation being solved yp = 1 + y - 2*ydel^2 - ypdel; end %------------------------------------------- function dy = dely(t,y) % delay for y dy = t/2; end %------------------------------------------- function dyp = delyp(t,y) % delay for y' dyp = t-pi; end %------------------------------------------- function y = history(t) % history function for t < 0 y = cos(t); end %-------------------------------------------

### References

[1] Paul, C.A.H. “A Test Set of Functional Differential Equations.” *Numerical Analysis Reports*. No. 243. Manchester, UK: Math Department, University of Manchester, 1994.

## See Also

`ddensd`

| `ddesd`

| `dde23`

| `deval`