我在哪里可以找到矩阵,它是测试的预处理器?

计算科学 稀疏矩阵 预处理 测试
2021-12-16 05:09:23

我想找到一些矩阵来测试我的代码,例如 GMRES 、 MINRES 等。但是我找不到一些测试矩阵和相应的预处理器来验证我的程序。

我知道一些像MatrixMarket这样的网站(见这个问题),但我找不到矩阵的相应预处理器。谁能帮我?

2个回答

通常,预处理器被认为是求解器的一部分,因此它们不包含在测试矩阵集合中。事实上,预条件子很少被构造为显式矩阵,因此很难以与编程语言无关的方式包含它们。

如果您使用现有的稀疏线性代数框架或 MATLAB 或 Julia 等语言,则应该已经实现了大量的预条件器。否则,有一些很容易实现的数字。

  • 单位矩阵 - 无助于收敛,但实现起来很简单,有助于检查正确性
  • 缩放器 Jacobi 预条件器 - 只是矩阵对角线
  • 块 Jacobi 预处理器 - 矩阵的对角块(需要在每一步求解小型线性系统)
  • 不完整的 LU/Cholesky - 涉及更多,但以最基本的形式实现仍然相对简单。

作为最后的附注,我认为SuiteSparse 集合包含来自 MatrixMarket 的所有矩阵以及更多矩阵。

我认为这里有些混乱。没有矩阵和相应的预处理器。后者通常是随着迭代方案的发展而动态地衍生出来的,除非您已经拥有矩阵逆矩阵,这将是完美的预处理器,因为您只需应用逆矩阵,并且迭代方法将在其第一步收敛。矩阵也可以从一个时间步到另一个时间步创建,并随着代码的发展而变化。因此,它也可能永远不会以完整的形式存储,只是根据需要进行计算。

在许多方法中,我们有一个步骤表明我们需要将矩阵的逆矩阵应用于对象,我们通常没有完全形成矩阵,因此永远不会完全形成它,也不会完全形成它的逆矩阵。我们只需要对任意向量执行它们的操作。结果,在大多数生产程序中,预处理器可能永远不会完全构建,因为对于大问题,矩阵的各个部分分散在大型并行计算机的内存中。

但是不要绝望,正如其他答案和评论中提到的那样,有一些库可以处理这些问题,因此您“只需”使您的代码适应它们表示矩阵和向量的方式。