dsolve/numeric/DAE_extension
find numerical solution of ordinary differential-algebraic initial value problems
Calling Sequence
Parameters
Description
Examples
dsolve(daesys, numeric, vars, method=meth, options)
daesys
-
set or list; ordinary differential equation(s), algebraic equation(s) and initial conditions
numeric
literal; instruct dsolve to find a numerical solution
vars
(optional) dependent variable or a set or list of dependent variables for daesys
method
literal; keyword for specification of the method
meth
name; specification of the method, rkf45_dae, ck45_dae, or rosenbrock_dae
options
(optional) equations of the form keyword = value
The dsolve DAE extension methods are standard numerical methods designed for ODE IVP that have been extended to the solution of DAE problems.
Specifically, the solvers have been extended to the solution of regular ODE and limited index 1 DAE (that can be isolated for a required dependent variable). The system is reduced to this specific index 1 system via index reduction.
Note: The index can be thought of as how far the DAE system is from being an ODE system.
The DAE extension methods then use the modified solver at each step. At the end of each step, the solution is projected back so that it satisfies any additional constraints of the problem. These additional constraints arise in the process of index reduction, and will only be present for systems for which index reduction is required.
dsolve has three extension methods, rkf45_dae, which is an extension of the rkf45 method, ck45_dae, which is an extension of the ck45 method, and rosenbrock_dae, which is an extension of the rosenbrock method.
As extensions, these methods retain many of the features of the original solvers, for example, events and range solutions. This page is concerned only with highlighting the differences between these methods, and any extension specific options.
One difference is that, by default, optimization is active for the extension methods, as the system is usually quite complex after relevant postprocessing has occurred.
For setup of the problem, it is required that the initial conditions are consistent, that is, that they satisfy any hidden constraints of the problem. In any cases where the constraints are not sufficiently satisfied, an error results, and the violated condition(s) are printed, allowing adjustment of the initial data to satisfy them.
In addition, if differential is false, it is possible to automatically compute values for any of the index 1 variables of the problem. Initial conditions for these variables need not be provided.
There are two major differences between the capabilities of the extension solvers and their original counterparts: the extension solvers can only be used with real valued problems and the initial values for the problem cannot be changed interactively.
Three options are specific to the DAE extension solvers:
'projection'= boolean
This option specifies whether, after each step, the solution is projected back onto the set of constraints that are not in direct use by the solver. This is true by default. If the DAE IVP is highly stable, and speed is an issue, setting this to false can provide a reasonable solution in less time.
'differential'= boolean
This option specifies that index reduction be performed until the system is fully differential (that is, does not take advantage of the index 1 capabilities of the modified solvers). This is false by default. The use of the index 1 capabilities of the solvers often provides a more stable and less stiff system than the full index reduction, and is usually faster.
'implicit'= boolean
This option specifies that parts of the extended system can be left in unsolved (implicit) form until they are evaluated. The solver determines which parts of the system must be put into solved form, in order to render the DAE problem numerically solvable, and which parts can be left in implicit form. This is essentially a smart form of the implicit option used for IVP problems (see dsolve[numeric,IVP]). This is a helpful option. It reduces the complication of the system derived quantities that must be computed to perform the numerical integration. The cost, though, is a linear solve every time the expressions must be evaluated. For problems in which the system is nearly in solved form with respect to the leading derivatives, this is somewhat slower than the direct method. For problems that are dense in the leading derivatives, this can be significantly faster.
Other issues are also discussed in the dsolve[numeric,DAE] page.
The simple pendulum problem in natural coordinates:
dsys≔x⁡t2+y⁡t2=1,diff⁡x⁡t,t,t=−2⁢λ⁡t⁢x⁡t,diff⁡y⁡t,t,t=−2⁢λ⁡t⁢y⁡t−π2,λ⁡0=1200+π22,x⁡0=0,y⁡0=−1,D⁡x⁡0=110,D⁡y⁡0=0
dsys≔x⁡t2+y⁡t2=1,ⅆ2ⅆt2x⁡t=−2⁢λ⁡t⁢x⁡t,ⅆ2ⅆt2y⁡t=−2⁢λ⁡t⁢y⁡t−π2,λ⁡0=1200+π22,x⁡0=0,y⁡0=−1,D⁡x⁡0=110,D⁡y⁡0=0
dsol1≔dsolve⁡dsys,numeric,method=rkf45_dae,abserr=1.×10−7,relerr=1.×10−7,maxfun=0
dsol1 ≔ procx_rkf45_dae...end proc
t1≔time⁡:
r1≔dsol1⁡2000
r1≔t=2000.,λ⁡t=4.93868361756221,x⁡t=−0.0123807482061333,ⅆⅆtx⁡t=0.0922928793706959,y⁡t=−0.999923355301742,ⅆⅆty⁡t=−0.00114274175827234
t1≔time⁡−t1
t1≔0.848
Compare with projection=false:
dsol2≔dsolve⁡dsys,numeric,method=rkf45_dae,projection=false,abserr=1.×10−7,relerr=1.×10−7,maxfun=0
dsol2 ≔ procx_rkf45_dae...end proc
t2≔time⁡:
r2≔dsol2⁡2000
r2≔t=2000.,λ⁡t=4.94243519773441,x⁡t=0.0129846594419248,ⅆⅆtx⁡t=0.0914835724074168,y⁡t=−0.999134421601209,ⅆⅆty⁡t=0.00118969565389328
t2≔time⁡−t2:
map⁡rhs,r1−map⁡rhs,r2
0.,−0.00375158017219857,−0.0253654076480581,0.000809306963279091,−0.000788933700533234,−0.00233243741216563
t1,t2
0.848,0.573
Compare time with differential=true:
dsol3≔dsolve⁡dsys,numeric,method=rkf45_dae,differential=true,abserr=1.×10−7,relerr=1.×10−7,maxfun=0
dsol3 ≔ procx_rkf45_dae...end proc
t3≔time⁡:
r3≔dsol3⁡2000
r3≔t=2000.,λ⁡t=4.93868637305339,x⁡t=−0.0123954832429250,ⅆⅆtx⁡t=0.0923324756218421,y⁡t=−0.999923173037470,ⅆⅆty⁡t=−0.00114459377988479
t3≔time⁡−t3:
map⁡rhs,r1−map⁡rhs,r3
0.,−2.75549117834117×10−6,0.0000147350367917121,−0.0000395962511461900,−1.82264271897381×10−7,1.85202161244891×10−6
t1,t3
0.848,0.914
See Also
dsolve[ck45]
dsolve[numeric,DAE]
dsolve[numeric,IVP]
dsolve[numeric]
dsolve[rkf45]
dsolve[rosenbrock]
plots[odeplot]
Download Help Document
What kind of issue would you like to report? (Optional)