scipy.integrate.

RK45#

class scipy.integrate.RK45(fun, t0, y0, t_bound, max_step=inf, rtol=0.001, atol=1e-06, vectorized=False, first_step=None, **extraneous)[源代码]#

显式五(四)阶龙格-库塔方法。

这使用了 Dormand-Prince 公式对 [1]。误差控制是假定四阶方法的精度,但步进则使用五阶精确公式(进行局部外推)。四次插值多项式用于稠密输出 [2]

可应用于复数域。

参数:
fun可调用对象

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

t0浮点数

初始时间。

y0array_like, shape (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字符串

求解器当前状态:‘running’(运行中)、‘finished’(已完成)或 ‘failed’(失败)。

t_bound浮点数

边界时间。

direction浮点数

积分方向:+1 或 -1。

t浮点数

当前时间。

yndarray

当前状态。

t_old浮点数

上一个时间。如果尚未进行任何步进,则为 None。

step_size浮点数

上一个成功步进的大小。如果尚未进行任何步进,则为 None。

nfev整型

系统右侧的评估次数。

njev整型

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

nlu整型

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

方法

dense_output()

计算上一个成功步进的局部插值。

step()

执行一次积分步进。

参考资料

[1]

J. R. Dormand, P. J. Prince, “A family of embedded Runge-Kutta formulae”, Journal of Computational and Applied Mathematics, Vol. 6, No. 1, pp. 19-26, 1980.

[2]

L. W. Shampine, “Some Practical Runge-Kutta Formulas”, Mathematics of Computation,, Vol. 46, No. 173, pp. 135-150, 1986.