如何终止ODE集成中solve_ivp的无限运行

问题描述 投票:0回答:1

我正在使用

solve_ivp
BDF
方法来求解复杂的 ODE 系统。

我在不同的系统参数下进行了测试。通常需要几秒钟才能得到结果。但是,对于其中一种情况,它会以超小的步长(小于 1e-8)继续运行。这可能会导致采取无限的步骤,并且可能需要几天到几周的时间才能得到结果。 (

t
在大约 20 分钟内从 0.00017 增加到 0.00020,而
t_end=100

为了避免这种情况下无休止的运行,我尝试使用

multiprocessing
的超时功能。它适用于其他示例,但未能终止
solve_ivp

是否有任何其他解决方案可以终止 ODE 积分(在给定时间或步骤数下)?如果有任何方面没有明确提出,请告诉我。非常感谢:-)

python scipy ode
1个回答
0
投票

您可以使用带有

events
参数的回调函数来在一定时间或步骤数后停止积分:

from scipy.integrate import solve_ivp
import time
def system(t, y):
    dydt = [y[1], -y[0]]
    return dydt
y0 =[0, 0]
t_span = [0, 100]
start_time = time.time()
def stop_event(t, y):
    return min(time.time() - start_time - 10, len(y) - 1000)
stop_event.terminal = True
solution = solve_ivp(system, t_span, y0, method='BDF', events=stop_event)

如果这对你有帮助,不客气😉,如果没有......那就好了😘。

© www.soinside.com 2019 - 2024. All rights reserved.