# impl

differential algebraic equation

### Syntax

y = impl([type,] y0, ydot0, t0, t [,atol [,rtol]], res, adda [,jac])

### Arguments

- y0, ydot0
real vectors or matrices (initial conditions)

- t0
a real scalar (initial time)

- t
a real vector (times at which the solution is computed)

- res, adda
externals (function or character string or list)

- type
string

`'adams'`

or`'stiff'`

- atol, rtol
real scalars or real vectors of the same size as

`y`

- jac
external (function or character string or list).

### Description

Solution of the linear implicit differential equation

A(t,y) dy/dt=g(t,y), y(t0)=y0

`t0`

is the initial instant, `y0`

is the vector of initial conditions. Vector `ydot0`

of the
time derivative of `y`

at `t0`

must also
be given. The input `res`

is an external i.e. a
function with specified syntax, or the name a Fortran subroutine or a C
function (character string) with specified syntax or a
list.

If `res`

is a function, its syntax must be as
follows:

r = res(t,y,ydot)

where `t`

is a real scalar (time) and
`y`

and `ydot`

are real vector (state
and derivative of the state). This function must return
`r=g(t,y)-A(t,y)*ydot`

.

If `res`

is a character string, it refers to the
name of a Fortran subroutine or a C function. See
`SCI/modules/differential_equations/sci_gateway/fortran/Ex-impl.f`

for an example to do
that.

`res`

can also be a list: see the help of ode.

The input `adda`

is also an external.

If `adda`

is a function, its syntax must be as
follows:

r = adda(t,y,p)

and it must return `r=A(t,y)+p`

where
`p`

is a matrix to be added to
`A(t,y)`

.

If `adda`

is a character string, it refers to the
name of a Fortran subroutine or a C function. See
`SCI/modules/differential_equations/sci_gateway/fortran/Ex-impl.f`

for an example to do
that.

`adda`

can also be a list: see the help of ode.

The input `jac`

is also an external.

If `jac`

is a function, its syntax must be as
follows:

j = jac(t,y,ydot)

and it must return the Jacobian of
`r=g(t,y)-A(t,y)*ydot`

with respect to
`y`

.

If `jac`

is a character string, it refers to the
name of a Fortran subroutine or a C function. See
`SCI/modules/differential_equations/sci_gateway/fortran/Ex-impl.f`

for an example to do
that.

`jac`

can also be a list: see the help of ode.

### Examples

y = impl([1;0;0], [-0.04;0.04;0], 0, 0.4, 'resid', 'aplusp'); // Using hot restart //[x1,w,iw] = impl([1;0;0], [-0.04;0.04;0], 0, 0.2, 'resid', 'aplusp'); // hot start from previous call //x1 = impl([1;0;0],[-0.04;0.04;0], 0.2, 0.4, 'resid', 'aplusp', w, iw); //max(abs(x1-x))

### See also

Report an issue | ||

<< diff | Differential calculus, Integration | int2d >> |