3

我需要一个库来解决 Ax=b 系统,其中 A 是一个非对称稀疏矩阵,每行有 8 个条目(它可能非常大)。我认为实现双共轭渐变的库应该没问题,但我找不到一个有效的库(我尝试过 iml++,但 iml++/sparselib++ 包中缺少一些头文件)。有小费吗?

4

3 回答 3

3

有处理超定系统的标准方法。例如维基百科是这样说的:

一组线性联立方程可以用矩阵形式写成 Ax = y。如果方程多于变量,则系统称为超定系统,并且(通常)没有解。然后系统可以更改为 (A T A)x = A T y。新系统的方程与变量一样多(矩阵 A T A 是方阵),可以用通常的方法求解。该解是原始超定系统的最小二乘解,最小化欧几里得范数||Ax - y||,这是原始系统中两侧差异的度量。

因此,您可以使用任何标准的方阵稀疏求解器。

我个人使用Tim Davis的CSparse的直接求解器。Tim 编写了许多优秀的直接稀疏求解器。事实上,他的UMFPACK是另一个很好的选择,例如,MATLAB 就使用它。请注意,这两个求解器都提供 C 接口。如果您正在寻找具有本机 C++ 接口的东西,那么我无能为力。

我对迭代求解器有一些经验。但是,我发现对于我正在研究的问题,迭代方法对于大型矩阵变得不稳定。我在直接求解器方面取得了更大的成功。当然,根据您的问题引发的矩阵类型,您完全有可能获得相反的体验。

于 2011-10-29T19:18:48.780 回答
0

对于大卫赫弗南的回答:不要忘记一件重要的事情:必须检查/证明矩阵 A 具有线性独立的列,否则可能会发生 (A^TA) 是奇异的(然后它当然不起作用)。

于 2014-02-03T13:48:36.820 回答
0

看起来ARPACK解决了稀疏的非对称矩阵问题。有一个C++版本

于 2011-10-29T18:30:32.087 回答