MATLAB: Get the intersection points in the graph

graph

if i draw a line at y = 1,
how to get the point at which the line will intersect the graph (marked in blue line in the image)?
Also i need to find the area of the region.

Best Answer

Try this:
x = [1,2,3,4,6,7,9,12,14,15,17,18,19];
y = [0,2,4,5,7,9,10,8.5,6,4,2,1.5,0];
yline = 1;
zci = @(v) find(v(:).*circshift(v(:), [-1 0]) <= 0); % Returns Approximate Zero-Crossing Indices Of Argument Vector(y);
idx = zci(y - yline); % Indices Near ‘y=1’
for k1 = 1:numel(idx)
xint(k1) = interp1(y(idx(k1):idx(k1)+1),x(idx(k1):idx(k1)+1),yline,'linear','extrap'); % Find ‘x’ At ‘y=1’
end
RegionArea = trapz(x,y-yline)
figure(1)
plot(x, y)
hold on
plot(x, ones(size(x))*yline)
plot(xint, ones(size(xint))*yline, 'pg', 'MarkerSize',10)
hold off
legend('Data', 'y = 1', 'Intersection Points', 'Location','NE')
text(6, 4, sprintf('Area = %.2f', RegionArea))