BDF#
- 类 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] 所述。恒定步长 BDF 的误差估计策略在 [3] 中推导出来。还实现了使用修改的公式 (NDF) [2] 提高精度的方法。
可以在复杂域中应用。
- 参数:
- fun可调用对象
系统的右手边:状态的时间导数
y
在时间t
的时候。调用签名是fun(t, y)
,其中t
是标量,y
是数组,并且len(y) = len(y0)
。fun
必须返回一个与y
具有相同形状的数组。有关更多信息,请参阅 vectorized。- t0浮点
初始时间。
- y0数组形式,形状为 (n,)
初始状态。
- t_bound浮点
边界时间——合并不会在该边界之外继续。它还确定了合并的方向。
- first_step浮点或 None,可选
初始步长。默认值为
None
,这意味着算法会自行选择。- 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 组件具有不同比例,则传入形状为 (n,) 的 array_like 设置不同组件的不同 atol 值可能会有帮助,以获取 atol。对于 rtol,默认值为 1e-3,对于 atol,默认值为 1e-6。- jac{None, array_like, sparse_matrix, callable}, 可选
系统右侧相对于 y 的雅可比矩阵,此方法要求使用此矩阵。雅可比矩阵形状为 (n, n),且其元素 (i, j) 等于
d f_i / d y_j
。定义雅可比分三种方式如果是 array_like 或 sparse_matrix,则认为雅可比不变。
如果是 callable,则认为雅可比取决于 t 和 y;它将按需要调用作为
jac(t, y)
。对于“Radau”和“BDF”方法,返回值可能是稀疏矩阵。如果是 None(默认值),则将通过有限差分逼近雅可比。
通常建议提供雅可比而不是依靠有限差分逼近。
- jac_sparsity{None, array_like, sparse matrix}, 可选
定义有限差分逼近的雅可比矩阵的稀疏性结构。其形状必须为 (n, n)。如果 jac 不为 None,则忽略此参数。如果雅可比中 每个 行的非零元素很少,提供稀疏性结构将极大地加快计算速度 [4]。零条目表示雅可比中对应的元素始终为零。如果为 None(默认值),则认为雅可比很稠密。
- vectorized布尔值,可选
是否可以通过矢量化方式调用fun。默认值为 False。
如果
vectorized
为 False,则始终使用y
(形状为(n,)
,其中n = len(y0)
)调用fun。如果
vectorized
为 True,则可以使用y
(形状为(n, k)
,其中k
为一个整数)调用fun。在这种情况下,fun的行为必须使得fun(t, y)[:, i] == fun(t, y[:, i])
(即,返回数组的每一列对应于y
的一列状态的时间导数)。通过此方法设置
vectorized=True
可以较快地近似雅可比行列式的有限差分,但在某些情况下(例如len(y0)
较小)整体执行速度会更慢。
参考文献
[1]G. D. Byrne,A. C. Hindmarsh,“求解常微分方程组的 Polyalgorithm”,ACM 数学软件事务,第 1 卷,第 1 号,第 71-96 页,1975 年 3 月。
[2] (1,2)L. F. Shampine,M. W. Reichelt,“MATLAB ODE SUITE”,SIAM J. SCI。COMPUTE,第 18 卷,第 1 号,第 1-22 页,1997 年 1 月。
[3]E. Hairer,G. Wanner,“求解常微分方程 I:非刚性问题”,III.2 节。
[4]A. Curtis,M. J. D. Powell 和 J. Reid,“关于稀疏雅可比矩阵的估计”,数学及其应用研究所杂志,13,第 117-120 页,1974 年。
- 属性:
- nint
方程数。
- status字符串
求解器的当前状态:‘running’,‘finished’ 或 ‘failed’。
- t_bound浮点
边界时间。
- direction浮点数
积分方向:+1 或 -1。
- t浮点数
当前时间。
- yndarray
当前状态。
- t_old浮点数
上一个时间。如果尚未采取步骤,则为无。。
- step_size浮点数
最近成功步骤的大小。如果尚未采取步骤,则为无。
- nfevint
右手边评估次数。
- njevint
雅可比矩阵评估次数。
- nluint
LU 分解次数。
方法
根据上一次成功进行的步长计算一个局部中插值。
step
()执行一个积分步长。