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

Learn moreOpportunities for recent engineering grads.

Apply Today
Asked by Teemu on 4 Mar 2013

I have a cumulative vector, size is about 200. I want to pick up that index where value is 0,5 or value which is next to it. For example (0.1, 0.23, 0.42, 0.49, 0.52, 0.56,...), so i want to pick up index which corresponding to value 0.52. How can I do it?

*No products are associated with this question.*

Answer by Jos (10584) on 4 Mar 2013

Accepted answer

Here is one approach:

v = [0.1 0.23 0.4 0.52 0.56 1.1] idx = find(v >= 0.5,1,'first') v(idx)

Show 5 older comments

Jan Simon on 5 Mar 2013

Please, Teemu, read my answer below. There you find the code to pick the element with the minimal distance. It is the 2nd line and the index is the 2nd output of `min(abs(v - 0.5))`.

Answer by Jos (10584) on 5 Mar 2013

To do this for multiple values, take a look at my function NEARESTPOINT:

Answer by Jan Simon on 4 Mar 2013

Edited by Jan Simon on 5 Mar 2013

v = [0.1 0.23 0.4 0.52 0.56 1.1]; [absdist, nearest] = min(abs(v - 0.5)); % **SOLUTION IS HERE** !!! if absdist == 0 % or: <= eps(v(index)) following = index; else following = index + 1; end

nearestValue = value(nearest); followingValue = value(following);

## 3 Comments

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/65786#comment_133960

Does "next" mean the next larger element or the element with the minimal distance? In the 2nd case, the answer would be 0.49, in opposite to your example.

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/65786#comment_134235

Minimal distance, in this case it will be 0.49

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/65786#comment_134236

actually I need both