这是我的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)): 较长的物体长度不是较短物体长度的倍数
答案 0 :(得分:2)
如果您阅读了integrate
的帮助页面,您会看到传递给integrate
的函数应该返回一个向量。
因此,您的错误解决方案是使用Vectorize
这样的解决方案
单独定义您的功能
f <- function(x){integrand(x,vecC)}
现在定义此函数的矢量化版本,如此
fv <- Vectorize(f,"x")
然后
integrate(fv,upper = 3.4,lower = 1)$value
会给你一个结果。