You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I have gone through the events in MTK. There are several cases where MTK allow your to build a system with a misformated event, and an error is not actually thrown until you create a problem or attempts to simulate it. Especially since it is a fit trick how to format the events, the errors should be thrown at the first possible time (when a system is created).
using ModelingToolkit, OrdinaryDiffEq
@parameters p d
@variables t X(t)
eqs = [Differential(t)(X) ~ p - d*X]
# Example 1: Discrete events with dosage given as a Tuple
discrete_events = (2.0, 5.0) => [X ~ X +10.0]
@mtkbuild osys =ODESystem(eqs, t; discrete_events)
oprob =ODEProblem(osys, [X =>10], (0.0, 10.), [p =>2.0, d =>0.5]) # Error is thrown here.# Example 2: Discrete events where single expression condition is given in a vector.
discrete_events = [X <5.0] => [X ~ X +10.0]
@mtkbuild osys =ODESystem(eqs, t; discrete_events)
oprob =ODEProblem(osys, [X =>10], (0.0, 10.), [p =>2.0, d =>0.5])
sol =solve(oprob, Tsit5()) # Error is thrown here.# Example 3: Discrete events where multiple expression conditions are given in a vector.
discrete_events = [X <5.0, X >10.0] => [X ~ X +10.0]
@mtkbuild osys =ODESystem(eqs, t; discrete_events)
oprob =ODEProblem(osys, [X =>10], (0.0, 10.), [p =>2.0, d =>0.5]) # Error is thrown here.# Example 4: Discrete events that affects parameters and variables.
discrete_events =5.0=> [X ~ X +10.0, p ~2.0]
@mtkbuild osys =ODESystem(eqs, t; discrete_events)
oprob =ODEProblem(osys, [X =>10], (0.0, 10.), [p =>2.0, d =>0.5]) # Error is thrown here.# Example 5: Discrete events with non-trivial affect right-hand side.
discrete_events =5.0=> [X +1.0~ X +10.0]
@mtkbuild osys =ODESystem(eqs, t; discrete_events)
oprob =ODEProblem(osys, [X =>10], (0.0, 10.), [p =>2.0, d =>0.5]) # Error is thrown here.# Example 6: Continuous events that affects parameters and variables.
continuous_events = [X ~5.0] => [X ~ X +10.0, p ~2.0]
@mtkbuild osys =ODESystem(eqs, t; continuous_events)
oprob =ODEProblem(osys, [X =>10], (0.0, 10.), [p =>2.0, d =>0.5]) # Error is thrown here.# Example 7: Continuous events with non-trivial affect right-hand side.
continuous_events = [X ~5.0] => [X +1.0~ X +10.0]
@mtkbuild osys =ODESystem(eqs, t; continuous_events)
oprob =ODEProblem(osys, [X =>10], (0.0, 10.), [p =>2.0, d =>0.5]) # Error is thrown here.
The text was updated successfully, but these errors were encountered:
That's a pretty interesting proposal. We'd have to make validate that only a single shift is given but that would make that implicitness become explicit.
I have gone through the events in MTK. There are several cases where MTK allow your to build a system with a misformated event, and an error is not actually thrown until you create a problem or attempts to simulate it. Especially since it is a fit trick how to format the events, the errors should be thrown at the first possible time (when a system is created).
The text was updated successfully, but these errors were encountered: