MATLAB Function Reference |
Syntax
x = fminsearch(fun,x0) x = fminsearch(fun,x0,options) x = fminsearch(fun,x0,options,P1,P2,...) [x,fval] = fminsearch(...) [x,fval,exitflag] = fminsearch(...) [x,fval,exitflag,output] = fminsearch(...)
Description
fminsearch 從一個初始估量開始,找有多個變數函數的最小值。它們通常被稱為 自然非線性最佳化(unconstrained nonlinear optimization)。
從 x =
fminsearch(fun,x0)
x0
開始,然後在 fun
敘述函數的 x
找局部最小值。x0
可以是一個純量、向量或是矩陣。
以定義在結構 x =
fminsearch(fun,x0,options)
options
裡的最佳化參數做最小化的動作。
你可以用 optimset
函數定義這些參數。
fminsearch
使用下列 options
結構欄位:
Display |
顯示的等級。'off' 不顯示輸入;'iter' 在每次重複(iteration)時顯示輸出;'final ' 只顯示最後結果;'notify' (預設) 只在函數不收斂時顯示輸出。 |
MaxFunEvals |
允許函數求值的最多次數。 |
MaxIter |
允許重複(iteration)的最多次數。 |
TolX |
x 的終結容忍度。 |
直接傳問題相關的參數 x =
fminsearch(fun,x0,options,P1,P2,...)
P1
、P2
、etc.到 fun
函數。如果沒有設定選項,用 options = []
當作欄位保留。
[x,fval] = fminsearch(...)
傳回目標函數 fun
在解答 x
這一點的值 fval
。
[x,fval,exitflag] = fminsearch(...)
傳回描述 fminsearch 跳出狀態的值 exitflag
:
>0 |
表示函數收斂到解答 x 。 |
0 |
表示到達函數計算次數的最大值。 |
<0 |
表示函數沒有收斂。 |
[x,fval,exitflag,output] = fminsearch(...)
傳回一個包含最佳化資訊的結構 output
:
output.algorithm |
使用的函數 |
output.funcCount |
函數計算的次數 |
output.iterations |
重複(iteration)的次數 |
Arguments
fun
是要最小化的函數。fun
接受一個純量 x
然後傳回一個純量 f
,目標函數在 x
做計算。函數 fun
可以當作函數處理定義。
x = fminsearch(@myfun,x0,A,b)
function f = myfun(x) f = ... % Compute function value at x
x = fminsearch(inline('sin(x*x)'),x0,A,b);
Examples
Rosenbrock banana function 是多維最小化的經典測試範例
在 (1,1)
有最小值而值是 0
。傳統的起始點是 (-1.2,1)
。M-檔 banana.m
定義上面的函數。
function f = banana(x)
f = 100*(x
(2)-x(1)^2)^2+(1-x(1))^2;
[x,
fval] = fminsearch(@banana,
[-1.2,
1])
x = 1.0000 1.0000 fval = 8.1777e-010
增加第二個參數到 banana.m
,使最小點位置移到點 [a,a^2]
。
function f = banana(x,
a) if nargin < 2,
a = 1; end f = 100*(
x(2)-x(1)^2)^2+(a-x(1))^2;
[x,fval] = fminsearch(@banana, [-1.2, 1], ... optimset('TolX',1e-8), sqrt(2));
設定新的參數到 sqrt(2)
,以比預設更高的精確度在 x
尋找最小值。
Algorithm
fminsearch 使用單純的找尋方法 [1]。這是一個不使用數值或分析梯度的找尋方法。
如果 n
長度是 x
,單純的 n
-維空間可以用它的 n+1
個不同的向量描述。在二度空間, simplex 是三角形;在三度空間,它是三角錐。在尋找的每一步,會產生在現在 simplex 之內或很接近的新點。在新點的函數值會和在 simplex 的函數值比較,通常,其中一個點會被新的點取代,產生新的單字 simplex。這個步驟會一直重複直到 simplex 的直徑小於定義的容忍度。
Limitations
fminsearch can 通常不連續地處理,尤其是它不是在解答附近發生的話。fminsearch may 只給局部最小。
fminsearch 只最小化實數,就是說,x 必須只包含實數且 f(x) 必須只回傳實數。當 x 有複數變數時,它們必須被分開成實部和虛部。
See Also
fminbnd
, optimset
, function_handle
(@), inline
References
Lagarias, J.C., J. A. Reeds, M. H. Wright, and P. E. Wright, "Convergence Properties of the Nelder-Mead Simplex Method in Low Dimensions," SIAM Journal of Optimization, Vol. 9 Number 1, pp. 112-147, 1998.
fmins | fopen |