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] 中解释的准恒定步长。恒定步长 BDF 的误差估计策略在 [3] 中导出。还实现了使用修改后的公式 (NDF) [2] 的精度增强。
可应用于复数域。
- 参数:
- fun可调用对象
系统的右侧:状态
y
在时间t
的时间导数。调用签名是fun(t, y)
,其中t
是一个标量,y
是一个 ndarray,且len(y) = len(y0)
。fun
必须返回一个与y
形状相同的数组。有关详细信息,请参阅 vectorized。- t0浮点数
初始时间。
- y0array_like,形状 (n,)
初始状态。
- t_bound浮点数
边界时间 - 积分不会超出此值。它还确定积分的方向。
- first_step浮点数或 None,可选
初始步长。默认值为
None
,表示算法应选择。- max_step浮点数,可选
允许的最大步长。默认值为 np.inf,即步长不受限制,仅由求解器确定。
- rtol, atol浮点数和 array_like,可选
相对容差和绝对容差。求解器保持局部误差估计小于
atol + rtol * abs(y)
。此处,rtol 控制相对精度(正确位数),而 atol 控制绝对精度(正确的小数位数)。要实现所需的 rtol,请将 atol 设置为小于从rtol * abs(y)
中期望的最小值,以便 rtol 控制允许的误差。如果 atol 大于rtol * abs(y)
,则无法保证正确的位数。相反,要实现所需的 atol,请将 rtol 设置为使rtol * abs(y)
始终小于 atol。如果 y 的分量具有不同的尺度,则可以通过为 atol 传递形状为 (n,) 的 array_like 来为不同的分量设置不同的 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,则假定雅可比矩阵是常数。
如果为可调用对象,则假定雅可比矩阵取决于 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,则始终使用形状为(n,)
的y
调用 fun,其中n = len(y0)
。如果
vectorized
为 True,则可以使用形状为(n, k)
的y
调用 fun,其中k
是一个整数。在这种情况下,fun 的行为必须使得fun(t, y)[:, i] == fun(t, y[:, i])
(即,返回数组的每一列都是与y
的一列对应的状态的时间导数)。设置
vectorized=True
允许此方法更快地进行雅可比矩阵的有限差分逼近,但在某些情况下(例如,较小的len(y0)
)可能会导致整体执行速度变慢。
参考文献
[1]G. D. Byrne, A. C. Hindmarsh, “用于求解常微分方程的数值多算法”,ACM Transactions on Mathematical Software,第 1 卷,第 1 期,第 71-96 页,1975 年 3 月。
[2] (1,2)L. F. Shampine, M. W. Reichelt, “MATLAB ODE 套件”,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 年。
- 属性:
- n整数
方程数。
- status字符串
求解器的当前状态:“运行”、“已完成”或“失败”。
- t_bound浮点数
边界时间。
- direction浮点数
积分方向:+1 或 -1。
- t浮点数
当前时间。
- yndarray
当前状态。
- t_old浮点数
上一个时间。如果尚未执行任何步骤,则为 None。
- step_size浮点数
最后一次成功步骤的大小。如果尚未执行任何步骤,则为 None。
- nfev整数
对右侧的评估次数。
- njev整数
对雅可比矩阵的评估次数。
- nlu整数
LU 分解的次数。
方法
计算最后一次成功步骤的局部插值。
step
()执行一个积分步骤。