ode_root — ordinary differential equation solver with root finding
y,rd[,w,iw]=ode("root",y0,t0,t [,rtol [,atol]],f [,jac],ng,g [,w,iw])
real vector or matrix (initial conditions).
real scalar (initial time).
real vector (times at which the solution is computed).
external i.e. function or character string or list.
real constants or real vectors of the same size as
y
.
external i.e. function or character string or list.
real vectors.
integer.
external i.e. function or character string or list.
With this syntax (first argument equal to "root"
)
ode
computes the solution of the differential equation
dy/dt=f(t,y)
until the state y(t)
crosses the surface g(t,y)=0
.
g
should give the equation of the surface. It is
an external i.e. a function with specified syntax, or the name of a
Fortran subroutine or a C function (character string) with specified
calling sequence or a list.
If g
is a function the syntax should be as
follows:
z = g(t,y)
where t
is a real scalar (time) and
y
a real vector (state). It returns a vector of size
ng
which corresponds to the ng
constraints. If g
is a character string it refers to
the name of a Fortran subroutine or a C function, with the following
calling sequence: g(n,t,y,ng,gout)
where
ng
is the number of constraints and
gout
is the value of g
(output of
the program). If g
is a list the same conventions as
for f
apply (see ode help).
Ouput rd
is a 1 x k
vector.
The first entry contains the stopping time. Other entries indicate which
components of g
have changed sign. k
larger than 2 indicates that more than one surface
((k-1)
surfaces) have been simultaneously
traversed.
Other arguments and other options are the same as for
ode
, see the ode help.