积分:积分可能发散
Integrate: the integral is probably divergent
我正在使用 integrate
将一些集成到一个循环中,我想出了一个我无法理解的错误,也无法摆脱。这是我可以提取的 MWE:
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)
这 returns 一个错误 "the integrale is probably divergent" 这显然是错误的。我试着稍微修改一下参数并让它工作,例如:
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)
我试图用 debug
查看 integrate
函数,但它是 C
代码的包装器。我也不是正交技术专家。我看到了这个 SO post 但无法从中得到任何东西。
谢谢
我会使用这个解决方法:
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)
我做了什么:
pnorm
和 lower.tail=FALSE
在距离均值右侧很远时基本上为零。所以"stretching"积分的右极限没有意义。所以,当u_max > m+10*s
时,你就整合到m + 10*s
。您当然可以更改 10
因子以增加精度;
- 另一方面,左边
pnorm
基本上总是1;所以你可以增强左边的限制,缺少的部分只是u_min - m+10*s
。同上逻辑。
需要降低 .Machine$double.eps^0.25
(= 0.0001220703) 的默认公差。例如,试试这个:
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
我正在使用 integrate
将一些集成到一个循环中,我想出了一个我无法理解的错误,也无法摆脱。这是我可以提取的 MWE:
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)
这 returns 一个错误 "the integrale is probably divergent" 这显然是错误的。我试着稍微修改一下参数并让它工作,例如:
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)
我试图用 debug
查看 integrate
函数,但它是 C
代码的包装器。我也不是正交技术专家。我看到了这个 SO post 但无法从中得到任何东西。
谢谢
我会使用这个解决方法:
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)
我做了什么:
pnorm
和lower.tail=FALSE
在距离均值右侧很远时基本上为零。所以"stretching"积分的右极限没有意义。所以,当u_max > m+10*s
时,你就整合到m + 10*s
。您当然可以更改10
因子以增加精度;- 另一方面,左边
pnorm
基本上总是1;所以你可以增强左边的限制,缺少的部分只是u_min - m+10*s
。同上逻辑。
需要降低 .Machine$double.eps^0.25
(= 0.0001220703) 的默认公差。例如,试试这个:
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