Прежде всего, я использую библиотеку DifferentialEquations.jl
, что просто фантастика!Во всяком случае, мой вопрос заключается в следующем:
Скажем, например, у меня есть следующее дифференциальное уравнение:
function f(du, u, t)
du[1] = u[3]
du[2] = u[4]
du[3] = -u[1] - 2 * u[1] * u[2]
du[4] = -u[2] - u[1]^2 + u[2]^2
end
, и у меня есть обратный вызов, который срабатывает каждый раз, когда траектория пересекает ось Y:
function condition(u, t, integrator)
u[2]
end
Однако мне нужно, чтобы интеграция завершилась ровно через 3 перехода.Мне известно, что интеграция может быть прервана с помощью эффекта:
function affect!(integrator)
terminate!(integrator)
end
, но как правильно подсчитать количество обратных вызовов до тех пор, пока не будет достигнут критерий завершения.Кроме того, есть ли способ распространить эту методологию на n событий с n различными значениями?
В моем исследовании мне часто нужно смотреть на карты Пуанкаре, а первый, второй, третий и т. Д. Возвращаться к карте, чтобыМне нужна структура, которая позволила бы мне выполнить это прекращение подсчета.Я все еще новичок в Юлии и поэтому пытаюсь усилить хороший идиоматический код на раннем этапе.Любая помощь приветствуется и, пожалуйста, не стесняйтесь просить разъяснений.