建议: 1.对于求解平方和的问题,fminunc函数不是最好的选择,用lsqnonlin函数效果更佳。 2.使用大型方法时,必须通过将options.GradObj设置为'on'来提供梯度信息,否则将给出警告信息。 关于算法: 大型优化算法 若用户在fun函数中提供梯度信息,则缺省时函数将选择大型优化算法,该算法是基于内部映射牛顿法的子空间置信域法,理论描述可参见文献[8],[9]。计算中的每一次迭代涉及到用PCG法求解大型线性系统得到的近似解。 中型优化算法 此时fminunc函数的参数options.LargeScale设置为'off'。该算法采用的是基于二次和三次混合插值一维搜索法的BFGS拟牛顿法。该法通过BFGS公式来更新Hessian矩阵。通过将HessUpdate参数设置为'dfp',可以用DFP公式来求得Hessian矩阵逆的近似。通过将HessUpdate参数设置为'steepdesc',可以用最速下降法来更新Hessian矩阵。但一般不建议使用最速下降法。 缺省时的一维搜索算法,当options.LineSearchType 设置为'quadcubic'时,将采用二次和三次混合插值法。将options.LineSearchType设置为'cubicpoly'时,将采用三次插值法。第二种方法需要的目标函数计算次数更少,但梯度的计算次数更多。这样,如果提供了梯度信息,或者能较容易地算得,则三次插值法是更佳的选择。 局限性: 1.目标函数必须是连续的。fminunc函数有时会给出局部最优解。 2.fminunc函数只对实数进行优化,即x必须为实数,而且f(x)必须返回实数。当x为复数时,必须将它分解为实部和虚部。 3.在使用大型算法时,用户必须在fun函数中提供梯度(options参数中GradObj属性必须设置为'on')。 4.目前,若在fun函数中提供了解析梯度,则options参数DerivativeCheck不能用于大型算法以比较解析梯度和有限差分梯度。通过将options参数的MaxIter 属性设置为0来用中型方法核对导数。然后重新用大型方法求解问题。
|