Uniroot Upper and Lower values in R



我试图在R中使用uniroot()找到以下问题的解决方案。

library(rootSolve)
set.seed(2)
y=rgamma(10,5,2)
myfun=function(y,t)as.numeric(integrate(function(x){ ((x^4) * exp(-x/2))/768 },0,upper=2)[1])-t
myfun(y, y)
final_fun=function(y)uniroot(myfun,c(-2, 2),tol=0.01,t=y)
final_fun(y)

但是,我得到以下错误:

Error in uniroot(myfun, c(-2, 2), tol = 0.01, t = y) : 
f() values at end points not of opposite sign 

我尝试了upperlower限制的几个值,但R给出了相同的错误。我的问题是,如何找到正确的upperlower值?谢谢你的帮助。

我不认为y=t参数会起作用,所以我通过使其成为一个变量的函数来不同地定义函数(因为y参数仅用于为该函数中的t提供值)。注意这个表达式是一个常量:

integrate(function(x){ ((x^4) * exp(-x/2))/768 },0,upper=2)
$   ----> 0.00366 with absolute error < 4.1e-1:
# So that gives the same result as what was written above, regardless of y values
myfun=function(y)as.numeric(integrate(function(x){ ((x^4) * exp(-x/2))/768 },0,upper=2)[1])-y
final_fun=function(y)uniroot(myfun,interval =c(-2, 2), tol=0.01)
final_fun(y)
#----------------------
$root
[1] 0.00366
$f.root
[1] -1.7e-16
$iter
[1] 2
$init.it
[1] NA
$estim.prec
[1] 0.005

我也不认为y值是从您创建的y-对象的全局环境中拉进来的。由于您还没有真正解释正在解决的问题,因此很难判断该解决方案是否对您有很大价值,但也许它将提供一个您可以使用的解决方案。

相关内容

  • 没有找到相关文章

最新更新