首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算积分

计算积分
EN

Stack Overflow用户
提问于 2017-10-30 13:06:49
回答 1查看 60关注 0票数 1

这是我的integrand()

代码语言:javascript
复制
 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)))))
  }

它能产生价值。例如,对于

代码语言:javascript
复制
 a<-1
 b<-10
 vecC<-t(as.matrix(rnorm(80)))
 hat.a<--1.2
 N<-80

我得到了

代码语言:javascript
复制
 > integrand(1.4,vecC)
 [1] -0.3635195

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

代码语言:javascript
复制
 > 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)):较长的对象长度不是较短对象长度的倍数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-30 13:22:56

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

因此,解决您的错误的方法是像这样使用Vectorize,将您的函数分别定义为

代码语言:javascript
复制
 f <- function(x){integrand(x,vecC)}

现在定义此函数的向量化版本,如下所示

代码语言:javascript
复制
 fv <- Vectorize(f,"x")

然后

代码语言:javascript
复制
integrate(fv,upper = 3.4,lower = 1)$value

会给你一个结果。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47016056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档