Matlab log(1)并不总是为零

sde*_*ren 5 matlab

我正在开发用于对象检测的图像处理应用程序.

在某些时候,我使用两个平方协方差矩阵的广义特征值向量的对数.假设我有一个9x9协方差矩阵a.

a = rand(9, 9)%just generating random matrix for testing problem easily

b = eig(a, a)%generalized eigenvalues vector containing nine values equal to 1
             %so we have b = [1.000, 1.000, 1.000 ... (9 times)]

c = log(b(:)) %we know b contains values of 1. and log(1) is 0.
Run Code Online (Sandbox Code Playgroud)

即使我们知道并且可以调试以查看b包含值为1且log(1)为0的元素,但c的内容为:

1.0e-014 *

0.0222
0.1110
0.0222
0.0222
-0.0777
0
0.0222
0.0888
0
Run Code Online (Sandbox Code Playgroud)

这在我的情况下.任何人都知道为什么c的值不为0?谢谢.

Jam*_*rtz 5

正如@OliCharlesworth所评论的那样,b的值并不是真的1.我做的和你做的完全一样,得到了以下的b:

b =

    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
Run Code Online (Sandbox Code Playgroud)

但是当我在变量浏览器中打开b时,我得到了以下内容:

雅只有一个真实的

你会发现只有一个值,1而不是1.000意味着MatLab中没有显示一些尾随值.因此,你会得到以下c:

c =

   1.0e-15 *

    0.2220
   -0.4441
    0.2220
   -0.2220
    0.2220
         0
    0.2220
   -0.1110
   -0.1110
Run Code Online (Sandbox Code Playgroud)

请注意,1.0e-15这是找到尾随值的位置.