问题描述
我想用 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
,则积分计算正确。基于此,我认为我错误地指定了边界,但我相信我已经正确地遵循了函数文档中的说明。
谢谢
解决方法
尽管您的函数 zmin
、zmax
看起来很简单,但它们并未向量化。
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
我承认,对于具有多个变量的函数来说,向量化是什么意思有点令人困惑。