【问题标题】:How can I find a maximum to this equation我怎样才能找到这个方程的最大值
【发布时间】:2014-06-08 17:56:20
【问题描述】:

我有一个函数,我想找到它的最大值

deposit_likelood <- function(a1,a2) { (0.5672 - 0.092 * a1 + 0.0044 * a2^2 }

a1 should be between -3 and +3a2 should be between 0.5 and 0.9?

我尝试使用 optimize() 函数:

optimize(deposit_likelood, interval=c(-3,3,0.5,0.9), maximum=TRUE)

但我收到了这个错误:

Error in a2^2 : 'a2' is missing

【问题讨论】:

  • 您可以通过分析解决的简单问题。差异化?
  • 我明白这一点,但我想知道如何用 r 来做,这样我就可以使用这样的解决方案和语法来解决更复杂的问题。谢谢,Ron
  • 优化是一维的,所以 a2 被抛在后面。查看帮助(优化)
  • 另外,你的函数定义有一个 ( 和 no )。如图所示,它不是一个有效的 R 函数。
  • 如果优化是一维的,我还能用什么其他解决方案来解决这个问题?

标签: r optimization


【解决方案1】:

我希望你能从提示中自己解决这个问题(因为这通常是一种更好的学习方式),但你去吧。

请注意,我不得不更改函数,因为您的问题中没有有效的函数,并且还解包参数:

> 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分别是a1a2的值。 $convergence 代码零告诉您它工作正常。

【讨论】:

  • 非常感谢你,Spacedman。你详细而优雅的回答真的给了我很好的起点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-01
  • 2014-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多