被积函数具有向量的总和

时间:2017-07-02 05:41:34

标签: r integral

我需要集成一个函数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

谢谢!

1 个答案:

答案 0 :(得分:0)

使用

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

说明:

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