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

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.
Thank you fo your time
Francesca
clear all
load Zn1.txt
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

 Respuesta aceptada

KALYAN ACHARJYA
KALYAN ACHARJYA el 19 de Nov. de 2019
Editada: KALYAN ACHARJYA el 19 de Nov. de 2019
load Zn1.txt
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:
load Zn1.txt
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

6 comentarios

FRANCESCA ROSSI
FRANCESCA ROSSI el 19 de Nov. de 2019
Actually, I don't want to set it to 0, but I want to save in the new array the corresponding current value from A_Zn1
KALYAN ACHARJYA
KALYAN ACHARJYA el 19 de Nov. de 2019
I have added another answer, please check.
FRANCESCA ROSSI
FRANCESCA ROSSI el 19 de Nov. de 2019
Ok I think we are on the right way, but when I try to run it an error occurs:
Operands to the || and && operators must be convertible to logical scalar values.
Error in pot_selection (line 19)
idx=(find(V_Zn1==-1.7007 || V_Zn1==-1.7001));
idx=(find(V_Zn1==-1.7007 | V_Zn1==-1.7001));
FRANCESCA ROSSI
FRANCESCA ROSSI el 19 de Nov. de 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.
Thank you for you answer
KALYAN ACHARJYA
KALYAN ACHARJYA el 19 de Nov. de 2019
Editada: KALYAN ACHARJYA el 19 de Nov. de 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?

Iniciar sesión para comentar.

Más respuestas (2)

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

2 comentarios

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

Iniciar sesión para comentar.

Steven Lord
Steven Lord el 19 de Nov. de 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

Categorías

Más información sobre Phased Array System Toolbox en Centro de ayuda y File Exchange.

Preguntada:

el 19 de Nov. de 2019

Editada:

el 19 de Nov. de 2019

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by