1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- function [x] = testgradientconj(n,tol,maxiter)
- % exemple pour illustrer un exemple de passage de paramètres
- % d'un script matlab lancer en mode batch sur calculco (tutoriaux)
- % résolution du système Ax =b par la méthode du gradient conjugué
- % En entrée les arguments sont:
- % -n : taille du système
- % -tol: la tolérance
- % -maxiter: nombre max d'itérations
- % En sortie : x la solution ... qui est connue (!): ones(n,1)
- Atmp=rand(n,n);
- A = Atmp + Atmp';
- sol=ones(n,1);
- b=A*sol;
- x0 = rand(n,1);
- iter =1;
- % top départ;
- tic;
- % Calcul du 1er résidu
- r = A*x0-b;
- % direction du gradient d = -r
- d = -r;
- % Calcul du pas
- a = norm(r)^2/dot(A*d,d);
- % 1ere itération x1
- x_ = x0 + d*a;
- % gradient en x1
- r_ = A*x_- b;
- p = norm(r_)^2/dot(r_-r,d);
- % direction
- d_ = -r_+ d*p;
- x = x_;
- r = r_;
- d = d_;
- while ((norm(r) > tol) && (iter < maxiter))
- a = norm(r)^2/dot(A*d,d);
- x_ = x + d*a;
- r_ = A*x_-b;
- p = norm(r_)^2/dot(d,r_-r);
- % direction suivante
- d_ = -r_+ d*p;
- x = x_;
- r = r_;
- d = d_;
- iter=iter+1;
- end
- eltime=toc;
- %nombre d'iterations
- fprintf('Le nombre d''iterations realisee est : %d \n', iter);
- fprintf('elapsed time : %f \n', eltime);
- fprintf('csv: %d , %s, %d, %d, %f \n',n,tol,maxiter,iter,eltime);
- fprintf('Les 10 premiers elements de la solution sont : \n')
- x(1:10)
-
- end
|