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函数.
虽然expm2并expm3自发布版本SciPy的0.13.0已被弃用,我发现,在许多情况下,这些实现比快expm.由此,出现了一些问题:
在什么情况下expm2和expm3会导致数值不稳定?
在什么情况下(例如稀疏矩阵,对称,......)每个算法更快/更精确?
这在很大程度上取决于这些不同的矩阵求幂方法的实现细节。
一般来说,我期望特征分解(expm2 ) 不太适合稀疏矩阵,因为它可能会消除稀疏性。应用于非对称矩阵也将更加困难,因为这将需要使用复杂的算术和更昂贵的算法来计算特征分解。
对于泰勒级数方法 (expm3 ),如果存在独立于矩阵范数的固定数量的项,这听起来很危险。当计算标量 x 的 e^x 时,泰勒级数中的最大项大约是 n 接近 x 的项。
然而,这些(已弃用的)函数的实现细节可能会使用对角加载矩阵等技巧,以提高这些级数展开的稳定性。