2012-03-12 156 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} 
} 

和經銷商都與我的代碼和Mathematica與結果一致值

{-2.22545, 1.12704, -0.454756, 0.100076} 

但是在上一個鏈接中,從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 

我該信任誰?

P.S.我還檢查了我的auto值/ autovectors是正確的,因爲它們產生A * x-lambda * B * x = 0,而來自LAPACK的值沒有。

回答

1

看起來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 
1

看起來Lapack的結果實際上與您的代碼和Mathematica生成的最後兩個特徵值相對應,儘管低位比特出現了很大的差異。相應的向量非常接近,只是縮放比例不同。很明顯,如果你的/ Mathematica的值檢出並且Lapack不檢測,你應該相信那個能產生正確答案的值。調查一下你的問題是什麼,以及Lapack的算法可能會提供非常不準確的答案。

2

我不知道你爲什麼認爲LAPACK給出了不正確的答案,它們對我來說似乎很好。使用您引用的四位數字,我得到殘差(r = A * x-λ* B * x),使得範數(r1)= 1.5921e-04,範數(r2)= 6.0842e-05的

。由於常態(A)= 1.2994和常態(B)= 7.9874,這些殘差看起來非常令人滿意。

通過DSPGVX產生的本徵矢量歸一化,使得

範數(X'* B * X)= 1

+0

我得到殘像1E-15與我的結果。如果他們是正常化的,他們應該注意到它。 – flow 2012-03-13 10:39:51

+0

感謝您的回答。 我最關心的是;因爲我的解決方案給出了一個較小的殘留物,爲什麼你不這樣做,因爲這是網站上報告的那個 否則我假設我可以把它們當中的任何一個都取好,你同意嗎? – flow 2012-03-14 09:23:13

相關問題