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)[source]#
显式龙格-库塔法,阶数为 3(2)。
此方法使用 Bogacki-Shampine 公式对 [1]。误差控制假设二阶方法的精度,但使用三阶精确公式进行步进(进行局部外推)。三次埃尔米特多项式用于密集输出。
可以在复数域中使用。
- 参数:
- 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,则始终使用形状为(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
允许通过方法 ‘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.
- 属性:
- 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
()执行一个积分步进。