301301# basic VariableRateJump test
302302let
303303 N = 1000 # number of simulations for testing solve accuracy
304- Random. seed! (rng, 1111 )
304+ Random. seed! (rng, 1111 )
305305 @variables A (t) B (t) C (t)
306306 @parameters k
307307 vrj = VariableRateJump (k * (sin (t) + 1 ), [A ~ A + 1 , C ~ C + 2 ])
@@ -427,20 +427,34 @@ end
427427let
428428 @variables X (t) Y (t)
429429 @parameters k1 k2
430- rate1 = k1 * X
431- affect1! = [X ~ X - 1 ]
432- rate2 = k1
433- affect2! = [Y ~ Y + 1 ]
430+ vrj1 = VariableRateJump (k1 * X, [X ~ X - 1 ])
431+ vrj2 = VariableRateJump (k2, [Y ~ Y + 1 ])
434432 eqs = [D (X) ~ k2, D (Y) ~ - k2/ 100 * Y]
435- vrj1 = VariableRateJump (rate1, affect1!)
436- vrj2 = VariableRateJump (rate2, affect2!)
437433 @named jsys = JumpSystem ([vrj1, vrj2, eqs[1 ], eqs[2 ]], t, [X, Y], [k1, k2])
438434 jsys = complete (jsys)
439- u0 = [X => 0.0 , Y => 0.0 ]
440- p = [k1 => 1.0 , k2 => 20.0 ]
435+ X0 = 0.0 ; Y0 = 0.0
436+ u0 = [X => X0, Y => Y0]
437+ k1val = 1.0 ; k2val = 20.0
438+ p = [k1 => k1val, k2 => k2val]
441439 tspan = (0.0 , 20.0 )
442440 oprob = ODEProblem (jsys, u0, tspan, p)
443441 jprob = JumpProblem (jsys, oprob; rng)
444- sol = solve (jprob, Tsit5 ())
442+
443+ times = range (0.0 , 20.0 , length = 100 )
444+ Nsims = 2000
445+ X = zeros (length (times))
446+ Y = similar (X)
447+ for n in 1 : Nsims
448+ sol = solve (jprob, Tsit5 ())
449+ X .+ = Array (sol (times; idxs = X))
450+ Y .+ = Array (sol (times; idxs = Y))
451+ end
452+ X ./= Nsims; Y ./= Nsims;
453+
454+ Xact (t) = X0 * exp (- k1val * t) + (k2val / k1val) * (1 - exp (- k1val * t))
455+ Yact (t) = Y0 * exp (- k2val/ 100 * t) + (k1 / (k2val/ 100 )) * (1 - exp (- k2val/ 100 * t))
456+
457+ @test all (abs .(X .- Xact .(times)) .<= 0.05 .* X)
458+ @test all (abs .(Y .- Yact .(times)) .<= 0.05 .* Y)
445459
446460end
0 commit comments