Uniroot log(x)解决方案

时间:2017-10-18 20:34:26

标签: r math

我想在R

中使用uniroot找到log(x)= x 2 - 2的根
f <- function(x)  (log(x)+2-x^2)
uniroot(f, lower=0, upper=100000000)$root

但这显示错误

  

uniroot错误(f,lower = 0,upper = 1e + 08):结束时的f()值   不符号的点

1 个答案:

答案 0 :(得分:2)

uniroot需要一个间隔,其中函数在两个端点处具有相反的符号(因为它使用二分法的变体)。当你不知道在哪里看时,做一个快速的情节并不是一个坏主意:

f <- function(x)  (log(x)+2-x^2)
x <- seq(0.0,4,0.01)
y <- f(x)
plot(x,y,ylim = c(-1,1),type = "l")
abline(h=0)

这会产生:

enter image description here

从这里你可以看到有两个根,一个在0和1之间,一个在1和2之间:

uniroot(f,interval = c(0,1))$root  #returns 0.1379346
uniroot(f,interval = c(1,2))$root  #returns 1.564445