GMRES 的操作计数

计算科学 线性代数 迭代法 数字 格瑞斯
2021-11-27 17:56:46

可以按原样使用 GMRES,但也有一种 GMRES 版本,称为 k-step restarted GMRES,用于大型矩阵,其中k是一些固定数量的步骤,之后我们采取新的x0并重新启动算法以节省内存存储。

我想计算任何一种情况下所需的触发器和内存存储的数量。关于翻牌,据我所知,我们有以下内容:

  • O(n)主循环中的步骤,O(n)Arnoldi 迭代的步骤,以及O(n)最小二乘解中矩阵乘法的步骤。所以总数达到O(n3). 这是真的?

对于重新启动的算法,我们有:

  • O(k3)步骤直到每次重新启动收敛。这是真的?

现在,我真的不知道如何计算内存存储。有人可以帮我做这部分吗?

1个回答

表演kGMRES使用步骤O(nk2)时间和O(nk)记忆。换句话说,随着每次额外的迭代,算法变得越来越昂贵。理论上,算法终止于kn步骤(忽略四舍五入),从而产生最坏情况的三次O(n3)时间和二次O(n2)记忆图。

在实践中,我们手动终止算法后k=O(1)产生线性的步骤O(n)时间和记忆的数字。我们这样做是希望收敛足够快,k-th 迭代将已经满足容错。在某些特殊情况下,我们将能够证明这一点。

尽管如此,当k很大,成本k-th 迭代可能仍然太大。我们可以通过在每次之后重新启动 GMRES 来减少这种情况pk脚步。在这种情况下,算法有一个固定的O(np2)=O(n)时间和O(np)=O(n)内存复杂度,与最终的迭代次数无关k. 然而,复杂性的降低是有代价的:重新启动的 GMRES(可证明)收敛速度比 GMRES 慢,并且也可能停滞不前。