我正在使用来自R2Cuba 1.1-0的cuhre来集成以下功能
fn <- function(x) {
pnorm((-2-sum(sqrt(vecRho)*x))/sqrt(1-sum(vecRho)))*prod(dnorm(x))
}
其中 vecRho 是一个介于0和0.1之间的6个数字的向量,即
vecRho<-runif(6,0,0.1)
根据定义,被积函数 fn 介于0和1之间。预期积分为正。但是,使用 cuhre 时,当 vecRho 的长度超过5时,结果将变为负数。
NDIM<-length(vecRho)
cuhre(NDIM, 1, fn,
flags = list(verbose =0),
lower = rep(-10,NDIM),
upper = rep(10,NDIM))$value
[1] -0.4738284
此外,当 vecRho 的长度> = 6时,随着 vecRho 的长度增加,积分的绝对值增加。
我有什么办法可以解决这个问题吗?谢谢!
答案 0 :(得分:0)
一些示例代码:
library(gaussquad)
n.quad <- 128 # integration order
# get the particular (weights,abscissas) as data frame
# with 2 observables and n.quad observations
rule <- ghermite.h.quadrature.rules(n.quad, mu = 0.0)[[n.quad]]
# test function - integrate 1 over exp(-x^2) from -Inf to Inf
# should get sqrt(pi) as an answer
f <- function(x) {
1.0
}
q <- ghermite.h.quadrature(f, rule)
print(q - sqrt(pi))