MATLAB Answers

I am facing a problem with ismember subfunciton in Matlab.

6 views (last 30 days)
Sainath on 6 Mar 2017
Commented: Guillaume on 6 Mar 2017
I am facing a problem with ismember subfunciton in Matlab.
Simulation_Time_Vecort = 0:0.01:42;
TestVector =
0 1.0000
0.7000 0
0.8000 1.0000
7.3100 0
7.4100 1.0000
13.6200 1.0000
20.3200 1.0000
27.0200 1.0000
33.0200 1.0000
39.9200 1.0000
Simulation_Values_Vecort = zeros(1,length(Simulation_Time_Vecort));
FlagSignalName_Value = [Simulation_Values_Vecort ; Simulation_Values_Vecort]';
FlagSignalName_Value(:,1) = double(Simulation_Time_Vecort);
FlagSignalName_Value(:,2) = ismember(Simulation_Time_Vecort,TestVector_Data(:,1)');
Problem: When I try to excute this script, ismember is not executed as expected. For some cases though the value exist in both vectors used in ismember function states above, output is not displayed or updated as value 1. In my case for value ‘0.7000’ ismember result is displayed as 0


Sign in to comment.

Answers (1)

Walter Roberson
Walter Roberson on 6 Mar 2017
If you have a new enough MATLAB version, use ismembertol


Show 2 older comments
Guillaume on 6 Mar 2017
To two decimal place? Hopefully not. Otherwise, I'd say that round is badly implemented.
Stephen Cobeldick
Stephen Cobeldick on 6 Mar 2017
Surely a tolerance is the only robust solution. For example (I used this round2sf):
>> A = 0.996;
>> B = 0.994;
>> round2sf(A,2)
ans = 1.0000
>> round2sf(B,2)
ans = 0.99000
The values differ by only 0.002, but rounding to 2 sigfig will make them diverge, not converge. Using a tolerance would resolve this. All pairs of values that differ by a little less than least significant figure and that are on the rounding boundary will diverge...
Guillaume on 6 Mar 2017
Ah yes, but your values differ on the 3rd significant digit. From the example data provided, I'm assuming that the values only differ by a few eps.
Yes, tolerance comparison is more robust. My suggestion was for if you don't have ismembertol.

Sign in to comment.