8

我目前正在为大型稀疏线性代数问题开发基于 C++ 的库(是的,我知道存在许多这样的库,但我主要是为了了解迭代求解器、稀疏存储容器等)。

我已经到了在我的其他编程项目中使用我的求解器的地步,并且想针对不属于我自己的问题测试求解器。首先,我希望针对正定的对称稀疏系统进行测试。我已经找到了此类系统矩阵的几个来源,例如:

矩阵市场 UF 稀疏矩阵集合

话虽如此,我还没有找到任何包含整个系统-系统矩阵和 RHS 的良好测试矩阵的来源。为了检查结果,这将是很棒的。关于我在哪里可以找到这样的完整系统的任何提示,或者,我可以做些什么来为我可以上网的系统矩阵生成一个“好的”RHS?我目前只是用随机值或全部填充一个矩阵,但怀疑这不一定是最好的方法。

4

3 回答 3

1

我建议使用从预定义的“目标”解决方案 x 获得的右侧向量:

b = A*x

然后,您有一个目标解决方案 x 和一个来自求解器的结果解决方案 x。这意味着您可以比较误差(目标和结果解决方案的差异)以及残差 (A*x - b)。

请注意,要仔细评估迭代求解器,您还需要考虑初始 x 使用什么。

矩阵的在线集合主要包含左侧矩阵,但有些确实包括右侧,也有些也有解向量:

http://www.cise.ufl.edu/research/sparse/matrices/rhs.txt

顺便说一句,对于 UF 稀疏矩阵集合,我建议使用此链接:

http://www.cise.ufl.edu/research/sparse/matrices/

于 2011-08-19T11:07:35.283 回答
0

最好指定您要解决哪种问题......不同的问题将需要不同的 RHS 来检查有效性......我建议从DUNE等项目中获取一些示例代码Numerics(我现在正在研究这个),FENICSdeal.ii,它们已经在使用求解器来求解矩阵......通常它们会有一些功能来在某种文件中输出你的矩阵(DUNE Numerics 有功能在 matlab 兼容的文件中输出矩阵和 RHS)。

然后您可以将其提供给您的求解器......然后再次使用他们的库功能来创建输出数据(如 DUNE Numerics 使用 VTK 格式)......也就是说,您将使用强大的工具分析数据...... ..

你可能需要学习一点关于编译和使用这些库的知识......但这并不多......而且我相信你将获得的功能值得投入时间......

我想即使是一个定义明确且相当复杂的问题也应该足以测试你的库......实际上两个用于 Ax=B 问题,另一个用于 Ax=cBx(特征值问题)......

于 2011-07-30T11:53:40.930 回答
0

我还没有使用它,我即将使用它,但 GiNAC 似乎是我为 C++ 找到的最好的东西。它是 Maple for CAS 背后使用的库,我不知道它的性能。

http://www.ginac.de/

于 2011-07-28T03:52:45.270 回答