2014-03-03 137 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