How to get an x coordinate from a given y?

5 visualizaciones (últimos 30 días)
Hieu Nguyen
Hieu Nguyen el 24 de Oct. de 2017
Respondida: Hieu Nguyen el 25 de Oct. de 2017
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);

Respuesta aceptada

Guillaume
Guillaume el 24 de Oct. de 2017
Editada: Guillaume el 24 de Oct. de 2017
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.
  7 comentarios
Guillaume
Guillaume el 24 de Oct. de 2017
Again, isn't
x(indexhalfmax)
the value you're looking for. (i.e. the x that correspond to the y value nearest to the actual half max value)
Hieu Nguyen
Hieu Nguyen el 25 de Oct. de 2017
I don't know why it is giving that but it does not make sense. I plug the number x = 10 into my formula: y = (159^2)/[(1000^2-x^2)^2+4*50^2*x^2. The result is not 0.01264.

Iniciar sesión para comentar.

Más respuestas (1)

Hieu Nguyen
Hieu Nguyen el 25 de Oct. de 2017
I got it. Thanks. I appreciate it!

Categorías

Más información sobre General Applications en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by