Azzera filtri
Azzera filtri

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

4 visualizzazioni (ultimi 30 giorni)
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 Commento
Rik
Rik il 27 Giu 2021
Once the x-values are shared, you can subtract one from the other and look for a zero crossing.

Accedi per commentare.

Risposta accettata

Scott MacKenzie
Scott MacKenzie il 27 Giu 2021
Modificato: Scott MacKenzie il 27 Giu 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 Commento
ZenithWoman
ZenithWoman il 27 Giu 2021
Thank you so much. I couldn't have written anything better. You went above and beyond, so I am really grateful.

Accedi per commentare.

Più risposte (0)

Prodotti


Release

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by