LSODA#
- class scipy.integrate.LSODA(fun, t0, y0, t_bound, first_step=None, min_step=0.0, max_step=inf, rtol=0.001, atol=1e-06, jac=None, lband=None, uband=None, vectorized=False, **extraneous)[源代码]#
具有自动刚性检测和切换的 Adams/BDF 方法。
这是 ODEPACK [1] 中 Fortran 求解器的包装器。 它会在非刚性 Adams 方法和刚性 BDF 方法之间自动切换。 该方法最初在 [2] 中详细介绍。
- 参数:
- fun可调用对象
系统的右侧:时间
t
时状态y
的时间导数。 调用签名是fun(t, y)
,其中t
是标量,y
是一个 ndarray,其中len(y) = len(y0)
。fun
必须返回与y
形状相同的数组。 有关详细信息,请参阅 vectorized。- t0浮点数
初始时间。
- y0类数组,形状 (n,)
初始状态。
- t_bound浮点数
边界时间 - 积分不会超出此时间。 它还确定了积分的方向。
- first_step浮点数或 None,可选
初始步长。 默认值为
None
,这意味着该算法应选择。- min_step浮点数,可选
允许的最小步长。 默认值为 0.0,即步长不受限制,并且仅由求解器确定。
- max_step浮点数,可选
允许的最大步长。 默认值为 np.inf,即步长不受限制,并且仅由求解器确定。
- rtol, atol浮点数和类数组,可选
相对和绝对公差。 求解器使局部误差估计小于
atol + rtol * abs(y)
。 其中 rtol 控制相对精度(正确位数),而 atol 控制绝对精度(正确的小数位数)。 要达到所需的 rtol,请将 atol 设置为小于rtol * abs(y)
可能的最小值,以便 rtol 主导允许的误差。 如果 atol 大于rtol * abs(y)
,则不保证正确位数。 相反,要达到所需的 atol,请设置 rtol,使rtol * abs(y)
始终小于 atol。 如果 y 的分量具有不同的尺度,则通过为 atol 传递形状为 (n,) 的类数组来为不同的分量设置不同的 atol 值可能是有益的。 rtol 的默认值为 1e-3,atol 的默认值为 1e-6。- jacNone 或可调用对象,可选
系统右侧关于
y
的雅可比矩阵。 雅可比矩阵的形状为 (n, n),其元素 (i, j) 等于d f_i / d y_j
。 该函数将以jac(t, y)
的形式调用。 如果为 None(默认),则雅可比矩阵将通过有限差分来近似。 通常建议提供雅可比矩阵,而不是依赖于有限差分近似。- lband, uband整数或 None
定义雅可比矩阵带宽的参数,即
jac[i, j] != 0 仅当 i - lband <= j <= i + uband
时。 设置这些参数需要您的 jac 例程以打包格式返回雅可比矩阵:返回的数组必须具有n
列和uband + lband + 1
行,其中写入了雅可比对角线。 具体来说,jac_packed[uband + i - j , j] = jac[i, j]
。scipy.linalg.solve_banded
中使用了相同的格式(查看插图)。 这些参数也可以与jac=None
一起使用,以减少通过有限差分估计的雅可比矩阵元素数量。- vectorized布尔值,可选
是否可以以矢量化方式调用 fun。 建议此求解器使用 False(默认值)。
如果
vectorized
为 False,则将始终以形状为(n,)
的y
调用 fun,其中n = len(y0)
。如果
vectorized
为 True,则可以以形状为(n, k)
的y
调用 fun,其中k
是一个整数。 在这种情况下,fun 的行为方式必须为fun(t, y)[:, i] == fun(t, y[:, i])
(即,返回数组的每一列都是与y
的列对应的状态的时间导数)。将
vectorized=True
设置为允许通过方法“Radau”和“BDF”更快地进行雅可比矩阵的有限差分近似,但对于此求解器,这将导致执行速度较慢。
参考文献
[1]A. C. Hindmarsh,“ODEPACK,ODE 求解器的系统化集合”,IMACS 关于科学计算的交易,第 1 卷,第 55-64 页,1983 年。
[2]L. Petzold,“自动选择用于求解刚性和非刚性常微分方程组的方法”,SIAM Journal on Scientific and Statistical Computing,第 4 卷,第 1 期,第 136-148 页,1983 年。
- 属性:
- n整数
方程的数量。
- status字符串
求解器的当前状态:“运行中”、“已完成”或“失败”。
- t_bound浮点数
边界时间。
- direction浮点数
积分方向:+1 或 -1。
- t浮点数
当前时间。
- yndarray
当前状态。
- t_old浮点数
上一个时间。 如果尚未执行任何步骤,则为 None。
- nfev整数
右侧的计算次数。
- njev整数
雅可比矩阵的计算次数。
方法
计算上次成功步骤的局部插值。
step
()执行一个积分步骤。