我需要一个库来解决Ax = b系统,其中A是非对称稀疏矩阵,每行有8个条目(并且它可能非常大)。我认为实现biconjugate渐变的库应该没问题,但我找不到一个有效的(我已经尝试过iml ++,但是iml ++ / sparselib ++包中缺少一些头文件)。有什么提示吗?
答案 0 :(得分:3)
有一些处理超定系统的标准方法。例如Wikipedia说:
一组线性联立方程可以矩阵形式写成Ax = y。如果有多个方程而不是变量,则系统被称为超定,并且(通常)没有解。然后可以将系统改为(A T A)x = A T y。新系统具有与变量一样多的方程(矩阵A T A是方阵)并且可以通常的方式求解。该解是原始超定系统的最小二乘解,最小化欧几里德范数|| Ax - y ||,衡量原系统中双方之间的差异。
因此,您可以使用任何标准方阵稀疏求解器。
我个人使用Tim Davis的CSparse直接求解器。蒂姆写了一些优秀的直接稀疏求解器。实际上,他的UMFPACK是另一个很好的选择,例如由MATLAB使用。请注意,这两个解算器都提供C接口。如果您正在寻找具有原生C ++界面的东西,那么我无法提供任何东西。
我有过迭代求解器的一些经验。但是,我发现对于我所看到的问题,迭代方法对于大型矩阵变得不稳定。我在直接求解器方面取得了更大的成功。当然,根据问题引发的矩阵类型,您可以获得相反的体验,这是非常合理的。
答案 1 :(得分:0)
看起来ARPACK解决了稀疏的非对称矩阵问题。有一个C ++版本
答案 2 :(得分:0)
对David Heffernan的回答:不要忘记一件重要的事情:矩阵A必须被检查/证明具有线性独立的列,否则可能发生(A ^ TA)是单数的(当然它不起作用,当然)。