使用 Krylov 求解器求解时Ax=b系统,奇点A只要是良性的b是一致的。考虑将共轭梯度 (CG) 算法应用于对称正半定A(单数,但所有非零特征值仍然为正)。进一步假设b是在范围内A,我们选择初始猜测为x=0. 然后,搜索向量/残差r=b−Ax将始终与零空间正交A(因为在 CG 中,搜索向量/残差总是通过应用来绘制A到以前的残差,这个乘以A不能在零空间中生成任何组件)。该算法永远无法“感知”A,并将收敛到(唯一!)x这样Ax=b和x⊥null(A)
matlab 中的一个简短演示:
clear all
close all
% Form positive semidefinite A.
N = 10;
[Q,~] = qr(rand(N));
D1 = linspace(1,N/2,N/2);
D2 = zeros(1,N/2);
D = diag([D1 D2]);
A = Q*D*Q';
kappa = cond(A) % infinite/singular
% Form random b in range(A).
b = A * rand(N,1);
% Solve A*x=b using CG.
x = pcg(A,b);
% Check properties.
residual = norm(A*x-b)
nullity = norm(x'*null(A))
可以为其他 Krylov 求解器提出类似的论点,但我不能真正与“经典”迭代求解器(Gauss-Seidel 等)交谈。我怀疑它们是否表现良好。
有完全基于这个想法的预处理策略(通货紧缩):找到特征向量的基础A对求解器有某种问题,然后将它们“放气”/投影出来(更改运算符,使相应的特征值映射为零),然后将相同的投影应用于b, 并迭代。有关通货紧缩预处理(涉及奇异系统的收敛性分析)的更多信息,我建议:
唐,JM,等。“基于多重网格和通缩的两级预处理器的比较。”
Erlangga、Yogi A. 和 Reinhard Nabben。“适用于非对称矩阵的 Krylov 子空间方法的通缩和平衡预调节器。”