How can i find the intersection of two lines between points? One of the lines isnt well behaved

31 vues (au cours des 30 derniers jours)
I need to find the intersection values of x for these two lines between output points
  3 commentaires
Guillaume
Guillaume le 21 Août 2019
What's a badly behaved line? Sings loudly outside your house at 2AM? Is slightly curvy at the ends?
John D'Errico
John D'Errico le 21 Août 2019
Guillaume - I wish I could upvote comments. :)

Connectez-vous pour commenter.

Réponse acceptée

Star Strider
Star Strider le 21 Août 2019
Try this:
x = linspace(0, 1, 40); % Create Data
y1 = 1.0592*ones(size(x)); % Create Data
y1(18) = 1.0251; % Create Data
y2 = 0.093*x + 1;
xi = linspace(min(x), max(x), numel(x)*100); % Interpolation Vector
y1i = interp1(x, y1, xi); % Interpolate
y2i = interp1(x, y2, xi); % Interpolate
yd = y1i - y2i; % Difference
zci = @(v) find(v(:).*circshift(v(:), [-1 0]) <= 0); % Returns Approximate Zero-Crossing Indices Of Argument Vector
ydi = zci(yd); % Zero-Crossing Indices
for k = 1:2
ix = (ydi(k)-1):(ydi(k)+1);
xv = xi(ix);
yv = yd(ix);
B = [xv(:), ones(size(xv(:)))] \ yv(:);
xval(k) = -B(2)/B(1); % Intersection X-Coordinates <—
end
y2r = [x(:) ones(size(y2(:)))] \ y2(:); % Regression For ‘y2’
yval = [xval(:) ones(2,1)] * y2r; % Intersection Y-Coordinates <—
figure
plot(xi, y1i)
hold on
plot(xi, y2i)
plot(xval, yval, 'pg')
hold off
grid
Here ‘xval’ are the x-values of the intersection. This computes the associated ‘yval’ vector and plots the points as well.
How can i find the intersection of two lines between points - 2019 08 21.png
  4 commentaires
Alex Earle-Sodhi
Alex Earle-Sodhi le 22 Août 2019
Simply wonderful!
I thought it might have been something to do with that function only via process of elimination aha
I shall apply this to my code,
Thanks alot!

Connectez-vous pour commenter.

Plus de réponses (0)

Produits


Version

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by