用于计算错误特征值的c ++的特征

Dar*_*ant 1 c++ eigen

所以我在代码块中使用Eigen for C++来计算我的矩阵的特征值.处理此问题的代码的具体部分如下: -

EigenSolver<MatrixXd> b(B,false);
cout<<" Eigen values are: \n "<<b.eigenvalues()<<"\n"; 
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,为我的矩阵B计算的特征值之一与我在calculator.vhex.net上找到的实际特征值无关.

例如,对于矩阵

1 0 0 x

0 1 x 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.

我也试过5x5矩阵,它应该有一个特征值4e-06,但代码计算为1.4413e-017.

这可能是什么原因?它们是近似值吗?我的猜测是内存问题,2的平方根的双重类型值不会完全等于2的平方根,但我不确定这一点.

什么可以解决这个问题?

drg*_*ove 5

当矩阵接近奇异时,寻找特征值可能是困难的,用0特征值表示.你不应该期望从数值解中得到精确的特征值0,因为只有在接近该点时开始失败的某些数值近似才会好.