MATLAB Answers


Select nearest value on a vector for a given value

Asked by Luis Marcos on 8 Mar 2018
Latest activity Commented on by Fangjun Jiang
on 11 Mar 2018
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.
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
can some one give me an idea please
Thank you


Sign in to comment.

2 Answers

Answer by Roger Stafford on 8 Mar 2018
Edited by Roger Stafford on 8 Mar 2018
 Accepted Answer

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);

  1 Comment

Thank you, it works perfectly

Sign in to comment.

Answer by Fangjun Jiang
on 8 Mar 2018

Can you use built-in function?


Thank you. But i cant understand what does that do.
Your code above can be replaced with just one line.

Sign in to comment.