2016-03-23 36 views
0

我有一个函数范围,其中一个功能是正

function(y,mu=mu0,lsig=lsig0) { 
    res = exp(2*y)/(1+exp(y))^2 * 1/sqrt(2*pi)/exp(lsig) * exp(-(y-mu)^2/2/exp(lsig)^2) 
    return(res) 
} 

其中mu和L-SIG是针对每次迭代 不同的两个参数,我想找到一个范围,其中其值是正的。

实际上,这个函数总是正的,但是如果它非常接近于零,则显示为零。

mu0 = -6 
lsig0 = -2 

> fun1(-12:10) 
[1] 0.000000e+00 3.304189e-306 1.230744e-198 8.903329e-115 1.250678e-54 
[6] 3.409942e-18 1.802249e-05 1.840279e-16 3.597724e-51 1.315197e-109 
[11] 8.485366e-192 8.567881e-298 0.000000e+00 0.000000e+00 0.000000e+00 
[16] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 
[21] 0.000000e+00 0.000000e+00 0.000000e+00 

这里,使fun1为正的最小和最大整数分别为-11和-1。

首先,我可以尝试像

> fun1(-12:10) > 0 
[1] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE 
[14] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 

但我不知道如何检索-11和-1从这个TRUE/FALSE载体。其次,即使我知道如何做,我也不知道每种情况下矢量的宽度应该是多大(例如-12:10)。

回答

1

这可能是圆的,但有关工作时,我试了一下:

range.test=-12:10 
test.output = fun1(range.test) > 0 
output.values = which(test.output == TRUE) 
final = range.test[output.values] 

然后,您可以做MAX(最终)和分(最后一次),让您的范围。