DOP853#
- class scipy.integrate.DOP853(fun, t0, y0, t_bound, max_step=inf, rtol=0.001, atol=1e-06, vectorized=False, first_step=None, **extraneous)[source]#
8阶显式龙格-库塔方法。
这是“DOP853”算法的 Python 实现,该算法最初用 Fortran 编写 [1], [2]。请注意,这并非字面翻译,但算法核心和系数是相同的。
可应用于复数域。
- 参数:
- fun可调用对象
系统的右侧。调用签名为
fun(t, y)
。其中,t
是一个标量,对于 ndarrayy
有两种选项:它可以具有形状 (n,);在这种情况下,fun
必须返回形状为 (n,) 的 array_like 对象。或者,它可以具有形状 (n, k);在这种情况下,fun
必须返回形状为 (n, k) 的 array_like 对象,即每列对应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。- vectorized布尔值,可选
fun 是否以向量化方式实现。默认值为 False。
- 属性:
- n整数
方程数量。
- status字符串
求解器当前状态:‘运行中’、‘已完成’ 或 ‘失败’。
- t_bound浮点数
边界时间。
- direction浮点数
积分方向:+1 或 -1。
- t浮点数
当前时间。
- yndarray
当前状态。
- t_old浮点数
上一个时间。如果尚未执行任何步骤,则为 None。
- step_size浮点数
上次成功步骤的大小。如果尚未执行任何步骤,则为 None。
- nfev整数
系统右侧的评估次数。
- njev整数
雅可比矩阵的评估次数。对于此求解器始终为 0,因为它不使用雅可比矩阵。
- nlu整数
LU 分解的次数。对于此求解器始终为 0。
方法
计算上次成功步骤的局部插值。
step
()执行一个积分步骤。
参考文献
[1]E. Hairer, S. P. Norsett G. Wanner, “求解常微分方程 I:非刚性问题”, 第二节。