2017-01-18 6 views
1

И снова у меня есть проблемы с поиском соответствующих значений:Как использовать IsMember-команду правильно

Рассмотрим вектор P_in и вектор spacing_Pin: spacing_Pin вектор, начиная с -27 и заканчивая 2. Пробелы 0,0001. Первые записи о spacing_Pin являются:

  • -27
  • -26,9999
  • -26,9998
  • ...
  • -26,7400 (2601th запись)

Первая запись от P_in составляет -26,7400, что явно включено как в P_in, так и в spacing_Pin. Однако, когда я типа в Matlab ismember(P_in,spacing_Pin), результат представляет собой вектор, начиная с:

Так, он говорит, что первое вхождение P_in не входит в spacing_Pin. Но это неправильно!

Вот маленькая версия моего кода:

P_in1   = table(:,1) 
P_out1   = table(:,2) 
spacing_Pin  = transpose(linspace(-27,2,290001)); % spacing = 0.0001 
P_out1_intrp = interp1(P_in1,P_out1,spacing_Pin,'spline'); 

P_in = P_in1 + some_constant; 

% max(some_constant) = 0.0205, min(some_constant) = -1.135 
% the entries of some_constant have many digits after the dot. 
% The first entry for example is: -0,117094826063334 
% this might be the issue since my spacing has accurracy 0.0001 
% this is probably not the problem with ismember(), but another one I have to solve 

P_out = P_out1_intrp(ismember(P_in,spacing_Pin)); 

Ok. Если вам нужно иметь значения some_constant или какой-либо другой переменной, я могу попытаться загрузить ее каким-то образом. Я не знаю, как на данный момент, так как все столы довольно длинные.

+0

Здравствуйте, снова! Отправьте свой код. Вы не можете помочь вам, не понимая, что именно вы используете. Кроме того, прочитайте [здесь] (http://stackoverflow.com/help/mcve) о том, как создать минимальный полный пример. – buzjwa

+0

ОК. Я только что редактировал мой вопрос. Надеюсь, мое письмо не слишком смущает. –

ответ

0

Как в your previous question, используя ismembertol является предпочтительным.

freq = -27:0.01:2; 
P_in = [-26.74, pi, 0, 42]; 
P_in_isInFreq = ismembertol(P_in, freq, eps); 

Здесь P_in_isInFreq будет [1 0 1 0]. Обратите внимание, как вывод представляет собой логический массив того же размера, что и первый вход.

+0

ok, thx для oyur help Naveh! Я изменил последнюю строку своего примера кода на 'P_out = P_out1_intrp (ismembertol (P_in, spacing_Pin, 0.01));'. Теперь 'ismembertol (P_in, spacing_Pin, 0.01)' имеет 1 в каждой записи. P_in имеет 40 записей. Измененная строка кода теперь возвращает первые 40 записей P_out1_intrp. Однако это не то, что я хочу. Я имею в виду, например: -17.77 - 10-я запись P_in. Он также включен в spacing_Pin (запись 92301). Поэтому мой P_out должен иметь запись 'P_out1_intrp (92301)' = 45.9905. Но в моем P_out нет такой ценности! –

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