Question

J'ai écrit un certain code pour résoudre le problème de la propreté générale et je comparais maintenant mes résultats contre la fonction DSPGVX de Papack.Je viens de travailler avec ce exemple .

donc j'ai obtenu les 4 vecteurs auto

{
 {-0.0319133, -0.265466, -0.713483,  0.64765},
 {-0.425628,  -0.520961, -0.714215,  0.193227},
 { 0.32702,    0.565845, -0.37129,  -0.659561},
 {-0.682699,  -0.056645,  0.0771025, 0.724409}
}

et valeurs auto

{-2.22545, 1.12704, -0.454756, 0.100076}

à la fois avec mon code et avec Mathematica et les résultats sont d'accord.

Mais dans le lien précédent, les vecteurs automatiques rapportés à partir de Lapack sont complètement différents.

 Eigenvalues
    -0.4548  0.1001
 Selected eigenvectors
          1       2
 1   0.3080  0.4469
 2   0.5329  0.0371
 3  -0.3496 -0.0505
 4  -0.6211 -0.4743

Qui devrais-je faire confiance?

P.s.J'ai également vérifié que mes valeurs / autopacteurs automatiques sont correctes car elles donnent un * x-lambda * b * x= 0, tandis que les valeurs de Lapack ne le font pas.

Était-ce utile?

La solution

Il ressemble à DSGPVX résoudre un * lambda= b * x * lambda;MATLAB donne la solution DSGPVX à votre problème à l'aide de "EIG", bien que la documentation de Matlab soit correcte.Je suppose que ceci est un bogue dans la documentation DSGPVX.

>> a=[0.24 0.39 0.42 -0.16;0.39 -0.11 0.79 0.63;0.42 0.79 -0.25 0.48;-0.16 0.63 0.48 -0.03];
>> b=[4.16 -3.12 0.56 -0.1;-3.12 5.03 -0.83 1.09;0.56 -0.83 0.76 0.34;-0.1 1.09 0.34 1.18];
>> [v,d]=eig(a,b)

v =

   -0.0690    0.3080   -0.4469   -0.5528
   -0.5740    0.5329   -0.0371   -0.6766
   -1.5428   -0.3496    0.0505   -0.9276
    1.4004   -0.6211    0.4743    0.2510


d =

   -2.2254         0         0         0
         0   -0.4548         0         0
         0         0    0.1001         0
         0         0         0    1.1270

>> norm(a*v-b*v*d)

ans =

   1.5001e-15

Autres conseils

Je ne sais pas pourquoi vous pensez que Lapack donne des réponses incorrectes, elles me semblent bien.En utilisant les quatre décimales figurant que vous citez, je reçois des résidus (r= a * x - lambda * b * x) telle que

NORM (R1)= 1.5921E-04, NORM (R2)= 6.0842E-05.

Depuis la norme (a)= 1,2994 et la norme (B)= 7,9874, ces résidus semblent très satisfaisants.

Les eigenvectors produits par DSPGVX sont normalisés de sorte que

NORM (X '* B * X)= 1.

On dirait que les résultats de Phacack correspondent effectivement aux deux dernières valeurs propres générées par votre code et Mathematica, bien que des bits inférieurs étant très différents.Les vecteurs correspondants sont assez proches, juste à l'échelle différente.

Clairement, si les valeurs de votre / Mathematica vérifient et que lapack n'est pas, vous devez faire confiance à celle qui produit les bonnes réponses.Il peut être utile d'enquêter sur ce qu'il s'agit de votre problème et des algorithmes de Paques qui le rendent de manière très imprécise.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top