如何计算两条曲线之间的面积
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 * 宽度 * 高度)将片段的面积相加。
基于以下代码:
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 * 宽度 * 高度)将片段的面积相加。