r - 在 R 中,optim 不会返回函数的最大值,并且 uniroot 返回错误的值
问题描述
功能是:
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"
推荐阅读
- c++ - 为什么我想在一个函数中锁定两个互斥锁 - 延迟锁定也是如此?
- nlp - 确保编码器-解码器文本生成深度学习模型中存在单词/标记/名词
- r - 在临时目录中读/写时出错(在 R-studio 中使用 arulesSequences)
- vue.js - b卡标题中的数据绑定
- javascript - 仅具有特定字段的数组解构+扩展语法?
- python - 从表单输入中删除特定字母
- angularjs - Angular返回未定义的值
- c# - 比较两个字符串数组并返回相同的值
- python - Python:FQDN 像 `hostname --fqdn`?
- javascript - 为什么我不能在 package.json 脚本中设置环境值