计算R中线图的积分

时间:2014-07-03 20:46:42

标签: r plot integral

我在R中有两个相同长度的正值向量x,y。使用plot(x,y,“l”,...),给出了我的有限向量中的2维连续线图x和y。有没有办法在R?

中计算这个线图的某个范围内的定积分

edit1:我已经研究了R中的积分函数。但我不确定如何用两个向量传递函数来传递给它,因为我的向量都是有限的。

edit2:对于更多背景,x和y~10,000的长度。我写了一个函数来查找我正在观察的数据中的异常的周期[xi,xj]。对于这些异常中的每一个,我都使用了情节来查看我的数据片段中发生了什么。现在我需要计算有关这些异常时期积分值的统计数据,所以我试图尽可能准确地得到与我的图形匹配的数字。 X是一个时间变量,我花了很短的时间间隔。

3 个答案:

答案 0 :(得分:5)

您可以与integrate()进行整合。要从向量xy创建函数,需要在值之间进行插值。 approxfun()正是这样做的。

integrate接受一个函数和两个边界。

approxfun只需要两个向量xy

所以我的解决方案是:

integrate(approxfun(x,y), range(x)[1], range(x)[2])

答案 1 :(得分:3)

approxfun函数将采用2个向量并返回一个函数,该函数给出点之间的线性插值。然后可以将其传递给integrate等函数。 splinefun函数也会进行插值,但是基于样条而不是分段线性。

在分段线性情况下,积分将只是梯形的总和,它可以更快/更简单地对梯形的面积求和(宽度,x的差异

答案 2 :(得分:0)

我很久以前就来到了这里。但对于未来的访客, 这里有一些建议的代码来自 格雷格·斯诺的答案,对于分段线性函数:

line_integral <- function(x, y) {
dx <- diff(x)
  end <- length(y)
  my <- (y[1:(end - 1)] + y[2:end]) / 2
  sum(dx *my)
} 

# example
x <- c(0, 2, 3, 4, 5, 5, 6)
y <- c(0, 0, 1,-2,-1, 0, 0)
plot(x,y,"l")
line_integral(x,y)