这是我的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错误信息是
(函数(x ){:函数(X)的求值给出了错误长度的结果:警告消息: In (x-hat.a)* (seq(0,n-1,length = N) * pi/(b - a)):较长的对象长度不是较短对象长度的倍数。
发布于 2017-10-30 13:22:56
如果您读取integrate的帮助页,您将看到传递给integrate的函数应该返回一个向量。
因此,解决您的错误的方法是像这样使用Vectorize,将您的函数分别定义为
f <- function(x){integrand(x,vecC)}现在定义此函数的向量化版本,如下所示
fv <- Vectorize(f,"x")然后
integrate(fv,upper = 3.4,lower = 1)$value会给你一个结果。
https://stackoverflow.com/questions/47016056
复制相似问题