被积函数有一个向量的总和
the integrand has the sum of a vector
我需要集成一个功能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
谢谢!
使用
integrand <- function(y) {
mat <- tcrossprod(Ck * uk, cos(y - lower))
2 * colSums(mat) / (upper - lower)
}
解释:
如果您阅读函数 integrate
的文档,您会发现 f
必须是一个向量化函数(即您给它一个向量参数,它 returns 一个向量相同的长度)。
我需要集成一个功能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
谢谢!
使用
integrand <- function(y) {
mat <- tcrossprod(Ck * uk, cos(y - lower))
2 * colSums(mat) / (upper - lower)
}
解释:
如果您阅读函数 integrate
的文档,您会发现 f
必须是一个向量化函数(即您给它一个向量参数,它 returns 一个向量相同的长度)。