當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R nlm 非線性最小化


R語言 nlm 位於 stats 包(package)。

說明

該函數使用Newton-type 算法執行函數f 的最小化。詳細信息請參閱引用。

用法

nlm(f, p, ..., hessian = FALSE, typsize = rep(1, length(p)),
    fscale = 1, print.level = 0, ndigit = 12, gradtol = 1e-6,
    stepmax = max(1000 * sqrt(sum((p/typsize)^2)), 1000),
    steptol = 1e-6, iterlim = 100, check.analyticals = TRUE)

參數

f

要最小化的函數,返回單個數值。這應該是一個函數,第一個參數是 p 長度的向量,後跟 ... 參數指定的任何其他參數。

如果函數值具有名為gradient 的屬性或同時具有gradienthessian 屬性,則這些屬性將用於計算更新的參數值。否則,使用數值導數。 deriv 返回具有合適的 gradient 屬性和可選的 hessian 屬性的函數。

p

最小化的起始參數值。

...

要傳遞給 f 的附加參數。

hessian

如果 TRUE ,則返回至少 f 的粗麻布矩陣。

typsize

每個參數的最小大小的估計。

fscale

f 的最小大小估計。

print.level

該參數決定了最小化過程中完成的打印級別。默認值 0 表示不進行打印,值 1 表示打印初始和最終詳細信息,值 2 表示打印完整跟蹤信息。

ndigit

函數 f 中的有效位數。

gradtol

一個正標量,給出了縮放梯度被認為足夠接近零以終止算法的容差。縮放梯度是 f 在每個方向 p[i] 的相對變化除以 p[i] 的相對變化的度量。

stepmax

給出最大允許縮放步長的正標量。 stepmax 用於防止導致優化函數溢出的步驟,防止算法離開參數空間中的感興趣區域,或檢測算法中的發散。 stepmax 將選擇足夠小以防止前兩次發生,但應大於任何預期的合理步驟。

steptol

提供最小允許相對步長的正標量。

iterlim

一個正整數,指定程序終止之前要執行的最大迭代次數。

check.analyticals

一個邏輯標量,指定是否應根據初始參數值處的數值導數檢查解析梯度和 Hessians(如果提供)。這可以幫助檢測錯誤製定的梯度或 Hessians。

細節

請注意,... 之後的參數必須完全匹配。

如果提供了漸變或粗麻布,但計算結果為錯誤的模式或長度,並且check.analyticals = TRUE(默認值)帶有警告,則它將被忽略。除非梯度存在並且通過健全性檢查,否則甚至不會檢查粗麻布。

“perturbed” cholesky 的 C 代碼,choldc()總共有一個錯誤R3.4.1之前的版本。

從原始來源中可用的三種方法中,我們始終使用方法“1”,即線搜索。

提供的函數應始終返回有限值(包括非 NA 和非 NaN )值:對於函數值本身,非有限值將被最大正值替換,並帶有警告。

包含以下組件的列表:

minimum

f 的估計最小值的值。

estimate

獲得f最小值的點。

gradient

f 估計最小值處的梯度。

hessian

估計最小值為 f 的粗麻布(如果需要)。

code

一個整數,指示優化過程終止的原因。

1:

相對梯度接近於零,當前迭代可能是解決方案。

2:

在容差範圍內連續迭代,當前迭代可能是解決方案。

3:

最後一個全局步驟未能找到低於 estimate 的點。 estimate 是函數的近似局部最小值,或者 steptol 太小。

4:

超出迭代限製。

5:

最大步長stepmax連續五次超過。或者該函數在下麵無界,從上麵在某個方向漸近到有限值,或者 stepmax 太小。

iterations

執行的迭代次數。

例子

f <- function(x) sum((x-1:length(x))^2)
nlm(f, c(10,10))
nlm(f, c(10,10), print.level = 2)
utils::str(nlm(f, c(5), hessian = TRUE))

f <- function(x, a) sum((x-a)^2)
nlm(f, c(10,10), a = c(3,5))
f <- function(x, a)
{
    res <- sum((x-a)^2)
    attr(res, "gradient") <- 2*(x-a)
    res
}
nlm(f, c(10,10), a = c(3,5))

## more examples, including the use of derivatives.
## Not run: demo(nlm)

來源

當前代碼由 Saikat DebRoy 和 R Core 團隊編寫,使用 Richard H. Jones 的 Fortran 代碼的 C 翻譯。

參考

Dennis, J. E. and Schnabel, R. B. (1983). Numerical Methods for Unconstrained Optimization and Nonlinear Equations. Prentice-Hall, Englewood Cliffs, NJ.

Schnabel, R. B., Koontz, J. E. and Weiss, B. E. (1985). A modular system of algorithms for unconstrained minimization. ACM Transactions on Mathematical Software, 11, 419-440. doi:10.1145/6187.6192.

也可以看看

optimnlminb

constrOptim 用於約束優化,optimize 用於一維最小化,uniroot 用於求根。 deriv 計算解析導數。

對於非線性回歸,nls 可能更好。

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Non-Linear Minimization。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。