对不平等约束的优化

时间:2011-09-07 01:57:40

标签: r optimization constraints solver

我试图在R中使用optim()来解决lambda,如下式所示:

  

lambda / sigma ^ 2 - ln(lambda / sigma ^ 2)= 1 + 1 / Q

受约束:

  

lambda>西格马^ 2

我不确定如何在R中设置它。

我对替代优化程序也持开放态度,尽管方程似乎是凸的,因此optim应该是一个很好的选择。

谢谢!

2 个答案:

答案 0 :(得分:3)

你正试图解决一个等式。是否满足约束,只能事后决定。 您可以使用uniroot,如下所示

f <- function(x,sigma=1,Q=1) {x/sigma^2 - log(x/sigma^2) - 1 - 1/Q}
uniroot(f,c(1,5))

$root
[1] 3.146198

$f.root
[1] 3.552369e-06

$iter
[1] 5

$estim.prec
[1] 6.103516e-05

答案 1 :(得分:1)

决定这是一个答案而非评论。

optimoptimize都会使函数最小化,所以你要做的就是编写一个错误函数,返回给定的lambda(se(lambda, sigma^2, Q)的平方误差,确保你的lambda是第一个参数)。然后调用optim(f = se, lower = sigma^2, sigma^2, Q),它将返回最小化错误函数的lambda值。如果您有多个数据点(Q,sigma ^ 2对),则将您的函数设为平方误差的总和,或尝试使用nls()