Levenberg–Marquardt Algorithm

问题背景

在使用Matlab或Python解决某些实际问题时,我们不免要求解非线性方程组,或解决一些优化问题。这时你就有可能遇到 Levenberg–Marquardt 算法

Levenberg–Marquardt 算法

Levenberg–Marquardt 算法是一种最小二乘(模型拟合)算法。它可以解决以下问题:

\[ \min_{x}f(x)= \min_{x} \\| F(x) \\|^2_2 = \min_{x} \sum_i F_i^2(x) \]

即求一个 \(x\) 使 \(f(x)\) 最小。

1944年Kenneth Levenberg首次提出该算法,1963年Donald Marquardt也发现了该算法,后来这种算法被称作Levenberg–Marquardt。

关于该算法的详细原理和实现可以参考 Flannery 等人的著作 Numerical recipes in C

Levenberg–Marquardt 算法与非线性方程组求根

求解非线性方程组即求解一组 \(\bar{x}\) 令其满足 \(\bar{F}(x)=0\)。显然非线性方程组的根可以令上式成立。

因此,给定初始值,通过Levenberg–Marquardt 算法求得的 \(\bar{x}\) 就是非线性方程组 \(\bar{x}\) 的一组近似根(初始值附近)。

非线性方程组的根显然不止一组,而通过该方法只能得到距离初始值较近的根,要想得到全部的根,需要配合其他算法。

参考文献

  • Levenberg, K. (1944). A method for the solution of certain non-linear problems in least squares. Quarterly of applied mathematics, 2(2), 164-168.
  • Mardquardt, D. W. (1963). An algorithm for least square estimation of parameters. J. Soc. Ind. Appl. Math, 11, 431-441.
  • Flannery, B. P., Press, W. H., Teukolsky, S. A., & Vetterling, W. (1992). Numerical recipes in C. Press Syndicate of the University of Cambridge, New York, 24(78), 36.