scipy.integrate.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对Fortran求解器的包装 [1]. 它在非刚性Adams方法和刚性BDF方法之间自动切换。该方法最初在 [2].

参数
fun可调用

系统的右侧。调用签名为 fun(t, y) 。这里 t 是标量,ndarray有两个选项 y :它可以是形状(n,);然后 fun 必须返回形状为(n,)的ARRAY_LIKE。或者,它可以具有形状(n,k);然后 fun 必须返回形状为(n,k)的array_like,即每列对应于 y 。在这两个选项之间的选择由以下因素决定 vectorized 参数(见下文)。矢量化实现允许通过有限差分更快地逼近雅可比(此求解器需要)。

t0浮动

初始时间。

y0类似数组,形状(n,)

初始状态。

t_bound浮动

边界时间-积分将不会超过它。它还决定了整合的方向。

first_step浮动或无,可选

初始步长。默认值为 None 这意味着算法应该选择。

min_step浮动,可选

允许的最小步长。默认值为0.0,即步长不受限制,仅由求解器确定。

max_step浮动,可选

允许的最大步长。默认值为np.inf,即步长不受限制,仅由解算器确定。

RTOL,ATOLFLOAT和ARRAY_LIKE,可选

相对公差和绝对公差。求解器使局部误差估计值小于 atol + rtol * abs(y) 。这里 rtol 控制相对精度(正确的位数)。但是如果一个组件 y 大约低于 atol ,误差只需要落在相同的 atol 阈值,并且不保证正确的位数。如果y的分量具有不同的刻度,则设置不同的刻度可能是有益的 atol 通过为传递具有形状(n,)的array_like来获取不同组件的值 atol 。的默认值为1e-3 rtol 1e-6用于 atol

jac无或可调用,可选

系统右手边关于以下项的雅可比矩阵 y 。雅可比矩阵具有形状(n,n),其元素(i,j)等于 d f_i / d y_j 。该函数将被调用为 jac(t, y) 。如果为None(默认),则雅可比将由有限差分近似。通常建议提供雅可比,而不是依赖有限差分近似。

带区,子带整型或无

定义雅可比带宽的参数,即, jac[i, j] != 0 only for 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。

参考文献

1

A.C.Hindmarsh,“ODEPACK,一种系统化的ODE解算器集合”,“iMACS科学计算学报”,第1卷,第55-64页,1983年。

2

L.Petzold,“求解刚性和非刚性常微分方程组的方法的自动选择”,“SIAM科学与统计计算期刊”,第4卷,第1期,第136-148页,1983。

属性
n集成

方程式的数量。

status字符串

求解器的当前状态:“正在运行”、“已完成”或“失败”。

t_bound浮动

边界时间。

direction浮动

集成方向:+1或-1。

t浮动

当前时间。

yndarray

当前状态。

t_old浮动

上一次。如果还没有采取任何步骤,就不会有任何进展。

nfev集成

右侧的求值次数。

njev集成

雅可比的求值次数。

方法:

dense_output \()

计算上一成功步骤中的局部插值。

step \()

执行一个集成步骤。