我有一个功能,我想找到它的最大值
deposit_likelood <- function(a1,a2) { (0.5672 - 0.092 * a1 + 0.0044 * a2^2 }
如何在a1 should be between -3 and +3
和a2 should be between 0.5 and 0.9
时最大化deposit_likelood
optimize(deposit_likelood, interval=c(-3,3,0.5,0.9), maximum=TRUE)
?
我尝试使用optimize()函数:
Error in a2^2 : 'a2' is missing
但是我收到了这个错误:
{{1}}
答案 0 :(得分:4)
我希望你能从暗示中为自己解决这个问题(因为这通常是一种更好的学习方法)但是你走了。
注意我必须更改函数,因为你的问题中没有有效的函数,还要解压缩参数:
> deposit_likelood = function(a) {a1=a[1];a2=a[2];return (0.5672 - 0.092 * a1 + 0.0044 * a2^2) }
我们给optim
一个起始点(在你的框约束中的某个地方),告诉它使用带有框约束的方法,并指定约束:
> optim(c(0,.7),deposit_likelood,method="L-BFGS-B",lower=c(-3,.5), upper=c(3,.9), control=list(fnscale=-1))
$par
[1] -3.0 0.9
$value
[1] 0.846764
$counts
function gradient
7 7
$convergence
[1] 0
$message
[1] "CONVERGENCE: NORM OF PROJECTED GRADIENT <= PGTOL"
返回值的$par
和a1
分别为a2
。 $convergence
代码零告诉您它工作正常。