You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用scipy求解ODE系统时可否为不同方程设置不同容差

不同状态变量设置独立绝对容差的实现方法

solve_ivp原生支持为不同状态变量设置不同的绝对容差,无需额外改造求解器逻辑,DOP853求解器也完全兼容该特性,具体操作如下:

  • 直接给atol参数传入和状态变量维度一致的数组即可,数组的每个元素对应相同索引位置状态变量的绝对容差。你当前求解2个耦合微分方程,状态变量维度为2,直接传入长度为2的数组即可。

示例调用代码:

from scipy.integrate import solve_ivp

# 自定义的2耦合微分方程,可替换为你自己的方程逻辑
def coupled_ode(t, y):
    dy0 = -0.3 * y[0] + 0.2 * y[1]
    dy1 = 0.2 * y[0] - 0.3 * y[1]
    return [dy0, dy1]

t_span = (0, 20)
init_val = [2, 0]
# 分别为第1、第2个状态变量设置1e-8、1e-5的绝对容差
res = solve_ivp(
    fun=coupled_ode,
    t_span=t_span,
    y0=init_val,
    method="DOP853",
    rtol=1e-6,
    atol=[1e-8, 1e-5] # 核心:传入数组形式的atol
)

注意事项

  • 传入的atol数组长度必须和你的状态变量维度完全一致,否则会触发参数校验报错
  • 该特性对所有solve_ivp内置求解器均生效,后续如果扩展到更多耦合方程,只要对应调整atol数组的长度和各位置容差值即可

内容的提问来源于stack exchange,提问作者Djridoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:54:03