r - 如何在R中定义积分在一点的函数值?

标签 r integrate

我想计算以下二重积分,两个积分的下界 = -Inf,上限 = Inf。如何将 M=0 的函数值定义为零和/或忽略 M=0 上的数值积分? 它是一个密度函数,我想在计算概率时将 M=0 上的面积定义为零。

该函数可以在这里看到:

enter image description here

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")

enter image description here

另一种方法是让函数 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")

enter image description here

关于r - 如何在R中定义积分在一点的函数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37117529/

相关文章:

python - 使用 scipy.integrate.simps 进行集成

perforce - 我可以将 check out 的文件集成到perforce的其他分支中吗

javascript - 如何在 ruby​​ on Rails 中集成 arbor.js

r - R中的文件路径检查绝对和相对

R:使用 Gather() 来整理具有两个列标题的数据

python - 如何使用数组输入调用 python scipy quad

c - 对具有 n 个间隔的 a 和 b 之间的函数进行积分

r - 使用 RMarkdown 在 html_document 中使用 tikz

r - 如何使用 Torque/MOAB 调度程序设置 doSNOW 和 SOCK 集群?

r - 如何将 R 中的字符串中的连续整数组合在一起?