被积函数有一个向量的总和

the integrand has the sum of a vector

我需要集成一个功能integrand。函数 integrand 是 A 和 B 的乘积。A = 2/(upper-lower)B 是取决于输入参数的向量之和。

如果我有

 X = 7, 
 N = 50, 
 Ck # a vector of N elements,
 uk # a vector of N elements, 
 upper = 10, 
 lower = -10

我的 R 代码如下:

   integrand<-function(y)
   {
     df<-matrix(,nrow = N,ncol = 1);

     res<-NA;

     for(k in 1:N)
       df[k]<-Ck[k]*cos(y-lower)*uk[k]

     res<-2/(upper-lower)*sum(df);

     return(res)

    }

   integrate(function(x){integrand(x)},upper=X,lower = lower)$value

我在 运行 代码后收到一条错误消息:

 Error in integrate(function(x) { : 
 evaluation of function gave a result of wrong length

我的错误是什么?

另外,如果df[k]<-Ck[k]*(cos(y-lower)*uk[k]),我可以把代码写成:

 integrand<-function(y)
  {
    df <-Ck*cos((y - lower)*uk)

    2 * sum(df) / (upper - lower)
  }

 integrate(Vectorize(integrand),upper=X,lower = lower)$value

谢谢!

使用

integrand <- function(y) {
  mat <- tcrossprod(Ck * uk, cos(y - lower))
  2 * colSums(mat) / (upper - lower)
}

解释:

如果您阅读函数 integrate 的文档,您会发现 f 必须是一个向量化函数(即您给它一个向量参数,它 returns 一个向量相同的长度)。