我正在开发一种用于物体检测的图像处理应用程序。
在某些时候,我使用两个平方协方差矩阵的广义特征值向量的对数。 假设我有一个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? 感谢。
答案 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时,我得到了以下内容:
你会发现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。