KelvinS
KelvinS

Reputation: 3061

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?

Upvotes: 1

Views: 1568

Answers (2)

OmG
OmG

Reputation: 18838

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));

Upvotes: 4

Malcolm McLean
Malcolm McLean

Reputation: 6406

Since one of the curves is a straight line you can rotate then add up the areas from the new x axis.

The line is at 45 degrees. So the rotation matrix is

 cos 45   sin 45 
 -sin 45  cos 45

Multiply each point in the second curve by that matrix. That gives points with the line as the new x axis. Now use area of the triangle (0.5 * width * height) to add up the areas of the fragments.

Upvotes: -3

Related Questions