scipy.linalg.expm_frechet

scipy.linalg.expm_frechet(A, E, method=None, compute_expm=True, check_finite=True)[源代码]

A的矩阵指数在E方向上的Frechet导数

参数
A(n,N)类数组

要取其矩阵指数的矩阵。

E(n,N)类数组

取Frechet导数的矩阵方向。

method字符串,可选

算法的选择。应该是

  • SPS (默认)

  • blockEnlarge

compute_expm布尔值,可选

是否还要计算 expm_A 除了……之外 expm_frechet_AE 。默认值为True。

check_finite布尔值,可选

是否检查输入矩阵是否仅包含有限个数字。禁用可能会带来性能提升,但如果输入确实包含无穷大或NAN,则可能会导致问题(崩溃、非终止)。

退货
expm_Andarray

A的矩阵指数。

expm_frechet_AEndarray

A的矩阵指数在E方向上的Frechet导数

compute_expm = False ,仅限 expm_frechet_AE 返回。

参见

expm

计算矩阵的指数。

注意事项

本节介绍可由 method 参数。默认方法为 SPS

方法 块放大 是一个幼稚的算法。

方法 SPS 是缩放-平铺-平方 [1]. 这是一个复杂的实现,应该只需要大约3/8的时间来实现幼稚的实现。渐近性是相同的。

0.13.0 新版功能.

参考文献

1

Awad H.Al-Mohy和Nicholas J.Higham(2009)计算矩阵指数的Frechet导数,并将其应用于条件数估计。“暹罗矩阵分析与应用学报”,30(4)。1639-1657页。ISSN 1095-7162

示例

>>> import scipy.linalg
>>> rng = np.random.default_rng()
>>> A = rng.standard_normal((3, 3))
>>> E = rng.standard_normal((3, 3))
>>> expm_A, expm_frechet_AE = scipy.linalg.expm_frechet(A, E)
>>> expm_A.shape, expm_frechet_AE.shape
((3, 3), (3, 3))
>>> import scipy.linalg
>>> rng = np.random.default_rng()
>>> A = rng.standard_normal((3, 3))
>>> E = rng.standard_normal((3, 3))
>>> expm_A, expm_frechet_AE = scipy.linalg.expm_frechet(A, E)
>>> M = np.zeros((6, 6))
>>> M[:3, :3] = A; M[:3, 3:] = E; M[3:, 3:] = A
>>> expm_M = scipy.linalg.expm(M)
>>> np.allclose(expm_A, expm_M[:3, :3])
True
>>> np.allclose(expm_frechet_AE, expm_M[:3, 3:])
True