如何计算两条曲线之间的面积

How to calculate the area between two curves

基于以下代码:

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

我需要计算两条曲线之间的面积(绿色面积),例如:

如何计算?

这个面积是两条曲线在每个交点之间指定域内的积分之差(如MBo所述)。因此,您可以使用 InterX 找到交叉点,然后使用 trapz 来执行此操作:

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

由于其中一条曲线是直线,您可以旋转然后从新的 x 轴添加面积。

直线呈 45 度角。所以旋转矩阵为

 cos 45   sin 45 
 -sin 45  cos 45

将第二条曲线中的每个点乘以该矩阵。这给出了以线为新 x 轴的点。现在使用三角形的面积(0.5 * 宽度 * 高度)将片段的面积相加。