Skip to content

Commit 7c1172e

Browse files
committed
add DiscreteProblem with u0/param maps
1 parent 102dbba commit 7c1172e

File tree

3 files changed

+21
-2
lines changed

3 files changed

+21
-2
lines changed

src/ModelingToolkit.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,8 @@ include("build_function.jl")
103103
export ODESystem, ODEFunction
104104
export SDESystem, SDEFunction
105105
export JumpSystem
106-
export ODEProblem, SDEProblem, NonlinearProblem, OptimizationProblem, JumpProblem
106+
export ODEProblem, SDEProblem, NonlinearProblem, OptimizationProblem
107+
export JumpProblem, DiscreteProblem
107108
export NonlinearSystem, OptimizationSystem
108109
export ode_order_lowering
109110
export PDESystem

src/systems/jumps/jumpsystem.jl

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,22 @@ function assemble_crj(js, crj, statetoid)
4242
ConstantRateJump(rate, affect)
4343
end
4444

45+
46+
"""
47+
```julia
48+
function DiffEqBase.DiscreteProblem(sys::AbstractSystem, u0map, tspan,
49+
parammap=DiffEqBase.NullParameters; kwargs...)
50+
```
51+
52+
Generates a DiscreteProblem from an AbstractSystem
53+
"""
54+
function DiffEqBase.DiscreteProblem(sys::AbstractSystem, u0map, tspan::Tuple,
55+
parammap=DiffEqBase.NullParameters(); kwargs...)
56+
u0 = varmap_to_vars(u0map, states(sys))
57+
p = varmap_to_vars(parammap, parameters(sys))
58+
DiscreteProblem(u0, tspan, p; kwargs...)
59+
end
60+
4561
"""
4662
```julia
4763
function DiffEqBase.JumpProblem(js::JumpSystem, prob, aggregator; kwargs...)

test/jumpsystem.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,9 @@ affect₃ = [I ~ I - 1, R ~ R + 1]
5656
j₃ = ConstantRateJump(rate₃,affect₃)
5757
js2 = JumpSystem([j₁,j₃], t, [S,I,R], [β,γ])
5858
u₀ = [999,1,0]; p = (0.1/1000,0.01); tspan = (0.,250.)
59-
dprob = DiscreteProblem(u₀,tspan,p)
59+
u₀map = [S => 999, I => 1, R => 0]
60+
parammap ==> .1/1000, γ => .01]
61+
dprob = DiscreteProblem(js2, u₀map, tspan, parammap)
6062
jprob = JumpProblem(js2, dprob, Direct(), save_positions=(false,false))
6163
Nsims = 10000
6264
function getmean(jprob,Nsims)

0 commit comments

Comments
 (0)