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

scipy solve_ivp中first_step参数≥2时失效问题求助

solve_ivp中first_step≥2时被忽略的原因及解决方法

原因分析

这不是bug,是solve_ivp默认的**自适应步长算法(RK45)**的正常行为。RK45会根据预设的误差容限(默认rtol=1e-3、atol=1e-6)计算初始步长的最大值——如果你设置的first_step超过这个最大值,算法会直接忽略你的设置,改用它计算出的符合误差要求的步长(也就是你看到的1.743044)。

简单来说:你的初始步长设置太大,超出了算法能保证计算精度的范围,所以被自动调整了。

解决方法

1. 放宽误差容限

如果你能接受更低的计算精度,可以调大rtol和atol,让算法允许更大的初始步长:

from scipy.integrate import solve_ivp
def exponential_decay(t, y): return -0.5 * y

# 放宽误差容限,允许更大步长
sol = solve_ivp(exponential_decay, [0, 10], [2], first_step=2, rtol=1e-1, atol=1e-2)
print(sol.t)
# 输出会包含2作为第二个时间点

2. 使用固定步长求解器

如果需要严格固定步长,可切换到固定步长的算法(比如method='RK4'),同时通过t_eval指定输出时间点来强制步长:

import numpy as np
from scipy.integrate import solve_ivp

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

# 生成固定步长的时间点数组
t_eval = np.arange(0, 10.1, 2)
sol = solve_ivp(exponential_decay, [0, 10], [2], method='RK4', t_eval=t_eval)
print(sol.t)
# 输出:[ 0.  2.  4.  6.  8. 10.]

注意:固定步长算法不会自动调整步长来保证精度,所以需要自己评估步长是否满足你的精度需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 08:06:26