Python 使用scipy的矩阵求幂:expm、expm2和expm3

Python 使用scipy的矩阵求幂:expm、expm2和expm3,python,scipy,sparse-matrix,Python,Scipy,Sparse Matrix,可以在python中使用scipy.linalg库中的函数执行矩阵求幂,即expm、expm2、expm3expm使用Pade近似值expm2使用特征值分解方法,expm3使用默认项数为20的泰勒级数 SciPy 0.13.0发行说明中规定: 不推荐使用矩阵指数函数scipy.linalg.expm2和scipy.linalg.expm3。所有用户都应该使用数字上更健壮的scipy.linalg.expm函数 尽管自发布版本SciPy 0.13.0以来,expm2和expm3已被弃用,但我发现在

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

SciPy 0.13.0发行说明中规定:

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

尽管自发布版本SciPy 0.13.0以来,
expm2
expm3
已被弃用,但我发现在许多情况下,这些实现比
expm
更快。 由此产生了一些问题:

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


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

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

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

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


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

这个问题很有趣,如果你在这里没有得到答案,你也可以考虑把它张贴(根据你提到的算法,而不是SISPY函数)。