matlab中的**PCG和MINRES**有什么问题?

计算科学 迭代法 共轭梯度 克雷洛夫法 格瑞斯
2021-12-11 20:50:53

上周,我了解了PCG, MINRES, GMRES的稳健迭代方法的细节,它将内收敛到非奇异系统 对矩阵的要求是:PCG 为 SPD 矩阵,MINRES 为对称矩阵,GMRES 为非对称矩阵。原因是上面这三种方法是最优的,即它们的残差向量是相互正交的,所以它们的残差向量,例如,必须满足,这会产生xNARN×N

Ax=b.
r0,r1,...,rNrN=0N- 第一步。所以,我在matlab(matlab 2018b,8GB win10 OS环境)中做了一些例子如下:

clc;clear;
rng(0);%    to fix the rand number
n=10;
A=rand(n);  %   generate a nonsingular matrix
b=rand(n,1);
%   for general matrix
gmres(A,b);
%%  for SPD matrix 
pcg(A*A',b);
minres(A*A',b);
gmres(A*A',b);

结果是:

gmres converged at iteration 10 to a solution with relative residual 0.

pcg stopped at iteration 10 without converging to the desired tolerance 1e-06
because the maximum number of iterations was reached.
The iterate returned (number 10) has relative residual 0.02.

minres stopped at iteration 10 without converging to the desired tolerance 1e-06
because the maximum number of iterations was reached.
The iterate returned (number 10) has relative residual 0.016.

gmres converged at iteration 10 to a solution with relative residual 0.

奇怪的是,gmres 对于非对称矩阵和 SPD 矩阵都是正常的,但 pcg 和 minres 是异常的。因为矩阵是SPD,那么理论上pcg和minres必须N步收敛,但是都失败了。这是否意味着我们应该尽可能多地使用GMRES而不是其他方法,而不管 SPD 矩阵还是其他方法,因为 gmres 命令对于非对称和 SPD 矩阵非常健壮?有什么问题吗?有什么建议?AAT

1个回答

虽然非常相似,但每种方法都略有不同,您绝对应该考虑到这一点。

GMRES 方法是最简单的,它将为构造一个正交基,并选择一个使残差的 2 范数最小化的近似解。Kk(A,b)

MINRES 方法是 GMRES 的一种变体,它基于以下事实:对于对称矩阵,将成为新基向量的向量已经与除最后 2 个先前基向量之外的所有向量正交。这导致计算时间大大减少,因为我们不需要做所有的正交化。然而,在浮点运算中,我们可能会失去一些正交性(顺便说一下,GMRES 也是如此,mgs 在技术上是不稳定的)。

PCG 方法类似,但不是 GMRES 的对称变体,而是 FOM 的变体。

现在谈谈你的问题。正如评论中已经提到的,所有方法都在 11 步后收敛。但是,我已经查看了残差向量和 matlab 的内部代码,并且偏离 1 似乎不是问题。原因之一可能是构造为的原始条件数的平方这会导致较慢的收敛和正交性损失的恶化。AAA

也可能是别的东西,我不完全确定,但我希望我的回答清楚地表明每种方法都有其优点和缺点。得出 GMRES 在各方面都更好的结论是一个过分的步骤。