2012-03-12 2 views
3

일반 고유 값 문제를 해결하기 위해 몇 가지 코드를 작성했습니다. 이제 LAPACK의 DSPGVX 함수에 대한 결과를 비교하고 있습니다. 방금이 example으로 작업했습니다. LAPACK 고유 벡터 계산에 실패했습니다

그래서 나는 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} 

값.

그러나 이전 링크에서 LAPACK에서보고 된 자동 벡터는 완전히 다릅니다.

누구를 신뢰할 수 있습니까?

P. 또한 LAPACK의 값은 그렇지 않지만 A * x-lambda * B * x = 0을 산출하기 때문에 자동 값/자동 벡터가 올바른지 확인했습니다.

답변

1

DSGPVX가 A * λ = B * x * λ를 풀고있는 것처럼 보입니다. 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 
1

Lapack의 결과가 코드와 Mathematica에 의해 생성 된 마지막 두 고유치와 실제로 일치하는 것처럼 보입니다.하지만 하위 비트가 완전히 다르게 나오기는합니다. 해당 벡터는 아주 가깝고 다르게 스케일됩니다.

분명히/Mathematica의 값이 체크 아웃되고 Lapack의 값이 정확하지 않으면 올바른 답을 생성하는 값을 신뢰해야합니다. 문제와 Lapack의 알고리즘이 매우 부정확 한 답변을 제공하는지 조사하는 것은 가치가 있습니다.

2

왜 LAPACK이 잘못된 답변을하고 있다고 생각하는지 모르겠지만 나에게 잘 들립니다. 당신이 인용 한 네 자리 수를 사용하면

norm (r1) = 1.5921e-04, norm (r2) = 6.0842e-05가되도록 잔차 (r = A * x-lambda * B * x)를 얻습니다.

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

규범 (X '* B에서의 X *) = 1

+0

내가 1E-15 내 결과와 같은 잔기를 갖기 위하여 DSPGVX 제조

고유 벡터가 표준화된다. 그들의 표준이 정상화되면, 그들은 그것을 알아 차려야 만합니다. 귀하의 답변에 대해 – flow

+0

주셔서 감사합니다. 내 관심사는 다음과 같습니다. 내 해결책은 웹 사이트에보고 된 내용이므로 smalle 잔여 물을 남긴 이유는 무엇입니까? 그렇지 않으면 나는 그 중 어떤 것도 좋은 것으로 생각할 수 있습니다. 동의합니까? – flow