三重积分计算与R

4

这是我第一次使用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

有人能给我提示如何解决这个问题吗?提前感谢。


它们分别是 x 和 y 的函数。 - Elena
1个回答

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

非常感谢!我设置了那些最大和最小值,因为我的意图是在负无穷和正无穷之间进行集成。 - Elena
@Elena,这个软件包内部使用的一些函数,例如.tensor()和.save2list(),计算出的值不会被评估,从而导致错误。您可以在这里查看源代码: https://github.com/cran/pracma/blob/master/R/integral2.R(integral2() 是由 integral3() 调用的)。 - Katia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接