decic
Find consistent initial conditions for first-order implicit ODE system with algebraic constraints
Description
[
finds consistent initial conditions for the system of first-order implicit ordinary
differential equations with algebraic constraints returned by the
y0
,yp0
]
= decic(eqs
,vars
,constraintEqs
,t0
,y0_est
,fixedVars
,yp0_est
,options
)reduceDAEToODE
function.
The call [eqs,constraintEqs] = reduceDAEToODE(DA_eqs,vars)
reduces the system of differential algebraic equations DA_eqs
to
the system of implicit ODEs eqs
. It also returns constraint
equations encountered during system reduction. For the variables of this ODE system
and their derivatives, decic
finds consistent initial
conditions y0
, yp0
at the time
t0
.
Substituting the numerical values y0
,
yp0
into the differential equations subs(eqs, [t;
vars(t); diff(vars(t))], [t0; y0; yp0])
and the constraint equations
subs(constr, [t; vars(t); diff(vars(t))], [t0; y0; yp0])
produces zero vectors. Here, vars
must be a column
vector.
y0_est
specifies numerical estimates for the values of the
variables vars
at the time t0
, and
fixedVars
indicates the values in
y0_est
that must not change during the numerical search.
The optional argument yp0_est
lets you specify numerical
estimates for the values of the derivatives of the variables
vars
at the time t0
.
Examples
Find Consistent Initial Conditions for ODE System
Reduce the DAE system to a system of implicit ODEs. Then, find consistent initial conditions for the variables of the resulting ODE system and their first derivatives.
Create the following differential algebraic system.
syms x(t) y(t) DA_eqs = [diff(x(t),t) == cos(t) + y(t),... x(t)^2 + y(t)^2 == 1]; vars = [x(t); y(t)];
Use reduceDAEToODE
to convert this system to a system of
implicit ODEs.
[eqs, constraintEqs] = reduceDAEToODE(DA_eqs, vars)
eqs = diff(x(t), t) - y(t) - cos(t) - 2*x(t)*diff(x(t), t) - 2*y(t)*diff(y(t), t) constraintEqs = 1 - y(t)^2 - x(t)^2
Create an option set that specifies numerical tolerances for the numerical search.
options = odeset('RelTol', 10.0^(-7), 'AbsTol', 10.0^(-7));
Fix values t0 = 0
for the time and numerical estimates for
consistent values of the variables and their derivatives.
t0 = 0; y0_est = [0.1, 0.9]; yp0_est = [0.0, 0.0];
You can treat the constraint as an algebraic equation for the variable
x
with the fixed parameter y
. For this,
set fixedVars = [0 1]
. Alternatively, you can treat it as an
algebraic equation for the variable y
with the fixed parameter
x
. For this, set fixedVars = [1 0]
.
First, set the initial value x(t0) = y0_est(1) = 0.1
.
fixedVars = [1 0]; [y0,yp0] = decic(eqs,vars,constraintEqs,t0,y0_est,fixedVars,yp0_est,options)
y0 = 0.1000 0.9950 yp0 = 1.9950 -0.2005
Now, change fixedVars
to [0 1]
. This fixes
y(t0) = y0_est(2) = 0.9
.
fixedVars = [0 1]; [y0,yp0] = decic(eqs,vars,constraintEqs,t0,y0_est,fixedVars,yp0_est,options)
y0 = -0.4359 0.9000 yp0 = 1.9000 0.9202
Verify that these initial values are consistent initial values satisfying the equations and the constraints.
subs(eqs, [t; vars; diff(vars,t)], [t0; y0; yp0])
ans = 0 0
subs(constraintEqs, [t; vars; diff(vars,t)], [t0; y0; yp0])
ans = 0
Input Arguments
Output Arguments
Version History
Introduced in R2014b