R中的三重积分(如何指定域)

R中的三重积分(如何指定域),r,integral,R,Integral,我想计算R中三个变量函数的三重积分f(x,y,z)。我使用的是cubature软件包和函数adaptIntegrate()。被积函数仅在某个域中等于1(x我不知道cubature包,但可以通过重复应用base R的integrate函数进行一维积分来实现 f.xyz <- function(x, y, z) ifelse(x < y & y < z, 1, 0) f.yz <- Vectorize(function(y, z) integrate(f.xyz, 0

我想计算R中三个变量函数的三重积分
f(x,y,z)
。我使用的是
cubature
软件包和函数
adaptIntegrate()
。被积函数仅在某个域中等于1(
x我不知道
cubature
包,但可以通过重复应用base R的
integrate
函数进行一维积分来实现

f.xyz <- function(x, y, z) ifelse(x < y & y < z, 1, 0)
f.yz <- Vectorize(function(y, z) integrate(f.xyz, 0, 1, y=y, z=z)$value,
                  vectorize.args="y")
f.z <- Vectorize(function(z) integrate(f.yz, 0, 1, z=z)$value,
                 vectorize.args="z")

integrate(f.z, 0, 1)
# 0.1666632 with absolute error < 9.7e-05

f.xyz我不知道
cubature
软件包,但是你可以通过重复使用base R的
integrate
函数来实现一维积分

f.xyz <- function(x, y, z) ifelse(x < y & y < z, 1, 0)
f.yz <- Vectorize(function(y, z) integrate(f.xyz, 0, 1, y=y, z=z)$value,
                  vectorize.args="y")
f.z <- Vectorize(function(z) integrate(f.yz, 0, 1, z=z)$value,
                 vectorize.args="z")

integrate(f.z, 0, 1)
# 0.1666632 with absolute error < 9.7e-05

f.xyz在第一个函数中,返回值是错误的。它应该是
as.numeric(x在第一个函数中,返回值是错误的。它应该是
as.numeric(x域
0域
0伟大。使用
正确吗?是的。但在这里也是必要的。你不能在由
@Bhas组成的域中计算积分,我们能不使用“R”和使用普通的三重积分计算器来解决这个问题吗?很好。使用
正确吗?是的。但在这里也是必要的。你不能在由
@Bhas组成的域中计算一个积分,我们能不使用“R”和普通三重积分计算器解决这个问题吗?我们怎么能不使用“R”和普通三重积分计算器解决这个问题?我们怎么能不使用“R”和普通三重积分计算器解决这个问题计算器?R中是否有选项用于积分非单纯形区域的函数越界?R中是否有选项用于积分非单纯形区域的函数越界?
library(cubature)
lower <- rep(0,3)
upper <- rep(1,3)

# First implementation (modified)
fxyz <- function(w) {
    x <- w[1]
    y <- w[2]
    z <- w[3]
    as.numeric(x <= y)*as.numeric(y <= z)
}

adaptIntegrate(f=fxyz,lowerLimit=lower,upperLimit=upper,doChecking=TRUE,
          maxEval=2000000,absError=10e-5,tol=1e-5)
#$integral
#[1] 0.1664146
#$error
#[1] 0.0001851699
#$functionEvaluations
#[1] 2000031
#$returnCode
#[1] 0
library(SimplicialCubature)
f <- function(x) 1
S <- CanonicalSimplex(3)
> adaptIntegrateSimplex(function(x) 1, S)
$integral
[1] 0.1666667

$estAbsError
[1] 1.666667e-13

$functionEvaluations
[1] 55

$returnCode
[1] 0

$message
[1] "OK"
> SimplexVolume(S)
[1] 0.1666667