如何正确使用ismember-command

时间:2017-01-18 11:49:49

标签: matlab

再次找到相应的值时我遇到了麻烦:

考虑向量P_in和向量spacing_Pin: spacing_Pin是从-27开始到2结束的向量。间距是0.0001。 spacing_Pin的第一个条目是:

  • -27
  • -26.9999
  • -26.9998
  • ...
  • -26.7400(第2601条)

P_in的第一个条目是-26.7400,它明显包含在P_in和spacing_Pin中。但是,当我在Matlab中键入ismember(P_in,spacing_Pin)时,结果是一个以:

开头的向量
  • 0
  • 0
  • 1

因此,它说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));

确定。如果你需要some_constant或其他变量的值,我可以尝试以某种方式上传它。我现在不知道如何,因为所有的桌子都很长。

1 个答案:

答案 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]。注意输出是一个与第一个输入大小相同的逻辑数组。