Diagonalisation matrices symetriques nxn

Soyez le premier à donner votre avis sur cette source.

Vue 32 671 fois - Téléchargée 2 276 fois

Description

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

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
2
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
4 juillet 2007

Coucou,

J'ai essayé d'utiliser le programme de diag° 3*3 qui est proposé mais rien ne se passe et je reçois le message suivant sans passage par la console :

Switching to target: default
Linking console executable: C:\Documents and Settings\utilisateur\Bureau\VectProp\console.exe
.objs\util.o:util.c:(.text+0x4e2): undefined reference to `GetObjectType@4'
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 0 seconds)

Je ne sais pas ce que ça sous entend...

Merci d'avance
Messages postés
3
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
11 mai 2007

Salut JCDjcd,

Bon, c sûr que pour les débutants c pas facile.
Il manque peut-être une fonction principale de la forme :

dsyev(H, p, diagevals, X) avec
p les dimensions,
H la matrice d'entrée,
diagevals les valeurs propres,
X les vecteurs propres.

Sinon en fait, le problème est de comprendre comment tu codes ????
Sinon Scot Shaw a mis en place une méthode de calcul intéressante mais que je n'arrive pas à intégre à mon prog principal...

++ et merci
Messages postés
2
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
4 juillet 2007

Coucou tous

Je suis débutant en c et je cherche un code permettant de trouver les valeurs et vecteurs propres d'une matrice 3*3. Quelle ne fut poas ma joie quand j'ai vu celui qui était proposé sur ce site.

Je n'y coonait pas grand chose mais je suis surpris qu'il existe un paramDGB.h et qu'il n'y aie pas de paramDGB.c.

Voudriez vous eclairer ma lanterne SVP.

Saluuuuut
Messages postés
1
Date d'inscription
samedi 23 juin 2007
Statut
Membre
Dernière intervention
23 juin 2007

Bonjour,

Tout d'abord je vous remerci énormement pour le travail que vous l'avez fait. en regardant l'algo
l'algo que vous l'avez utilisé pour la recherche des valeurs et des vecteurs propres d'une matrice 3X3 on remarque que la convergence est assuré aprés 10 itérs.
ma question pourquoi ce choix particulier du nbre d'iters? est ce qu'on peut pas tomber dans un cas ou la convergence est atteinte à un nbre bq plus ou bq moins inferieur que 10.
ma deuxieme question lorsque vous calculer les valeurs propres en faisant le rapport des modules qui sont bien éviedemment positifs vous trouveres des valeurs positifs et c'est pas tjrs le cas.
normalement vous devriez tenir compte de signe des valeurs propres en faisant la projection entre les Yi et les Xi

Je vous remerci encore une autre fois et j'attend votre reponse.

il est bien clair qe la convergence est attenu

Cordialement
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
3
tout est effectivement la, sauf que c'est de la diagonalisation de matrices SYMETRIQUES, le cas general est plus problematique ...
Afficher les 19 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.