函数为正的范围

时间:2016-03-23 02:04:54

标签: r function

我有一个功能

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和lsig是两个参数,每个迭代都不同 我希望找到一个值为正的范围。

实际上,此功能始终为正,但如果非常接近零,则显示为零。

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

但我不知道如何从这个TRUE / FALSE向量中检索-11和-1。

其次,即使我知道如何操作,我也不知道每个案例的矢量(例如-12:10)应该有多宽。

1 个答案:

答案 0 :(得分:1)

这可能是圆的,但在我尝试的时候有效:

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

然后你可以做max(final)和min(final)来获得你的范围。