我想在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()值 不符号的点
答案 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)
这会产生:
从这里你可以看到有两个根,一个在0和1之间,一个在1和2之间:
uniroot(f,interval = c(0,1))$root #returns 0.1379346
uniroot(f,interval = c(1,2))$root #returns 1.564445