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