为什么不使用预处理残差作为预处理 CG 的终止标准?

计算科学 收敛 预处理 共轭梯度
2021-12-04 12:26:28

我有一个泊松方程,材料参数变化很大(1 .. 1000),元素尺寸变化很大(5 nm .. 100 um)和一些相当各向异性(四面体)的元素(100 nm x 100 um)。我使用(C++ 端口)Dan Spielman 的 approxChol作为预处理 CG 方法的预处理器。它收敛得非常快(大约 20 次迭代),但预条件 CG 方法的收敛测试有时会过早停止迭代,特别是如果我开始迭代时对解决方案有一个“好的”初始猜测。终止标准是残差的L2范数小于右手边L2范数的1e-6倍。我查看了一些 CG 的实现和一些描述 CG 的文档,它们似乎都将其用作终止标准。

我想知道我的收敛测试问题是否是由我的矩阵的不良条件引起的,以及使用预处理残差作为终止标准是否是个好主意。但是为什么没有其他人这样做呢?也许是因为必须额外计算M1b为了评估bTM1b? 可以一个用x0Tx0+r0TM1r0反而 (r0TM1r0无论如何都要计算)以避免额外的成本?(但无论如何额外的成本似乎很小,所以......)

0个回答
没有发现任何回复~