在非线性最小函数stats::nlm的帮助文件中,它声明了参数之一f是(强调我的):
要最小化的函数,返回单个数值。这应该是一个带有第一个参数的函数,一个长度为p的向量,后面跟着由.论点。如果函数值有一个名为梯度的属性,或者同时具有梯度属性和属性,则这些属性将用于计算更新的参数值。
这是否意味着渐变和hessians由如下命令提供:
attr(f, 'gradient') <- function(...){...}这个功能的输入和输出应该是什么?
将此与通用优化器stats::optim进行对比
optim(par, fn, gr = NULL, ...,
method = c("Nelder-Mead", "BFGS", "CG", "L-BFGS-B", "SANN",
"Brent"), ...)其中梯度被显式地指定为optim的参数,例如,参见:how to propery specify a gradient function for use in optim() or other optimizer
检查nlm的代码内部没有帮助。
发布于 2017-11-03 17:19:08
下面是一个简单的一维示例:
f <- function(x) {
out <- -exp(-0.5 * x^2)
attr(out, 'gradient') <- -x * out
attr(out, 'hessian') <- (x^2 - 1) * out
return(out)
}
nlm(f, 1.3, hessian = TRUE, check.analyticals = TRUE)这意味着:
# $minimum
# [1] -1
#
# $estimate
# [1] 4.23687e-14
#
# $gradient
# [1] 4.23687e-14
#
# $hessian
# [,1]
# [1,] 1
#
# $code
# [1] 1
#
# $iterations
# [1] 3https://stackoverflow.com/questions/42497186
复制相似问题