日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Matlab优化函数中options选项的修改

發(fā)布時間:2025/4/16 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Matlab优化函数中options选项的修改 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

關于非線性優(yōu)化fminbnd函數(shù)的說明(僅供新手參考)
初學matlab優(yōu)化,迭代中止后,經(jīng)常一頭霧水。參看幫助后仍似懂非懂。下面關于fminbnd函數(shù)的說明(也可作為fmincon函數(shù)的參考)對于新手也許會有幫助,不當之處請指正。
目標函數(shù)fun:

需要最小化的目標函數(shù)。fun函數(shù)需要輸入標量參數(shù)x,返回x處的目標函數(shù)標量值f。可以將fun函數(shù)指定為命令行,如
x = fminbnd(inline('sin(x*x)'),x0)
同樣,fun參數(shù)可以是一個包含函數(shù)名的字符串。對應的函數(shù)可以是M文件、內部函數(shù)或MEX文件。若fun='myfun',則M文件函數(shù)myfun.m
有下面的形式
function f = myfun(x)
??f = ...? ?? ?? ?? ?%計算x處的函數(shù)值。
若fun函數(shù)的梯度可以算得,且options.GradObj設為'on'(用下式設定),
options = optimset('GradObj','on')
則fun函數(shù)必須返回解x處的梯度向量g到第二個輸出變量中去。注意,當被調用的fun函數(shù)只需要一個輸出變量時(如算法只需要目標函數(shù)的值而不需要其梯度值時),可以通過核對nargout的值來避免計算梯度值。
function [f,g] = myfun(x)
f = ...? ?? ?? ? %計算x處得函數(shù)值。
if nargout > 1? ?%調用fun函數(shù)并要求有兩個輸出變量。
g = ...? ?? ? %計算x處的梯度值
end

若Hessian矩陣也可以求得,并且options.Hessian設為'on',即,
options = optimset('Hessian','on')
則fun函數(shù)必須返回解x處的Hessian對稱矩陣H到第三個輸出變量中去。注意,當被調用的fun函數(shù)只需要一個或兩個輸出變量時(如算法只需要目標函數(shù)的值f和梯度值g而不需要Hessian矩陣H時),可以通過核對nargout的值來避免計算Hessian矩陣
function [f,g,H] = myfun(x)
f = ...? ???% 計算x處得函數(shù)值。
if nargout > 1? ?% 調用fun函數(shù)并要求有兩個輸出變量。
g = ...? ? % 計算x處的梯度值。
? ?if nargout > 2
? ?H = ...? ? % 計算x處的Hessian矩陣。
End

優(yōu)化參數(shù)選項options:
? ?? ???可以通過optimset函數(shù)設置或改變這些參數(shù)。其中有的參數(shù)適用于所有的優(yōu)化算法,有的則只適用于大型優(yōu)化問題,另外一些則只適用于中型問題。
? ?? ?首先描述適用于大型問題的選項。這僅僅是一個參考,因為使用大型問題算法有一些條件。對于fminunc函數(shù)來說,必須提供梯度信息。
LargeScale??當設為'on'時使用大型算法,若設為'off'則使用中型問題的算法。
? ?? ?適用于大型和中型算法的參數(shù):
Diagnostics??打印最小化函數(shù)的診斷信息。
Display??顯示水平。選擇'off',不顯示輸出;選擇'iter',顯示每一步迭代過程的輸出;選擇'final',顯示最終結果。打印最小化函數(shù)的診斷信息。
GradObj??用戶定義的目標函數(shù)的梯度。對于大型問題此參數(shù)是必選的,對于中型問題則是可選項。
MaxFunEvals??函數(shù)評價的最大次數(shù)。
MaxIter??最大允許迭代次數(shù)。
TolFun??函數(shù)值的終止容限。
TolX??x處的終止容限。
??只用于大型算法的參數(shù):
Hessian??用戶定義的目標函數(shù)的Hessian矩陣。
??HessPattern?用于有限差分的Hessian矩陣的稀疏形式。若不方便求fun函數(shù)的稀疏Hessian矩陣H,可以通過用梯度的有限差分獲得的H的稀疏結構(如非零值的位置等)來得到近似的Hessian矩陣H。若連矩陣的稀疏結構都不知道,則可以將HessPattern設為密集矩陣,在每一次迭代過程中,都將進行密集矩陣的有限差分近似(這是缺省設置)。這將非常麻煩,所以花一些力氣得到Hessian矩陣的稀疏結構還是值得的。
MaxPCGIter??PCG迭代的最大次數(shù)。
??PrecondBandWidth??PCG前處理的上帶寬,缺省時為零。對于有些問題,增加帶寬可以減少迭代次數(shù)。
??TolPCG??PCG迭代的終止容限。
??TypicalX??典型x值。
??
??只用于中型算法的參數(shù):
DerivativeCheck??對用戶提供的導數(shù)和有限差分求出的導數(shù)進行對比。
DiffMaxChange??變量有限差分梯度的最大變化。
DiffMinChange - 變量有限差分梯度的最小變化。
LineSearchType??一維搜索算法的選擇。

