Please note that the recommended version of Scilab is 2026.0.0. This page might be outdated.
However, this page did not exist in the previous stable version.
daskr
DAE solver with zero crossing
Syntax
[r, nn [, hd]] = daskr(x0, t0, t [, atol [, rtol]], res [, jac], ng, surf [, info [, psol] [, pjac]] [, hd])
Arguments
- x0
- is either - y0(- ydot0is estimated by- daskrwith zero as first estimate) or the matrix- [y0 ydot0].- g(t, y0, ydot0)must be equal to zero. If you only know an estimate of- ydot0, set- info(7)=1.- y0
- a real column vector of initial conditions. 
- ydot0
- a real column vector of the time derivative of - yat- t0(may be an estimate).
 
- t0
- a real number, it is the initial instant. 
- t
- a real scalar or vector. Gives instants for which you want the solution. Note that you can get solution at each daskr's step point by setting - info(2)=1.
- atol, rtol
- real scalars or column vectors of same size as - yor both of size 1.- atoland- rtolgive respectively absolute and relative error tolerances of solution. If vectors, the tolerances are specified for each component of- y.
- res
- external (function, list or string). Computes the value of - g(t, y, ydot). It may be :- A Scilab function. - Its syntax must be - [r, ires] = res(t, y, ydot)and must return the residual- r = g(t, y, ydot)and error flag- ires.- ires = 0if- ressucceeds to compute- r,- ires = -1if residual is locally not defined for- (t, y, ydot),- ires = -2if parameters are out of admissible range.
- A list. - This form allows to pass parameters other than t, y, ydot to the function. It must be as follows: - list(res, x1, x2, ...) - where the syntax of the function - resis now- r = res(t, y, ydot, x1, x2, ...) - resstill returns- r = g(t, y, ydot)as a function of- (t, y, ydot, x1, x2, ...).- Warning: this form must not be used if there is no extra argument to pass to the function. 
- A string. - It must refer to the name of a C function or a Fortran subroutine linked with Scilab. - In C, the syntax must be: - In Fortran, it must be: - subroutine res(t, y, yd, r, ires, rpar, ipar) double precision t, y(*), yd(*),r(*),rpar(*) integer ires, ipar(*) - The - rparand- ipararrays must be present but cannot be used.
 
- jac
- external (function, list or string). Computes the value of - dg/dy + cj*dg/dydotfor a given value of parameter- cj.- A Scilab function. - Its syntax must be - r = jac(t, y, ydot, cj)and must return- r = dg(t, y, ydot)/dy + cj*dg(t, y, ydot)/dydotwhere- cjis a real scalar.
- A list. - It must be as follows - list(jac, x1, x2, ...) - where the syntax of the function - jacis now- r=jac(t, y, ydot, cj, x1, x2,...) - jacstill returns- dg/dy + cj*dg/dydotas a function of- (t, y, ydot, cj, x1, x2, ...).
- A character string. - It must refer to the name of a C function or a Fortran subroutine linked with Scilab - In C, the syntax must be: - In Fortran, it must be: - subroutine jac(t, y, yd, pd, cj, rpar, ipar) double precision t, y(*), yd(*), pd(*), cj, rpar(*) integer ipar(*) 
 
- surf
- external (function, list or string). Computes the value of the column vector - surf(t, y)with- ngcomponents. Each component defines a surface. It may be defined by:- A Scilab function. - Its syntax must be - surf(t, y)
- A list. - It must be as follows - where the syntax of the function - surfis now- r = surf(t, y, x1, x2, ...) 
- A character string. - It must refer to the name of a C function or a Fortran subroutine linked with Scilab. - In C, the syntax must be: - In Fortran, it must be: 
 
