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


R optimize 一維優化


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

說明

函數optimizelowerupper 的區間中搜索函數f 相對於其第一個參數的最小值或最大值。

optimiseoptimize 的別名。

用法

optimize(f, interval, ..., lower = min(interval), upper = max(interval),
         maximum = FALSE,
         tol = .Machine$double.eps^0.25)
optimise(f, interval, ..., lower = min(interval), upper = max(interval),
         maximum = FALSE,
         tol = .Machine$double.eps^0.25)

參數

f

待優化的函數。該函數在其第一個參數上最小化或最大化,具體取決於 maximum 的值。

interval

包含要搜索最小值的區間end-points的向量。

...

要傳遞給 f 的其他命名或未命名參數。

lower

要搜索的區間的下端點。

upper

要搜索的區間的上端點。

maximum

合乎邏輯的。我們應該最大化還是最小化(默認)?

tol

所需的精度。

細節

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

所使用的方法是黃金分割搜索和連續拋物線插值的組合,並且被設計用於連續函數。收斂速度永遠不會比斐波那契搜索慢很多。如果 f 具有最小為正的連續二階導數(不在 lowerupper 處),則收斂是超線性的,通常約為 1.324。

函數f永遠不會在距離更近的兩個點處進行評估 ,其中 大約是sqrt(.Machine$double.eps) 是最後的橫坐標optimize()$minimum.
如果f是一個單峰函數,計算值是f當至少分開時總是單峰 , 然後 近似全局最小值的橫坐標f在區間lower,upper誤差小於 .
如果f不是單峰的,那麽optimize()可以近似局部的(但可能是非全局的)最小值到相同的精度。

f 的第一次評估始終在 ,其中(a,b) = (lower, upper) 是黃金分割比。幾乎總是,第二次評估位於 。請注意,即使 f 在那裏恒定,也會找到 內的局部最小值作為解決方案,請參見最後一個示例。

f將被稱為f(x, ...)對於數值x.

傳遞給 f 的參數具有特殊語義,用於在調用之間共享。該函數不應該複製它。

包含組件 minimum (或 maximum )和 objective 的列表,它們給出最小值(或最大值)的位置以及該點的函數值。

例子

require(graphics)

f <- function (x, a) (x - a)^2
xmin <- optimize(f, c(0, 1), tol = 0.0001, a = 1/3)
xmin

## See where the function is evaluated:
optimize(function(x) x^2*(print(x)-1), lower = 0, upper = 10)

## "wrong" solution with unlucky interval and piecewise constant f():
f  <- function(x) ifelse(x > -1, ifelse(x < 4, exp(-1/abs(x - 1)), 10), 10)
fp <- function(x) { print(x); f(x) }

plot(f, -2,5, ylim = 0:1, col = 2)
optimize(fp, c(-4, 20))   # doesn't see the minimum
optimize(fp, c(-7, 20))   # ok

來源

基於參考文獻中給出的 Algol 60 過程 localmin 的 Fortran 代碼 https://netlib.org/fmm/fmin.f(作者未說明)的 C 翻譯。

參考

Brent, R. (1973) Algorithms for Minimization without Derivatives. Englewood Cliffs N.J.: Prentice-Hall.

也可以看看

nlmuniroot

相關用法


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