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 族的 5 阶隐式龙格-库塔方法。

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

参数:
funcallable

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

t0float

初始时间。

y0array_like, shape (n,)

初始状态。

t_boundfloat

边界时间 - 积分不会超出此时间。它还确定积分的方向。

first_stepfloat 或 None,可选

初始步长。默认值为 None,表示算法应选择。

max_stepfloat,可选

允许的最大步长。默认值为 np.inf,即步长不受限制,仅由求解器确定。

rtol, atolfloat 和 array_like,可选

相对和绝对容差。求解器保持局部误差估计小于 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。有三种定义雅可比矩阵的方法

  • 如果为 array_like 或 sparse_matrix,则假定雅可比矩阵是常数。

  • 如果为 callable,则假定雅可比矩阵取决于 t 和 y;将根据需要将其调用为 jac(t, y)。对于“Radau”和“BDF”方法,返回值可能是稀疏矩阵。

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

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

jac_sparsity{None, array_like, sparse matrix},可选

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

vectorizedbool,可选

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 可以通过此方法更快地进行雅可比矩阵的有限差分近似,但在某些情况下(例如,len(y0) 很小)可能会导致整体执行速度变慢。

参考资料

[1]

E. Hairer,G. Wanner,“求解常微分方程 II:刚性和微分代数问题”,第 IV.8 节。

[2]

A. Curtis,M. J. D. Powell 和 J. Reid,“关于稀疏雅可比矩阵的估计”,《数学及其应用研究所杂志》,13,pp. 117-120,1974 年。

属性:
nint

方程数。

statusstring

求解器的当前状态:“running”、“finished”或“failed”。

t_boundfloat

边界时间。

directionfloat

积分方向:+1 或 -1。

tfloat

当前时间。

yndarray

当前状态。

t_oldfloat

上次时间。如果尚未执行任何步骤,则为 None。

step_sizefloat

上次成功步骤的大小。如果尚未执行任何步骤,则为 None。

nfevint

右侧的求值次数。

njevint

雅可比矩阵的求值次数。

nluint

LU 分解的次数。

方法

dense_output()

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

step()

执行一个积分步骤。