Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么uniroot()给出错误的结果?_R - Fatal编程技术网

为什么uniroot()给出错误的结果?

为什么uniroot()给出错误的结果?,r,R,fff的正确值介于0.0000085和0.0000086之间,但是为什么uniroot返回我0.0000000000001???请注意,uniroot的tol参数的默认值是tol=.Machine$double.eps^0.25-您得到的答案在这个公差范围内 还要注意,uniroot返回的对象包含错误估计: options(scipen=999) fff=function(x)588 * x * 1000000 - 5000 >uniroot(fff, lower=0.0000000000

fff的正确值介于0.0000085和0.0000086之间,但是为什么uniroot返回我0.0000000000001???

请注意,uniroot的tol参数的默认值是tol=.Machine$double.eps^0.25-您得到的答案在这个公差范围内

还要注意,uniroot返回的对象包含错误估计:

options(scipen=999)
fff=function(x)588 * x * 1000000 - 5000
>uniroot(fff, lower=0.0000000000001, upper=1, extendInt = "yes",maxiter = 1000000000)$root 
[1] 0.0000000000001


> fff(0.0000085)
[1] -2
> fff(0.0000086)
[1] 56.8
您可以显式设置tol并获得更好的答案:

> uniroot(fff, lower=0.0000000000001, upper=1, extendInt = "yes",maxiter = 1000000000)$estim.prec
[1] 0.00006103516

问题来自tol的配置,因为默认公差tol=.Machine$double.eps^0.25无法捕获所需结果的精度

换句话说,您需要提高分辨率,例如,可以通过设置tol=.Machine$double.eps来实现

> uniroot(fff, lower=0.0000000000001, upper=1, extendInt = "yes",maxiter = 1000000000, tol=0.0000001)$root
[1] 0.000008503401
r <- uniroot(
  fff,
  lower = 0.0000000000001,
  upper = 1,
  extendInt = "yes",
  maxiter = 1000000000,
  tol = .Machine$double.eps
)$root
> r
[1] 8.503401e-06

> fff(r)
[1] -9.094947e-13