2

我想列出一个函数列表,然后创建一个新函数,它是这些函数的产物。例如,我想制作功能(x-4i)^2i=1:50然后制作产品g=prod_i=1^50 (x-4i)^2。这样做之后,我想对产品功能进行积分。

要列出功能,我会:

f <- lapply(1:50, function(i){ force(i); function(x) {(x-4i)^2}})

然后我有一个我想要的所有功能的列表。我的问题是如何将产品作为功能?我尝试了很多方法,但它总是导致“无限递归”。有人可以帮我吗?

4

1 回答 1

1

首先x-4i有一个特殊的含义:它变成了一个复数。我怀疑你想使用x-4*i. 所以,

f <- lapply(1:50, function(i){ force(i); function(x) {(x-4*i)^2}})

要获得这些函数的乘积函数,您需要在相乘之前对它们进行评估:

fprod <- function(x) prod(sapply(f,function(y) y(x)))
fprod(0)
[1] 1.486445e+189
fprod(1)
[1] 1.394667e+188

要集成,您需要使用Vectorized 函数:

integrate(Vectorize(fprod),0,10)
6.328303e+188 with absolute error < 2.1e+181

但请注意,如此大的数字可能存在准确性问题。

于 2013-05-23T13:02:10.870 回答