不等式约束优化

发布于 2024-12-03 01:42:35 字数 280 浏览 2 评论 0原文

我尝试在 R 中使用 optim() 来求解以下方程中的 lambda:

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

受约束:

拉姆达>西格玛^2。

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

我也愿意接受替代优化例程,尽管方程看起来是凸的,因此 optim 应该是一个不错的选择。

谢谢你!

I am attempting to use optim() in R to solve for lambda in the following equation:

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

subject to constraint :

lambda > sigma^2.

I am not sure how one goes about setting up this in R.

I am open to alternative optimization routines as well although the equation seems convex and therefore optim should be a fine choice.

Thank you!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

惜醉颜 2024-12-10 01:42:35

您正在尝试解一个方程。是否满足约束只能事后决定。
您可以使用 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

You are trying to solve an equation. Whether or not the constraint is met, can only be decided ex post.
You can use uniroot as follows

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

giving

$root
[1] 3.146198

$f.root
[1] 3.552369e-06

$iter
[1] 5

$estim.prec
[1] 6.103516e-05
网白 2024-12-10 01:42:35

决定这更多的是一个答案而不是评论。

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

Decided this is more an answer than a comment.

Both optim and optimize minimize functions, so what you want to do is write an error function that returns, say, the squared error for a given lambda (se(lambda, sigma^2, Q), make sure your lambda is the first argument). Then call optim(f = se, lower = sigma^2, sigma^2, Q) and it will return the value of lambda that minimizes your error function. If you have multiple data points (Q, sigma^2 pairs) then make your function a sum of squared errors or try using nls().

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文