La méthode du gradient conjugué est une méthode numérique pour obtenir la solution d’un système d’équations linéaires $A.x = b$ où $A$ est une matrice symétrique définie positive. Il s’agit généralement d’une méthode itérative, qui converge vers un vecteur solution $x$. La convergence de cette méthode utilise les propriétés du produit scalaire associé à la matrice $A$. La page Wikipedia propose l’implémentation suivante en Matlab
:
function x = conjgrad(A, b, x)
r = b - A * x;
p = r;
rsold = r' * r;
for i = 1:length(b)
Ap = A * p;
alpha = rsold / (p' * Ap);
x = x + alpha * p;
r = r - alpha * Ap;
rsnew = r' * r;
if sqrt(rsnew) < 1e-10
break
end
p = r + (rsnew / rsold) * p;
rsold = rsnew;
end
end
Le paramètre $x$ sert d’initialisation à l’algorithme, mais peut être choisi comme égal au vecteur nul.
On n’applique pas le préconditionneur $M$ sur la matrice $A$ mais sur le vecteur $A.p$ !
$M$ étant factorisée, on ne calcule pas $M^{-1}.b$ mais on résoud le système linéaire $M.x=b$, c.f. remarques précédentes.