我有两个高斯函数,我正在除以某些值,然后使用if-else语句和积分的结果值。由于两者都相当快地进入0,我最终得到0/0,其中R返回为NaN。这会在代码中产生错误。除了从Rmpfr那里获得更高的精确度之外,我想知道如何处理导致0/0或NaN的东西。
编辑:这是我正在使用的代码,以便更清晰
$npm install express --save
如果我跑:
parameters=c(1,1,2)
R<-function(params,z.){
params[2]*exp(-z.^2/(2*params[3]^2))
}
alpha<-function(params,z.,v.){
1/v.[2]*exp(-(z.-v.[1])^2/(2*v.[2]))
}
total.rel.alpha<-function(params,z.,u.){
final=0
species.number<-dim(u.)[1]
if(is.null(dim(u.))){
return(alpha(params,z.,u.)/R(params,z.))
}
for(i in 1:species.number){
final=final+alpha(params,z.,u.[i,])
}
return(final/R(params,z.))
}
Kz<-function(params,z.,v.,u.){
if(total.rel.alpha(params,z.,u.)>=0 & total.rel.alpha(params,z.,u.)<=1){
alpha(params,z.,v.)
}else if(total.rel.alpha(params,z.,u.)>1){
alpha(params,z.,v.)/total.rel.alpha(params,z.,u.)
}
}
K<-function(params,v.,u.){
integrate(Kz,-Inf,Inf,params=params,v.=v.,u.=u.)$value
}
我得到了
K(parameters, c(1,1), c(1,1))
我认为这是因为在尾巴中我得到的总数是0/0.al.alpha
答案 0 :(得分:2)
使用log(p1 / p2),其中p1和p2是所讨论的高斯密度。您将获得二次项加上其他一些东西的差异。
采用对数是处理非常小但非零概率值的标准方法。