scipy.linalg.
expm#
- scipy.linalg.expm(A)[源代码]#
计算数组的矩阵指数。
- 参数:
- Andarray
最后两个维度为方阵
(..., n, n)
的输入。
- 返回:
- eAndarray
结果矩阵指数,形状与
A
相同
备注
实现了 [1] 中给出的算法,该算法本质上是一种变阶的 Pade 近似,阶数根据数组数据确定。
对于大小为
n
的输入,最坏情况下的内存使用量约为8*(n**2)
。如果输入数据不是单精度和双精度实数或复数数据类型,则会将其复制到新数组中。对于
n >= 400
的情况,精确的 1-范数计算成本与 1-范数估计持平,从那时起,使用 [2] 中给出的估计方案来确定近似阶数。参考文献
[1]Awad H. Al-Mohy and Nicholas J. Higham, (2009), “一种新的矩阵指数缩放平方算法”, SIAM J. Matrix Anal. Appl. 31(3):970-989, DOI:10.1137/09074721X
[2]Nicholas J. Higham and 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]])