因此,我使用Eigen for C++代碼塊來計算矩陣的特徵值。與此交易的代碼的特定部分如下: -用於C++計算錯誤特徵值的Eigen
EigenSolver<MatrixXd> b(B,false);
cout<<" Eigen values are: \n "<<b.eigenvalues()<<"\n";
我已經遇到的問題是是,我的矩陣B計算的特徵值之一是無處接近實際的特徵值,我發現上calculator.vhex.net。
例如,對於基體
1 0 0 X
0 1×0
0 X 1 Y
X 0 Y 1
其中x = -1/sqrt(2)和y = -0.5,特徵值是0,0.5,1.5和2.
然而,我的代碼計算它們是-4.25e-016,0.5%,1.5和2
我還試圖將本設置用於應該有一個特徵值4E-06的5×5矩陣,但計算出的碼它爲1.4413e-017。
這可能是什麼原因?他們是否近似? 我的猜測是內存問題,並且2的平方根的雙類型值不會完全等於2的平方根,但我不確定這一點。
對此有什麼可能的解決辦法?
請發表[mcve]以顯示您的確切代碼。另外,使用調試器來遍歷代碼,看看它在做什麼。請注意,所有浮點值都是實數的近似值。您還應該瞭解浮點表示的固有限制。 –
如果你瞭解一些數值線性代數理論,它也會有所幫助。 –
「無處不在」 - 4.25e-016從很多角度來看非常接近於0 :) –