r - 在 R 中 optim 不会返回函数的最大值并且 uniroot 返回错误的值

标签 r

功能是:

f1 = function(x) {
  -1.3 * (x-0.1)^2+0.5 * (x-0.1)^5
}
我试图找到区间 [-1, 1] 中的最大值。
优化函数返回正确的值:
optimize(f1, interval = c(-1, 1), maximum = T)
这给出了结果(这是正确的):
$maximum
[1] 0.09999769

$objective
[1] -6.942984e-12
然而,我被问到(这个问题是为了作业)使用 optim 和 uniroot。尝试使用优化:
optim(par = c(-1, 1), fn = f1)
导致此错误消息(无论我做什么都会发生这种情况):
Error in optim(par = c(-1, 1), fn = f1) : 
  objective function in optim evaluates to length 2 not 1
虽然 uniroot 给出了一个明显错误的答案:
uniroot(f1, lower = -1, upper = 1, f.lower = -1,  f.upper =1)
结果(明显错误):
$root
[1] 0.9998795

$f.root
[1] -0.7576706
那么这里的问题是什么?

最佳答案

你可以试试这个

> optim(0, f1, lower = -1, upper = 1, method = "L-BFGS-B", control = list(fnscale = -1))
$par
[1] 0.1

$value
[1] -4.806839e-26

$counts
function gradient
       5        5

$convergence
[1] 0

$message
[1] "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH"

关于r - 在 R 中 optim 不会返回函数的最大值并且 uniroot 返回错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67637865/

相关文章:

arrays - 在 R 中的 3 维数组上并行化嵌套 for 循环

r - 计算 R 中的重复测量差异

r - 影响 R 数据帧中的值而不检查索引是否为空

r - 数据参数如何通过 ggplot 传递?

c - R矩阵内存表示

r - data.table 什么时候保留列名?

html - 将 readHTMLTable 与多个 tbody 一起使用

r - 无法直接从源文件使用 grViz 生成图形

r - 在 lme4 中调整 object@pp$X

r - 由于更新,knitr 中出现不需要的清理(逃逸)