计算整合

时间:2017-10-30 13:06:50

标签: r

这是我的integrand()

 integrand<-function(x,vecC)
  {
   as.numeric((2/(b-a))*vecC%*%as.matrix(cos((x-hat.a)
 *(seq(0,N-1,length=N)*pi/(b-a)))))
  }

它可以产生价值。例如,对于

 a<-1
 b<-10
 vecC<-t(as.matrix(rnorm(80)))
 hat.a<--1.2
 N<-80

我得到了

 > integrand(1.4,vecC)
 [1] -0.3635195

但是当我运行以下代码进行集成时,我遇到了问题

 > integrate(function(x){integrand(x,vecC)},upper = 3.4,lower = 1)$value

,错误消息是

  

集成错误(function(x){:       功能评估给出了错误长度的结果       另外:警告信息:       在(x - hat.a)*(seq(0,N - 1,长度= N)* pi /(b - a)):       较长的物体长度不是较短物体长度的倍数

1 个答案:

答案 0 :(得分:2)

如果您阅读了integrate的帮助页面,您会看到传递给integrate的函数应该返回一个向量。

因此,您的错误解决方案是使用Vectorize这样的解决方案 单独定义您的功能

 f <- function(x){integrand(x,vecC)}

现在定义此函数的矢量化版本,如此

 fv <- Vectorize(f,"x")

然后

integrate(fv,upper = 3.4,lower = 1)$value

会给你一个结果。