在函数“ uniroot()”或“ optimize()”中找到“ x”的最佳值?

时间:2018-06-19 21:03:49

标签: r function optimization solver

我想知道如何在下面的函数中解决x的问题?

我可以使用uniroot()optimize()吗?

这是我尝试过的方法(没有成功):

f <- function(x){ 
.8 - pt(qt(.05, df = x, lower = F)/sqrt(x + 1), df = x, ncp = .1*sqrt(x + 1), lower = F)
}

curve(f, 0, 30)

uniroot(f, c(0, 30))[[1]]

# Error in uniroot(f, c(0, 30)) : f.lower = f(lower) is NA
  In addition: Warning message:
  In qt(0.05, df = x, lower = F) : NaNs produced

1 个答案:

答案 0 :(得分:1)

(0)通常,uniroot()是查找根的正确工具;正如我在先前的回答中所说,将寻根问题转换为最小化问题会使其更加脆弱。

(1)f(0)NaN,这导致您的近端错误。

(2)uniroot(f,c(1e-8,30))给出

  端点上的

f()值不是相反的符号

因此,您要寻找的解决方案不存在于您要寻找的解决方案中;从curve()的结果中也可以清楚地看到这一点。

(3)uniroot(f,c(1e-8,30),extendInt="downX")(“ downX”表示uniroot正在寻找向下交叉的根)有效,其值为100.2549。如果您需要结果在(0,30]以内,则表示您不走运。