2017-02-27 20 views
1

在幫助文件對於非線性函數minimiser stats::nlm它指出的參數f一個是(重點煤礦):如何向nlm提供梯度(或粗麻布)?

函數最小化,返回單個數值。這應該是一個函數,第一個參數是一個p長度的向量,後面是由......參數指定的任何其他參數。 如果函數值具有稱爲漸變的屬性或梯度屬性和hessian屬性都爲,則這些屬性將用於計算更新後的參數值。

這是否意味着梯度和粗麻布由相同的命令供給:

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代碼內部做沒有幫助。

回答

0

這裏有一個簡單的一維例子:

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] 3