문제

나는 일반적인 고유값 문제를 해결하기 위해 몇 가지 코드를 작성했으며 이제 내 결과를 LAPACK의 결과와 비교하고 있습니다. DSPGVX 기능.방금 이걸로 작업했어요 .

그래서 나는 4개의 자동 벡터를 얻었습니다.

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

및 자동 값

{-2.22545, 1.12704, -0.454756, 0.100076}

내 코드와 Mathematica 모두 결과가 일치합니다.

하지만 이전 링크에서는 LAPACK에서 보고된 자동 벡터가 완전히 다릅니다.

 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*x-lambda*B*x=0을 생성하는 반면 LAPACK의 값은 그렇지 않기 때문에 올바른지 확인했습니다.

도움이 되었습니까?

해결책

DSGPVX가 A*lambda = B*x*lambda;를 해결하는 것 같습니다.Matlab은 "eig"를 사용하여 문제에 대한 DSGPVX 솔루션을 제공하지만 Matlab의 문서는 정확합니다.내 생각엔 이것이 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

다른 팁

LAPACK이 잘못된 답변을 제공하고 있다고 생각하는 이유가 무엇인지 모르겠습니다. 제 생각에는 괜찮은 것 같습니다.당신이 인용한 네 자리 소수를 사용하면 다음과 같은 잔차(r = A*x - 람다*B*x)를 얻을 수 있습니다.

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

Norm(A) = 1.2994 및 Norm(B) = 7.9874이므로 이러한 잔차는 매우 만족스러워 보입니다.

DSPGVX에 의해 생성된 고유벡터는 정규화되어 다음과 같습니다.

노름(x'*B*x) = 1.

Lapack의 결과는 실제로 코드와 Mathematica에서 생성된 마지막 두 고유값과 일치하는 것처럼 보이지만 하위 비트는 상당히 다르게 나옵니다.해당 벡터는 매우 가깝고 크기가 다르게 조정되었습니다.

분명히 귀하/Mathematica의 가치가 확인되고 Lapack의 가치가 확인되지 않은 경우 올바른 답을 제공하는 가치를 신뢰해야 합니다.문제에 대한 내용과 매우 부정확한 답변을 제공하는 Lapack의 알고리즘을 조사하는 것이 중요할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top