Algorithme de la Méthode de la Puissance Inverse avec Décalage pour la recherche de valeurs propres en Matalab :
function [lambda ,x,iter]=invshift (A,mu,tol ,nmax,x0) %INVSHIFT Evalue numériquement une valeur propre d’une % matrice % LAMBDA=INVSHIFT (A) calcule la valeur propre de A % de module minimum avec la méthode de la puissance % inverse % LAMBDA=INVSHIFT (A,MU) calcule la valeur propre de A % la plus proche d’un nombre réel ou complexe MU % LAMBDA=INVSHIFT (A,MU,TOL ,NMAX,X0) utilise une % tolérance sur l’erreur absolue TOL (1e-6 par défaut) % un nombre maximum d’itérations NMAX (100 par défaut) % en démarrant d’un vecteur initial X0. % [LAMBDA,V,ITER]=INVSHIFT(A,MU,TOL ,NMAX,X0) retourne % aussi un vecteur propre V tel que A*V=LAMBDA*V et % l’itération à laquelle V est calculée. [n,m]=size(A); if n ~= m, error(’Matrices carrées seulement’); end if nargin == 1 x0 = rand(n,1); nmax = 100; tol = 1.e-06; mu = 0; elseif nargin == 2 x0 = rand(n,1); nmax = 100; tol = 1.e-06; end [L,U]=lu(A-mu*eye(n)); if norm(x0) == 0 x0 = rand(n ,1); end x0=x0/norm(x0); z0=L\x0; pro=U\z0; lambda=x0’*pro; err=tol*abs(lambda )+1; iter=0; while err >tol*abs(lambda)&abs(lambda )~=0&iter <=nmax x = pro; x = x/norm(x); z=L\x; pro=U\z; lambdanew = x’*pro; err = abs( lambdanew - lambda); lambda = lambdanew; iter = iter + 1; end lambda = 1/lambda + mu; return |
Aucun commentaire:
Enregistrer un commentaire