scipy.integrate.

Radau#

class scipy.integrate.Radau(fun, t0, y0, t_bound, max_step=inf, rtol=0.001, atol=1e-06, jac=None, jac_sparsity=None, vectorized=False, first_step=None, **extraneous)[源代码][源代码]#

Radau IIA 家族的隐式 Runge-Kutta 方法,阶数为 5。

该实现遵循 [1]。误差通过一个三阶精确的嵌入公式来控制。用于密集输出的三次多项式满足配置条件。

参数:
有趣可调用

系统右侧:状态 y 在时间 t 的导数。调用签名是 fun(t, y),其中 t 是一个标量,y 是一个 ndarray,且 len(y) = len(y0)fun 必须返回一个与 y 形状相同的数组。更多信息请参见 vectorized

t0浮动

初始时间。

y0类数组, 形状 (n,)

初始状态。

t_bound浮动

边界时间 - 集成不会超过这个时间。它还决定了集成的方向。

第一步浮点数或无,可选

初始步长。默认是 None,这意味着算法应自行选择。

max_stepfloat, 可选

最大允许步长。默认值为 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,) 的 array_like 来为不同的分量设置不同的 atol 值可能是有益的。默认值为 rtol 为 1e-3,atol 为 1e-6。

jac{None, array_like, sparse_matrix, callable}, 可选

该方法所需的系统右侧关于 y 的雅可比矩阵。雅可比矩阵的形状为 (n, n),其元素 (i, j) 等于 d f_i / d y_j。定义雅可比矩阵有三种方式:

  • 如果输入是数组或稀疏矩阵,则假定雅可比矩阵是常数。

  • 如果可调用,则假设雅可比行列式依赖于 t 和 y;它将在必要时被调用为 jac(t, y)。对于 ‘Radau’ 和 ‘BDF’ 方法,返回值可能是一个稀疏矩阵。

  • 如果为 None(默认),雅可比矩阵将通过有限差分法近似。

通常建议提供雅可比矩阵,而不是依赖于有限差分近似。

jac_sparsity{None, 类数组, 稀疏矩阵}, 可选

定义有限差分近似的雅可比矩阵的稀疏结构。其形状必须是 (n, n)。如果 jac 不是 None,则忽略此参数。如果雅可比矩阵在 每一行 中只有少数非零元素,提供稀疏结构将大大加快计算速度 [2]。零条目表示雅可比矩阵中相应的元素始终为零。如果为 None(默认),则假定雅可比矩阵是稠密的。

矢量化bool, 可选

fun 是否可以以矢量化方式调用。默认为 False。

如果 vectorized 为 False,fun 将总是以形状为 (n,)y 被调用,其中 n = len(y0)

如果 vectorized 为 True,fun 可能会被调用,参数 y 的形状为 (n, k),其中 k 是一个整数。在这种情况下,fun 必须表现得使得 fun(t, y)[:, i] == fun(t, y[:, i])``(即返回数组的每一列是对应于 ``y 的每一列的状态的时间导数)。

设置 vectorized=True 允许此方法通过更快的有限差分近似来计算雅可比矩阵,但在某些情况下(例如 len(y0) 较小时)可能会导致整体执行速度变慢。

属性:
n整数

方程的数量。

状态字符串

求解器的当前状态:’运行中’、’已完成’ 或 ‘失败’。

t_bound浮动

边界时间。

方向浮动

集成方向:+1 或 -1。

t浮动

当前时间。

yndarray

当前状态。

t_old浮动

上次时间。如果没有进行任何步骤,则为 None。

步长浮动

最后一次成功步骤的大小。如果还没有进行任何步骤,则为 None。

nfev整数

右侧评估的次数。

njev整数

雅可比矩阵的评估次数。

nlu整数

LU 分解的次数。

方法

dense_output()

计算上一个成功步骤上的局部插值。

step()

执行一个积分步骤。

参考文献

[1]

E. Hairer, G. Wanner, “Solving Ordinary Differential Equations II: Stiff and Differential-Algebraic Problems”, Sec. IV.8.

[2]

A. Curtis, M. J. D. Powell, and J. Reid, “On the estimation of sparse Jacobian matrices”, Journal of the Institute of Mathematics and its Applications, 13, pp. 117-120, 1974.