scipy.linalg.

expm#

scipy.linalg.expm(A)[源代码][源代码]#

计算数组的矩阵指数。

参数:
Andarray

输入的最后两个维度是正方形 (..., n, n)

返回:
eAndarray

生成的矩阵指数与 A 具有相同的形状

注释

实现了[1]中给出的算法,该算法本质上是一个基于数组数据决定阶数变化的Pade近似。

对于大小为 n 的输入,最坏情况下的内存使用量在 8*(n**2) 的顺序。如果输入数据不是单精度和双精度的实数和复数 dtypes,则将其复制到新数组中。

对于 n >= 400 的情况,精确的 1-范数计算成本与 1-范数估计持平,从那时起,使用 [2] 中给出的估计方案来决定近似阶数。

参考文献

[1]

Awad H. Al-Mohy 和 Nicholas J. Higham, (2009), “一种新的矩阵指数缩放和平方算法”, SIAM J. Matrix Anal. Appl. 31(3):970-989, DOI:10.1137/09074721X

[2]

Nicholas J. Higham 和 Francoise Tisseur (2000),”一种用于矩阵1-范数估计的块算法,及其在1-范数伪谱中的应用”。SIAM J. Matrix Anal. Appl. 21(4):1185-1201, DOI:10.1137/S0895479899356080

示例

>>> import numpy as np
>>> from scipy.linalg import expm, sinm, cosm

公式 exp(0) = 1 的矩阵版本:

>>> expm(np.zeros((3, 2, 2)))
array([[[1., 0.],
        [0., 1.]],

       [[1., 0.],
        [0., 1.]],

       [[1., 0.],
        [0., 1.]]])

欧拉恒等式(exp(i*theta) = cos(theta) + i*sin(theta))应用于矩阵:

>>> a = np.array([[1.0, 2.0], [-1.0, 3.0]])
>>> expm(1j*a)
array([[ 0.42645930+1.89217551j, -2.13721484-0.97811252j],
       [ 1.06860742+0.48905626j, -1.71075555+0.91406299j]])
>>> cosm(a) + 1j*sinm(a)
array([[ 0.42645930+1.89217551j, -2.13721484-0.97811252j],
       [ 1.06860742+0.48905626j, -1.71075555+0.91406299j]])