返回图形切割y坐标的所有x坐标

时间:2015-04-07 19:35:26

标签: r

我已经找到第一行定义函数:

f <- function(x) 3034*log(x)+2305.84*log(1-x)-1517*log(1-x)

现在我遇到的问题是我需要找到所有xf(x)=-1947.92但是我不知道这个命令是做什么的?

1 个答案:

答案 0 :(得分:1)

通常我会说你应该使用uniroot(),修改函数后在目标处返回零,但这会有问题:

target <- -1947.92
f <- function(x) 3034*log(x)+2305.84*log(1-x)-1517*log(1-x) 
g <- function(x) f(x)-target
uniroot(g,interval=c(1e-4,1-1e-4))
## Error in uniroot(g, interval = c(1e-04, 1 - 1e-04)) : 
##   f() values at end points not of opposite sign

正在进行的是你的曲线在两个地方过零。 uniroot()要求您括号根:

让我们来看看:

curve(g(x))
abline(h=0,col=2)

enter image description here

放大:

curve(g(x),from=0.75,to=0.85)
abline(h=0,col=2)

enter image description here

现在我们可以只关注这一点(即根据我们感兴趣的词根使用interval=c(1e-4,0.8)interval=c(0.8,1-1e-4))或找到

opt1 <- optim(g,par=0.5,method="L-BFGS-B",lower=1e-4,upper=1-1e-4,
              control=list(fnscale=-1))  ## maximize rather than min

然后使用opt1$par作为切入点。 (或者你可以做一些简单的微积分:最大[导数wrt x为零的点]比根更容易计算...)

或者,您可以ask Wolfram Alpha ...