无约束非线性最优化问题有关函数介绍

在MATLAB的优化工具箱中,用于求解无约束非线性优化规划问题的函数有fminunc和fminsearch。

1.fminunc函数

用fminunc函数可以求多变量无约束函数的最小值。多变量无约束函数的数学模型为:

\[{min}_{x}f(x)\]

在上式中,x为向量,f (x)为函数,返回标量。

fminunc函数在给定初值的情况下,可以求多变量标量函数的最小值。其常用于无约束非线性最优化问题,语法格式为:

x = fminunc(fun,x0):给定初值x0,求fun函数的局部极小点x。x0可以是标量、向量或矩阵。

x = fminunc(fun,x0,options):用options中指定的优化参数进行最小化。

[x,fval] = fminunc(...):将解x处目标函数的值返回到fval参数中。

[x,fval,exitflag,output] = fminunc(...):返回exitflag值,描述函数的退出条件,返回包含优化信息的结构输出。

[x,fval,exitflag,output,grad,hessian] = fminunc(...):将解x处目标函数的Hessian矩阵信息返回hessian参数中。

表3-1中介绍了各输入/输出变量的描述。

表3-1 输入/输出变量描述表

变 量 描 述
fun fun为目标函数,即需要最小化的函数。fun函数需要输入向量参数x,返回x处的目标函数标量值f。可以将fun函数指定为M文件函数的句柄,如 x = fminunc(@myfun,x0) 其中myfun为MATLAB函数,具有下面的形式: function f = myfun(x) f = ... %计算x处的函数值 fun函数也可以是匿名函数的句柄,即: x=fminunc(@(x)norm(x) 2,x0) 若fun函数的梯度可以求得,且SpecifyObjectiveGradient选项设为true,即: options = optimoptions('fminunc', 'SpecifyObjectiveGradient',true) 则fun函数必须返回解x处的梯度向量g到第2个输出参数中。 如果Hess矩阵也可以求得,并且通过 options = optimoptions('fminunc','HessianFcn','objective') 将HessianFcn选项设置为'objective',且将Algorithm选项设置为'trust-region',则fun函数必须返回解x处的Hess对称矩阵H到第3个输出参数中。
options options为优化参数选项。指定为optimoptions的输出或optimset函数返回的结构体。 适用于所有算法的参数为: Algorithm:选择算法,值为'quasi-newton'(默认值)或'trust-region',使用后者需要提供梯度。 CheckGradients:比较提供的梯度和有限差分导数,值为false(默认值)或true。 Diagnostics:是否显示最小化函数的诊断信息,值为'on''off'。 DiffMaxChange:变量有限差分的最大变化,默认值为Inf。
options DiffMinChange:变量有限差分的最小变化,默认值为0。 Display:显示级别。当选择'off'时,不显示输出;当选择'iter'时,显示每一步迭代过程的输出;当选择'final'时,显示最终结果。打印最小化函数的诊断信息。 FiniteDifferenceStepSize:有限差分的标量或向量步长因子。 FiniteDifferenceType:有限差分类型,值为'forward'(默认值)或'central',对应于前向差分和中心差分。 FunValCheck:检查目标函数值是否合法。当值为'on'时,如果目标函数返回复数值或NaN,则显示警告信息;当值为'off'时,不显示警告信息。默认值为'off'。 MaxFunEvaluations:函数评价的最大次数。 MaxIterations:最大允许迭代次数。 OutputFcn:每次迭代时优化函数调用的自定义函数。 PlotFcn:算法执行过程中进行绘图。 SpecifyObjectiveGradient:用户定义的目标函数梯度。 StepTolerance:x处的终止容限。 TypicalX:典型x值。 只用于trust-region算法的参数: FunctionTolerance:函数的终止容限,默认值为1e-6。用optimset函数设置时,参数名称为TolFun。 HessianFcn:用户定义的目标函数的Hess矩阵,值为[](默认值)或'objective'。用optimset函数设置时,参数名称为HessFcn。 HessianMultiplyFcn:Hess乘函数的函数句柄。对于大型结构化问题,该函数在没有实际形成H的情况下计算Hess矩阵的叉积HY。函数形式为: W=hmfun(Hinfo,Y) 其中,Hinfo包含计算HY用到的矩阵。第1个参数必须与目标函数fun返回的第3个参数相同: [f,g,Hinfo]=fun(x) Y矩阵的行数与问题的维数相同。 HessPattern:用于有限差分的Hess矩阵的稀疏形式。 MaxPCGIter:PCG迭代的最大次数。 PrecondBandWidth:PCG预条件上带宽。对于有些问题,增加带宽可以减少迭代次数。 SubproblemAlgorithm:迭代步的计算方式。 TolPCG:PCG迭代的终止容限。 只用于quasi-newton算法的参数介绍为: HessUpdate:在拟Newton法中选择搜索方向的方法,包括'bfgs''dfp''steepdesc'。 ObjectiveLimit:容限(终止条件),默认值为-1e20。 UseParallel:是否以并行方式计算梯度。默认值为false。
exitflag 描述退出的条件介绍为: 1:表示目标函数收敛于解x处。 2:x处的改变小于指定容限。 3:目标函数值的改变小于指定容限。 5:目标函数值的预测值小于指定容限。 0:表示已经达到函数评价或迭代的最大次数。 -1:算法被输出函数终止。 -3:目标函数的迭代次数小于指定次数。
grad x处的梯度
hessian x处的Hess矩阵
output 该参数为包含优化信息的结构,其字段说明为: iterations:迭代次数。 firstorderopt:一阶最优性的度量。 lssteplength:相对于搜索方向的线搜索步的步长,仅用于拟牛顿法。 algorithm:所采用的算法。 funcCount:函数评价次数。 cgiterations:PCG迭代次数(只适用于'trust-region'算法)。 stepsize:最终步长的大小。 message:推出消息

2.fminsearch函数

使用fminsearch函数可以求解多变量无约束函数的最小值。该函数常用于无约束非线性最优化问题。其语法格式为:

x = fminsearch(fun,x0):初值为x0,求fun函数的局部极小点x。

x = fminsearch(fun,x0,options):用options指定的优化参数进行最小化。使用optimset函数进行设置。

[x,fval] = fminsearch(...):将x处的目标函数值返回fval参数中。

[x,fval,exitflag] = fminsearch(...):返回exitflag值,描述函数的退出条件。值为1时表示目标函数收敛于解x处;值为0时表示迭代次数超出了最大迭代次数,或函数计算次数超出了最大计算次数。

[x,fval,exitflag,output] = fminsearch(...):返回包含优化信息的输出参数output。

对于求解形式更复杂的目标函数的问题,fminsearch函数比fminunc函数有效。当问题为高度非线性时,fminsearch函数更具稳健性。应用fminsearch函数可能会得到局部最优解。fminsearch函数只对实数进行最小化,即x必须由实数组成,f (x)函数必须返回实数。如果x为复数,则必须将它分为实部和虚部两部分。另外,fminsearch函数不适合求解平方和问题,用lsqnonlin函数更好一些。