тройной интегральный расчет с R - PullRequest
0 голосов
/ 18 мая 2018

Это мой первый раз в стеке, поэтому, пожалуйста, будьте терпеливы со мной!Я использую R-пакет "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

Может кто-нибудь дать мне подсказку, чтобы решить эту проблему?Заранее благодарен

1 Ответ

0 голосов
/ 18 мая 2018

Это происходит из-за установленных вами максимальных и минимальных значений.В вашей функции f3 () вы работаете с dnorm (), который очень быстро достигает 0, когда вы выходите за пределы интервала [-8,8]:

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
...