因此,我使用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 :) –