![]()
Pour une matrice A la valeur propre de plus grand module a un rôle dominant lorsqu'on calcule les puissances de A, de façon analogue au terme de plus haut degré d'un polynôme. A la limite A se comporte approximativement comme une multiplication scalaire par cette valeur propre. Cette remarque est utilisée pour calculer le vecteur propre correspondant ainsi que la valeur propre en itérant simplement la multiplication par A sur un vecteur donné.
![]()
1.Algorithme
Soit A une matrice
symétrique réelle.
On note
ses valeurs propres
(supposées réelles)
et
les vecteurs propres correspondants (normés).
On suppose que les
sont de modules distincts et on les
ordonne par modules décroissants :
![]()
Soit x(0) un vecteur de Rn et la suite x(k) définie par la relation de récurrence

Montrer que
quand
.On forme alors
(v1t vecteur-ligne transposé du vecteur-colonne v1).
Montrer que les valeurs propres de A(1) sont
.
Que trouve-t-on si on forme une suite par la relation de récurrence :

On en déduit l'algorithme :
pour i de 1 à n
calcul de la limite v de la suite x(k)
calcul du
correspondant
remplacement de A par A-
vvt
Comment proposez-vous de calculer
à partir du vecteur v ?
Quel critère peut permettre de vérifier numériquement que v est bien un vecteur propre ?
2.Programmation
On dispose d'un programme qui pour plusieurs matrices A calcule les valeurs propres et vecteurs propres d'après la méthode précédente.
On utilise les types :
Vecteur=ARRAY[1..MatMax] OF REAL
Matrice=ARRAY[1..MatMax,1..MatMax] OF REAL
Ecrire les procédures suivantes
dont seul l'en-tête a été indiqué :
PROCEDURE CalculVecteur(A:Matrice;Dim:INTEGER;VAR V:Vecteur);
qui pour la matrice A de dimension Dim retourne le vecteur V limite de la suite x(k) définie au 1. ; on prendra pour x(0) un vecteur à composantes aléatoires (fonction Random) et on limitera k à la valeur ItMax, constante définie en début de programme.
FUNCTION ValeurPropre(A:Matrice;Dim:INTEGER;V:Vecteur):REAL
qui retourne la valeur propre correspondant au vecteur propre V de la matrice A
PROCEDURE Deflation(VAR A:Matrice;Dim:INTEGER;V:Vecteur;Val:REAL);
qui remplace la matrice A par
(v vecteur de norme euclidienne 1).
On utilisera la fonction :
FUNCTION Norme(X:Vecteur;Dim:INTEGER):REAL;
déjà définie dans le programme.
Exécuter le programme pour les matrices proposées puis envisager une procédure supplémentaire pour vérifier les résultats.
![]()
Partie théorique
On décompose x(0) sur la base
:

On considère aussi la suite y(k) définie par
![]()
On a

On a alors

donc



Donc

et ainsi
![]()
Pour A(1) on a
![]()
![]()
Si on forme alors une suite définie par la relation de récurrence :

Pour calculer
on peut simplement utiliser la
définition
et prendre
;
il faut s'assurer que
et que
est bien le même
suivant k.
Une vérification peut alors être faite en
calculant
.
Il est cependant préférable de calculer
, la colinéarité de v et Av
étant vérifiée par le fait que
vaut 1.
Programmation
FUNCTION Norme(X:Vecteur;Dim:INTEGER):REAL;
VAR I:INTEGER;
S:REAL;
BEGIN
S:=0.0;
FOR I:=1 TO Dim DO S:=S+SQR(X[I]);
Norme:=SQRT(S)
END;
PROCEDURE CalculVecteur(A:Matrice;Dim:INTEGER;VAR V:Vecteur);
VAR I,J,K:INTEGER;
U,Up:Vecteur;
N,T:REAL;
BEGIN
FOR I:=1 TO Dim DO Up[I]:=random;
K:=1;
REPEAT
U:=Up;
FOR I:=1 TO Dim DO
BEGIN
T:=0;
FOR J:=1 TO Dim DO T:=T+A[I,J]*U[J];
Up[I]:=T
END;
N:=Norme(Up,Dim);
IF Up[1]<0 THEN N:=-N;
T:=0;
FOR I:=1 TO Dim DO
BEGIN
Up[I]:=Up[I]/N;
T:=T+ABS(Up[i]-U[I])
END;
K:=K+1;
UNTIL (K>ItMax) OR (T<Eps);
V:=Up
END;
FUNCTION ValeurPropre(A:Matrice;Dim:INTEGER;V:Vecteur):REAL;
VAR I,J:INTEGER;
N,D:REAL;
BEGIN
N:=0.0; D:=0.0;
FOR I:=1 TO Dim DO
BEGIN
D:=D+V[I]*V[I];
FOR J:=1 TO Dim DO N:=N+V[I]*A[I,J]*V[J];
END;
ValeurPropre:=N/D
END;
PROCEDURE Deflation(VAR A:Matrice;Dim:INTEGER;V:Vecteur;Val:REAL);
VAR I,J:INTEGER;
BEGIN
FOR I:=1 TO Dim DO
BEGIN
FOR J:=1 TO Dim DO A[I,J]:=A[I,J]-val*V[I]*V[J];
END;
END;
![]()
Pour des matrices de valeurs propres connues on constate que la qualité numérique des dernières valeurs propres est bien moins bonne que celle des premières. Ceci est du à l'accumulation d'erreurs au cours des calculs successifs de A(1),A(2),...,A(n-1). En pratique cette méthode, de mise en oeuvre assez simple, ne peut être valablement utilisée que pour calculer les quelques valeurs propres de plus grand module d'une matrice. Ceci est justement recherché en mécanique (modes fondamentaux de vibration) ou en chimie (niveaux d'énergie).