how to get the x value for a given y value?
45 views (last 30 days)
Show older comments
I plot x-y graph (Gaussian function) and want to get the x-axis value (will be two points in this case) at a certain y-axis value (half of the maximum)
I tried this but it didn't work:
clc;
clear all;
Fs = 150; % Sampling frequency
t = -0.5:1/Fs:0.5; % Time vector of 1 second
x = 1/(sqrt(2*pi*0.01))*(exp(-t.^2/(2*0.01)));
figure;
plot(t,x);
xi = 0.5*max(x) ;
z=find(x==xi);
ti = x(z) ;
hold on
plot(ti,xi,'*r')
0 Comments
Accepted Answer
Geoff Hayes
on 22 May 2019
ahmed - your code assumes that there is an x value that is identical to xi
z=find(x==xi);
This need not be true. And comparing doubles in this manner is not generally a good idea (due to precision, see Why is 0.3 - 0.2 - 0.1 (or similar) not equal to zero?). Usually a tolerance of some kind should be used (i.e. abs(x - y) < eps). In your case, a tolerance might not work as well because you will not know what that tolerance should be. You could try different values...the following seems to work for this dataset
z=find(abs(x-xi)< 0.10);
ti = t(z) ;
hold on
plot(ti,xi,'*r')
(Note how ti is obtained from the t array instead of x.)
More Answers (1)
Jan
on 22 May 2019
You cannot expect that any of the points at t = -0.5:1/Fs:0.5 is exactly 0.5*max(x). Remember that you evaluate x at some time steps only and rounding errors have to be considered also.
There is an analytical solution also, but you can use fzero to find the searched points. But you have to find the maximum value of the curve at first. Setting the derivative to 0 will help you.
2 Comments
Parmonangan Manalu
on 2 Feb 2021
Edited: Parmonangan Manalu
on 2 Feb 2021
clear;
a = 6.8;
b = 10;
weight = 767;
for i = 1:22
if i>= a && i <= b
gra = (1.4);
else
gra = 0;
end
GM(i) = gra.*weight;
format long g
end
dis = 1:22;
plot(dis,GM)
grid on
ax = gca;
ax.XAxis.TickLabelFormat = '%,.1f';
Dear Jan,
can you please help with that coding, the y value is not exatcly as the x value when i plot the graph. I think the correct graph shall be the red line
thanks in advance
Jan
on 2 Feb 2021
Please open a new thread for a new question. Posting new question is the section for comments to answers of another question is too confusing.
The code produces the diagram exactly as expected. Note that the diagram of x=[1,2,3], y = [0,1,0] is a triangle also. If you post this as new question, we will write some answers about how you can achieve, what you want.
See Also
Categories
Find more on 2-D and 3-D Plots in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!