我试图在rootSolve包中使用uniroot.all来查找(非多项式)函数的根(可能是多个)。在测试案例中,即使标准uniroot确实找到了根,uniroot.all也找不到我可以在函数图中清楚看到的根。
我尝试将搜索间隔的数量增加到1,000或10,000,并将maxiter增加到10,000,但没有成功。
这是一些示例代码(我将一些实际上由其他函数生成的值硬编码了):
deriv_prob_bin_dbg <- function(mu, n){
bincut_frac <- c(0, 0.8485, 0.8676, 0.9031, 0.9306, 0.9409, 1)
bincutoffs <- n*bincut_frac
induced_p <- c()
for(b in 2:length(bincutoffs)){
x_lo <- bincutoffs[b-1]
x_hi <- bincutoffs[b]
p <- 0
if(ceiling(x_lo) <= floor(x_hi)) {
x_vec <- ceiling(x_lo):floor(x_hi)
p_vec <- sapply(x_vec, function(x) x*(mu^(x-1))*(1-mu)^(n-x) - (n-x)*(mu^x)*((1-mu)^(n-x-1)))
p <- sum(p_vec)
}
induced_p <- c(induced_p, p)
}
return(induced_p)
}
deriv_exp_reward_dbg <- function(mu, n){
prob_vec <- deriv_prob_bin_dbg(mu, n)
exp_rwd_vec <- 5915.031*prob_vec
return(sum(exp_rwd_vec))
}
foc_dbg <- function(mu) {
0.9 + 0.5*deriv_exp_reward_dbg(mu, 99)
}
plot((1200:1300)/10000, sapply((1200:1300)/10000, foc_dbg))
roots_good <- uniroot(foc_dbg, c(0.12,0.14))
roots_good
roots_bad <- uniroot.all(foc_dbg, c(0.12,0.14))
roots_bad
我希望这组特定值的根约为uniroot找到的〜0.123,但我得到的是numeric(0)(即找不到根)。
在此先感谢您的帮助!