scipy.integrate.

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 阶显式龙格-库塔方法。

这是最初用 Fortran 编写 [1],[2] 的“DOP853”算法的 Python 实现。注意,这不是直接翻译,但算法核心和系数相同。

可以在复数域中应用。

参数:
fun可调用对象

系统的右侧。调用签名是 fun(t, y)。这里,t 是一个标量,ndarray y 有两种选择:它可以是形状为 (n,) 的;那么 fun 必须返回形状为 (n,) 的类数组。或者它可以是形状为 (n, k) 的;那么 fun 必须返回形状为 (n, k) 的类数组,即每一列对应于 y 中的一列。这两个选项的选择由 vectorized 参数决定(见下文)。

t0float

初始时间。

y0类数组,形状 (n,)

初始状态。

t_boundfloat

边界时间 - 积分不会超过它。它也决定了积分的方向。

first_stepfloat 或 None,可选

初始步长。默认值为 None,这意味着算法应该选择。

max_stepfloat,可选

允许的最大步长。默认值为 np.inf,即步长不受限制,完全由求解器决定。

rtol, atolfloat 和类数组,可选

相对和绝对容差。求解器使局部误差估计小于 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,) 的类数组来为不同的分量设置不同的 atol 值。默认值为 1e-3 为 rtol 和 1e-6 为 atol

vectorizedbool,可选

是否以向量化方式实现 fun。默认值为 False。

参考文献

[1]

E. Hairer, S. P. Norsett G. Wanner,"Solving Ordinary Differential Equations I: Nonstiff Problems",Sec. II.

属性:
nint

方程个数。

statusstring

求解器的当前状态:‘running’、‘finished’ 或 ‘failed’。

t_boundfloat

边界时间。

directionfloat

积分方向:+1 或 -1。

tfloat

当前时间。

yndarray

当前状态。

t_oldfloat

之前的时间。如果还没有执行任何步骤,则为 None。

step_sizefloat

最后一步成功的步长。如果还没有执行任何步骤,则为 None。

nfevint

系统右侧的评估次数。

njevint

雅可比行列式的评估次数。对于此求解器始终为 0,因为它不使用雅可比行列式。

nluint

LU 分解次数。对于此求解器始终为 0。

方法

dense_output()

计算最后一步成功的局部插值函数。

step()

执行一步积分。