dimanche 26 mai 2013

Algorithme de la Méthode de la Puissance Inverse avec Décalage pour la recherche de valeurs propres en Matalab

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