来自 pracma 包的integral3的R错误

问题描述

我想用 integral3 包中的 pracma 求解一个简单的 3d 积分:

library(pracma)

W <- function(x,y,z){
  x + y + z
}

ymin <- function(x) x
zmin <- function(x,y) x
zmax <- function(x,y) y

integral3(W,xmin = 0,xmax = 1,ymin = ymin,ymax = 1,zmin = zmin,zmax = zmax)

这会生成错误消息:Error in onevec %*% bottom + t %*% dydt : non-conformable arrays。这应该是要整合的有效区域,但我已经确定该错误是由我的 zmin 参数引起的。如果我用上面的 0 替换 zmin,则积分计算正确。基于此,我认为我错误地指定了边界,但我相信我已经正确地遵循了函数文档中的说明。

谢谢

解决方法

尽管您的函数 zminzmax 看起来很简单,但它们并未向量化。

W <- function(x,y,z) x + y + z

ymin <- function(x) x
zmin <- function(x,y) rep(x,length(y))
zmax <- function(x,y) rep(y,length(x))

integral3(W,xmin = 0,xmax = 1,ymin = ymin,ymax = 1,zmin = zmin,zmax = zmax)
## [1] 0.25

我承认,对于具有多个变量的函数来说,向量化是什么意思有点令人困惑。