find a value between two points

Hey everyone,
I have the following case : (picture linked to the tocpic).
Let's suppose that i have two points with their value on y-axis equals to -20.5 and -19.5. I also know their value on x-axis (let's suppose 10^9 and 2*10^9). I don't have more points between them.
I would like to know : How can I find the value on X-axis of the point that have the value on y-axis equal to -20.
If it's not understandable, I hope the picture linked to it will be helpful !
Thanks you very much !

2 comentarios

Mathieu NOE
Mathieu NOE el 15 de Sept. de 2021
hi
seems you want to have this intermediate point from a curve that passes through the 2 points. have you tried to create this curve or a approximation (fit) of it ? then you can pick anypoint from this curve.
otherwise you could do simple interpolation, but with only two input points this would be limited to a simple linear interpolation , which is not what your picture says.
dsq dq
dsq dq el 15 de Sept. de 2021
Editada: dsq dq el 15 de Sept. de 2021
Hi,
This curve is already created I have like ~ 8000 points, so I cannot create it. I looked for the interpolation function but I didn't get how this could help me because I would like to have the exact value for -20 ...

Iniciar sesión para comentar.

 Respuesta aceptada

Star Strider
Star Strider el 15 de Sept. de 2021
Use interp1 or fzero on a monotonically-increasing (or decreasing) curve such as that.
Example —
x = linspace(0, 50);
y = 30*(1-exp(-0.1*x));
f = @(x) 30*(1-exp(-0.1*x));
x_20 = interp1(y, x, 20) % From Data
x_20 = 10.9885
f_20 = fzero(@(x) f(x)-20, rand) % From Function
f_20 = 10.9861
figure
plot(x, y)
grid
hold on
plot(x_20, 20, '+r')
plot(f_20, 20, 'xg')
hold off
.

4 comentarios

dsq dq
dsq dq el 15 de Sept. de 2021
Editada: dsq dq el 15 de Sept. de 2021
Yes I see it's working. Just my function is a bit chaotic so it may cross the value (-20) several times. Is there a way to have the value of all the points ? Or need I to split the table ?
I am not certain what your function (or data) look like, so I can’t address it precisely. The best way to approach something like that is to subtract 20 from it, and then use interp1 at the zero-crossings:
x = linspace(0, 50, 250);
y = 20*(1-exp(-0.1*x)) + 5*sin(2*pi*x*15);
yfind = 20;
yz = find(diff(sign(y-yfind)));
for k = 1:numel(yz)
idxrng = max(1,yz(k)-2) : min(numel(x),yz(k)+2); % Index Range
xi(k) = interp1(y(idxrng),x(idxrng),yfind);
end
xi
xi = 1×4
18.4762 24.0158 33.6995 41.4991
figure
plot(x, y)
yline(yfind, '--r')
hold on
plot(xi, ones(size(xi))*yfind, 'sg', 'MarkerSize',10)
hold off
grid
legend('Data','Target Value','Interceptions', 'Location','best')
Experiment with my code and your (x,y) data.
.
dsq dq
dsq dq el 15 de Sept. de 2021
Ok i see. thanks a lot !
Star Strider
Star Strider el 15 de Sept. de 2021
As always, my pleasure!
.

Iniciar sesión para comentar.

Más respuestas (1)

KSSV
KSSV el 15 de Sept. de 2021
Read about interp1. If you have curve data as (x,y), at the point xi you can seek the value using:
yi = interp1(x,y,xi)

1 comentario

dsq dq
dsq dq el 15 de Sept. de 2021
Hey thanks ! star strider explained it juste below ! thanks for your help

Iniciar sesión para comentar.

Categorías

Más información sobre Get Started with Curve Fitting Toolbox en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 15 de Sept. de 2021

Comentada:

el 15 de Sept. de 2021

Community Treasure Hunt

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

Start Hunting!

Translated by