Skip to content

Commit b2cff45

Browse files
feat: collect guesses from parameter metadata in ODESystem
1 parent 5fa5a3c commit b2cff45

File tree

2 files changed

+20
-5
lines changed

2 files changed

+20
-5
lines changed

src/systems/diffeqs/odesystem.jl

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -244,11 +244,16 @@ function ODESystem(deqs::AbstractVector{<:Equation}, iv, dvs, ps;
244244
process_variables!(var_to_name, defaults, dvs′)
245245
process_variables!(var_to_name, defaults, ps′)
246246

247-
sysguesses = [ModelingToolkit.getguess(st) for st in dvs′]
248-
hasaguess = findall(!isnothing, sysguesses)
249-
var_guesses = dvs′[hasaguess] .=> sysguesses[hasaguess]
250-
sysguesses = isempty(var_guesses) ? Dict() : todict(var_guesses)
251-
guesses = merge(sysguesses, todict(guesses))
247+
sysdvsguesses = [ModelingToolkit.getguess(st) for st in dvs′]
248+
hasaguess = findall(!isnothing, sysdvsguesses)
249+
var_guesses = dvs′[hasaguess] .=> sysdvsguesses[hasaguess]
250+
sysdvsguesses = isempty(var_guesses) ? Dict() : todict(var_guesses)
251+
syspsguesses = [ModelingToolkit.getguess(st) for st in ps′]
252+
hasaguess = findall(!isnothing, syspsguesses)
253+
ps_guesses = ps′[hasaguess] .=> syspsguesses[hasaguess]
254+
syspsguesses = isempty(ps_guesses) ? Dict() : todict(ps_guesses)
255+
256+
guesses = merge(sysdvsguesses, syspsguesses, todict(guesses))
252257
guesses = Dict{Any, Any}(value(k) => value(v) for (k, v) in pairs(guesses))
253258

254259
isempty(observed) || collect_var_to_name!(var_to_name, (eq.lhs for eq in observed))

src/variables.jl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,16 @@ function getguess(x)
486486
Symbolics.getmetadata(x, VariableGuess, nothing)
487487
end
488488

489+
"""
490+
setguess(x, v)
491+
492+
Set the guess for the initial value associated with symbolic variable `x` to `v`.
493+
See also [`hasguess`](@ref).
494+
"""
495+
function setguess(x, v)
496+
Symbolics.setmetadata(x, VariableGuess, v)
497+
end
498+
489499
"""
490500
hasguess(x)
491501

0 commit comments

Comments
 (0)