使用scipy进行矩阵求幂:expm,expm2和expm3

Bre*_*ung 9 python scipy sparse-matrix

矩阵取幂可以使用scipy.linalg库中的函数在python中执行,即expm, expm2, expm3.expm利用Pade近似; expm2使用特征值分解方法,expm3并使用默认数量为20的泰勒级数.

在SciPy 0.13.0发行说明中声明:

不推荐使用矩阵指数函数scipy.linalg.expm2和scipy.linalg.expm3.所有用户都应该使用数字更强大的scipy.linalg.expm函数.

虽然expm2expm3自发布版本SciPy的0.13.0已被弃用,我发现,在许多情况下,这些实现比快expm.由此,出现了一些问题:

在什么情况下expm2和expm3会导致数值不稳定?

在什么情况下(例如稀疏矩阵,对称,......)每个算法更快/更精确?

rwp*_*rwp 5

这在很大程度上取决于这些不同的矩阵求幂方法的实现细节。

一般来说,我期望特征分解(expm2 ) 不太适合稀疏矩阵,因为它可能会消除稀疏性。应用于非对称矩阵也将更加困难,因为这将需要使用复杂的算术和更昂贵的算法来计算特征分解。

对于泰勒级数方法 (expm3 ),如果存在独立于矩阵范数的固定数量的项,这听起来很危险。当计算标量 x 的 e^x 时,泰勒级数中的最大项大约是 n 接近 x 的项。

然而,这些(已弃用的)函数的实现细节可能会使用对角加载矩阵等技巧,以提高这些级数展开的稳定性。