uniroot.all找不到uniroot找到的根

时间:2019-07-11 22:20:06

标签: r

我试图在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)(即找不到根)。

在此先感谢您的帮助!

0 个答案:

没有答案