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)[源代码]#
5(4) 阶显式龙格-库塔法。
这使用 Dormand-Prince 公式对 [1]。误差控制假定四阶方法的精度,但步进是使用五阶精度公式进行的(进行局部外推)。四次插值多项式用于密集输出 [2]。
可以应用于复数域。
- 参数:
- fun可调用对象
系统的右侧。调用签名是
fun(t, y)
。这里t
是一个标量,ndarrayy
有两个选项:它可以具有形状 (n,);然后fun
必须返回形状为 (n,) 的类数组对象。或者它可以具有形状 (n, k);然后fun
必须返回形状为 (n, k) 的类数组对象,即每列对应于y
中的单个列。两个选项之间的选择由 vectorized 参数确定(见下文)。- t0float
初始时间。
- y0类数组对象,形状 (n,)
初始状态。
- t_boundfloat
边界时间 - 积分不会超出此时间。它也决定了积分的方向。
- first_stepfloat 或 None,可选
初始步长。默认值为
None
,这意味着该算法应自行选择。- max_stepfloat,可选
允许的最大步长。默认值为 np.inf,即步长不受限制,仅由求解器确定。
- rtol, atolfloat 和类数组对象,可选
相对和绝对容差。求解器使局部误差估计小于
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。- vectorizedbool,可选
是否以向量化方式实现 fun。默认值为 False。
参考
[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.
- 属性:
- nint
方程数。
- status字符串
求解器的当前状态:“running”、“finished” 或 “failed”。
- t_boundfloat
边界时间。
- directionfloat
积分方向:+1 或 -1。
- tfloat
当前时间。
- yndarray
当前状态。
- t_oldfloat
上次时间。如果尚未执行任何步骤,则为 None。
- step_sizefloat
上一步成功步骤的大小。如果尚未执行任何步骤,则为 None。
- nfevint
系统右侧的计算次数。
- njevint
雅可比矩阵的计算次数。对于此求解器,始终为 0,因为它不使用雅可比矩阵。
- nluint
LU 分解的次数。对于此求解器,始终为 0。
方法
计算上一步成功步骤的局部插值。
step
()执行一个积分步骤。