2

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

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

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

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

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

4

2 回答 2

2

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

于 2022-01-20T13:12:54.657 回答
1

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

详细:切换求解器提前退出时是否引发警告。默认为真。

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

模拟允许粒子撞击设备 - 为了防止继续模拟此类粒子,我使用了求解器的不稳定检查

使用 a DiscreteCallbackor ContinuousCallbackwithaffect!(integrator) = terminate!(integrator)是一种更好的方法。

于 2022-01-23T11:43:25.810 回答