2014-03-03 111 views
2

我正在使用集成函数(在R中)来数值计算积分。我有一个单变量函数的一个参数就F(X,A)这样的(只是举例的目的):R-集成“集成”功能

test = function(x,a) 1/sqrt(2*pi)*exp(-(x-a)^2/2) 

我想定义新的单变量函数,这是一个功能整合后,上述功能:

testa = function(a) integrate(test,0,Inf,a=a)$value #this works 

现在我的问题是,是否有可能使用的功能种皮整合功能?例如:

integrate(testa,0,1) # not working 

我试着和它不工作(有错误信息evaluation of function gave a result of wrong length)。我已经知道可以直接在测试(例如使用adaptIntegrate函数从函数包的小数部分包)应用多变量积分程序。但那不是我的目的!

那么有谁知道如何继续申请整合函数就像上面的例子?或者确认这在R中是不被允许的?

预先感谢

回答

2

integrate需要一个量化的功能。您可以使用Vectorize

integrate(Vectorize(testa),0,1) 
#0.6843731905 with absolute error < 0.00000000000022 

声明:我没有检查结果的正确性。

+0

Waoh这个作品!并感谢您的快速回答!顺便说一下,你能否解释一下'Vectorize(testa)'背后的机制。我也尝试过,例如'testa = function(a)(Vectorize(test,vectorize.args ='x',0,Inf,a = a)$ value '但它不起作用。谢谢 – Tuan

+1

'test '已经在x中被矢量化了,没有必要在那里使用'Vectorize','help(“Vectorize”)'解释它是如何工作的。 – Roland