解决线性方程组的最有效方法

时间:2013-11-24 22:30:06

标签: c++ matrix linear-algebra eigen

我有一个(n×n)对称矩阵A和一个(n×1)向量B.基本上,我只需要求解Ax = b为x。问题是A可能会很大。所以我正在寻找最有效的C ++求解线性方程的算法。我查看了Eigen库。显然它有一个SVD方法,但我被告知它很慢。解决x =逆(A)* b似乎也不是最理想的。 uBLAS更快吗?有没有更有效的方法?谢谢。

编辑:矩阵A是正定的而不是稀疏的。

1 个答案:

答案 0 :(得分:40)

解决Ax = b形式的线性方程组的最佳方法是执行以下操作。

  • A分解为格式A = M1 * M2(其中M1M2为三角形)
  • 使用返回替换
  • 解决M1 * y = b y
  • 使用返回替换
  • 解决M2 * x = y x

对于方形矩阵,第1步将使用LU Decomposition

对于非方形矩阵,第1步将使用QR Decomposition

如果矩阵A 肯定而非稀疏,则第一步使用Cholesky Decomposition

如果你想使用eigen,你必须先decompose it然后triangular solve

如果这仍然很慢,谢天谢地,有许多可用的线性代数库可以帮助提高性能。您应该寻找的例程是dpotrs。一些实现此功能的库如下:

如果您在整个项目中使用eigen,则可以按照here所述的方式连接您需要的LAPACK例程。