使用optim函数时对象丢失

时间:2014-03-17 05:27:01

标签: r mathematical-optimization

这是我第一次在R中使用optim函数,我在弄清楚我做错了什么时遇到了一些麻烦。

我想找到phi函数的最大值。我正在优化矢量C。

Phi <- function(C, mu, sigma, xbar, P, alpha){
  X <- xbar+ P%*%C
  return(mu %*% X - alpha * t(X) %*% sigma %*% X)
}

mu,sigma,xbar,P和alpha是预定义的标量,向量和矩阵。

phi函数的渐变是:

Gradient <- function(C, mu, sigma, xbar, P, alpha){
  X <- xbar+P%*%C
  n <- length(C)
  grad <- rep(0,n)
  for(j in 1:n){
    grad[j] <- mu - 2*alpha*t(X) %*% sigma
  }
  return(grad)
}

我尝试使用optim函数,如下所示:

results <- optim(par = start, fn = Phi, gr = Gradient, method = "CG")

“start”是具有相同C尺寸的预定义矢量。

但是,当我尝试运行optim函数时,出现以下错误:

> results <- optim(par = start, fn = Phi, gr = Gradient, method = "CG")
Error in xbar + P %*% C : 'xbar' is missing

我做错了什么?我很感激任何指导!提前谢谢。

编辑:我这样定义了我的起始向量 -

Start <- function(n){
  vector <- rep(1/n, n)
  return(vector)
}

start <- Start(length(mu)-1)

1 个答案:

答案 0 :(得分:1)

正如@Maciej正确陈述的那样,您有其他参数mu, sigma, xbar, P, alpha,这些参数已声明,但未提供给optim()调用。

要提供这些参数,可以使用省略号...,您可以使用name=value形式指定它们。

以下是如何优化带参数的函数的一个小例子:

f <- function(x, param) sum((x-param)^2)
optim(par=c(0,0,0), fn=f, param=1:3)
$par
[1] 1.000538 1.999985 2.999919

$value
[1] 2.966097e-07

$counts
function gradient 
     112       NA 

$convergence
[1] 0

$message
NULL