只有部分正在matlab中的If-else语句中执行

时间:2015-05-15 07:22:34

标签: matlab if-statement

我正在使用if-else语句计算数字。我得到了结果,但它只执行了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);

有什么建议吗?

提前致谢!

1 个答案:

答案 0 :(得分:3)

你的问题非常含糊不清,所以我假装你只是问过其中一个if

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,但只需选择一个比您的应用程序产生的数量级小的数字。 )。