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)[source]#
5(4) 阶显式龙格-库塔方法。
这使用 Dormand-Prince 公式对 [1]。错误控制假设四阶方法精度,但步骤使用五阶精度公式(执行局部外推)。四次插值多项式用于密集输出 [2]。
可以在复数域中应用。
- 参数:
- funcallable
系统的右侧。调用签名为
fun(t, y)
。这里t
是一个标量,ndarrayy
有两种选择:它可以是形状为 (n,);然后fun
必须返回形状为 (n,) 的 array_like。或者它可以是形状为 (n, k);然后fun
必须返回形状为 (n, k) 的 array_like,即,每一列对应y
中的一列。这两种选择中的哪一种由 vectorized 参数决定(见下文)。- t0float
初始时间。
- y0array_like, shape (n,)
初始状态。
- t_boundfloat
边界时间 - 积分不会超过它。它也决定了积分的方向。
- first_stepfloat or None, optional
初始步长。默认值为
None
,这意味着算法应该选择。- max_stepfloat, optional
允许的最大步长。默认值为 np.inf,即步长不受限制,仅由求解器决定。
- rtol, atolfloat and array_like, optional
相对和绝对容差。求解器将局部误差估计保持在
atol + rtol * abs(y)
之内。这里 rtol 控制相对精度(正确数字的数量),而 atol 控制绝对精度(正确小数位数的数量)。为了获得所需的 rtol,将 atol 设置为小于预期来自rtol * abs(y)
的最小值,以便 rtol 占主导地位。如果 atol 大于rtol * abs(y)
,则不能保证正确数字的数量。相反,为了获得所需的 atol,设置 rtol 使rtol * abs(y)
始终小于 atol。如果 y 的分量具有不同的尺度,则可能需要为不同的分量设置不同的 atol 值,方法是为 atol 传递形状为 (n,) 的 array_like。默认值为 rtol 为 1e-3,atol 为 1e-6。- vectorizedbool, optional
是否以矢量化方式实现 fun。默认值为 False。
参考文献
[1]J. R. Dormand, P. J. Prince,“嵌入式龙格-库塔公式族”,计算与应用数学杂志,第 6 卷,第 1 期,第 19-26 页,1980 年。
[2]L. W. Shampine,“一些实用的龙格-库塔公式”,计算数学,第 46 卷,第 173 期,第 135-150 页,1986 年。
- 属性:
- nint
方程数。
- statusstring
求解器的当前状态:'running'、'finished' 或 'failed'。
- t_boundfloat
边界时间。
- directionfloat
积分方向:+1 或 -1。
- tfloat
当前时间。
- yndarray
当前状态。
- t_oldfloat
之前的时间。如果尚未执行任何步骤,则为 None。
- step_sizefloat
最后一次成功步骤的大小。如果尚未执行任何步骤,则为 None。
- nfevint
系统右侧的评估次数。
- njevint
雅可比矩阵的评估次数。对于此求解器始终为 0,因为它不使用雅可比矩阵。
- nluint
LU 分解次数。对于此求解器始终为 0。
方法
计算最后一次成功步骤的局部插值函数。
step
()执行一个积分步骤。