我试图在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
我尝试了upper
和lower
限制的几个值,但R
给出了相同的错误。我的问题是,如何找到正确的upper
和lower
值?谢谢你的帮助。
我不认为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
-对象的全局环境中拉进来的。由于您还没有真正解释正在解决的问题,因此很难判断该解决方案是否对您有很大价值,但也许它将提供一个您可以使用的解决方案。