scipy.integrate.

RK23#

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

3(2) 阶显式龙格-库塔方法。

这使用 Bogacki-Shampine 公式对 [1]。误差控制假设二阶方法的精度,但使用三阶精确公式进行步进(执行局部外推)。三次埃尔米特多项式用于密集输出。

可以在复数域中应用。

参数:
fun可调用对象

系统的右侧:时间 t 时状态 y 的时间导数。调用签名是 fun(t, y),其中 t 是标量,y 是一个 ndarray,其中 len(y) = len(y0)fun 必须返回与 y 形状相同的数组。有关详细信息,请参阅 vectorized

t0浮点数

初始时间。

y0类似数组,形状 (n,)

初始状态。

t_bound浮点数

边界时间 - 积分不会超出此时间。它还确定积分的方向。

first_step浮点数或 None,可选

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

max_step浮点数,可选

允许的最大步长。默认为 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,) 的类似数组的 atol 为不同的分量设置不同的 atol 值。 rtol 的默认值为 1e-3,atol 的默认值为 1e-6。

vectorized布尔值,可选

fun 是否可以以矢量化方式调用。建议此求解器使用 False(默认值)。

如果 vectorized 为 False,则将始终使用形状为 (n,)y 调用 fun,其中 n = len(y0)

如果 vectorized 为 True,则可以使用形状为 (n, k)y 调用 fun,其中 k 是一个整数。在这种情况下,fun 的行为必须使 fun(t, y)[:, i] == fun(t, y[:, i])(即返回数组的每一列都是与 y 的列对应的状态的时间导数)。

通过将 vectorized=True 设置为 True,可以更快地通过方法“Radau”和“BDF”进行雅可比矩阵的有限差分近似,但对于此求解器,执行速度会变慢。

参考文献

[1]

P. Bogacki, L.F. Shampine, “A 3(2) Pair of Runge-Kutta Formulas”, Appl. Math. Lett. Vol. 2, No. 4. pp. 321-325, 1989.

属性:
nint

方程的数量。

status字符串

求解器的当前状态:“running”、“finished”或“failed”。

t_bound浮点数

边界时间。

direction浮点数

积分方向:+1 或 -1。

t浮点数

当前时间。

yndarray

当前状态。

t_old浮点数

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

step_size浮点数

最后一次成功步进的大小。如果尚未执行任何步进,则为 None。

nfevint

系统右侧的计算次数。

njevint

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

nluint

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

方法

dense_output()

计算最后一次成功步进的局部插值。

step()

执行一个积分步进。