r语言 - 如果包含另一个向量,如何执行向量元素的总和



我在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 进行调试,我看到积分函数将向量传递给 f 函数。

我知道 v2 是一个向量,x 是一个向量。但是我目前不知道如何在没有警告的情况下完成这项工作。我试图将 Vectorize(x) 放在 sum 函数中,但警告仍然存在。

如何妥善处理这种情况?

这里其实有两个问题。首先是需要对函数进行矢量化。第二个是你的函数返回一个复数值(尽管参数是实数)。您可以使用elliptic包中的myintegrate(...)函数集成复杂的函数。

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

最新更新