DOP853#
- class scipy.integrate.DOP853(fun, t0, y0, t_bound, max_step=inf, rtol=0.001, atol=1e-06, vectorized=False, first_step=None, **extraneous)[源代码]#
8 阶显式龙格-库塔方法。
这是最初用 Fortran 编写的 “DOP853” 算法的 Python 实现 [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]E. Hairer, S. P. Norsett G. Wanner, “Solving Ordinary Differential Equations I: Nonstiff Problems”, Sec. II.
- 属性:
- 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
()执行一个积分步骤。