- 积分
- 1
- 注册时间
- 2004-11-17
- 仿真币
-
- 最后登录
- 1970-1-1
|
初学matlab优化,迭代中止后,经常一头雾水。参看帮助后仍似懂非懂。下面关于fminbnd函数的说明(也可作为fmincon函数的参考)对于新手也许会有帮助,不当之处请指正。
目标函数fun:
需要最小化的目标函数。fun函数需要输入标量参数x,返回x处的目标函数标量值f。可以将fun函数指定为命令行,如
x = fminbnd(inline('sin(x*x)'),x0)
同样,fun参数可以是一个包含函数名的字符串。对应的函数可以是M文件、内部函数或MEX文件。若fun='myfun',则M文件函数myfun.m必须有下面的形式:
function f = myfun(x)
f = ... %计算x处的函数值。
若fun函数的梯度可以算得,且options.GradObj设为'on'(用下式设定),
options = optimset('GradObj','on')
则fun函数必须返回解x处的梯度向量g到第二个输出变量中去。注意,当被调用的fun函数只需要一个输出变量时(如算法只需要目标函数的值而不需要其梯度值时),可以通过核对nargout的值来避免计算梯度值。
function [f,g] = myfun(x)
f = ... %计算x处得函数值。
if nargout > 1 %调用fun函数并要求有两个输出变量。
g = ... %计算x处的梯度值。
end
若Hessian矩阵也可以求得,并且options.Hessian设为'on',即,
options = optimset('Hessian','on')
则fun函数必须返回解x处的Hessian对称矩阵H到第三个输出变量中去。注意,当被调用的fun函数只需要一个或两个输出变量时(如算法只需要目标函数的值f和梯度值g而不需要Hessian矩阵H时),可以通过核对nargout的值来避免计算Hessian矩阵
function [f,g,H] = myfun(x)
f = ... % 计算x处得函数值。
if nargout > 1 % 调用fun函数并要求有两个输出变量。
g = ... % 计算x处的梯度值。
if nargout > 2
H = ... % 计算x处的Hessian矩阵。
end
优化参数选项options:
可以通过optimset函数设置或改变这些参数。其中有的参数适用于所有的优化算法,有的则只适用于大型优化问题,另外一些则只适用于中型问题。
首先描述适用于大型问题的选项。这仅仅是一个参考,因为使用大型问题算法有一些条件。对于fminunc函数来说,必须提供梯度信息。
LargeScale – 当设为'on'时使用大型算法,若设为'off'则使用中型问题的算法。
适用于大型和中型算法的参数:
Diagnostics – 打印最小化函数的诊断信息。
Display – 显示水平。选择'off',不显示输出;选择'iter',显示每一步迭代过程的输出;选择'final',显示最终结果。打印最小化函数的诊断信息。
GradObj – 用户定义的目标函数的梯度。对于大型问题此参数是必选的,对于中型问题则是可选项。
MaxFunEvals – 函数评价的最大次数。
MaxIter – 最大允许迭代次数。
TolFun – 函数值的终止容限。
TolX – x处的终止容限。
只用于大型算法的参数:
Hessian – 用户定义的目标函数的Hessian矩阵。
HessPattern –用于有限差分的Hessian矩阵的稀疏形式。若不方便求fun函数的稀疏Hessian矩阵H,可以通过用梯度的有限差分获得的H的稀疏结构(如非零值的位置等)来得到近似的Hessian矩阵H。若连矩阵的稀疏结构都不知道,则可以将HessPattern设为密集矩阵,在每一次迭代过程中,都将进行密集矩阵的有限差分近似(这是缺省设置)。这将非常麻烦,所以花一些力气得到Hessian矩阵的稀疏结构还是值得的。
MaxPCGIter – PCG迭代的最大次数。
PrecondBandWidth – PCG前处理的上带宽,缺省时为零。对于有些问题,增加带宽可以减少迭代次数。
TolPCG – PCG迭代的终止容限。
TypicalX – 典型x值。
只用于中型算法的参数:
DerivativeCheck – 对用户提供的导数和有限差分求出的导数进行对比。
DiffMaxChange – 变量有限差分梯度的最大变化。
DiffMinChange - 变量有限差分梯度的最小变化。
LineSearchType – 一维搜索算法的选择。
exitflag:描述退出条件
exitflag>0 表示目标函数收敛于解x处。
exitflag=0 表示已经达到函数评价或迭代的最大次数。
exitflag<0 表示目标函数不收敛。
output:
该参数包含下列优化信息:
output.iterations – 迭代次数。
output.algorithm – 所采用的算法。
output.funcCount – 函数评价次数。
output.cgiterations – PCG迭代次数(只适用于大型规划问题)。
output.stepsize – 最终步长的大小(只用于中型问题)。
output.firstorderopt – 一阶优化的度量:解x处梯度的范数。
[ 本帖最后由 yxzjs 于 2008-1-9 23:09 编辑 ] |
评分
-
1
查看全部评分
-
|