我想计算以下二重积分,两个积分的下界 = -Inf,上限 = Inf。如何将 M=0 的函数值定义为零和/或忽略 M=0 上的数值积分? 它是一个密度函数,我想在计算概率时将 M=0 上的面积定义为零。
该函数可以在这里看到:
R 代码在这里,可以看到由于我的问题而出现的“跳转”:
mum<-5.16
mub<-1.5
mur<-2.764
sm<-3.37
sb<-0.2
sr<-0.056
dk<-function(k){
integrate(function(r) {
sapply(r, function(r) {
1/(2*pi*sr^2)^0.5*exp(-(r-mur)^2/(2*sr^2))*integrate(function(m) {1/(abs(m)*2*pi*sm*sb)*exp(-(m-mum)^2/(2*sm^2)-((k-r)/m-mub)^2/(2*sb^2))},lower=Inf, upper=Inf)$value
})
}, lower=Inf, upper=Inf)$value
}
curve(sapply(x,dk), from=-2, to=18, lwd=2,col="red")
最佳答案
一种方法是简单地不在其值无效的值处评估函数 dk,例如:
mum<-5.16
mub<-1.5
mur<-2.764
sm<-3.37
sb<-0.2
sr<-0.056
dk<-function(k){
integrate(function(r) {
sapply(r, function(r) {
1/(2*pi*sr^2)^0.5*exp(-(r-mur)^2/(2*sr^2))*integrate(function(m) {1/(abs(m)*2*pi*sm*sb)*exp(-(m-mum)^2/(2*sm^2)-((k-r)/m-mub)^2/(2*sb^2))}, lower=Inf, upper=Inf)$value
})
}, lower=Inf, upper=Inf)$value
}
x <- c(seq(-2,-0.1, by=0.2), seq(0.1,18,by=0.2))
y <- sapply(x,dk)
plot(y~x, type="l", col="red")
另一种方法是让函数 dk 在函数失败的值处返回 NA,例如
dk<-function(k){
if ((k-mur)<0.4 & (k-mur)>-0.4) NA
else {
integrate(function(r) {
sapply(r, function(r) {
1/(2*pi*sr^2)^0.5*exp(-(r-mur)^2/(2*sr^2))*integrate(function(m) {1/(abs(m)*2*pi*sm*sb)*exp(-(m-mum)^2/(2*sm^2)-((k-r)/m-mub)^2/(2*sb^2))}, lower=Inf, upper=Inf)$value
})
}, lower=Inf, upper=Inf)$value
}
}
curve(sapply(x,dk), from=-2, to=18, lwd=2,col="red")
关于r - 如何在R中定义积分在一点的函数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37117529/