我有一个函数的 ODE 系统。在每个时间,是粒子的位置。函数具有单调性:在任何时候。真实动力学保留了该属性,因为当任何两个靠近时,ODE 中存在一个发散的排斥项。但事实上,它们确实靠得很近。事实上,它们靠得足够近,以至于在数值模拟中很容易发生交叉(如果它们这样做了,那么其余的运行就被破坏了)。
我一直在 MATLAB 中使用 ode15s 模拟我的系统(所有其他求解器都失败了)。我的方法是使用事件函数来搜索碰撞,如果我发现碰撞,那么我就让模拟失败。(这对编程来说相当方便,因为无论如何我都需要事件函数,原因不相关。)我不确定这种方法的效率如何。(使用约定 )构造 ODE ,然后使用 NonNegative 选项,然后仅重构会更有效吗?还是最终会以基本相同的方式在内部实施?(我不太了解 odezero 的工作原理。)