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

Hieu Nguyen
Hieu Nguyen el 24 de Oct. de 2017
Editada: Hieu Nguyen el 24 de Oct. de 2017
I am confused. Here is my graph. Would it be easier if I can find the value of (half ymax) and then find two values that correspond to this half y_max? Is there a way to do that? I am new to Matlab so I am trying my best. Thanks!
Guillaume
Guillaume el 24 de Oct. de 2017
Oops, forgot to divide the max value by 2 in my calculation to get the half maximum. Fixed that now. However, my explanation was correct, so you could have worked out the mistake on your own.
Hello, I plot the graph and I cannot find or use the display the desired x value corresponding to half of the y_max. What can I do?
x = -1000: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');
[~, indexmax] = max(y);
[~, indexhalfmax] = min(abs(y - max(y)/2));
xmax = x(indexmax);
ymax = y(indexmax);
strmax = ['Max = ',num2str(ymax)];
text(xmax,ymax,strmax,'HorizontalAlignment','right');
[maxY, indexOfMaxY] = max(y);
Guillaume
Guillaume el 24 de Oct. de 2017
Editada: Guillaume el 24 de Oct. de 2017
I really don't understand what difficulty you're having. You have all the necessary information in your code above:
text(x(indexhalfmax), y(indexhalfmax), sprintf('half max:%g', y(indexhalfmax)), 'HorizontalAlignment','right');
Hieu Nguyen
Hieu Nguyen el 24 de Oct. de 2017
Hello, I am sorry I did not mean to frustrate you. I am trying to get the x value that corresponds to half ymax and I don’t know how to do that in Matlab. Say my half ymax is 0.01264. I want to find the x values that give me 0.01264 and I don’t know how to do that. I could find the half ymax but I couldn’t not determine the x values. Please help.
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

0 votos

I got it. Thanks. I appreciate it!

Categorías

Más información sobre 2-D and 3-D Plots en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 24 de Oct. de 2017

Respondida:

el 25 de Oct. de 2017

Community Treasure Hunt

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

Start Hunting!

Translated by