J'avais déjà fait une source sur la diagonalisation d'une matrice symétrique 3x3.
Ici je présente la généralisation au cas des matrices NxN (avec par exemple N=10).
L'algorithme ressemble a celui des puissances itérées :
Soit M une matrice symetrique réelle. Elle est donc diagonalisable dans une
base orthonormée. On note O la matrice de passage de la base canonique a
la base de diagonalisation. O est un matrice orthogonale est on a la relation :
M = O.D.tO où tO est la transposée de O et D une matrice diagonale.
Le but est de trouver O, ie les vecteurs propres. On obtient les valeurs propres
en calculant D = tO.M.O (tO = O^-1 !!!)
Le principe est de faire :
O := M.O (on applique M a chaque vecteur colonne)
O := GramSchmidt(O) (procédé d'orthonormalisation de Gram-Schmidt)
Puis de répéter autant de fois que nécéssaire.
Le premier vecteur colonne de O va converger vers un vecteur propre
de norme 1 et de valeur propre maximale. Ensuite le second vecteur
colonne vers le vecteur propre associé & la seconde plus grande valeur
propre (en module !), ect...
Vous pouvez verifier que les valeurs propres sont dans l'ordre
decroissant en module