Domanda

Ho scritto un codice per risolvere il problema generale eigenvalore e ora sto confrontando i miei risultati dalla funzione DSPGVX di Lapack.Ho appena lavorato con questo Esempio .

Quindi ho ottenuto i 4 vettori 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}
}
.

e valori automatici

{-2.22545, 1.12704, -0.454756, 0.100076}
.

entrambi con il mio codice che con matematica e risultati sono d'accordo.

Ma nel collegamento precedente, i vettori automatici riportati dal lapack sono completamente diversi.

 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
.

A chi devo fidarmi?

P.S.Ho anche controllato che i miei valori automatici / Autovectors siano corretti poiché producono A * X-Lambda * B * X= 0, mentre i valori da lapack non sono.

È stato utile?

Soluzione

Sembra che DSGPVX sia risolvere A * Lambda= B * X * Lambda;Matlab fornisce la soluzione DSGPVX al tuo problema usando "EIG", anche se la documentazione di Matlab è corretta.La mia ipotesi è questo un bug nella documentazione 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
.

Altri suggerimenti

Non so perché pensi che il LOBACK stia dando risposte errate, mi sembrano bene.Utilizzando i quattro decimali di figura che citate ottengo residui (r= a * x - lambda * b * x) tale da

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

Dal momento che Norm (A)= 1.2994 e Norm (B)= 7.9874, questi residui sembrano molto soddisfacenti.

Gli eigenvettori prodotti da DSPGVX sono normalizzati in modo tale da

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

Sembra che i risultati di un diback corrispondano effettivamente agli ultimi due eigenvalue generati dal tuo codice e matematica, anche se con bit di ordine inferiore che escono abbastanza diversi.I vettori corrispondenti sono piuttosto vicini, appena ridimensionati in modo diverso.

Chiaramente, se i valori del tuo / Mathematica check-out e lapack non lo fanno, dovresti fidarti di quello che produce le risposte corrette.Potrebbe essere prezioso indagare su ciò che riguarda il tuo problema e gli algoritmi di Lapack che lo fanno offrono risposte molto imprecise.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top