Programmation de la méthode du gradient conjugué
Bonjour,
je dois écrire l'algorithme du gradient conjugué, est ce que quelqu'un pourrait me dire si mon programme est juste ?
le voici :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| function [x, k] = Gradient_conjugue(A, b, x, e)
k=0;
e=0;
x=x0;
r0=b-A*x0;
r=r0;
p0=r0;
while norm(r)<e*norm(r0)
f=dot(r,r)/(A*p,p);
x=x+f*p;
r=r-f*A*p;
B=(dot(r,r))^2/(dot(r,r))^2;
p=r+B*p;
end |
ou x^0 appartient à R^n, arbitraire, k=0,1,...
p^0=r^0=b-A*x^0
f^k=(r^k,r^k)/(A*p^k,p^k)
x^(k+1)=x^k+f^k*p^k
r^(k+1)=r^k-f^k*A*p^k
B^(k+1)= llr^(k+1)ll^2 / llr^kll^2
p^(k+1) = r^(k+1) + B^(k+1)*p^k
K(e) est le nb d'itération pour que llr^kll soit inférieur à epsilon(noté e) fois llr^0ll.
Merci bcp et bonne journée