这是我第一次在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)
答案 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