2013-02-20 73 views
-4

matlab,我有this.mat文件。如果向內看,雙擊帶有線索1.000的單元格,您會發現出現的值爲0.999999999259113。沒關係。但是,當我使用例如下面的命令:用於比較的值不返回,爲什麼?

>> sel = find (u2 == 0.999999999259113); 

我得到的答案如下:

>> sel 

sel = 

    5 

我們有超過一個0.999999999259113值。我們不?他們在哪?什麼是5應該是?

現在,當我來到了以下功能,因爲.mat文件與this圖像:

function s = pixel(x, y) 
     pixels = []; 
     index = 1; 
     for i=1:length(y) 
       for j=1:length(y) 
        if y(i,j) == 0.999999999259113; 
         pixels(index) = x(i,j); 
         index = index+1; 
        end 
       end 
      end 
      pixels 
     end 

而且,當我跑我得到以下(我的功能:圖像,U2:對。 mat file):

pixel(I,u2);

像素=

[] 

空?這是什麼意思?

任何想法,爲什麼我沒有得到預期的結果,雖然命令似乎邏輯上工作?

謝謝。

+2

就像在你前面的問題,你寫一個函數而沒有賦予它的返回值。你有沒有考慮閱讀MATLAB教程? – 2013-02-20 15:39:59

回答

3

而不是檢查確切的浮點平等,你可以設置一個容差?查找值接近1.0這樣的:

tolerance = 0.01; 
sel = find(abs(u2 - 1.0) < tolerance); 
+0

@schelzer。感謝您的回覆。例如在另一組單元格中具有值「1」的單元格是:「0.999987149754240」。我給'1-0.999987149754240'命令得到了'0.00001285'然後我做了以下操作:'tolerance = 0.00001285',然後'sel = find(abs(u2 - 1.0)<=容差);'但結果是空的matri 。例如,我的單元格的值爲0.999987149754240。當我使用例如'find(u1 == 0.999987149754240)''時,爲什麼我不能得到它們?他們不是那些細胞中的精確值嗎? – Simplicity 2013-02-20 16:20:03

+0

@Med-SWEng'0.999987149754240'不一定是二進制存儲的確切值,所以'=='可能不起作用。嘗試讓你的忍耐力更大。你找到任何火柴嗎? – shoelzer 2013-02-20 18:02:10

1

嘗試使用的

if abs(y(i,j)-)<1e-6 

代替

if y(i,j) == 0.999999999259113; 
+0

感謝您的回覆。 'y(i,j)'之後的意思是'-1'嗎?你爲什麼把它與'1e-6'比較? '1e-6'等於'-3.281718172',對吧? – Simplicity 2013-02-20 16:24:44

+0

我任意選擇1e-6。如果你喜歡,你可以使這個值更小。 '1e-6'等於0.000001。選擇用於容差的值主要取決於所有數值在一起的距離,以及只選擇非常接近1的數值的重要性。 – ThijsW 2013-02-20 23:24:24

相關問題