Q:

how do I find the closest value to a given number in an array?

The Situation is as follows:
I have to arrays, symbolizing a positive domain x, and another array whose a function of that domain z
Now, I want, for a given point y, to find the z value in the nearest location. For thatI wrote the following function:
R0 = @(y) z(find(abs( abs(y). -  r) == min(abs(abs(y). - r))))

(The use of abs is for negative values of y, since z is symmetric)
This works perfectally well, unless y is a vector. So, if I use the following code:
y = [-1:0.01:1];
R0(y);

I get the following error:
Error using  == 
Matrix dimensions must agree.

Trying to debug it, I came to see that the find statement returned a 1*0 matrix, hence nothing. This is although the value of y ACTUALLY EXSIST in the r array.
What I really want is to get a new vector, which assign the nearest value in z for each value of y.
Other, totally different solutions might be used, so I prefer understanding why this solution doesn't work and how can I make it work.
Thanks

A:

Your question is not very clear. If I understand correctly, for each element of y you want to find the closest element in z.
y = [1 2 3 4 5]; %// example data
z = [0 2.5 6]; %// example data
d = abs(bsxfun(@minus, y(:).', z(:))); %'// compute distance for all pairs
[~, ind] = min(d); %// index of minimizer in z for each value of y
result = z(ind);

In this example,
result =
        0    2.5000    2.5000    2.5000    6.0000

