Matlab log(1)并不总是为零

时间:2013-05-29 18:21:56

标签: 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.

即使我们知道并且可以调试以查看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

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

2 个答案:

答案 0 :(得分:5)

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

b =

    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000

但是当我在变量资源管理器中打开b时,我得到了以下内容:

Ya only one true one

你会发现1只有一个值,而1.000只有c = 1.0e-15 * 0.2220 -0.4441 0.2220 -0.2220 0.2220 0 0.2220 -0.1110 -0.1110 ,这意味着MatLab中没有显示一些尾随值。因此,您将获得以下c:

1.0e-15

注意{{1}},即找到尾随值的位置。

答案 1 :(得分:1)

在数字之后尾随零,例如

  

1.0000

表示它不是这个值。 试试

  

格式化长

查看最多15位的尾随数字。 如果这还不够,请尝试打印命令

  

的sprintf( '%。50F',B(1))

查看值b(1)的50个尾随数字。

因此,数字不完全是1,日志也不是正好为0。