2015-05-15 51 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,但只需选择一个比您的应用程序少的数量级的数字即可)。