10/30/2006

8.4 非線性函數求根法-fminbnd

FMINBND 非線性函數最小值


fminrnd之功能是在特定區間尋找單一變數之函數之最小值。其指令型式如下:

x = fminbnd(fun,x1,x2)
x = fminbnd(fun,x1,x2,options)
[x,fval,exitflag,output] = fminbnd(...)



上述指令fminbnd之功能在於針對函數fun,在設定的範圍x1<x<x2中找尋其最小值。其值置於左邊之x中,而函數之對應值則置於fval內。其中fun為函數之握把,或函數之名稱。若為函數名稱則須在名稱前加@符號。


>> X = fminbnd(@sin,3,4)

X =

3.9999


也可以使用匿名函數:

>> f = @(x)x.^3-2*x-5;
>> [x,f] = fminbnd(f, 0, 2)
x =
0.8165
f =
-6.0887

>> x = fminbnd(@(x) sin(x)+3,2,5)

x =

4.7124



在指令中之第四參數項options之參數則可利用optimset函數依下列參數進行設定:








Display顯示之層次:'off'不顯示;'iter'顯示每次回圈之結果; 'final' 只顯示最後結果;'notify' (預設) 若函數不收斂時顯示。
FunValCheck檢查目的函數是否正確,'on' 目標函數之結果為複數或 NaN時顯出警告;'off' 不顯示警告。
MaxFunEvals函數容許之最大值。
MaxIter容許最大迴圈數。
OutputFcn指出使用者設定之呼叫定義函數。
TolX x值之容許度。


上述參數之設定可利用optimset函數,例如:

>> [X,FVAL,EXITFLAG] = fminbnd(@cos,3,4,optimset('TolX',1e-12,'Display','off'))

X =
3.1416
FVAL =
-1
EXITFLAG =
1


輸出之第三參數為運算之狀態,與fzero中之第三參數相同:






1fminbnd指令依據TolX收斂至x。
0最大迴圈數。
-1由 output函數決定終止。
-2邊界不符合 (x1 > x2)。


輸出之第四項為OUTPUT,其內容如下:






output.algorithm使用之運算法
output.funcCount函數計算之次數
output.iterations迴圈之次數
output.message離開信息