代码之家  ›  专栏  ›  技术社区  ›  KelvinS Karel Petranek

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

  •  1
  • KelvinS Karel Petranek  · 技术社区  · 7 年前

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

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

    enter image description here

    我怎么计算呢?

    2 回复  |  直到 7 年前
        1
  •  4
  •   MBo    7 年前

    该面积是每个交点(如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));
    
        2
  •  -3
  •   Malcolm McLean    7 年前

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

    这条线是45度。所以旋转矩阵是

     cos 45   sin 45 
     -sin 45  cos 45
    

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