最小二乘问题使一个函数最小化f(x)这是一个平方和。
|
(7) |
这类问题出现在大量的实际应用中,特别是那些涉及模型函数与数据拟合的问题,如非线性参数估计。这种问题类型也出现在控制系统中,其目标是输出y(x t)来跟随一个连续的模型轨迹φ(t)表示矢量x和标量t.这个问题可以表示为
|
(8) |
在哪里y(x t),φ(t)是标量函数。
对积分进行离散以得到近似
|
(9) |
在哪里t<年代乌兰巴托>我是均匀间隔的。在这个问题中,向量F(x)是
在这类问题中,残差<年代pan class="inlineequation">∥F(x)∥在最优情况下可能很小,因为一般的做法是设定现实可行的目标轨迹。尽管你可以最小化函数方程7使用一种通用的、无约束的最小化技术,如无约束优化基础时,往往可以利用问题的某些特征来提高求解过程的迭代效率。的梯度和Hessian矩阵方程7有一个特殊的结构。
表示的米——- - - - - -n的雅可比矩阵F(x),J(x的梯度向量f(x),G(x的Hessian矩阵f(x),H(x)和各自的Hessian矩阵F<年代乌兰巴托>我(x),D<年代乌兰巴托>我(x),
|
(10) |
在哪里
矩阵的一个性质问(x)是当残差<年代pan class="inlineequation">∥F(x)∥趋于0时x<年代乌兰巴托>k那么,接近解问(x)也趋向于零。所以,当<年代pan class="inlineequation">∥F(x)∥的解很小,一种有效的方法是利用高斯-牛顿方向作为优化过程的基础。
在每个主要迭代中k,高斯-牛顿法得到一个搜索方向d<年代乌兰巴托>k这是线性最小二乘问题的一个解
|
(11) |
的项时,由该方法推导出的方向等价于牛顿方向<年代pan class="inlineequation">问(x) = 0.算法可以使用搜索方向d<年代乌兰巴托>k作为行搜索策略保证功能的一部分f(x)在每次迭代中减少。
高斯-牛顿法在计算二阶项时经常遇到问题问(x)是不可忽略的。Levenberg-Marquardt方法克服了这个问题。
Levenberg-Marquardt方法(见[25]而且[27])使用的搜索方向是线性方程组的一个解
|
(12) |
或者,选择性地,方程的
|
(13) |
其中标量λ<年代乌兰巴托>k的大小和方向d<年代乌兰巴托>k,诊断接头(A)表示对角线项的矩阵一个.设置选项ScaleProblem来“没有”选择方程12,或集合ScaleProblem来的雅可比矩阵选择方程13.
设置参数的初始值λ0使用InitDamping选择。偶尔,0.01该选项的默认值可能不合适。如果您发现Levenberg-Marquardt算法在初始阶段进展甚微,请尝试设置InitDamping与默认值不同的值,例如1 e2.
当λ<年代乌兰巴托>k方向是0吗d<年代乌兰巴托>k与高斯-牛顿法相同。作为λ<年代乌兰巴托>k趋于无穷,d<年代乌兰巴托>k趋向于最陡的下降方向,震级趋向于零。因此,对于一些足够大的λ<年代乌兰巴托>k,这个术语<年代pan class="inlineequation">F(x<年代乌兰巴托>k+d<年代乌兰巴托>k) <F(x<年代乌兰巴托>k)适用。因此,你可以控制这个项λ<年代乌兰巴托>k以保证算法在遇到二阶项时也能下降,这限制了高斯-牛顿方法的效率。当步骤成功时(给出一个较低的函数值),算法设置λk+1=λ<年代乌兰巴托>k/ 10。当步骤不成功时,算法设置λk+1=λ<年代乌兰巴托>k* 10。
在内部,Levenberg-Marquardt算法使用的最优容忍(停止准则)1的军医乘以函数公差。
因此,Levenberg-Marquardt方法使用的搜索方向是高斯-牛顿方向和最陡下降方向之间的交叉。
Levenberg-Marquardt方法的另一个优点是当雅可比矩阵Jrank-deficient。在这种情况下,高斯-牛顿方法可能会有数值问题,因为最小问题方程11是不适定的。相比之下,Levenberg-Marquardt方法在每次迭代中都是满秩的,因此避免了这些问题。
下图显示了Levenberg-Marquardt方法在最小化Rosenbrock函数时的迭代,这是一个以最小二乘形式出现的非常困难的最小化问题。
有关此图的更完整的描述,包括生成迭代点的脚本,请参见香蕉函数极小化.
Levenberg-Marquardt方法中的约束
当问题包含约束条件时,lsqcurvefit而且lsqnonlin修改Levenberg-Marquardt迭代。如果提出迭代点x在边界之外,算法将步长投影到最近的可行点上。换句话说,与P定义为投影将不可行点投影到可行区域上,算法对提出的点进行修正x来P