在c ++(大小)中反转矩阵的更有效和快速的方法

And*_*uri 9 c++ precision performance matrix matrix-inverse

在谷歌关于矩阵求逆算法时,我发现有几种方法(和意见!)关于如何在代码中执行此操作.我想知道哪种方法最快,或者性能最好的方法,并试图找到答案我什么都没发现.

我知道在某些情况下可以计算伪逆(使用SVD,cholevsky,...),我实际上在我的代码中使用了一些,并且我知道有几次逆不存在等等.很容易找到特定问题的具体答案,但不是对这个巨大的(巨大的!)问题的一般直觉,即矩阵求逆.

所以我的问题是:

对于小型矩阵,哪种方法的性能最佳?精确度?大矩阵怎么样?

我个人的情况是6x6(EDIT:symetric)矩阵必须被反转数千次(是的,是的,具有不同的值)并且我需要高精度,但是肯定速度会非常方便.

请注意,我不是在寻找代码,我会根据自己的情况自行编写任何答案,但我认为这是许多程序员想要了解的问题.

sel*_*tze 5

没有简单的答案.请确保您已经阅读并理解文章.

对于2x2矩阵,可以使用涉及行列式的简单公式来计算逆.但是对于任何更大的东西,我都更喜欢分解,例如一个旋转的LU分解.如果您关注性能并处理大型稀疏矩阵,则迭代求解器可能是合适的.另外,您可以尝试MUMPS(多边形质量平行求解器)并测量性能.迭代求解器的问题在于它们的收敛速度很大程度上取决于逆问题的条件以及是否找到了良好的预处理器.

也许您应该从Eigen库开始,首先尝试使用旋转LU分解.