У меня есть сеть реакции, определенная с помощью DiffEqBiological в Julia. В определенные моменты я хочу изменить параметры. Тем не менее, я не могу изменить их. Хотя я и не хочу этого делать, я могу влиять на переменные.
Я написал упрощенную версию кода, в которой каждые 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)
Я не получаю никаких ошибок. Решатель решает это. Однако обратные вызовы не меняют параметр. Буду признателен за любую помощь. Я не могу понять, почему это не работает. Спасибо.