我需要集成一个函数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
谢谢!
答案 0 :(得分:0)
使用
integrand <- function(y) {
mat <- tcrossprod(Ck * uk, cos(y - lower))
2 * colSums(mat) / (upper - lower)
}
说明:
如果你阅读了函数integrate
的文档,你会发现f
必须是一个向量化函数(即你给它一个向量参数并返回一个相同长度的向量)。