scipy.integrate.BDF

class scipy.integrate.BDF(fun, t0, y0, t_bound, max_step=inf, rtol=0.001, atol=1e-06, jac=None, jac_sparsity=None, vectorized=False, first_step=None, **extraneous)[源代码]

基于后向微分公式的隐式方法。

这是一种阶数从1到5自动变化的变阶方法。中描述了BDF算法的一般框架 [1]. 此类实现准恒定步长,如 [2]. 文[1]推导了常步长BDF的误差估计策略 [3]. 使用修正公式提高精度(NDF) [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 这意味着算法应该选择。

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 。定义雅可比有三种方法:

  • 如果为ARRAY_LIKE或SPARSE_MATRATE,则假定雅可比为常量。

  • 如果是可调用的,则假定雅可比依赖于t和y;它将被称为 jac(t, y) 如果有必要的话。对于“Radau”和“bdf”方法,返回值可能是稀疏矩阵。

  • 如果为None(默认),则雅可比将由有限差分近似。

通常建议提供雅可比,而不是依赖有限差分近似。

jac_sparsity{无,ARRAY_LIKE,稀疏矩阵},可选

定义了用于有限差分近似的雅可比矩阵的稀疏结构。其形状必须为(n,n)。如果出现以下情况,则忽略此参数 jac 不是 None 。如果雅可比函数中只有几个非零元素 each 行,提供稀疏结构将大大加快计算速度 [4]. 零条目表示雅可比中的相应元素始终为零。如果为None(默认),则假定雅可比是密集的。

vectorized布尔值,可选

是否 fun 是以矢量化的方式实现的。默认值为False。

参考文献

1

G.D.Byrne,A.C.Hindmarsh,“常微分方程数值解的多重算法”,“ACM数学软件学报”,第1卷,第1期,第71-96页,1975年3月。

2(1,2)

书名/作者:The MATLAB Ode Suite(MATLAB颂歌组曲),SIAM J.SCI。计算,第18卷,第1期,第1-22页,1997年1月。

3

海尔,G.Wanner,“解常微分方程I:非刚性问题”,美国科学出版社。III.2.

4

A.Curtis,M.J.D.Powell和J.Reid,“关于稀疏雅可比矩阵的估计”,“数学研究所及其应用期刊”,第13期,第117-120页,1974年。

属性
n集成

方程式的数量。

status字符串

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

t_bound浮动

边界时间。

direction浮动

集成方向:+1或-1。

t浮动

当前时间。

yndarray

当前状态。

t_old浮动

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

step_size浮动

上次成功步骤的大小。如果还没有采取任何步骤,就不会有任何进展。

nfev集成

右侧的求值次数。

njev集成

雅可比的求值次数。

nlu集成

逻辑单元分解数。

方法:

dense_output \()

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

step \()

执行一个集成步骤。