2013-04-10 44 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