Bonjour à tous,
Tout d'abord, merci d'avance pour l'aide que vous apporterez à ce sujet.
Je cherche à écrire un programme calculant les 3 valeurs propres d'une matrice 3x3, symétrique, de nombres complexes non-nuls.
(NB : J'ai posé le problème sur papier et ait joint ma démonstration dans les deux premières images jointes au sujet)
Pour rappel : Les valeurs propres Lambda[i] (i allant de 1 à n) d'une matrice A[n x n] sont définies comme les solutions de l'équation : det(A-Lambda*I)=0, où I est la matrice identité, de dimension [n x n].
Il existe plusieurs méthodes pour résoudre cette équation. J'ai choisi d'utiliser la méthode du pivot de Gauss (source: http://https://fr.wikipedia.org/wiki...pivot_de_Gauss) qui, selon moi, fait apparaître clairement les trois Lambda[i] sur la diagonale de la matrice triangulaire supérieure formée (que l'on notera dès lors "At").
En effet, le déterminant d'une matrice triangulaire supérieure est égal au produit des termes de sa diagonale (appliquer la règle de Sarrus http://http://bibmath.net/dico/index.../s/sarrus.html).
Et puisque le déterminant d'une matrice triangulaire supérieure est le produit de ses termes diagonaux, alors, si on pose det(At)=0:
- ou bien le premier terme diagonal At[1,1] =0
- ou bien le deuxième terme diagonal At[2,2] =0
- ou bien le troisième terme diagonal At[3,3] =0
J'ai donc posé le problème de la façon présentée dans les images attachées au message actuel (voir images 1 et 2 ci-dessous).
EigenValues1.jpg
EigenValues2.jpg
Codant sous OpenModelica, j'ai la possibilité d'écrire directement des équations qui seront résolues par le solveur d'OpenModelica.
Je teste mon programme sur une matrice A, telle que définie dans le programme (voir l'image ci-dessous).
CodeModelicaEigenValues.PNG
J'utilise la fonction eig() de Matlab comme référence pour tester mon programme et j'obtiens les résultats suivants:
Resultats.PNG
Le problème, c'est que seule la valeur de mon Lambda3, calculée à partir de l'équation 4.3 (voir les 2 premières images) est correcte (par rapport aux résultats de la fonction eig() sous Matlab)...
Et je ne comprends pas du tout pourquoi.
Peut-être aurez-vous plus de recul: avez-vous une idée de ce qui est faux dans mon raisonnement?
D'avance, merci pour votre aide
EnRgeticien
-----