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)[源代码]#
显式三阶(二阶)龙格-库塔方法。
这使用了 Bogacki-Shampine 公式对 [1]。误差控制假设二阶方法的精度,但步长是使用三阶精确公式(进行局部外推)来取的。密集输出使用三次 Hermite 多项式。
可应用于复数域。
- 参数:
- fun可调用对象
系统的右侧:状态
y
在时间t
处的导数。调用签名为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` 的分量具有不同的尺度,则通过为 atol 传入形状为 (n,) 的类似数组,为不同分量设置不同的 atol 值可能会有所帮助。rtol 的默认值为 1e-3,atol 的默认值为 1e-6。- vectorized布尔值,可选
是否可以向量化方式调用 fun。建议此求解器使用 False(默认)。
如果
vectorized
为 False,则 fun 将始终使用形状为(n,)
的y
调用,其中n = len(y0)
。如果
vectorized
为 True,则 fun 可以使用形状为(n, k)
的y
调用,其中k
是一个整数。在这种情况下,fun 必须表现为fun(t, y)[:, i] == fun(t, y[:, i])
(即返回数组的每一列都是与y
列对应的状态的时间导数)。设置
vectorized=True
可以通过“Radau”和“BDF”方法更快地进行雅可比矩阵的有限差分近似,但会导致此求解器的执行速度变慢。
- 属性:
- n整型
方程数量。
- status字符串
求解器的当前状态:“running”(正在运行)、“finished”(已完成)或“failed”(失败)。
- t_bound浮点数
边界时间。
- direction浮点数
积分方向:+1 或 -1。
- t浮点数
当前时间。
- yndarray
当前状态。
- t_old浮点数
上一个时间。如果尚未进行任何步骤,则为 None。
- step_size浮点数
上一个成功步骤的大小。如果尚未进行任何步骤,则为 None。
- nfev整型
系统右侧的求值次数。
- njev整型
雅可比矩阵的求值次数。对于此求解器,始终为 0,因为它不使用雅可比矩阵。
- nlu整型
LU 分解次数。对于此求解器,始终为 0。
方法
计算上一个成功步骤的局部插值。
step
()执行一个积分步骤。
参考文献
[1]P. Bogacki, L.F. Shampine, “龙格-库塔公式的 3(2) 对”,Appl. Math. Lett. 第 2 卷,第 4 期,第 321-325 页,1989 年。