这是我第一次使用stackoverflow,所以请耐心等待我! 我正在使用R-package" pracma"计算三重积分。 这是我的代码:
mu1=0
mu2=0
mu3=0
mu4=0
sigma1=1
sigma2=1
sigma3=1
sigma4=1
f3=function(x,y,z){dnorm(z,mean = mu2,sd=sigma2)*dnorm(y,mean =
mu3,sd=sigma3)*(1-pnorm(z,mean= mu1,sd=sigma1))*dnorm(x,mean =
mu4,sd=sigma4)}
ymin=function(x){x}
zmin=function(x,y){y}
integral3(f3,xmin = -100,xmax = 100,ymin,ymax=100,zmin,zmax = 100)
但实际上,我得到以下错误:
Error in if (adjerr[1] > localtol) { :
missing value where TRUE/FALSE needed
有人能给我一个解决这个问题的暗示吗? 提前谢谢
答案 0 :(得分:0)
这是因为您设置的最大值和最小值。 在你的f3()函数中你用dnorm()操作,一旦你在[-8,8]区间之外就会很快达到0:
dnorm(0:20)
##[1] 3.989423e-01 2.419707e-01 5.399097e-02 4.431848e-03 1.338302e-04 1.486720e-06 6.075883e-09 9.134720e-12 5.052271e-15 1.027977e-18
##[11] 7.694599e-23 2.118819e-27 2.146384e-32 7.998828e-38 1.096607e-43 5.530710e-50 1.026163e-56 7.004182e-64 1.758750e-71 1.624636e-79
##[21] 5.520948e-88
如果对min和max参数使用一些合理的值,则该函数按预期工作:
library(pracma)
mu1=0
mu2=0
mu3=0
mu4=0
sigma1=1
sigma2=1
sigma3=1
sigma4=1
f3=function(x,y,z){dnorm(z,mean = mu2,sd=sigma2)*dnorm(y,mean =
mu3,sd=sigma3)*(1-pnorm(z,mean= mu1,sd=sigma1))*dnorm(x,mean =
mu4,sd=sigma4)}
xmin <- -10
xmax <- 10
ymin=function(x){x}
ymax <- 10
zmin=function(x,y){y}
zmax <- 10
integral3(f3, xmin, xmax ,ymin, xmax, zmin, zmax)
# [1] 0.04166667