41
41
"""
42
42
$(TYPEDSIGNATURES)
43
43
44
- Generate `System` of nonlinear equations which initializes a problem from specified initial conditions of an `AbstractTimeDependentSystem `.
44
+ Generate `System` of nonlinear equations which initializes a problem from specified initial conditions of a time-dependent `AbstractSystem `.
45
45
"""
46
46
function generate_initializesystem_timevarying (sys:: AbstractSystem ;
47
47
op = Dict (),
@@ -71,7 +71,6 @@ function generate_initializesystem_timevarying(sys::AbstractSystem;
71
71
eqs_ics = Equation[]
72
72
defs = copy (defaults (sys)) # copy so we don't modify sys.defaults
73
73
additional_guesses = anydict (guesses)
74
- additional_initialization_eqs = Vector {Equation} (initialization_eqs)
75
74
guesses = merge (get_guesses (sys), additional_guesses)
76
75
idxs_diff = isdiffeq .(eqs)
77
76
@@ -190,11 +189,13 @@ function generate_initializesystem_timevarying(sys::AbstractSystem;
190
189
push! (pars, get_iv (sys))
191
190
192
191
# 8) use observed equations for guesses of observed variables if not provided
192
+ guessed = Set (keys (defs)) # x(t), D(x(t)), ...
193
+ guessed = union (guessed, Set (default_toterm .(guessed))) # x(t), D(x(t)), xˍt(t), ...
193
194
for eq in trueobs
194
- haskey (defs, eq. lhs) && continue
195
- any (x -> isequal ( default_toterm (x), eq. lhs), keys (defs)) && continue
196
-
197
- defs[eq . lhs] = eq . rhs
195
+ if ! ( eq. lhs in guessed)
196
+ defs[ eq. lhs] = eq . rhs
197
+ # push!(guessed, eq.lhs) # should not encounter eq.lhs twice, so don't need to track it
198
+ end
198
199
end
199
200
append! (eqs_ics, trueobs)
200
201
216
217
"""
217
218
$(TYPEDSIGNATURES)
218
219
219
- Generate `System` of nonlinear equations which initializes a problem from specified initial conditions of an `AbstractTimeDependentSystem `.
220
+ Generate `System` of nonlinear equations which initializes a problem from specified initial conditions of a time-independent `AbstractSystem `.
220
221
"""
221
222
function generate_initializesystem_timeindependent (sys:: AbstractSystem ;
222
223
op = Dict (),
@@ -228,12 +229,10 @@ function generate_initializesystem_timeindependent(sys::AbstractSystem;
228
229
eqs = equations (sys)
229
230
trueobs, eqs = unhack_observed (observed (sys), eqs)
230
231
vars = unique ([unknowns (sys); getfield .(trueobs, :lhs )])
231
- vars_set = Set (vars) # for efficient in-lookup
232
232
233
233
eqs_ics = Equation[]
234
234
defs = copy (defaults (sys)) # copy so we don't modify sys.defaults
235
235
additional_guesses = anydict (guesses)
236
- additional_initialization_eqs = Vector {Equation} (initialization_eqs)
237
236
guesses = merge (get_guesses (sys), additional_guesses)
238
237
239
238
# PREPROCESSING
0 commit comments