首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >积分:积分可能是发散的。

积分:积分可能是发散的。
EN

Stack Overflow用户
提问于 2015-12-09 11:13:37
回答 2查看 7.6K关注 0票数 5

我正在使用integrate进行一些集成到一个循环中,我想出了一个错误,我无法理解,也无法摆脱。这是我可以提取的一种MWE:

代码语言:javascript
复制
u_min = 0.06911363
u_max = 1.011011 
m = 0.06990648
s = 0.001092265
integrate(f = function(v){pnorm(v, mean = m, sd = s, lower.tail =  FALSE)}, u_min, u_max)

这将返回一个错误“integrale可能发散”,这显然是假的。我尝试修改一些参数,并使其工作起来,例如:

代码语言:javascript
复制
u_min <- 0.07
u_max <- 1.1
m <- 0.0699
s <- 0.00109
integrate(f = function(v){pnorm(v, mean = m, sd = s, lower.tail =  FALSE)}, u_min, u_max)

我试着用integrate查看debug函数,但它是C代码的包装器。我也不是正交技术的专家。我看到了这个SO post,但无法从中得到任何东西。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-09 15:28:09

.Machine$double.eps^0.25的默认公差(= 0.0001220703)需要降低。例如,尝试如下:

代码语言:javascript
复制
f <- function(v) pnorm(v, mean = m, sd = s, lower.tail =  FALSE)
integrate(f, u_min, u_max, rel.tol = 1e-15)

## 0.0009421867 with absolute error < 1.1e-17
票数 5
EN

Stack Overflow用户

发布于 2015-12-09 11:40:48

我会用这个方法:

代码语言:javascript
复制
integrate(f = function(v){pnorm(v, mean = m, sd = s, lower.tail =  FALSE)}, 
      max(u_min,m-10*s),min(u_max,m+10*s))$value  + (u_min-m+10*s)*(u_min<m+10*s)

我所做的:

  • pnormlower.tail=FALSE在离平均值很远的地方基本上是零。因此,“拉伸”积分的正确极限是没有意义的。所以,当u_max > m+10*s时,您只需集成到m + 10*s。当然,您可以更改10因子以增加精度;
  • 另一方面,左边的pnorm基本上总是1;所以您可以增强左限值,缺少的部分就是u_min - m+10*s。和上面一样的逻辑。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34177392

复制
相关文章

相似问题

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