how to get the x value for a given y value?

108 ビュー (過去 30 日間)
ahmed salah
ahmed salah 2019 年 5 月 22 日
コメント済み: Jan 2021 年 2 月 2 日
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')

採用された回答

Geoff Hayes
Geoff Hayes 2019 年 5 月 22 日
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.)
  1 件のコメント
ahmed salah
ahmed salah 2019 年 5 月 22 日
thank you for your help

サインインしてコメントする。

その他の回答 (1 件)

Jan
Jan 2019 年 5 月 22 日
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 件のコメント
Parmonangan Manalu
Parmonangan Manalu 2021 年 2 月 2 日
編集済み: Parmonangan Manalu 2021 年 2 月 2 日
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
Jan 2021 年 2 月 2 日
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.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeLine Plots についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by