MATLAB Answers


Identifying x value at y on an xy plot

Hannah Douglas さんによって質問されました 2019 年 11 月 21 日 10:32
最新アクティビティ Star Strider
さんによって コメントされました 2019 年 11 月 21 日 13:39
I have a fairly simple problem that I imagine has a simple solution. I have a plot in which the x-axis represents a location (0-8) and the y-axis is the probability of a certain action occuring at that location. I need to identify the x value when there is a 50% chance of the action happening. Example data below.
x = [0,1,2,3,4,5,6,7,8];
y = [0,0,0,.25,.25,.25,.75,1,1];
I just need to identify the x value when y is 0.5. Is there a simple solution I am missing here? Thank you!

  0 件のコメント

サインイン to comment.

2 件の回答

Star Strider
Answer by Star Strider
on 21 Nov 2019 at 12:53
 Accepted Answer

A common problem interpolating y-values that are not unique is how to make them appropriate for interpolation. One way is to simply choose a small range of data in the vicinity of the desired interpolation point.
Try this:
x = [0,1,2,3,4,5,6,7,8];
y = [0,0,0,.25,.25,.25,.75,1,1];
idx = find(y <= 0.5, 1, 'last'); % Select Small Range Of Data Based On Desired Interpolation Point
idxrng = [0 1]+idx;
Lxq = interp1(y(idxrng), x(idxrng), 0.5, 'linear'); % Interpolate Over Small Range Of Data
Pxq = interp1(y(idxrng), x(idxrng), 0.5, 'spline'); % Interpolate Over Small Range Of Data
hold on
plot(Lxq, 0.5, 'p')
hold off
Here the two interpolation menthods give the same result. That may not always be the situation, so specify an appropriate method.
Experiment to get different results.

  2 件のコメント

This solution works really well for me, thank you! So far the linear and spline interpolation produce the same value, but I'll keep them both in for comparison. Thanks
Star Strider
on 21 Nov 2019 at 13:39
As always, my pleasure!
The linear and spline methods produce the same result in this example. However in different situations they would produce significantly different results, the reason I recommend always specifying a method to get the desired result. (The linear method is the default with interp1.)

サインイン to comment.

Answer by dpb
on 21 Nov 2019 at 13:00

P=0.5; % P to find
iy=find(y>P,1); % first point past P
xp=interp1(y(iy-1:iy),x(iy-1:iy),P); % interpolate between prior point and point
You'll have problem where your proability points are identical between observations, though.

  0 件のコメント

サインイン to comment.

Translated by