我目前正在研究一个基于C ++的大型稀疏线性代数问题库(是的,我知道很多这样的库存在,但我主要是为了学习迭代求解器,稀疏存储容器等等。 )。
我正处于我在其他编程项目中使用求解器的程度,并希望针对不属于我自己的问题测试解算器。首先,我希望测试对称的稀疏系统是正定的。我已经找到了这样的系统矩阵的几个来源,例如:
Matrix Market UF Sparse Matrix Collection
话虽这么说,我还没有找到任何包含整个系统 - 系统矩阵和RHS的良好测试矩阵的来源。为了检查结果,这将是很好的。关于我可以在哪里找到这样的完整系统的任何提示,或者我可以做什么来为我可以上网的系统矩阵生成“好的”RHS?我目前只是填充一个随机值或所有值的矩阵,但怀疑这不一定是最好的方法。
答案 0 :(得分:1)
我建议使用从预定义的'目标'解决方案获得的右侧矢量x:
b = A*x
然后你有一个目标解决方案x,以及一个来自求解器的结果解x。 这意味着您可以比较误差(目标与所得解决方案的差异)以及残差(A * x - b)。
请注意,为了仔细评估迭代求解器,您还需要考虑使用初始x的内容。
矩阵的在线集合主要包含左侧矩阵,但有些包含右侧,也有一些包含解决方案向量。
http://www.cise.ufl.edu/research/sparse/matrices/rhs.txt
顺便说一句,对于UF稀疏矩阵集合,我建议使用此链接:
答案 1 :(得分:0)
我还没有使用它,我即将,但GiNAC似乎是我发现的C ++最好的东西。它是Maple for CAS背后使用的库,我不知道它的性能。
答案 2 :(得分:0)
然后,您可以向您的解算器提供信息.. 然后再次使用它们的库功能来创建输出数据 (就像DUNE Numerics使用的是VTK格式)......那就是,你可以使用强大的工具来分析数据......
你可能需要学习一些关于编译和使用这些库的知识...... 但它并不多......而且我相信你所获得的功能值得投入时间......
我想即使是一个明确定义且相当复杂的问题也应该足以测试你的库......实际上是两个 一个用于Ax = B问题,另一个用于Ax = cBx(特征值问题)....