在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:

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"

最新更新