Search code examples
matlabmatharea

How to calculate the area between two curves


Based on the following code:

clear vars;
close all;

x1 = [0 0 0.01 0.09 0.1 0.11 0.2 0.3 0.35 0.50 0.64 0.8 1]
y1 = [0.05 0.10 0.15 0.20 0.25 0.30 0.38 0.42 0.45 0.48 0.52 0.86 1]

x2 = [0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.9 0.9 1]
y2 = [0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.9 0.9 1]

plot(x1, y1); hold on;
plot(x2, y2);

I need to calculate the area (green area) between the two curves, for example:

enter image description here

How can I calculate it?


Solution

  • This area is the difference of the two curves integral in the specified domain between each intersection (as mentioned by MBo). Hence, you can find the intersections using InterX and then use trapz to do this:

    P = InterX([x1;y1],[x2;y2]);
    area = 0;
    % for each segment
    % each segment is between P(1,i) and P(1, i+1)
    % So we can find xsegments with idx = find(x < P(1,i+1) && x > P(1,i)) and [P(1,i) x(idx) P(1,i+1)]
    % ...
        area = area + abs(trapz(xsegment1i,ysegment1i) - trapz(xsegment2i,ysegment2i));