2009-04-06 22 views
1

Je reçois un vecteur propre erroné (également vérifié en exécutant plusieurs fois pour être sûr) quand j'utilise matrix.eig(). La matrice est la suivante:Problème avec la fonction de décomposition Eigenvalue de Jama

1.2290 1.2168 2.8760 2.6370 2.2949 2.6402 
1.2168 0.9476 2.5179 2.1737 1.9795 2.2828 
2.8760 2.5179 8.8114 8.6530 7.3910 8.1058 
2.6370 2.1737 8.6530 7.6366 6.9503 7.6743 
2.2949 1.9795 7.3910 6.9503 6.2722 7.3441 
2.6402 2.2828 8.1058 7.6743 7.3441 7.6870 

La fonction retourne vecteurs propres:

-0.1698 0.6764 0.1442 -0.6929 -0.1069 0.0365 
-0.1460 0.6478 0.1926 0.6898 0.0483 -0.2094 
-0.5239 0.0780 -0.5236 0.1621 -0.2244 0.6072 
-0.4906 -0.0758 -0.4573 -0.1279 0.2842 -0.6688 
-0.4428 -0.2770 0.4307 0.0226 -0.6959 -0.2383 
-0.4884 -0.1852 0.5228 -0.0312 0.6089 0.2865 

Matlab offre une eigen-vecteur suivant pour la même entrée:

0.1698 -0.6762 -0.1439 0.6931 0.1069 0.0365 
0.1460 -0.6481 -0.1926 -0.6895 -0.0483 -0.2094 
0.5237 -0.0780 0.5233 -0.1622 0.2238 0.6077 
0.4907 0.0758 0.4577 0.1278 -0.2840 -0.6686 
0.4425 0.2766 -0.4298 -0.0227 0.6968 -0.2384 
0.4888 0.1854 -0.5236 0.0313 -0.6082 0.2857 

Les valeurs propres pour Matlab et jama correspondent mais les vecteurs propres les 5 premières colonnes sont inversées dans le signe et seule la dernière colonne est précise.

Y at-il un problème sur le type d'entrée que Jama.Matrix.EigenvalueDecomposition.eig() accepte ou tout autre problème avec le même? S'il vous plaît dites-moi comment je peux réparer l'erreur. Merci d'avance.

Répondre

7

Il n'y a pas d'erreur ici, les deux résultats sont corrects - comme tous les autres temps scalaires les vecteurs propres.

Il existe un nombre infini de vecteurs propres qui fonctionnent - c'est juste une convention que la plupart des logiciels signalent les vecteurs qui ont une longueur de un. Que Jama rapporte des vecteurs propres égaux à -1 fois ceux de Matlab est probablement juste un artefact de l'algorithme qu'ils ont utilisé.

+0

s'il vous plaît voir attentivement .... ce n'est pas scalaire fois un autre vecteur propre toutes les colonnes sauf dernières ont été inversées dans le signe .. dernière colonne pour les deux est la même ... ce qui est incorrect. – BHS

+0

Comme je comprends les conventions utilisées pour le résultat, chaque colonne est un vecteur propre. Donc * un * de ceux-ci n'a pas été retourné en signe. Ce qui rend chaque colonne encore un vecteur propre valide de la norme 1. Où est le problème? – Varkhan

+0

Ainsi, chacun des vectos propres peut être retourné en signe et il est toujours en sécurité. Ensuite, le doute est levé. Merci.. – BHS