Pregunta

Escribí algo de código para resolver el general autovalor problema y ahora estoy comparar mis resultados contra LAPACK del DSPGVX la función.Me acaba de trabajar con este ejemplo.

Así que me conseguí el 4 de auto vectores

{
 {-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}
}

y automática de los valores de

{-2.22545, 1.12704, -0.454756, 0.100076}

tanto con mi código y con Mathematica y los resultados están de acuerdo.

Pero en el enlace anterior, auto vectores informó de LAPACK son completamente diferentes.

 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 quién debo confiar?

P. S.También comprobé que mi auto valores/autovectors son correctos, ya que el rendimiento de Un*x-lambda*B*x=0, mientras que los valores de LAPACK no.

¿Fue útil?

Solución

Parece DSGPVX es la solución de Un*lambda = B*x*lambda;Matlab da la DSGPVX solución a su problema a través de "eig", a pesar de Matlab de la documentación es correcta.Mi conjetura es esto un error en la DSGPVX documentación.

>> 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

Otros consejos

No sé por qué piensas que LAPACK está dando respuestas incorrectas, que parece bien a mí.El uso de las cuatro de la figura decimales que usted cita puedo obtener de los residuos (r = a*x - lambda*B*x) tales que

norma(r1) = 1.5921 e-04, norma(r2) = 6.0842 e-05.

Desde que norm(A) = 1.2994 y norm(B) = 7.9874, estos residuos parecen muy satisfactorios.

Los vectores propios producidos por DSPGVX se normalizan de modo que

norm(x'*B*x) = 1.

Parece Lapack los resultados no corresponden en realidad a los dos últimos valores propios generados por el código y Mathematica, aunque con bits de orden inferior saliendo bastante diferentes.Los correspondientes vectores están muy cerca, sólo a escala de manera diferente.

Claramente, si el/Mathematica de los valores de salida y Lapack no se debe confiar en el que produce las respuestas correctas.Podría ser valiosa para investigar de qué se trata su problema y Lapack de algoritmos que hacen que proporcionan muy impreciso respuestas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top