Donc j'utilise Eigen pour C++ dans les blocs de code pour calculer les valeurs propres de mes matrices. La partie spécifique du code qui traite est la suivante: -Eigen for C++ calcul de la valeur propre erronée
EigenSolver<MatrixXd> b(B,false);
cout<<" Eigen values are: \n "<<b.eigenvalues()<<"\n";
Le problème que j'ai rencontrais est est que l'une des valeurs propres calculées pour ma matrice B est nulle part proche de la valeur propre réelle j'ai trouvé sur calculatrice.vhex.net.
Par exemple, pour la matrice
1 0 0 x
0 1 x 0
0 x 1 y
x 0 y 1
où x = -1/sqrt (2) et y = -0,5, les valeurs propres sont 0, 0.5, 1.5 et 2.
Cependant, mon code les calcule pour être -4.25e-016, 0,5, 1,5 et 2.
J'ai aussi essayé cela pour une matrice 5x5 qui aurait eu un 4E-06 valeurs propres, mais le code calculé comme 1.4413e-017.
Quelle pourrait en être la raison? Sont-ils des approximations? Ma conjecture est des problèmes de mémoire et qu'une valeur de type double de racine carrée de 2 ne sera pas exactement égale à la racine carrée de 2, mais je ne suis pas sûr de cela.
Ce qui pourrait être une solution possible pour cela?
Veuillez poster un [mcve] pour montrer votre code exact. En outre, utilisez un débogueur pour parcourir votre code pour voir ce qu'il fait. Notez que toutes les valeurs à virgule flottante sont des approximations de nombres réels. Vous devriez également connaître les limites inhérentes aux représentations à virgule flottante. –
Il sera également utile si vous en apprendre davantage sur certains de la théorie de l'algèbre linéaire numérique. –
"Nowhere close" - 4.25e-016 est assez proche de 0 à partir de nombreux points de vue :) –