1

我在 Julia 中使用 DiffEqBiological 定义了一个反应网络。在特定时间,我想更改参数。但是,我似乎无法更改它们。虽然不是我想做的,但我能够影响变量。

我编写了代码的简化版本,每 20 个单位时间我将其中一个参数从 0.001 更改为 0.1,从 0.1 更改为 0.001。我的代码是

using DifferentialEquations, DiffEqBiological

# reaction network
rn = @reaction_network begin
    r1, X --> 2X
    r2, X --> 0
    r3, 2X --> X
end r1 r2 r3

params = [2.0, 1.0, 0.001]
tspan = (0.0, 100.0)
u0 = [1000]

# Callback conditions
E1 = collect(0:40:100)
E2 = collect(20:40:100)
E = union(E1,E2)

function condition1(u,t,integrator)
    t in (E1)
end
function condition2(u,t,integrator)
    t in (E2)
end
function affect1!(integrator)
    integrator.p[3] = 0.001
end
function affect2!(integrator)
    integrator.p[3] = 0.1
end

cb1 = DiscreteCallback(condition1,affect1!)
cb2 = DiscreteCallback(condition2,affect2!)
cbs = CallbackSet(cb1,cb2)

# solve JumpProblem
dprob = DiscreteProblem(u0, tspan, params)
jprob = JumpProblem(dprob, Direct(), rn)
sol = solve(jprob,FunctionMap(),callback=cbs,tstops=E)

我没有收到任何错误。求解器解决它。但是,回调不会更改参数。我会很感激所有的帮助。我不知道为什么它不起作用。谢谢。

4

1 回答 1

0

这是一个老问题(https://github.com/SciML/DiffEqJump.jl/issues/78),但已解决(https://github.com/SciML/DiffEqJump.jl/pull/120)并且应该可以解决最近的版本。

于 2021-05-21T12:24:48.703 回答