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] 中详细说明。
- 参数:
- 有趣可调用
系统右侧:状态
y
在时间t
的导数。调用签名是fun(t, y)
,其中t
是一个标量,y
是一个 ndarray,且len(y) = len(y0)
。fun
必须返回一个与y
形状相同的数组。更多信息请参见 vectorized。- t0浮动
初始时间。
- y0类数组, 形状 (n,)
初始状态。
- t_bound浮动
边界时间 - 集成不会超过这个时间。它还决定了集成的方向。
- 第一步浮点数或无,可选
初始步长。默认是
None
,这意味着算法应自行选择。- min_stepfloat, 可选
最小允许步长。默认值为0.0,即步长不受限制,完全由求解器决定。
- max_stepfloat, 可选
最大允许步长。默认值为 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 的分量具有不同的尺度,通过传递形状为 (n,) 的 array_like 给 atol,为不同的分量设置不同的 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整数或无
定义雅可比矩阵带宽的参数,即
jac[i, j] != 0 仅当 i - lband <= j <= i + uband
。设置这些参数需要你的雅可比矩阵例程以压缩格式返回雅可比矩阵:返回的数组必须有n
列和uband + lband + 1
行,其中雅可比矩阵的对角线被写入。具体来说jac_packed[uband + i - j , j] = jac[i, j]
。相同的格式在scipy.linalg.solve_banded
中使用(查看示意图)。这些参数也可以与jac=None
一起使用,以减少有限差分估计的雅可比矩阵元素的数量。- 矢量化bool, 可选
是否可以以矢量化方式调用 fun。对于此求解器,建议使用 False(默认)。
如果
vectorized
为 False,fun 将总是以形状为(n,)
的y
被调用,其中n = len(y0)
。如果
vectorized
为 True,fun 可能会被调用,参数y
的形状为(n, k)
,其中k
是一个整数。在这种情况下,fun 必须表现得使得fun(t, y)[:, i] == fun(t, y[:, i])``(即返回数组的每一列是对应于 ``y
的每一列的状态的时间导数)。设置
vectorized=True
允许通过方法 ‘Radau’ 和 ‘BDF’ 更快地进行 Jacobian 的有限差分近似,但这将导致此求解器的执行速度变慢。
- 属性:
- n整数
方程的数量。
- 状态字符串
求解器的当前状态:’运行中’、’已完成’ 或 ‘失败’。
- t_bound浮动
边界时间。
- 方向浮动
集成方向:+1 或 -1。
- t浮动
当前时间。
- yndarray
当前状态。
- t_old浮动
上次时间。如果没有进行任何步骤,则为 None。
- nfev整数
右侧评估的次数。
- njev整数
雅可比矩阵的评估次数。
方法
计算上一个成功步骤上的局部插值。
step
()执行一个积分步骤。
参考文献
[1]A. C. Hindmarsh, “ODEPACK, A Systematized Collection of ODE Solvers,” IMACS Transactions on Scientific Computation, Vol 1., pp. 55-64, 1983.
[2]L. Petzold, “Automatic selection of methods for solving stiff and nonstiff systems of ordinary differential equations”, SIAM Journal on Scientific and Statistical Computing, Vol. 4, No. 1, pp. 136-148, 1983.