我有一个泊松方程,材料参数变化很大(1 .. 1000),元素尺寸变化很大(5 nm .. 100 um)和一些相当各向异性(四面体)的元素(100 nm x 100 um)。我使用(C++ 端口)Dan Spielman 的 approxChol作为预处理 CG 方法的预处理器。它收敛得非常快(大约 20 次迭代),但预条件 CG 方法的收敛测试有时会过早停止迭代,特别是如果我开始迭代时对解决方案有一个“好的”初始猜测。终止标准是残差的L2范数小于右手边L2范数的1e-6倍。我查看了一些 CG 的实现和一些描述 CG 的文档,它们似乎都将其用作终止标准。
我想知道我的收敛测试问题是否是由我的矩阵的不良条件引起的,以及使用预处理残差作为终止标准是否是个好主意。但是为什么没有其他人这样做呢?也许是因为必须额外计算为了评估? 可以一个用反而 (无论如何都要计算)以避免额外的成本?(但无论如何额外的成本似乎很小,所以......)