在 Julia 中的 Differential Equations.jl 的 ODE 求解器中每隔一个常规时间间隔回调



https://diffeq.sciml.ai/latest/features/callback_functions.html

我正在尝试模仿 ContinuCallback 的第一个示例(弹跳球(,并将回调条件更改为:

function condition(u,t,integrator) 
t % 5
end

这意味着我想每 5 个时间单位触发一次事件(定义为函数affect!(integrator)(。但是,不会触发任何事件。我可以将condition更改为(t-5)*(t-10)*(t-15)等,但这并不能推广到 t 是 5 的倍数的每个时间点。应该把什么放到condition里?

在周期性时间点获取回调命中的最简单方法是使用 DiffEqCallbacks.jl 预构建回调库中的PeriodicCallback。事实上,我强烈推荐这样做,因为它有一些技巧可以解决可能出现的潜在浮点问题。文档可在此处找到,其用法如下:

PeriodicCallback((integrator)->integrator.u += 3, 5)

这将在每个5时间单位将积分器增加 3。

相关内容

最新更新