gpt4 book ai didi

c++ - 求解线性方程组的最有效方法

转载 作者:IT老高 更新时间:2023-10-28 21:38:59 27 4
gpt4 key购买 nike

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

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

最佳答案

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

  • A分解成A = M1 * M2的格式(其中M1M2是三角形的)
  • 使用反向替换解决 M1 * y = by
  • 使用反向替换解决 xM2 * x = y

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

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

如果矩阵 A 正定且不稀疏,您将使用 Cholesky Decomposition第一步。

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

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

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

关于c++ - 求解线性方程组的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20181940/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com