2013-04-10 64 views
0

我堅持計算數組中每個點的積分。這個想法首先是創建一個函數(「Integrand」)。然後,創建計算必要積分的第二個函數(「MyConvolve」)。R,積分在陣列的每個點

這裏就是我所做的到現在:

Integrand = function(s,x) 
{ 1/4*(abs(x-s)<=1)*(abs(s)<=1) } 

MyConvolve = function(func,data) 
{ return(integrate(func, lower=-Inf, upper=Inf, data)) } 

現在,運行一些數組的代碼,我得到一個錯誤信息:

SomeMatrix = replicate(10, rnorm(10)) 
MyConvolve(Integrand, SomeMatrix) 

與以下錯誤消息結束了:

Error in integrate(func, lower = -Inf, upper = Inf, data) : 
evaluation of function gave a result of wrong length 

我已經嘗試了向量化函數,但仍然以錯誤消息結束。

非常感謝您的幫助!

+0

你所說的「計算積分在陣列的每一個點」的意思是 (你的陣列是2維的,但'integrate'計算的單變量函數的積分)?例如,你如何計算它在一個點? – 2013-04-10 10:34:00

+0

嗨文森特!假設我有一個10x10矩陣。現在我想讓我的代碼計算每個單個矩陣條目的積分(在我的例子中是卷積乘積)。因此,輸入一個10×10的矩陣,並得出一個10×10矩陣的卷積乘積。目前,如果我輸入一個評估點,代碼就沒有問題。但是多個評估點不起作用。謝謝! – RomainD 2013-04-10 11:24:09

回答

0

我不知道我理解你試圖計算, 什麼,但如果你要評估MyConvolve(Integrand,s), 其中s通吃值SomeMatrix, 然後apply就足夠了。

sapply(SomeMatrix, function(s) MyConvolve(Integrand, s)$value) 

但是,矩陣的尺寸丟失了。 如下您可以恢復它們:

result <- SomeMatrix 
result[] <- sapply(SomeMatrix, function(s) MyConvolve(Integrand, s)$value) 
+0

感謝文森特,這似乎是我一直在尋找的!我嘗試了幾種方法進行補救,但無法做到。如果我遇到一些(意外)問題,我會通知你。祝你有美好的一天! – RomainD 2013-04-10 12:12:20