Я новичок в использовании Джулии и пытаюсь смоделировать сеть реакций, в то время как возмущение меняет концентрацию одного вида с течением времени. Я узнал, что могу использовать обратный вызов, чтобы изменить ценность определенного вида в определенный момент времени, чтобы имитировать это внешнее возмущение. Хотя я прочитал документацию, но не смог найти, как это сделать. Вот код, в котором я попытался реализовать эту симуляцию. Сначала я определил реакционную сеть и ее параметры:
using Catalyst
using DifferentialEquations
rn = @reaction_network begin
α, A + B --> 2B
β, B --> A
end α,β
p = [:α => 1, :β => 2]
tspan = (0.0,20.0)
u0 = [:A => 5.0, :B=> 5.0]
op = ODEProblem(rn, u0, tspan, p)
Далее, для обратного вызова, который срабатывает в момент t=10
condition(u, t, integrator) = t == 10
увеличить ценность вида А в два раза
affect!(integrator) = integrator.??? += 2
Но здесь я не уверен, какие параметры использовать для изменения значения A.
И остальная часть моего кода:
cb = DiscreteCallback(condition, affect!)
sol = solve(prob, Tsit5(), callback = cb, tstops = [10.0])
using Plots
plot(sol)
Буду признателен за любую помощь в улучшении моего понимания в этой области.
![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)
В данном случае хочется сказать affect!(integrator) = integrator.u[1] += 2. Вам необходимо получить доступ к индексированному состоянию интегратора. Чтобы выяснить, какой индекс вам нужно использовать, вы можете проверить states(rn), чтобы увидеть порядок неизвестных, которые вам нужно использовать, чтобы убедиться, что вы получаете доступ к правильному индексу. Если бы вы вместо этого написали первую реакцию как B + A, то B было бы первым состоянием в списке states(rn), и вам нужно было бы увеличить integrator.u[2].
Если вы точно знаете время, когда хотите создать беспокойство, я бы также рекомендовал вместо этого использовать PresetTimeCallback (см. здесь). DiscreteCallback необходимо оценивать состояние после каждого шага интегратора, что может привести к ненужным накладным расходам.