Initial Equations
Regular equations are executed throughout the simulation. The
(Initial=true)
attribute lets you specify additional equations that are
executed during model initialization only.
Regular component equations alone are not sufficient to initialize a DAE system. Consider
a system with n continuous differential variables and m
continuous algebraic variables. For simulation, this system has
n+m
degrees of freedom and must
provide n+m
equations. The
initialization problem has up to n additional unknowns that correspond to
the derivative variables. These additional unknowns can be satisfied when you specify initial
targets for block variables. Initial equations provide another way to initialize a
system.
In general, the maximum number of high-priority targets you can specify is equal to the number of additional unknowns in the initialization problem. Besides the unknowns from differential variables, the initialization problem also has one more unknown for each event variable. These additional unknowns determine the maximum combined number of initial equations and high-priority variable targets. If there are too many high-priority targets, these cannot all be met. For more information, see Block-Level Variable Initialization.
Because the default value of the Initial
attribute for equations is
false
, you can omit this attribute when declaring regular
equations:
equations (Initial = true) % initial equations [...] end equations (Initial = false) % regular equations [...] end equations % regular equations [...] end
The syntax of initial equations is the same as that of regular equations, except:
der(x)
in initial equations is treated as an unknown value and is solved for during initialization.delay
andinteg
operators are disallowed.
When you include assert
constructs in initial
equations, their predicate conditions are checked only once, after solving for initial
conditions (before the start of simulation, see Initial Conditions Computation). Use
these assertions to safeguard against the model initializing with nonphysical values. For more
information, see Programming Run-Time Errors and Warnings.
A common use case for specifying initial equations is to initialize a system in steady state, for example:
component C parameters a = {-5, '1/s'}; b = {-2, '1/s'}; end outputs x = 5; y = 10; end equations der(x) == a*x + b*y; der(y) == b*y; end equations(Initial=true) der(x) == 0; der(y) == 0; end end
At initialization time, the equations are:
der(x) == 0; der(y) == 0; der(x) == a*x + b*y; der(y) == b*y;
For the rest of the simulation, the equations are:
der(x) == a*x + b*y; der(y) == b*y;
Note
When you initialize a model from an operating point, especially one that was generated from logged simulation data, the operating point is likely to contain all the necessary high-priority targets and applying initial equations would result in an over-specified model. Therefore, if you initialize a model from an operating point, the solver ignores all the initial equations that contain variables present in the operating point data. Initial equations for other variables are not affected: for example, if you add a block to the model after extracting the operating point data, initial equations for this block will be executed at initialization time. For more information, see Using Operating Point Data for Model Initialization.