寻找迭代线性求解器的测试矩阵/系统

时间:2010-12-01 19:29:31

标签: c++ matrix linear-algebra solver iteration

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

我正处于我在其他编程项目中使用求解器的程度,并希望针对不属于我自己的问题测试解算器。首先,我希望测试对称的稀疏系统是正定的。我已经找到了这样的系统矩阵的几个来源,例如:

Matrix Market UF Sparse Matrix Collection

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

3 个答案:

答案 0 :(得分: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/

答案 1 :(得分:0)

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

http://www.ginac.de/

答案 2 :(得分:0)

指出你要解决哪种问题会很好... 不同的问题将需要不同的RHS来检查有效性.....我建议从一些项目中获取一些示例代码,例如DUNE Numerics(我现在正在研究这个问题),{已经使用解算器来解决矩阵的{3}},FENICS ...通常它们有一些功能可以在某种文件中输出矩阵(DUNE Numerics具有输出矩阵和RHS的功能)符合matlab的文件)。

然后,您可以向您的解算器提供信息.. 然后再次使用它们的库功能来创建输出数据 (就像DUNE Numerics使用的是VTK格式)......那就是,你可以使用强大的工具来分析数据......

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

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