作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要对以下内容进行数值积分:
我尝试使用 cubature
和 pracma
但它们似乎不支持功能集成限制。我发现尝试通过以下方式使用cubature
:
library(cubature)
integrand <- function(arg) {
x <- arg[1]
y <- arg[2]
z <- arg[3]
w <- arg[4]
v<- arg[5]
ff <- dnorm(x, 10,2)*dnorm(y, 10,2)*dnorm(z, 10,2)*dnorm(w, 10,2)* dnorm(v, 10,2)* (x+y+z+w+v<=52)
return(ff)
}
R <- cuhre(f = integrand,
lowerLimit=c(0,0,0,0,0),
upperLimit=c(20,20,20,20,20),
relTol = 1e-5, absTol= 1e-5)
但作者不保证这样做是正确的。
有没有办法在 R 中对具有函数极限的多个积分进行数值积分?
最佳答案
积分域是按因子 42 缩放的规范单纯形。要计算单纯形上的积分,请使用 SimplicialCubature
包:
integrand <- function(arg) {
x <- arg[1]
y <- arg[2]
z <- arg[3]
w <- arg[4]
v <- arg[5]
dnorm(x, 10, 2) *
dnorm(y, 10, 2) *
dnorm(z, 10, 2) *
dnorm(w, 10, 2) *
dnorm(v, 10, 2)
}
library(SimplicialCubature)
Simplex <- 42 * CanonicalSimplex(5)
这是要运行的命令:
adaptIntegrateSimplex(integrand, S = Simplex)
# $integral
# [1] 0.03252553
#
# $estAbsError
# [1] 0.3248119
#
# $functionEvaluations
# [1] 9792
#
# $returnCode
# [1] 1
#
# $message
# [1] "error: maxEvals exceeded - too many function evaluations"
算法已达到最大函数求值次数,估计绝对误差为0.3248119
,而积分估计值为0.03252553
。这是一个很大的错误。
我们可以增加允许的函数评估的最大数量。以1e6
为例,计算有点慢,我们得到:
adaptIntegrateSimplex(integrand, S = Simplex, maxEvals = 1e6)
# $integral
# [1] 0.03682535
#
# $estAbsError
# [1] 0.001004083
#
# $functionEvaluations
# [1] 999811
#
# $returnCode
# [1] 1
#
# $message
# [1] "error: maxEvals exceeded - too many function evaluations"
估计误差已降至 0.001004083
,相当好。
请注意,我们可以通过模拟来近似该积分,因为该积分是多元正态分布下单纯形的测度:
library(mvtnorm)
Sigma <- 2^2 * diag(5)
Mean <- rep(10, 5)
set.seed(666)
sims <- rmvnorm(1e6, mean = Mean, sigma = Sigma)
f <- function(X){ # test whether 0 < x < 42, 0 < x + y < 42, 0 < x + y + z < 42, ...
all(X > 0 & cumsum(X) < 42)
}
mean(apply(sims, 1, f))
# 0.037083
关于r - 极限内变量函数的多重积分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55145513/
如何限制 Realm 返回的对象数量? .findAll 返回匹配查询的所有行,而 .findFirst 只返回第一行。但是像前 1000 这样的东西呢? .findAll 可能会返回太多的行,以至于
SELECT * FROM table WHERE city LIKE example ORDER by RAND() Limit 10 我正在尝试从表中返回一些随机条目,但它在相当多的页面上被点击
我是一名优秀的程序员,十分优秀!