在函数中寻找 'x' 的最佳值:'uniroot()' 或 'optimize()'?
Finding the best value for 'x' in a function: 'uniroot()' or 'optimize()'?
我想知道如何最好地解决我下面的函数中的 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
(0) 一般来说,uniroot()
是正确的求根工具;正如我在之前的回答中所说,将寻根问题转换为最小化问题会使它更加脆弱。
(1) f(0)
是 NaN
,这会导致您的近端错误。
(2) uniroot(f,c(1e-8,30))
给出
f() values at end points not of opposite sign
所以您要查找的解决方案在您查找的范围内不存在; curve()
.
的结果也清楚地表明了这一点
(3) uniroot(f,c(1e-8,30),extendInt="downX")
("downX" 表示 uniroot 正在寻找向下交叉的根)有效,给出的值为 100.2549。如果您需要结果在 (0,30) 范围内,那您就不走运了。
我想知道如何最好地解决我下面的函数中的 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
(0) 一般来说,uniroot()
是正确的求根工具;正如我在之前的回答中所说,将寻根问题转换为最小化问题会使它更加脆弱。
(1) f(0)
是 NaN
,这会导致您的近端错误。
(2) uniroot(f,c(1e-8,30))
给出
f() values at end points not of opposite sign
所以您要查找的解决方案在您查找的范围内不存在; curve()
.
(3) uniroot(f,c(1e-8,30),extendInt="downX")
("downX" 表示 uniroot 正在寻找向下交叉的根)有效,给出的值为 100.2549。如果您需要结果在 (0,30) 范围内,那您就不走运了。