与性能相比,solve()与简单的矩阵矢量乘法相比如何?

时间:2019-04-05 13:10:44

标签: eigen

我需要用几百个相同大小的矩阵来解决大量线性问题。初始化成本无关紧要,但运行时成本至关重要。天真的,我的洛杉矶背景告诉我,我应该将矩阵求逆,并使用缓存的求逆来解决我的每个线性问题。但是,Eigen文档中提到这可能不是最佳方法。

所以,这是我的两个问题:

  1. 如果原始矩阵表现良好,.solve()和仅将倒置矩阵乘以RHS的速度和精度有何不同?

  2. 如果原始矩阵表现不佳但没有完全退化(特征值都不为0,但最大与最小的比值较大),答案是否会改变?

我是Eigen的新手,因此如果这是一个重复的问题,我深表歉意,我确实在发布之前搜索了档案。

尼克Gnedin

1 个答案:

答案 0 :(得分:0)

这实际上取决于很多事情。例如,如果您的矩阵很小,则除法的开销(.solve()所要求的)就很重要。对于非常大的矩阵,.solve()的开销将变小。对于秩不足的矩阵,.solve()可以更快(取决于分解)。但通常.solve()在数值上应该更稳定。

最好的方法是进行基准测试,并检查应用程序中通常出现的矩阵的准确性(例如,通过比较每种方法的残差)。

另一种选择(尤其是在设置成本无关紧要的情况下)是以双精度分解和求逆,然后将结果转换为单精度。这可能比单精度分解和求解要精确一些,但是乘法运算与单精度求解一样快或更快。