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