5.8 Calcul des valeurs propres des matrices sym´ etriques
201
c=1; s=0;
else
eta=(A(q,q)-A(p,p))/(2*A(p,q));
if eta>=0
t=1/(eta+sqrt(1+etaˆ2));
else
t=-1/(-eta+sqrt(1+etaˆ2));
end
c=1/sqrt(1+tˆ2); s=c*t;
end
return
Une impl´ ementation MATLAB de la m´ ethode de Jacobi cyclique est donn´ ee dans le Programme 37. Les param` etres d’entr´ ee sont la matrice sym´ etrique
A ∈ R
n×n , une tol´ erance tol et le nombre maximum d’it´ erations nmax. Le
programme renvoie une matrice D = G
T AG avec G orthogonale, telle que
Ψ(D) ≤ tolA F , la valeur de Ψ(D) et le nombre de balayages effectu´ es pour
converger.
Programme 37 - cycjacobi : M´ ethode de Jacobi cyclique pour les matrices
sym´ etriques
function [D,sweep,psi]=cycjacobi(A,tol,nmax)
%CYCJACOBI M´ ethode de Jacobi cyclique.
% [D,SWEEP,PSI]=CYCJACOBI(A,TOL,NMAX) calcule les valeurs propres D de la
% matrice sym´ etrique A. TOL est la tol´ erance de la m´ ethode. PSI=PSINORM(D) et
% SWEEP est le nombre de balayages. NMAX est le nombre maximum d’it´ erations.
[n,m]=size(A);
if n˜=m, error(’Seulement pour les matrices carr´ ees’); end
D=A;
psi=norm(A,’fro’);
epsi=tol*psi;
psi=psinorm(D);
sweep=0;
iter=0;
while psi>epsi&iter<=nmax
iter = iter + 1;
sweep=sweep+1;
for p=1:n-1
for q=p+1:n
[c,s]=symschur(D,p,q);
[D]=gacol(D,c,s,1,n,p,q);
[D]=garow(D,c,s,p,q,1,n);
end
end
psi=psinorm(D);
end
return
Précédent

- 212/540

Suivant