我想说我在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 ?
答案 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