使用R返回集成功能

时间:2017-06-06 18:12:17

标签: r function integrate

我想说我在R中定义了如下函数:

> f <- function(x) 0.5*sin(x)*(x>=0)*(x<=pi)

我可以将它集成在0和pi之间:

> Integrate <- function(f,a,b) integrate(Vectorize(f),a,b)$value
> F <- Integrate(f,0,pi)

但是如果我想评估并返回一些F的值,我会得到这个错误:

> F(c(-100,0,1,2,pi,100))
Error in F(c(-100, 0, 1, 2, pi, 100)) : 
      function "F" is not found

我可以理解这是因为我的整合&lt; - 函数(f,a,b)返回一个常数值C,它是a和b之间f的积分结果,但怎么能我将F作为函数返回,以便能够将其值作为向量进行评估并绘制它?

就像在这种情况下,对于小于0的任何值,F应该为0,对于任何大于pi的值,F应该为1,并且在它们之间是可变的。

感谢。

编辑:只是为了更清楚地总结一下:如何在[a,b]中定义函数f(x),如果x在[a,b]中则给出f(x),如果xb则为0 ?

1 个答案:

答案 0 :(得分:0)

尝试在sapply中包装函数调用,并使Integrate返回函数。

Integrate <- function(f, a, b)  function(x) if (x < a) 0 else if (x > b) 1 else integrate(Vectorize(f), a, x)$value
F <- Integrate(f, 0, pi)
sapply(c(-100,0,1,2,pi,100), F)

给出

[1] 0.0000000 0.0000000 0.2298488 0.7080734 1.0000000 1.0000000