11

编辑。自从提出这个问题后,我获得了解决断层扫描线性方程组的博士学位。由于这个问题仍然有很多流量,我想强调@sellibitze 答案中的第一句话:没有简单的答案。它在很大程度上取决于矩阵的性质,并且几乎总是您不想反转矩阵。

现在,对于这个认为可以很容易回答的非常无辜的人的原始问题......


在搜索矩阵求逆算法时,我发现有几种方法(和意见!)关于如何在代码中执行此操作。我想知道哪种方法最快,或者性能最好的方法,但试图找到答案却一无所获。

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

所以我的问题是:

什么方法对小矩阵的性能最好?并且精确?大矩阵呢?

我的个人案例是一个 6x6(编辑:对称)矩阵,必须反转数千次(是的,是的,具有不同的值),我需要高精度,但可以肯定的是速度会非常方便。

请注意,我不是在寻找代码,我会自己编写最适合我情况的任何答案,但我认为这是很多程序员都想知道的问题。

4

1 回答 1

5

没有简单的答案。确保您已阅读并理解本文

对于 2x2 矩阵,可以使用包含行列式的简单公式来计算逆矩阵。但对于任何更大的东西,我更喜欢分解,例如旋转 LU 分解。如果您关心性能并处理大型稀疏矩阵,则迭代求解器可能是合适的。或者,您可以尝试 MUMPS(多正面大规模并行求解器)并测量性能。迭代求解器的问题在于,它们的收敛速度在很大程度上取决于逆问题的条件以及是否找到好的预条件子。

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

于 2013-01-16T15:00:26.983 回答