计算2条曲线之间的面积

时间:2011-10-23 18:55:33

标签: r

我想计算蓝线和灰色对角线之间的区域。

enter image description here

我可以将蓝线下面积计算为:

library(zoo)    
id <- order(x)
AUC <- sum(diff(x[id])*rollmean(y[id],2))

(感谢Calculate the Area under a Curve in R

如何找到蓝线和灰线之间的区域?

提前致谢 EC

3 个答案:

答案 0 :(得分:4)

曲线之间的区域是模数(面积(蓝线下) - 面积(灰线下)) 蓝线下面积是1/2(b-a)(f(b)-f(a))其中a和b是极限的Xs,f(a),f(b)是极限的Ys。 在灰线下找到区域可以使用simpson的规则来完成。 看到这个http://en.wikipedia.org/wiki/Simpson%27s_rule 如果你有xs和ys的数组,他们给出了规则以及实现+准确性。

我希望它有所帮助, SAURABH

答案 1 :(得分:1)

只是为了确保有一个可接受的答案,但主要是总结其他人的建议:

'数学',你想要的是曲线下面积abs(blue - grey)

这些值(即绝对差异)很容易获得,一旦你拥有它们,你可以使用任何类似集成的方法(如Simpson的规则或你链接的文章中建议的那样)来获得表面。 / p>

作为替代方案,有点像@Saurabh建议的那样,你可以使用蓝线是阶梯函数(或不是吗?)而另一条是直线的事实。为此,您将蓝色和灰色线交叉的所有x值相加,或者在蓝线中显示新值(“步骤”)。像这样划分区域只会导致三角形和梯形,你可以在将它们全部加起来之前简单地取绝对值。

即使蓝线不是一个简单的阶梯函数,但仍然由直线组成,这应该可行,尽管你现在必须考虑其他一些情况......

答案 2 :(得分:1)

偶然发现这是另一个可能的解决方案,因此我将其添加:

library(geiger)
geiger:::.area.between.curves(x, f1, f2)
# x is the vector of x-axis values
# f1 the y-axis values for the first line
# f2 the y-axis values for the second line