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
\()执行一个集成步骤。