我用solve_ivpBDF方法来求解一个复杂的常微分方程组.

我在不同的系统参数下进行了测试.通常需要几秒钟才能得到结果.但是,对于其中一种情况,它继续以超小步长运行(小于1e—8).这可能会导致采取无限制的步骤,可能需要数天到数周的时间才能获得结果.(t在约20分钟内从0.00017增加到0.00020,而t_end=100)

为了避免在这种情况下无休止地运行,我try 使用超时函数multiprocessing.它适用于其他示例,但未能终止solve_ivp.

是否有其他解决方案可以终止ODE集成(在给定的时间或步骤数)?

推荐答案

你可以使用一个带有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)

Python相关问答推荐

剧作家Python:expect(locator).to_be_visible()vs locator.wait_for()

如何找到满足各组口罩条件的第一行?

如何使用它?

Python解析整数格式说明符的规则?

优化器的运行顺序影响PyTorch中的预测

python中字符串的条件替换

实现神经网络代码时的TypeError

在www.example.com中使用`package_data`包含不包含__init__. py的非Python文件

判断solve_ivp中的事件

如何在FastAPI中替换Pydantic的constr,以便在BaseModel之外使用?'

Python将一个列值分割成多个列,并保持其余列相同

如何在Gekko中处理跨矢量优化

如何写一个polars birame到DuckDB

Polars时间戳同步延迟计算

正在try 让Python读取特定的CSV文件

无法在盐流道中获得柱子

如何获取给定列中包含特定值的行号?

如何从一个维基页面中抓取和存储多个表格?

我可以同时更改多个图像吗?

将标签与山脊线图对齐