Matlab, если цикл не работает - PullRequest
       1

Matlab, если цикл не работает

0 голосов
/ 14 декабря 2011
%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 == область", даже если значения одинаковы, я не могу войти в цикл. Если я попытаюсь передать значение, предположим, что l = 0,9999, и область, которую я получу, будет такой же, если я отправил значение l явно, это сработает .. !! но если я попытаюсь использовать какую-то функцию и передать то же значение, это не сработает. Я попытался проверить тип с помощью класса, оба возвращаются дважды.

Может кто-нибудь, пожалуйста, помогите мне с этим, и если этот подход не хорош, предложите любую альтернативу, которая может быть использована.

Ответы [ 2 ]

3 голосов
/ 14 декабря 2011

Обычно не рекомендуется сравнивать числа с плавающей запятой, как вы делаете (с помощью оператора ==), поскольку числа с плавающей запятой, в отличие от целочисленных значений, подлежат округлению. См. здесь и здесь для обсуждения сравнения чисел с плавающей запятой в MATLAB.

По сути, вы должны проверить, что два числа с плавающей точкой «достаточно близки», а не точно равны, что и проверяет ==. MATLAB имеет встроенную функцию eps для определения точности с плавающей запятой на вашем компьютере, поэтому используйте эту функцию при сравнении чисел с плавающей запятой. См. документацию для получения дополнительной информации.

2 голосов
/ 14 декабря 2011

В большинстве случаев не имеет смысла сравнивать числа с плавающей запятой по a == b. Вместо этого используйте abs(a-b)<epsilon, где epsilon - это небольшой допуск, например 1e-10.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...