首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何向nlm提供梯度(或恒心)?

如何向nlm提供梯度(或恒心)?
EN

Stack Overflow用户
提问于 2017-02-27 22:45:28
回答 1查看 899关注 0票数 2

在非线性最小函数stats::nlm的帮助文件中,它声明了参数之一f是(强调我的):

要最小化的函数,返回单个数值。这应该是一个带有第一个参数的函数,一个长度为p的向量,后面跟着由.论点。如果函数值有一个名为梯度的属性,或者同时具有梯度属性和属性,则这些属性将用于计算更新的参数值。

这是否意味着渐变和hessians由如下命令提供:

代码语言:javascript
复制
attr(f, 'gradient') <- function(...){...}

这个功能的输入和输出应该是什么?

将此与通用优化器stats::optim进行对比

代码语言:javascript
复制
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的代码内部没有帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-03 17:19:08

下面是一个简单的一维示例:

代码语言:javascript
复制
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)

这意味着:

代码语言:javascript
复制
# $minimum
# [1] -1
# 
# $estimate
# [1] 4.23687e-14
# 
# $gradient
# [1] 4.23687e-14
# 
# $hessian
# [,1]
# [1,]    1
# 
# $code
# [1] 1
# 
# $iterations
# [1] 3
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42497186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档