2015-05-15 74 views
-2

我正在使用if-else語句來計算數字。我得到的結果,但它只執行else部分,而不是看另一部分。matlab中的If-else語句中只執行其他部分

這是代碼我與

i = 0; 
j = 0; 

if sum(abs(f1(:) - f2(:))) == 0.0 
    i = i + 1; 
else 
    j = j + 1; 
end 
if sum(abs(f2(:) - f3(:))) == 0.0 
    i = i + 1; 
else 
    j = j + 1; 
end 
if sum(abs(f3(:) - f4(:))) == 0.0 
    i = i + 1; 
else 
    j = j + 1; 
end 

msgtext = sprintf('Matching = %d',i); 
h = msgbox(msgtext); 

msgtxt = sprintf(' Not Matching = %d',j); 
h = msgbox(msgtxt); 

任何建議的工作?

在此先感謝!

+5

['Your buddy'](http://stackoverflow.com/q/30244098/3293881)可能會幫助你。 – Divakar

+0

@Divakar我也試過。但它不工作。 –

+2

我們的回答者試圖成爲千里眼,但它不工作。 – Divakar

回答

3

你提的問題是非常模糊所以我要假裝你只問了一下if S的一個:

if sum(abs(f1(:) - f2(:))) == 0.0 
    i = i + 1; 
else 
    j = j + 1; 
end 

我覺得是,你永遠只能落入else一個公平的機會子句,因爲您試圖將浮點數等同起來,並且由於精度錯誤,這是一個壞主意。這取決於f1f2的性質,他們是雙打的嗎,你在問題中沒有給出的計算等等。如果您想了解爲什麼你不能等同浮點數(或期待有平等0差),那麼你必須閱讀What every computer scientist needs to know about floating-point arithmetic

而是嘗試if sum(abs(f1(:) - f2(:))) < tol其中tol(即公差)是一個非常微小的數量(如eps,但只需選擇一個比您的應用程序少的數量級的數字即可)。