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)[源代码][源代码]#
显式龙格-库塔法,阶数为8。
这是一个基于Fortran编写的“DOP853”算法的Python实现 [1], [2]。需要注意的是,这并不是逐字翻译,但算法核心和系数是相同的。
可以在复数域中应用。
- 参数:
- 有趣可调用
系统的右侧。调用签名是
fun(t, y)
。这里,t
是一个标量,而 ndarrayy
有两种选择:它可以有形状 (n,);那么fun
必须返回形状为 (n,) 的类数组。或者它可以有形状 (n, k);那么fun
必须返回形状为 (n, k) 的类数组,即每一列对应y
中的一列。两种选项之间的选择由 vectorized 参数决定(见下文)。- t0浮动
初始时间。
- y0类数组, 形状 (n,)
初始状态。
- t_bound浮动
边界时间 - 集成不会超过这个时间。它还决定了集成的方向。
- 第一步浮点数或无,可选
初始步长。默认是
None
,这意味着算法应自行选择。- max_stepfloat, 可选
最大允许步长。默认值为 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。- 矢量化bool, 可选
fun 是否以向量化方式实现。默认为 False。
- 属性:
- n整数
方程的数量。
- 状态字符串
求解器的当前状态:’运行中’、’已完成’ 或 ‘失败’。
- t_bound浮动
边界时间。
- 方向浮动
集成方向:+1 或 -1。
- t浮动
当前时间。
- yndarray
当前状态。
- t_old浮动
上次时间。如果没有进行任何步骤,则为 None。
- 步长浮动
最后一次成功步骤的大小。如果还没有进行任何步骤,则为 None。
- nfev整数
系统右侧的数值评估。
- njev整数
雅可比矩阵的评估次数。对于此求解器,始终为0,因为它不使用雅可比矩阵。
- nlu整数
LU 分解的次数。对于此求解器,始终为 0。
方法
计算上一个成功步骤上的局部插值。
step
()执行一个积分步骤。
参考文献
[1]E. Hairer, S. P. Norsett G. Wanner, “Solving Ordinary Differential Equations I: Nonstiff Problems”, Sec. II.