MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply TodayTo resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

Asked by cfjunior on 27 Apr 2013

How do I find the two closest numbers from a number in a vector column? For example, suppose I have:

A = [2 3 5 6 9 10 23 45 100]';

If the number I'm seaching is 7, my requested answer would be 6 and 9.

*No products are associated with this question.*

Answer by Wayne King on 27 Apr 2013

Edited by Wayne King on 27 Apr 2013

Accepted answer

It looks like you are looking for the closest numbers where one is below 7 and one is above. If that is the case.

A = [2 3 5 6 9 10 23 45 100]'; num = 7; closest_below = max(A(A<num)); closest_above = min(A(A>num));

because otherwise, 5 is just as close to 7 as 9 is.

Answer by the cyclist on 27 Apr 2013

There are many possible ways to do this. Here is one way.

A = [2 3 5 6 9 10 23 45 100]';

v = 7;

idx_hi = find(A>7,1,'first');

twoClosest = A([idx_hi-1,idx_hi])

I assumed that your A vector was sorted, that all values are unique, etc. You want to be careful if these conditions are not met.

## 1 Comment

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/73792#comment_145849

why wouldn't it return 5 & 6? 5 is as close as 9