Julia 微分方程抑制检测到的不稳定性警告

Julia Differential Equations suppress warning of detected instabilities

我有一个程序可以使用 Julia 的微分方程包模拟粒子的路径。模拟允许粒子撞击设备 - 为防止继续模拟此类粒子,我使用解算器的 unstable_check(特别是 EulerHeun 解算器)。但是,这会导致如下警告:

┌ Warning: Instability detected. Aborting
└ @ SciMLBase <path>\.julia\packages\SciMLBase[=10=]s9uL\src\integrator_interface.jl:351

当我模拟数千个粒子时,这可能会很烦人(而且很慢)。

我可以取消这个警告吗?如果没有,是否有另一种(更好的)方法来中止某些粒子的模拟?

我认为代码示例在这里没有意义/没有必要;如果您不这么认为,请告诉我。

Suppressor.jl,虽然我不知道这是否会减少您从创建警告中获得的开销,所以 DiffEq 特定的设置可能是更好的方法(我不知道虽然对 DiffEq 了解不多,抱歉!)

这是自述文件中的示例:

julia> using Suppressor

julia> @suppress begin
           println("This string doesn't get printed!")
           @warn("This warning is ignored.")
       end

只是为了抑制你想要的警告 @suppress_err

https://diffeq.sciml.ai/stable/basics/common_solver_opts/#Miscellaneous

verbose: Toggles whether warnings are thrown when the solver exits early. Defaults to true.

因此,要关闭警告,您只需执行 solve(prob,alg;verbose=false)

The simulation allows for particles to hit devices - to prevent the continued simulation of such particles, I use the unstable_check of the solver

使用 DiscreteCallbackContinuousCallbackaffect!(integrator) = terminate!(integrator) 是更好的方法。