2011-12-14 18 views
0
%function [flag] =verify(area) 

[FileName,PathName,FilterIndex]= uigetfile('*.tif','Select the signature file'); 
display(PathName) 
m=[PathName,FileName]; 
area=nor_area(m); 
%display(area) 

%area=0.8707; 
class(area) 

flag=0; 
extract=xlsread('D:\Project\Image_processing\important\best.xlsx', 'CW4:CW17'); 
c=numel(extract); 
display(c) 
l=extract(1); 
class(l) 
display(l) 
for k = 1:c 
%x=extract(k); 
if (l==area && flag==0) 
    % display(extract(k)); 
     flag=1; 
     display(flag) 
end 
end 
display(flag) 

以上是我的驗證代碼,我無法比較「l == area」,即使值相同,我也無法在循環內輸入。如果我嘗試傳遞值假設l = 0.9999和我得到的區域是相同的,如果我明確地發送l值它的作品..!但如果我嘗試使用一些功能,並通過相同的值它不會工作。我已經嘗試使用類檢查類型,都返回雙。Matlab如果循環不工作

任何人都可以請幫助我,如果這種方法不好,建議任何可能使用的替代方案。

+0

也許值不一樣。嘗試打印`(l - 區域)`。 – 2011-12-14 16:28:39

+0

值是周圍非常小,並且其不等於0 – Aps18 2011-12-15 09:02:58

回答

2

在大多數情況下,比較浮點數a == b並不明智。使用abs(a-b)<epsilon其中epsilon代替1e-10是一些小容差。

+1

MATLAB有一個內置的函數[`eps`](http://www.mathworks.co.uk/help/techdoc/ref/eps.html),這可以用來代替對公差進行硬編碼。 – Chris 2011-12-14 16:38:52

3

像浮點數一樣,浮點數不是一個好主意(像==運算符),因爲浮點數與整數值有關。有關在MATLAB中比較浮點數的討論,請參見herehere

基本上,你必須檢查兩個浮點「足夠接近」而不是完全相等,這是==檢查的內容。 MATLAB有一個內置函數eps用於確定機器上的浮點精度,所以在比較浮點數時使用該函數。請參閱documentation瞭解更多信息。