То, что вы видите, является следствием представлений с плавающей запятой для чисел в том смысле, что число 0.1 не совсем точно представляется в виде значения с плавающей запятой. Оператор двоеточия , используемый для создания вектора, делает это путем последовательного добавления значения 0,1 и накапливает очень маленькие ошибки в процессе. Значение в векторе, которое вы считаете -0,1, на самом деле немного отличается от -0,1 из-за этих ошибок, а также отличается от значения -0,1, которое получается, когда вы объявляете его напрямую. Возьмите этот пример:
>> format long % Changes display to show more decimal places
>> vec = -1:0.1:0.9;
>> vec(10)+0.1
ans =
2.775557561562891e-017
Обратите внимание, что вы не получите 0 в качестве ответа, поскольку -0,1 в векторе очень немного отличается по абсолютной величине от 0,1, который вы добавляете к нему. Однако, если бы вы создали свой вектор без , используя оператор двоеточия, вы бы получили желаемый ответ:
>> vec = [-1 -0.9 -0.8 -0.7 -0.6 -0.5 -0.4 -0.3 -0.2 -0.1 0 ...
0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9];
>> ismember(-0.1,vec)
ans =
1
Короче говоря, явное объявление значения -0,1 дает очень немного другое число, чем генерация значения -0,1 путем последовательного добавления 0,1 к -1.