2015-05-15 4 views
-2

Я работаю над подсчетом чисел, используя оператор if-else. Я получаю результат, но он выполняет только часть else и не смотрит на другую часть.Выполняется только другая часть в инструкции If-else в matlab

Это код, я работаю с

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

['Ваш собеседник'] (http://stackoverflow.com/q/30244098/3293881) может вам помочь. – Divakar

+0

@ Дивакар Я тоже это пробовал. Но это не работает. –

+2

Мы, жалобщики, стараемся быть ясновидящими, но не работаем. – Divakar

ответ

3

Ваш вопрос крайне расплывчатым, так что я собираюсь делать вид, вы только спросили об одном из if с:

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

Я думаю, что есть шанс, что вы только когда-нибудь попасть в else потому что вы пытаетесь приравнять числа с плавающей запятой, и это плохая идея из-за ошибок точности. Это зависит от характера f1 и f2, являются ли они удвоенными, как были рассчитаны и т. Д., Которые вы не указали в своем вопросе. Если вы хотите понять, почему вы не можете приравнять числа с плавающей точкой (или ожидать там разницу в равные 0), то вы должны читать What every computer scientist needs to know about floating-point arithmetic

Скорее попробовать if sum(abs(f1(:) - f2(:))) < tol где tol (т.е. терпимость) является очень небольшим числом (например, eps, но просто выберите число, которое на порядки меньше, чем может принести ваше приложение.).

Смежные вопросы