dimanche 26 mai 2013

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

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