使用solve_ivp的“事件”检查收敛性

时间:2020-05-11 10:55:58

标签: python events scipy ode

问题:

假定一个简单的衰减过程,如以下代码所述:

def exponential_decay(t,y):
    return -0.5 * y

这可以在scipy的 solve_ivp()

的帮助下轻松集成
t_min = 0; t_max = 25; y0 = 1
sol = solve_ivp(exponential_decay, [t_min, t_max],[y0],dense_output=True)

最终的解决方案可能看起来像这样:

enter image description here

问题:

我想使用resolve_ivp的“事件”查找器检查收敛性,以减少达到收敛后所花费的计算时间。 但是,提供事件功能时事件跟踪器的设计签名为:

event(t,y) -> t_event

事件函数的返回值等于零时,将发生一个事件。

由于 event(t,y)仅知道当前y(t),因此无法直接用于实现标准收敛准则,因为它们都需要一系列y。

因此,请简短说明:是否有一种很好的方法,可以使用事件查找器检查收敛性?
还是要在收敛跟踪器中使用y(t)的任何范围? 这似乎对许多应用程序都很有帮助

我发现这样做的一种(不好的方法)是传入和传出存储差异(t,y(t)的event(t,y)的全局变量,但是,这不仅极端不确定,这也抵消了 solive_ivp()

提供的计算效率

0 个答案:

没有答案