如果它包含另一个向量,如何执行向量元素的总和?

时间:2014-04-06 15:56:28

标签: r vector sum

我在 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 ,但警告仍在此处。

如何妥善处理这种情况?

1 个答案:

答案 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