Finding the first occurance using interp1

Hello. I have some data (red curve) and I'm trying to find the X value at which Y = 0.2.
I have used
Y20 = interp1(Y,X,0.2,'linear')
which works well, but finds the last occurrance.
How can I find the first occurrance (i.e. around x=9)
Thanks

 Risposta accettata

Matt J
Matt J il 27 Feb 2018
Modificato: Matt J il 27 Feb 2018
Use only the first two data X,Y data points in the interpolation.

6 Commenti

Hi, but its not always the 1st two data points. sometime my real data is very similar to the black curve.
Then go through your data from the beginning, note when the Y-value is first greater or equal to 0.2 (say at position I in the Y-array) and then call interp1 as
Y20 = interp1(Y(1:I),X(1:I),0.2,'linear')
Best wishes
Torsten.
Jason
Jason il 27 Feb 2018
Modificato: Jason il 27 Feb 2018
Like this:
[~,I] = min(abs(Y - 0.2))
i=find(Y(1:end-1)>=0.2 & Y(2:end)<=0.2,1);
Y20=interp1(Y(i:i+1),X(i:i+1),0.2);
It could happen that Y is increasing, couldn't it ?
Matt J
Matt J il 27 Feb 2018
Modificato: Matt J il 27 Feb 2018
Not according to the posted figure, but even if it could, I think the extension is an exercise I'll leave for the OP.

Accedi per commentare.

Più risposte (1)

Sean de Wolski
Sean de Wolski il 27 Feb 2018
Modificato: Sean de Wolski il 27 Feb 2018
Use cummax and cummin to find the the first set of points that cross 0.2. Then interp just them.
x = 1:10
y = sin(x)
plot(x,y)
yval = 0.2;
idx = find(cummin(y)<0.2 & cummax(y)>0.2, 1, 'first')
interp1(y([idx-1 idx]), x([idx-1, idx]), 0.2)

1 Commento

Thankyou for your answer. Im sorry I can't accept both. Matt came first.

Accedi per commentare.

Richiesto:

il 27 Feb 2018

Modificato:

il 27 Feb 2018

Community Treasure Hunt

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

Start Hunting!

Translated by