## Select nearest value on a vector for a given value

### Luis Marcos (view profile)

on 8 Mar 2018
Latest activity Commented on by Fangjun Jiang

on 11 Mar 2018

### Roger Stafford (view profile)

Hi.
I would like to know if you can help me.
I have to get the vector index where its value is closer o nearest to a given value, for example.
i have this vector.
0 1 2 3 4 5 6 7 index
Value -172.0000 | -130.8750 | -89.7500 | -48.6250 | -7.5000 | 33.6250 | 74.7500 | 115.8750 | 157.0000
and if i want to look for the -8, it want to get the index 3 because -8 is between .-48.625 and -7.5, and so on, if i looking for 157, i should get the index 7
i have this code by far, but it isnt working the way i want.
MEQ=[fil,col];
for i=1 :fil%i will store the index in a matrix, so i have to loop over rows
for j=1 :col%loop over matrix columns
for w=1 :numel(recta)%this is the vector
[c,indice]=min(abs(recta-E(i,j)));%here i get the index
MEQ(i,j)=indice;%change the current vector value for the index
end
end
end
can some one give me an idea please
Thank you

### Roger Stafford (view profile)

on 8 Mar 2018
Edited by Roger Stafford

### Roger Stafford (view profile)

on 8 Mar 2018

I notice that your vector 'Value' has ascending elements. If we can assume that, the following can be used:
s = -8; % Or whatever value is being sought
index = sum(Value<s)-1;
Note that this will give a -1 result if s is smaller than all the elements of 'Value' or an 8 index if it is greater than all of 'Value'. If you want to prevent these two possibilities, do this afterwards:
index = min(max(index,0),length(Value)-2);

Luis Marcos

### Luis Marcos (view profile)

on 10 Mar 2018
Thank you, it works perfectly

### Fangjun Jiang (view profile)

on 8 Mar 2018

Can you use built-in function?
X=10:10:100;
Y=1:10;
out=interp1(X,Y,12,'nearest')
out=interp1(X,Y,18,'nearest')

Luis Marcos

### Luis Marcos (view profile)

on 10 Mar 2018
Thank you. But i cant understand what does that do.
Fangjun Jiang

### Fangjun Jiang (view profile)

on 11 Mar 2018
Your code above can be replaced with just one line.
MEQ=interp1(recta,(1:length(recta))-2,E,'nearest')