加速共轭梯度拟合小局部内核(如三次 B 样条)

计算科学 预处理 共轭梯度 b样条 卷积
2021-12-05 07:58:02

题:

是否有一些足够便宜的共轭梯度(CG)处理器,即使我的操作符非常本地(即已经有少量非零元素)也值得使用,就像在拟合 B 样条曲线时一样职能?

或任何其他方式如何提高CG收敛速度?

背景:

我使用共轭梯度 (CG) 算法使用局部基函数(例如 B 样条)拟合在 2D/3D 网格上描述的函数。

最小二乘拟合简化为该矩阵问题的解:

(BTB)x=Bb

其中是基函数之间的重叠矩阵。像 CG 这样的迭代方法使用矩阵向量乘法:B

y=(BTB)x

在我的情况下,它使用由 1D 三次样条的张量积形成的模板简化为 2D/3D 卷积(即 2D/3D 情况下的 3x3 或 3x3x3 张量)

例如对于 2D 案例:

[[1,4,1],[4,16,4],[1,4,1],]

您可以看到这个矩阵非常稀疏且相对便宜(尽管如果网格有大约 100 万个点,则不是那么便宜)。

在这种情况下,除了对角雅可比之外,还有其他值得使用的预处理器吗?

目前 CG 需要 50 次迭代才能达到精度:106

CG[1] err 0.126261 
CG[2] err 0.052267 
CG[3] err 0.0294687 
CG[4] err 0.0193294 
...
CG[47] err 4.449e-05 
CG[48] err 4.24922e-05 
CG[49] err 3.60459e-05 
CG[50] err 3.32389e-05

以防万一可以在此处找到代码(1 , 2 , 3)(但不确定是否易于理解)

1个回答

您当然可以尝试使用基于 Gauss-Seidel 的预处理,它相对容易构建并且足够便宜(根据我的评估)来尝试一下。

代数预条件子的其他选择(例如,不完全 LU)相对于它们的潜在影响可能太重了。

我还建议研究您的问题的完整稀疏直接解决方案。现在有非常有效的稀疏直接求解器实现,因此它可能是一个合理的选择。通过快速谷歌搜索,我至少能找到这个出版物但是,我敢打赌,这种风格的规范论文会更多。