C++ 为什么';小常数矩阵的t特征收敛?

C++ 为什么';小常数矩阵的t特征收敛?,c++,eigen,C++,Eigen,我正在为小复值平方矩阵(维数

我正在为小复值平方矩阵(维数<10)运行重复的矩阵对角化例程,但在小常值矩阵上遇到了故障。ComplexeIgonsolver不会收敛,返回特征值和特征向量的空对象

我通过尝试求解值均为1的矩阵来检查这个问题,但这很好。我的问题一定与矩阵的小值有关

MatrixXcd矩阵(2,2);
矩阵(0,0)=标准::络合物(1.4822e-322,0);
矩阵(0,1)=标准::络合物(1.4822e-322,0);
矩阵(1,0)=标准::络合物(1.4822e-322,0);
矩阵(1,1)=标准::络合物(1.4822e-322,0);
复合物分解;
计算(矩阵);
特征值();
特征向量();
ces.info();
这将给出空的特征值和特征向量,并从ces.info()返回2。 我希望它只给出带有条目0和2.96e-322的特征值(此处给出的矩阵的缩放版本:)


值是否太小?

是。如此小的双值使得计算不稳定。您非常接近double所能表示的值,因此在计算过程中会发生很大的变化,从而达到极限,结果也会消失。如果您不知道它是什么,请阅读条件数,它会告诉您矩阵与难以(或不可能)解算的某个值有多接近,我希望这个矩阵有一个相当高的条件数注意,你的数字是从一开始的。对它们的进一步计算很可能会下溢,可能会降到零。谢谢大家。如果我将这样的矩阵设置为零,它将不会产生任何影响,所以我将这样做。我将查看此条件编号/非规范化路径,以确定一个值,在该值处我应该开始执行此操作。