Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
2023.1.0 - English


ode_root

ordinary differential equation solver with roots finding

Syntax

[y, rd, w, iw] = ode("root", y0, t0, t [,rtol [,atol]], f [,jac], ng, g [,w,iw])

Arguments

y0

a real vector or matrix (initial conditions).

t0

a real scalar (initial time).

t

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

f

an external i.e. function or character string or list.

rtol, atol

a real constants or real vectors of the same size as y.

jac

an external i.e. function or character string or list.

ng

an integer.

g

an external i.e. function or character string or list.

y

a real vector or matrix. The solution.

rd

a real vector.

w, iw

vectors of real numbers. See ode() optional output

Description

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 syntax 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).

Output 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.

Examples

// Integration of the differential equation
// dy/dt=y , y(0)=1, and finds the minimum time t such that y(t)=2
deff("ydot = f(t,y)", "ydot=y")
deff("z = g(t,y)", "z=y-2")
y0 = 1; ng = 1;
[y,rd] = ode("root", y0, 0, 2, f, ng, g)

deff("z = g(t,y)", "z = y-[2;2;33]")
[y,rd] = ode("root", 1, 0, 2, f, 3, g)

See also

  • ode — ordinary differential equation solver
  • ode_optional_output — ode solvers optional outputs description
  • ode_discrete — ordinary differential equation solver, discrete time simulation
  • dasrt — DAE solver with zero crossing
  • daskr — DAE solver with zero crossing
Report an issue
<< ode_optional_output Differential calculus, Integration odedc >>

Copyright (c) 2022-2024 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Mon May 22 12:37:05 CEST 2023