我有一个功能
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)应该有多宽。
答案 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)来获得你的范围。