我正在开发用于对象检测的图像处理应用程序.
在某些时候,我使用两个平方协方差矩阵的广义特征值向量的对数.假设我有一个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?谢谢.
正如@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这是找到尾随值的位置.