Algorithme de la Méthode Itérative Générale pour la résolution des systèmes d’équations linéaires de type A*X=B en Matlab :
function [x, iter]= itermeth (A,b,x0,nmax,tol ,P) %ITERMETH Méthode itérative générale % X = ITERMETH(A,B,X0,NMAX,TOL ,P) tente de résoudre le % système d’équations linéaires A*X=B d’inconnue X. % La matrice A, de taille NxN , doit etre inversible et % le second membre B doit être de longueur N. % P=’J’ sélectionne la methode de Jacobi, P=’G’ celle % de Gauss-Seidel. Autrement , P est une matrice N x N % qui joue le rôle de préconditionneur dans la methode % de Richardson dynamique. % Les itérations s’arrêtent quand le rapport entre la % norme du k-ème residu et celle du résidu initial est % inférieure ou égale à TOL , le nombre d’itérations % effectuées est alors renvoyé dans ITER. % NMAX est le nombre maximum d’itérations. Si P % n’est pas défini , c’est la méthode du Gradient à % pas optimal qui est utilisée [n,n]=size(A); if nargin == 6 if ischar(P)==1 if P==’J’ L=diag(diag(A)); U=eye(n); beta=1; alpha =1; elseif P == ’G’ L=tril(A); U=eye(n); beta=1; alpha =1; end else [L,U]=lu(P); beta = 0; end else L = eye(n); U = L; beta = 0; end iter = 0; x = x0; r = b - A * x0; r0 = norm(r); err = norm (r); while err > tol & iter < nmax iter = iter + 1; z = L\r; z = U\z; if beta == 0 alpha = z’*r/(z’*A*z); end x = x + alpha*z; r = b - A * x; err = norm (r) / r0; end return |
Aucun commentaire:
Enregistrer un commentaire