5

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

在某些时候,我正在使用两个平方协方差矩阵的广义特征值向量的对数。假设我有一个 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?谢谢。

4

2 回答 2

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 时,我得到了以下信息:

雅只有一个真正的

您会看到,实际上只有一个值,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

注意1.0e-15那是发现尾随值的地方。

于 2013-05-29T18:32:52.893 回答
1

数字后的尾随零,例如

1.0000

表示,它不完全是这个值。尝试

长格式

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

sprintf('%.50f',b(1))

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

因此,数字不完全是 1,也不是对数正好是 0。

于 2013-05-30T00:06:36.280 回答