为什么eig(A)函数(其中A是半正定函数)返回负双精度?

Ram*_*min 1 matlab linear-algebra

如果我们生成b=randn(10,1),矩阵A=b*b'必须是正半正定矩阵,因此它的所有特征值必须> = 0.

当我使用eig(A)函数时,它返回双精度-3.6934e-16和......(负双精度).

有没有办法提高精度?将它们舍入到绝对零值是否安全?

谢谢.

编辑:我删除了一个无关的部分.

Den*_*din 5

这只是一个舍入问题,当你有一个向量,其中一些元素比其他元素小16个数量级时,在matlab中将它们舍入为零是非常安全的.