- info
- list which contains - 14elements. Default value is- list([], 0, [], [], [], 0, [], 0, [], 0, 0, [], [], 1).- info(1)
- real scalar which gives the maximum time for which - gis allowed to be evaluated or an empty matrix- []if no limits imposed for time.
- info(2)
- flag which indicates if - daskrreturns its intermediate computed values (- = 1) or only the user specified time point values (- = 0).
- info(3)
- 2components vector which give the definition- [ml,mu]of band matrix computed by- jac;- r(i - j + ml + mu + 1,j) = "dg(i)/dy(j)+cj*dg(i)/dydot(j)". If- jacreturns a full matrix set- info(3)=[]. Treat as dummy if- info(8)=1.
- info(4)
- real scalar which gives the maximum step size. Set - info(4)=[]if no limitation.
- info(5)
- real scalar which gives the initial step size. Set - info(5)=[]if not specified.
- info(6)
- set - info(6)=1if the solution is known to be non negative, else set- info(6)=0.
- info(7)
- if ydot0 is set so that - g(t0, y0, ydot0) = 0then set- info(7)=[]. Otherwise, set- info(7)=[+-1, ..., +-1], with- info(7)(i) = 1if y(i) is a differential variable and- info(7)(i) = -1if y(i) is an algebraic variable (if its derivatives do not appear explicitly in the function g(t, y, ydot)).
- info(8)
- direct / Krylov method. Set - info(8)=1and provide a routine in- psolif you want the solver to use Krylov iterations, else (daskr's direct method) set- info(8)=0.
- info(9)
- Krylov parameters. Treat as dummy argument if you have set - info(8)=0. Otherwise, set- info(9)=[]or- info(9)=[maxl kmp nrmax epli], where:- - maxl = maximum number of iterations in the GMRes algorithm (default - min(5, neq)),- - kmp = number of vectors on which orthogonalization is done in the GMRes algorithm (default maxl), - - nrmax = maximum number of restarts of the GMRes algorithm per nonlinear iteration (default - 5),- - epli = convergence test constant in GMRes algorithm (default - 0.05).
- info(10)
- initial conditions. Treat as dummy argument if - info(7)=[]. Set- info(10)=1if the solver should stop right after computation of the initial conditions, else set- info(10)=0.
- info(11)
- preconditioner computation and LU-factorization routine for - psol. Treat as dummy argument if- info(8)=0. Set- info(11)=1and provide a- pjacroutine if the external- psolshould use a specific routine, else set- info(11)=0.
- info(12)
- if you wish to control errors locally on all the variables then set - info(12)=[]. Otherwise, set- info(12)=[+-1, ..., +-1], with- info(12)(i) = 1if y(i) is a differential variable and- info(12)(i) = -1if y(i) is an algebraic variable (if its derivatives do not appear explicitly in the function g(t, y, ydot)).
- info(13)
- heuristic parameters. Treat as dummy argument if - info(7)=[]. Otherwise, set- info(13)=[]or- info(13)=[mxnit mxnj mxnh lsoff stptol epinit], where:- - mxnit = maximum number of Newton iterations per Jacobian or preconditioner evaluation (default - 5if- info(8)=0,- 15otherwise),- - mxnj = maximum number of Jacobian or preconditioner evaluations (default - 6if- info(8)=0,- 2otherwise),- - mxnh = maximum number of values of the artificial stepsize parameter - hto be tried if info(7) ≠ [] (default- 5),- - lsoff = flag to turn off the linesearch algorithm (lsoff = 0 means linesearch is on, lsoff = 1 means it is turned off) (default - 0),- - stptol = minimum scaled step in linesearch algorithm (default - (unit roundoff)^(2/3)),- - epinit = swing factor in the Newton iteration convergence test (default - 0.01).
- info(14)
- verbosity. Set - info(14)=1for minimal extra printing,- info(14)=2for full printing, else set- info(14)=0.
 
- psol
- external (function, list or string). Solves a linear system - P*x = b, with P being the factored preconditioner that routine- pjaccomputed beforehand and stored in- wpand- iwp.- A Scilab function. - Its syntax must be - [r, ier] = psol(wp, iwp, b)and must return the solution of the system in- rand an error flag- ier.
- A list. - It must be as follows: - list(psol, x1, x2, ...) - where the syntax of - psolis now- psol(wp, iwp, b, x1, x2, ...) - psolstill returns the solution in- r.
- A character string. - It must refer to the name of a C function or a Fortran subroutine linked with Scilab - In C, the syntax must be: where the arrays- void psol (int*neq, double*t, double*y, double*ydot, double*savr, double*wk, double*cj, double*wght, double*wp, int*iwp, double*b, double*eplin, int*ier, double*rpar, int*ipar) - wpand- iwpcontain matrix elements of LU-factored preconditioner- P,- wpbeing the values and- iwpthe pivots used in the factorization.- In Fortran, it must be: - subroutine psol (neq, t, y, ydot, savr, wk, cj, wght, wp, iwp, b, eplin, ier, rpar, ipar) double precision t,y(*), ydot(*), savr(*), wk(*), cj, wght(*), wp(*), b(*), eplin, rpar(*) integer neq, iwp(*), ier, ipar(*) 
 
- pjac
- external (function, list or string). Computes the value of - dg/dy + cj*dg/dydotfor a given value of parameter- cjand LU-factorizes it in two arrays, real and integer.- A Scilab function. - Its syntax must be - [wp, iwp, ires] = pjac(neq, t, y, ydot, h, cj, rewt, savr)and in return, the arrays- wpand- iwpmust contain all factored preconditioner information.
- A list. - It must be as follows - list(pjac, x1, x2, ...) - where the syntax of - pjacis- pjac(neq, t, y, ydot, h, cj, rewt, savr, x1, x2,...) - pjacstill returns factorized- dg/dy + cj*dg/dydotas a function of- (neq, t, y, ydot, h, cj, rewt, savr, x1, x2, ...).
- A character string. - It must refer to the name of a C function or a Fortran subroutine linked with Scilab - In C, the syntax must be: - void pjac (double*res, int*ires, int*neq, double*t, double*y, double*ydot, double*rewt, double*savr, double*wk, double*h, double*cj, double*wp, int*iwp, int*ier, double*rpar, int*ipar) - In Fortran, it must be: - subroutine pjac (res, ires, neq, t, y, ydot, rewt, savr, wk, h, cj, wp, iwp, ier, rpar, ipar) double precision res(*), t, y(*), ydot(*), rewt(*), savr(*), wk(*), h, cj, wp(*), rpar(*) integer ires, neq, iwp(*), ier, ipar(*) 
 
- hd
- real vector which allows to store the - daskrcontext and to resume integration.
- r
- real matrix. Each column is the vector - [t; x(t); xdot(t)]where- tis the time index for which the solution has been computed,- x(t)is the value of the computed solution,- xdot(t)is the derivative of the computed solution.
- nn
- a vector with two entries - [times num],- timesis the value of the time at which the surface is crossed,- numis the number of the crossed surface.
Description
Solution of the implicit differential equation:
g(t, y, ydot) = 0 y(t0) = y0 and ydot(t0) = ydot0
Returns the surface crossing instants and the number of the surface
            reached in nn.
Detailed examples can be found in SCI/modules/differential_equations/tests/unit_tests/daskr.tst
Examples
// dy/dt = ((2*log(y)+8)/t-5)*y, y(1) = 1, 1 <= t <= 6 // g1 = ((2*log(y)+8)/t-5)*y // g2 = log(y) - 2.2491 y0 = 1; t = 2:6; t0 = 1; y0d = 3; atol = 1.d-6; rtol = 0; ng = 2; deff('[delta, ires] = res1(t, y, ydot)', 'ires = 0; delta = ydot-((2*log(y)+8)/t-5)*y') deff('[rts] = gr1(t, y)', 'rts = [((2*log(y)+8)/t-5)*y; log(y)-2.2491]') [yy, nn] = daskr([y0, y0d], t0, t, atol, rtol, res1, ng, gr1); nn // Should return nn = [2.4698972 2]
See also
- ode — Solucionador de equações diferenciais ordinárias
- dasrt — Solucionador de equações diferenciais algébricas com cruzamento de zeros
- dassl — Equação diferencial algébrica
- impl — equações diferenciais algébricas
- call — chamada a rotinas de usuário FORTRAN ou C
- link — dynamic linker
- external — objeto Scilab, função ou rotina externa
History
| Versão | Descrição | 
| 5.5.0 | daskr solver added | 
| Report an issue | ||
| << daeoptions | Equações Diferenciais | dasrt >> |