MATLAB: How to get an x coordinate from a given y

coordinatesgraph

Hello, I am working a problem that asks me to graph the square of the Amplitude(A) of an oscillation that is a function of omega. I successfully found a way to extract the maximum value of A^2, but have not found a way to find the position omega where A^2 is half of its maximum value. Also, I do not know how to let value x, which is in this case, take all value in real number instead of just the range [0,1000].
x = 0:1000;
y = ((159)./sqrt((1000.^2 - x.^2)+(2*50*x).^2)).^2;
plot(x,y)
xlabel('Omega in rad/second');
ylabel('Amplitude A^2 in meter square(m^2)');
title('Rolling 2 HW7');
max(y);
indexmax = find(max(y) == y);
xmax = x(indexmax);
ymax = y(indexmax);
strmax = ['Max = ',num2str(ymax)];
text(xmax,ymax,strmax,'HorizontalAlignment','right');
[maxY, indexOfMaxY] = max(y);
value = find(y == 0.5*ymax);
display(value);

Best Answer

One usually uses
indexmax = find(max(y) == y);
when there can be several y values that are equal to the max, as indexmax will be a vector of indices of all these max values. e.g.
y = [3 2 1 1 2 3 2 1 1 3 2 1]
indexmax = find(max(y) == y);
returns
indexmax == [1 6 10]
However, later on, your code (the strmax = ...) assumes that indexmax is scalar. In that case, one would use the simpler syntax
[~, indexmax] = max(y);
This will always return just one index. In case of duplicate max, it's the index of the first max value.
As for your question, there's no guarantee that the exact value of half maximum will be present in your array so you can't search for that exact value. Instead you can search for the nearest. The position of that nearest value is the index of the absolute minimum of the difference between y and the half maximum, so:
[~, indexhalfmax] = min(abs(y - max(y)/2));
edit: fixed that last line of code.