DAE extension - Maple Help
For the best experience, we recommend viewing online help using Google Chrome or Microsoft Edge.

Online Help

All Products    Maple    MapleSim


dsolve/numeric/DAE_extension

find numerical solution of ordinary differential-algebraic initial value problems

 

Calling Sequence

Parameters

Description

Examples

Calling Sequence

dsolve(daesys, numeric, vars, method=meth, options)

Parameters

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

Description

• 

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.

Examples

The simple pendulum problem in natural coordinates:

dsysxt2+yt2=1,diffxt,t,t=2λtxt,diffyt,t,t=2λtytπ2,λ0=1200+π22,x0=0,y0=1,Dx0=110,Dy0=0

dsysxt2+yt2=1,ⅆ2ⅆt2xt=2λtxt,ⅆ2ⅆt2yt=2λtytπ2,λ0=1200+π22,x0=0,y0=−1,Dx0=110,Dy0=0

(1)

dsol1dsolvedsys,numeric,method=rkf45_dae,abserr=1.×10−7,relerr=1.×10−7,maxfun=0

dsol1procx_rkf45_dae...end proc

(2)

t1time:

r1dsol12000

r1t=2000.,λt=4.93868361756221,xt=−0.0123807482061333,ⅆⅆtxt=0.0922928793706959,yt=−0.999923355301742,ⅆⅆtyt=−0.00114274175827234

(3)

t1timet1

t10.783

(4)

Compare with projection=false:

dsol2dsolvedsys,numeric,method=rkf45_dae,projection=false,abserr=1.×10−7,relerr=1.×10−7,maxfun=0

dsol2procx_rkf45_dae...end proc

(5)

t2time:

r2dsol22000

r2t=2000.,λt=4.94243519773441,xt=0.0129846594419248,ⅆⅆtxt=0.0914835724074168,yt=−0.999134421601209,ⅆⅆtyt=0.00118969565389328

(6)

t2timet2:

maprhs,r1maprhs,r2

0.,−0.00375158017219857,−0.0253654076480581,0.000809306963279091,−0.000788933700533234,−0.00233243741216563

(7)

t1,t2

0.783,0.590

(8)

Compare time with differential=true:

dsol3dsolvedsys,numeric,method=rkf45_dae,differential=true,abserr=1.×10−7,relerr=1.×10−7,maxfun=0

dsol3procx_rkf45_dae...end proc

(9)

t3time:

r3dsol32000

r3t=2000.,λt=4.93868637305339,xt=−0.0123954832429250,ⅆⅆtxt=0.0923324756218421,yt=−0.999923173037470,ⅆⅆtyt=−0.00114459377988479

(10)

t3timet3:

maprhs,r1maprhs,r3

0.,−2.75549117834117×10−6,0.0000147350367917121,−0.0000395962511461900,−1.82264271897381×10−7,1.85202161244891×10−6

(11)

t1,t3

0.783,0.731

(12)

The Chemical Akzo Nobel problem

This DAE system describes a chemical process in which FLB and ZHU are mixed while carbon dioxide is added over time. The ZLA concentration is of interest.

The rate equations for each reaction are given by:

ratesKs=FLB_ZHUtFLBtZHUt,r1t=k1FLBt4sqrtCO2t,r2t=k2FLBTtZHUt,r3t=k2KFLBtZLAt,r4t=k3FLBtZHUt2,r5t=k4FLB_ZHUt2sqrtCO2t:

The carbon dioxide inflow is governed by

inflowFInt=klApCO2HCO2t:

The concentrations are described by the following differential equations

concdiffCO2t,t=0.5r1tr4t0.5r5t+FInt,diffFLBt,t=2r1t+r2tr3tr4t,diffFLBTt,t=r1tr2t+r3t,diffZHUt,t=r2t+r3t2r4t,diffZLAt,t=r2tr3t+r5t:

and the Initial values are given by:

icsCO20=0.00123,FLB0=0.444,FLBT0=0,ZHU0=0.007,ZLA0=0:

The parameters are as follows:

parsH=737,K=34.4,klA=3.3,pCO2=0.9,Ks=115.83,k1=18.7,k2=0.58,k3=0.09,k4=0.42:

To begin, we apply the parameters to the rates and inflow:

ratesevalrates,pars:

inflowevalinflow,pars:

then pass all equations and initial conditions to dsolve with moderately tight tolerances choosing the rosenbrock_dae method, as the problem is known to be stiff:

dsol4dsolveinflow,conc,ics,rates,numeric,method=rosenbrock_dae,abserr=1.×10−10,relerr=1.×10−10

dsol4procx_rosenbrock_dae...end proc

(13)

The period of interest is t=0..180, but the CO2 concentration shows some interesting behavior in the first 0.5s:

plotsodeplotdsol4,t,CO2t,0..0.5

The values at t=180 show perfect comparison to the 6-digit accurate benchmark results (CO2(180)=1.20383e-3, ZLA(180)=1.70801e-2):

evalCO2t,ZLAt,dsol4180

0.00120383147146856,0.0170801088535847

(14)

And we plot the CO2 and ZLA concentrations as a function of time over the entire range of interest (adjusting CO2 by a factor of 10 for scale):

plotsodeplotdsol4,t,10CO2t,t,ZLAt,0..180

See Also

dsolve[ck45]

dsolve[numeric,DAE]

dsolve[numeric,IVP]

dsolve[numeric]

dsolve[rkf45]

dsolve[rosenbrock]

plots[odeplot]