필터 지우기
필터 지우기

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

조회 수: 4 (최근 30일)
ZenithWoman
ZenithWoman 2021년 6월 27일
편집: ZenithWoman 2023년 10월 22일
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
Rik
Rik 2021년 6월 27일
Once the x-values are shared, you can subtract one from the other and look for a zero crossing.

댓글을 달려면 로그인하십시오.

채택된 답변

Scott MacKenzie
Scott MacKenzie 2021년 6월 27일
편집: Scott MacKenzie 2021년 6월 27일
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
ZenithWoman
ZenithWoman 2021년 6월 27일
Thank you so much. I couldn't have written anything better. You went above and beyond, so I am really grateful.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Numerical Integration and Differentiation에 대해 자세히 알아보기

제품


릴리스

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by