exitflag:描述退出條件
exitflag>0 表示目標函數(shù)收斂于解x處。
exitflag=0 表示已經(jīng)達到函數(shù)評價或迭代的最大次數(shù)。
exitflag<0 表示目標函數(shù)不收斂。
output:
? ?? ?該參數(shù)包含下列優(yōu)化信息:
output.iterations??迭代次數(shù)。
output.algorithm??所采用的算法。
output.funcCount??函數(shù)評價次數(shù)。
output.cgiterations??PCG迭代次數(shù)(只適用于大型規(guī)劃問題)。
output.stepsize??最終步長的大小(只用于中型問題)。
??output.firstorderopt??一階優(yōu)化的度量:解x處梯度的范數(shù)。

[?本帖最后由 yxzjs 于 2008-1-9 23:09 編輯?]?
建議:
1.對于求解平方和的問題,fminunc函數(shù)不是最好的選擇,用lsqnonlin函數(shù)效果更佳。
2.使用大型方法時,必須通過將options.GradObj設置為'on'來提供梯度信息,否則將給出警告信息。

關于算法:
大型優(yōu)化算法??若用戶在fun函數(shù)中提供梯度信息,則缺省時函數(shù)將選擇大型優(yōu)化算法,該算法是基于內部映射牛頓法的子空間置信域法,理論描述可參見文獻[8],[9]。計算中的每一次迭代涉及到用PCG法求解大型線性系統(tǒng)得到的近似解。
中型優(yōu)化算法??此時fminunc函數(shù)的參數(shù)options.LargeScale設置為'off'。該算法采用的是基于二次和三次混合插值一維搜索法的BFGS擬牛頓法。該法通過BFGS公式來更新Hessian矩陣。通過將HessUpdate參數(shù)設置為'dfp',可以用DFP公式來求得Hessian矩陣逆的近似。通過將HessUpdate參數(shù)設置為'steepdesc',可以用最速下降法來更新Hessian矩陣。但一般不建議使用最速下降法。
缺省時的一維搜索算法,當options.LineSearchType 設置為'quadcubic'時,將采用二次和三次混合插值法。將options.LineSearchType設置為'cubicpoly'時,將采用三次插值法。第二種方法需要的目標函數(shù)計算次數(shù)更少,但梯度的計算次數(shù)更多。這樣,如果提供了梯度信息,或者能較容易地算得,則三次插值法是更佳的選擇
局限性:
1.目標函數(shù)必須是連續(xù)的。fminunc函數(shù)有時會給出局部最優(yōu)解。
2.fminunc函數(shù)只對實數(shù)進行優(yōu)化,即x必須為實數(shù),而且f(x)必須返回實數(shù)。當x為復數(shù)時,必須將它分解為實部和虛部。
3.在使用大型算法時,用戶必須在fun函數(shù)中提供梯度(options參數(shù)中GradObj屬性必須設置為'on')。
4.目前,若在fun函數(shù)中提供了解析梯度,則options參數(shù)DerivativeCheck不能用于大型算法以比較解析梯度和有限差分梯度。通過將options參數(shù)的MaxIter 屬性設置為0來用中型方法核對導數(shù)。然后重新用大型方法求解問題。




通常在使用Matlab優(yōu)化工具箱中的函數(shù)時,需要根據(jù)不同要求修改優(yōu)化選項,例如最大迭代次數(shù)、x處的終止容限等等。可通過 optimset 語句來修改優(yōu)化選項參數(shù):

options=optimset(‘optionName’,’optionValue’);如:

options=optimset('tolx',1e-100);
????options=optimset(options,'tolfun',1e-100);

后面還可以依此法添加很多選項信息。

下面舉一個完整例子:求取f=4*x(1)^2+5*x(1)*x(2)+2*x(2)^2的最小值

---------------------------------------------------------------------------------------------function [f,g]=ff3(x)

f=4*x(1)^2+5*x(1)*x(2)+2*x(2)^2;

if nargut >1

?????g(1)=8*x(1)+5*x(2);

?????g(2)=5*x(1)+4*x(2);

end

通過下面將優(yōu)化選項結構options.GradObj設置為’on’來得到梯度值。

???????options=optimset(‘Gradobj’,’on’);

???????x0=[1,1];

[x,fval,exitflag]=fminunc(@ff3,x0,options)

---------------------------------------------------------------------------------------------

?

Options的參數(shù)描述(OPTIMSET):

%OPTIMSET PARAMETERS
�rivativeCheck - Compare user supplied derivatives (gradients or Jacobian)
%??????????????????to finite-differencing derivatives??[ on | {off}]

%Diagnostics - Print diagnostic information about the function to be
%??????????????minimized or solved [ on | {off}]

%DiffMaxChange - Maximum change in variables for finite difference gradients
%??????????????[ positive scalar??| {1e-1} ]
%DiffMinChange - Minimum change in variables for finite difference gradients
%??????????????[ positive scalar??| {1e-8} ]

%Display - Level of display [ off | iter | notify | final ]?

%GoalsExactAchieve - Number of goals to achieve exactly (do not over- or
%????????????????????under-achieve) [ positive scalar integer | {0}]

