Borrar filtros
Borrar filtros

How to find the point of interception between the two lines?

4 visualizaciones (últimos 30 días)
I have two y values, second and third columns in the attached matlab file. I am looking for the point of interception of the two lines. I have interpolated the two y values to get more sampling points (500 points). My goal is to find the integral of each line from the point of interception (where they both cross each othe and not at the origin; they cross around 200+ but I need a way to identify this point) to the end and compare them with the integral of the whole line.
I tried to find the point where the two lines are exactly equal but that didn't work. The lines intercept but not the points. So, the closest point there in this case as other times they could meet is what I am looking for.
row = find(abs(x_untrt)==abs(x_untrt_s));
Thank you for the anticapated assistance.
  1 comentario
Rik
Rik el 27 de Jun. de 2021
Once the x-values are shared, you can subtract one from the other and look for a zero crossing.

Iniciar sesión para comentar.

Respuesta aceptada

Scott MacKenzie
Scott MacKenzie el 27 de Jun. de 2021
Editada: Scott MacKenzie el 27 de Jun. de 2021
I think this is more or less what your are looking for. The crossover indices are idx1 and idx2. Just for fun, and since you mentioned the integral, I added code to compute and show the area between the curves at the crossover points. The area was compute both using polyarea and trapz. The result is the same (187.85 in this case).
M = readmatrix('testdata.txt'); % this is your x_untrt and x_untrt_s data
y1 = M(:,1); % x_untrt
y2 = M(:,2); % x_untrt_s
x = 1:length(y1);
% find indices of crossover points
ydiff = y1 - y2;
idxCross = find(ydiff(1:end-1) < 0 & ydiff(2:end) > 0);
idxCross(end) = []; % ignore last crossover point (by inspection)
idx1 = idxCross(1); % 1st crossover point
idx2 = idxCross(2); % 2nd crossover point
% find area using trapz
a1 = trapz(x(idx1:idx2), y1(idx1:idx2));
a2 = trapz(x(idx1:idx2), y2(idx1:idx2));
area1 = abs(a2 - a1)
% find area using polyarea
px = [x(idx1:idx2) flip(x(idx1:idx2))];
py = [y2(idx1:idx2)' flip(y1(idx1:idx2))'];
p = polyshape(px, py);
area2 = polyarea(px,py)
plot(y1);
hold on;
plot(y2);
scatter(x(idxCross), y1(idxCross), 'k', 'filled');
plot(p);
  1 comentario
ZenithWoman
ZenithWoman el 27 de Jun. de 2021
Thank you so much. I couldn't have written anything better. You went above and beyond, so I am really grateful.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Numerical Integration and Differentiation en Help Center y File Exchange.

Productos


Versión

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by