假定一个简单的衰减过程,如以下代码所述:
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)
最终的解决方案可能看起来像这样:
我想使用resolve_ivp的“事件”查找器检查收敛性,以减少达到收敛后所花费的计算时间。 但是,提供事件功能时事件跟踪器的设计签名为:
event(t,y) -> t_event
事件函数的返回值等于零时,将发生一个事件。
由于 event(t,y)仅知道当前y(t),因此无法直接用于实现标准收敛准则,因为它们都需要一系列y。
因此,请简短说明:是否有一种很好的方法,可以使用事件查找器检查收敛性?
还是要在收敛跟踪器中使用y(t)的任何范围?
这似乎对许多应用程序都很有帮助
我发现这样做的一种(不好的方法)是传入和传出存储差异(t,y(t)的event(t,y)的全局变量,但是,这不仅极端不确定,这也抵消了 solive_ivp()
提供的计算效率