Effacer les filtres
Effacer les filtres

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

4 vues (au cours des 30 derniers jours)
ZenithWoman
ZenithWoman le 27 Juin 2021
Modifié(e) : ZenithWoman le 22 Oct 2023
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 commentaire
Rik
Rik le 27 Juin 2021
Once the x-values are shared, you can subtract one from the other and look for a zero crossing.

Connectez-vous pour commenter.

Réponse acceptée

Scott MacKenzie
Scott MacKenzie le 27 Juin 2021
Modifié(e) : Scott MacKenzie le 27 Juin 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 commentaire
ZenithWoman
ZenithWoman le 27 Juin 2021
Thank you so much. I couldn't have written anything better. You went above and beyond, so I am really grateful.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Numerical Integration and Differentiation dans Help Center et File Exchange

Produits


Version

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by