【发布时间】:2022-06-25 19:56:27
【问题描述】:
我有一个 ODE dy/dt = f(y,t),其中 y 是一个 N 维向量,我想使用 scipy.integrate.solve_ivp 函数求解。
但是,如果某个谓词 g(y,t) 的计算结果为 True,我想停止集成。我在这里的用例是我希望y 的值在积分持续时间t_end 结束之前收敛到某个恒定值y0。我对这个常数值y0 感兴趣,并希望在收敛后终止集成以节省时间。
我希望在最后 5 个集成步骤中创建一个数组来存储 y 的值,如果它们非常接近,则认为已经发生收敛。
solve_ivp 的 event 函数在我的情况下并没有真正的帮助:没有我希望找到的根,并且当收敛发生时我对 t 不感兴趣。令我惊讶的是,这种寻找收敛的看似“常见”的用例并不容易完成,而且我在 Stackoverflow 上也找不到类似的问题。
如果有人有什么想法,我很乐意听到。
【问题讨论】:
-
为什么
events参数不起作用?你不能修改g以返回False而不是True(当你希望它停止时它实际上会返回零)