我在 R 中有类似的代码,它会发出警告:
> require(pracma) # for integral
> v1 <- c(1, 2, 3, 4, 5) #some vector of unknown length
> v2 <- c(6, 7, 8, 9, 0) #another vector of the same length as v1
# Here I want to sum by v1 & v2 elements, but the sum contains x argument
> f <- function(x) x^(-2i) sum(v1 / (1 - v2 * x)^2)
> integral(f, 1e-12, 1)
49: In v2 * x : longer object length is not a multiple of shorter object length
50: In v1/(1 - v2 * x)^2 : longer object length is not a multiple of shorter object length
我使用R-studio进行调试,我看到 integral 函数将向量传递给 f 函数。
我知道 v2 是一个向量, x 是一个向量。但我目前不知道如何在没有警告的情况下完成这项工作。我曾尝试在 Vectorize(x) 函数中添加 sum ,但警告仍在此处。
如何妥善处理这种情况?
答案 0 :(得分:2)
这里实际上有两个问题。首先是需要对函数进行矢量化。第二个是你的函数返回一个复数值(尽管参数是真实的)。您可以使用myintegrate(...)
包中的elliptic
函数集成复杂函数。
library(elliptic)
v1 <- c(1, 2, 3, 4, 5)
v2 <- c(6, 7, 8, 9, 0)
f <- function(x) x^(-2i) * sum(v1 / (1 - v2 * x)^2)
g <- Vectorize(f)
myintegrate(g, 1e-12, 1)
# [1] -3173.272-8530.861i