2013-05-29 126 views
4

我正在開發用於對象檢測的圖像處理應用程序。Matlab日誌(1)並非總是爲零

在某個點我使用兩個平方協方差矩陣的廣義特徵值向量的對數。 假設我有一個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和日誌內容(1)爲0,C的含量是:

1.0e-014 * 

0.0222 
0.1110 
0.0222 
0.0222 
-0.0777 
0 
0.0222 
0.0888 
0 

這在我的情況。 任何人都知道爲什麼不具有0值? 謝謝。

+11

可能是因爲你的'B'數組中的值是不完全等於1 –

+0

我同意奧利。只需執行一個(b-1),你就會發現它們並不全是0。 – TOTA

+0

'1e-15'在大多數情況下都是零,如果您按照普萊克的順序工作,您可以使用http://www.mathworks.com/matlabcentral/fileexchange/20029-zero-out-smalls/content/zero_out_smalls/zero_out_smalls.m幅度 – 0x90

回答

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這意味着有未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這就是被發現後的值。一個數後

+0

謝謝你爲我清理。 – sderen

1

尾隨零,像

1.0000

表明,它不完全是這個值。 嘗試

格式長

看到結尾數字長達15 如果這是不完全不夠的,嘗試了打印命令

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

查看值b(1)的50個尾隨數字。

因此,這些數字並不完全1,既不日誌變得準確0