%GradConstr - Gradients for the nonlinear constraints defined by user
%????????????????????[ on | {off} ]

%GradObj - Gradient(s) for the objective function(s) defined by user
%????????????????????[ on | {off}]

%Hessian - Hessian for the objective function defined by user??[ on | {off} ]

%HessMult - Hessian multiply function defined by user
%????????????????????[ function | {[]} ]

%HessPattern - Sparsity pattern of the Hessian for finite-differencing
%??????????????[ sparse matrix ]

%HessUpdate - Quasi-Newton updating scheme
%?????????????[ {bfgs} | dfp | gillmurray | steepdesc ]

%Jacobian - Jacobian for the objective function defined by user
%????????????????????[ on | {off}]

%JacobMult - Jacobian multiply function defined by user
%????????????????????[ function | {[]} ]

%JacobPattern - Sparsity pattern of the Jacobian for finite-differencing
%???????????????[ sparse matrix ]

%LargeScale - Use large-scale algorithm if possible [ {on} | off ]

%LevenbergMarquardt - Chooses Levenberg-Marquardt over Gauss-Newton algorithm
%?????????????????????[ on | off]

%LineSearchType - Line search algorithm choice [ cubicpoly | {quadcubic} ]

%MaxFunEvals - Maximum number of function evaluations allowed
%?????????????????????[ positive integer ]

%MaxIter - Maximum number of iterations allowed [ positive integer ]

%MaxPCGIter - Maximum number of PCG iterations allowed [positive integer]

%MeritFunction - Use goal attainment/minimax merit function
%?????????????????????[ {multiobj} | singleobj ]

%MinAbsMax - Number of F(x) to minimize the worst case absolute values
%?????????????????????[ positive scalar integer | {0} ]

%PrecondBandWidth - Upper bandwidth of preconditioner for PCG
%????????????????????[ positive integer | Inf | {0} ]

%TolCon - Termination tolerance on the constraint violation [ positive scalar ]

%TolFun - Termination tolerance on the function value [ positive scalar ]

%TolPCG - Termination tolerance on the PCG iteration
%?????????[ positive scalar | {0.1} ]

%TolX - Termination tolerance on X [ positive scalar ]

%TypicalX - Typical X values [ vector ]

---------------------------------------------------------------------------------------------

注:

優(yōu)化問題求解時常常需要對相對誤差,使用算法等進行設置.Matlab提供了options向量來對優(yōu)化函數(shù)進行參數(shù)設置,options向來由18個元素.目前已經(jīng)被optimset和optimget代替,詳情可查閱函數(shù)optimset和optimget

下面逐個說明各個參數(shù)的功能和取值.
Options(1)=0(默認值)
功能:控制顯示,優(yōu)化過程中控制輸出信息,0表示不顯示;1表示顯示;-1表隱藏信息.
Options(2)=1e-4
功能:控制x的精度,自變量x的最低精度終止條件.當所有終止條件都滿足的時候,優(yōu)化終止.
Options(3)=1e-4
功能:控制 f?精度,目標函數(shù)f的最低精度終止條件.當所有終止條件都滿足的時候,優(yōu)化終止.
options(4)=1e-7
功能:約束g的最低精度終止判別條件.當所有的終止條件都滿足的時候,優(yōu)化終止.
options(5)=0
功能:選擇主要優(yōu)化算法.
options(6)=0
功能:SD算法控制.選擇搜索方向算法.
options(7)=0
功能:搜索算法控制.選擇線性搜索算法.
options(8)=N/A
功能:函數(shù)值,算法結束時極值點的函數(shù)值,attgoal和minimax而言,它包含一個到達因子.
options(9)=0
功能:梯度檢查控制.當值為1時,在最初的幾個迭代周期,梯度將與有限差分計算的結果比較,此時,梯度函數(shù)必須存在.
options(10)=N/A
功能:函數(shù)計算計數(shù).
options(11)=N/A
功能:梯度計算計數(shù).
options(12)=N/A
功能:限定計數(shù),限定函數(shù)梯度計算或差分梯度計算的次數(shù).
options(13)=0
功能:等式約束個數(shù),等式約束必須放在g的前幾個元素中.
options(14)=0*n
功能:最大迭代次數(shù),該值缺省時被置為n的100倍,n為自變量x的個數(shù),在fmins中,缺省為n的200倍,在fminu中,為500n.
options(15)=0
功能:目標數(shù),盡可能接近goals的目標數(shù),由函數(shù)attgoal使用.
options(16)=1e-8
功能:最小攝動控制.有限差分梯度計算中的最小變化.對函數(shù)的梯度計算而言,實際使用的攝動將自動調整以提高精度,它將在最小攝動和最大攝動之間變化.
options(17)=0,1
有限差分梯度計算中變量的最大變化.
options(18)=N/A
功能:步長控制,在第一步迭代被賦值為1或更小




http://blog.sina.com.cn/s/blog_68b0c65f0100mq5m.html

http://www.ilovematlab.cn/thread-99442-1-1.html

總結

以上是生活随笔為你收集整理的Matlab优化函数中options选项的修改的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。