# How can I select y data given a certain x value?

1 view (last 30 days)
FRANCESCA ROSSI on 19 Nov 2019
Edited: KALYAN ACHARJYA on 19 Nov 2019
Hi,
The attached files contains two columns: the first contains voltage data, while the second current data. I would like to select only those current data whose potential is -1.70007 or -1.7001, depending on the rounding of the value. I am trying like this, but it never enters in the first condition loop, even if I know there are some values with V=-1.7001.
Francesca
clear all
Zn1_data=Zn1;
V_Zn1=Zn1_data(:,1);
A_Zn1=Zn1_data(:,2);
for i=1,length(V_Zn1)
if V_Zn1(i)==-1.7001
AA_Zn1(i)=A_Zn1(i);
else
AA_Zn1(i)=0;
end
end

KALYAN ACHARJYA on 19 Nov 2019
Edited: KALYAN ACHARJYA on 19 Nov 2019
Zn1_data=Zn1;
V_Zn1=Zn1_data(:,1);
A_Zn1=Zn1_data(:,2);
AA_Zn1(find(V_Zn1~=-1.7001))=0;
Is This?
"I would like to select only those current data whose potential is -1.70007 or -1.7001"
Edited:
Zn1_data=Zn1;
V_Zn1=Zn1_data(:,1);
A_Zn1=Zn1_data(:,2);
idx=(find(V_Zn1==-1.7007 | V_Zn1==-1.7001));
A_new_data=A_Zn1(idx);
A_new_data

KALYAN ACHARJYA on 19 Nov 2019
idx=(find(V_Zn1==-1.7007 | V_Zn1==-1.7001));
FRANCESCA ROSSI on 19 Nov 2019
Ok the script runs but I got :
A_new_data =
0×1 empty double column vector
I think that could be a problem for the value I am using. Actually I know that in my data there is -1.70007 but matlab converts it to -1.7001, so that why I tried with this value. But maybe it is not the one anyway.
KALYAN ACHARJYA on 19 Nov 2019
Please note on floating points number and here Read the @Stevan's Answer also (Just below). Please check with other known non decimal numbers, any issue let me know?

David Hill on 19 Nov 2019
AA_Zn1=Zn1_data(:,1).*(Zn1_data(:,1)==-1.7001|Zn1_data(:,1)==-1.70007);

FRANCESCA ROSSI on 19 Nov 2019
I am actually looking for the current data (A_Zn1) corresponding to that value of voltage (V_Zn1=-1.0007)
David Hill on 19 Nov 2019
A_Zn1(V_Zn1==-1.7001|V_Zn1==-1.7007);

Steven Lord on 19 Nov 2019
What you're seeing is the first example in the "Avoiding Common Problems with Floating-Point Arithmetic" section on this documentation page. Be very, very careful when using == (which performs exact, down-to-the-last-bit comparison) on floating point numbers. Use a tolerance or use ismembertol.
a = 0:0.1:1;
% ==
a == 0.3 % all elements are false
a(4) - 0.3 % small but not EXACTLY zero
% Tolerance -- eps is "close enough" in this case
abs(a-0.3) < eps % one element is true, the rest are false
% Ismembertol
ismembertol(a, 0.3) % one element is true, the rest are false