SciML / ModelingToolkit.jl

An acausal modeling framework for automatically parallelized scientific machine learning (SciML) in Julia. A computer algebra system for integrated symbolics for physics-informed machine learning and automated transformations of differential equations
https://mtk.sciml.ai/dev/
Other
1.41k stars 203 forks source link

Parameters (and probably variables) occurring in events only are not inferred into ODESystems #2659

Open TorkelE opened 4 months ago

TorkelE commented 4 months ago

If you have parameters which only occur in an event, these are not inferred as parameters of the system (in the same way as e.g. parameters of equations).

E.g. in this MWE, the parameter thres is not found in either system (to which it belong).

using ModelingToolkit

@variables t X(t)
@parameters p d
@parameters thres
D = Differential(t)
eq = D(X) ~ p - d*X

discrete_events = [(X > thres) => [X ~ X/2.0]]
@mtkbuild osys1 = ODESystem([eq], t; discrete_events)
parameters(osys1) # [p, d]

continuous_events = [(X ~ thres) => [X ~ X/2.0]]
@mtkbuild osys2 = ODESystem([eq], t; discrete_events)
parameters(osys2) # [p, d]
SebastianM-C commented 4 months ago

I think that's on purpose as parameters that appear in an event can be potentially modified during the callback. Are they present in the full_parameters(osys1)?

TorkelE commented 4 months ago

Yes, having these things be parameters (and not values) is useful because it means that they can be changed. However, since they are not added to the system, this is not possible (as you cannot interface with them through e.g. the integrator.

full_parameters(osys1)

also returns [p, d]