【问题标题】:How to calculate the area between two curves如何计算两条曲线之间的面积
【发布时间】:2018-02-11 22:27:22
【问题描述】:

基于以下代码:

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

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

如何计算?

【问题讨论】:

  • 冒着让自己难堪的危险...从 2 个给定函数 (f1,f2) 创建 2 个新函数,其中 g1 x = max (f1 x) (f2 x) 和另一个 g2 x = min (f1 x) (f2 x)。然后在范围内(此处为 0..1.0)对它们进行积分并取差。
  • 为什么x1 中有两个0 值具有不同的y1 值?
  • 示例数据是手动创建的,是我的错误。第二个0 可以替换为另一个值(例如 0.005)。

标签: matlab math area


【解决方案1】:

这个面积是指定域中两条曲线积分在每个交点之间的差值(如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));

【讨论】:

  • 相交点之间的范围应该分别计算积分,否则带有交替符号的差异会互相吃掉。
  • 不,在这种情况下它不起作用(正如作者预期的那样)。想象曲线f(x)=1+Sin(x)g(x)=1 在间隔0..2*Pi。您的方法给出 0,而“绿色区域”为 4。
【解决方案2】:

由于其中一条曲线是直线,您可以旋转然后将新 x 轴的区域相加。

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

 cos 45   sin 45 
 -sin 45  cos 45

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

【讨论】:

  • 要么详细说明,最好使用代码,或者将其作为评论发布。在 MATLAB 中,旋转绝不是一项微不足道的操作。此外,这种方式也是错误的,因为你需要一个负数部分的绝对值。
猜你喜欢
  • 2017-10-12
  • 2019-08-15
  • 2013-02-27
  • 2014-06-21
  • 2019-02-07
  • 2017-10-12
相关资源
最近更新 更多