lm算法

[原创]LM算法的实现

五迷三道 提交于 2019-12-01 11:03:32
完整文章请查看 这里 。转载请注明出处:本文来自learnhard的博客: http://www.codelast.com/ & http://blog.csdn.net/learnhard/ ,并保持文章的完整性。 LM算法可用于解决非线性最小二乘问题。多用于曲线拟合等场合。 LM算法的实现并不难,这里不讨论使用MATLAB等工具直接得到结果的过程,使用那些工具对于算法编程能力的提高无任何益处。 LM算法的关键是用模型函数 f 对待估参数向量p在其领域内做线性近似,忽略掉二阶以上的导数项,从而转化为线性最小二乘问题,它具有收敛速度快等优点。 LM算法需要对每一个待估参数求偏导,所以,如果你的拟合函数 f 非常复杂,或者待估参数相当地多,那么就不适合使用LM算法了,可以使用Powell算法,Powell算法不需要求导。 对于急需自己编程(VC)用LM算法解决一些问题的朋友,如果你的数学几乎都忘了,那么你还是多请教一下自己的朋友吧,要不然连函数的偏导数都不记得怎么求了,是写不出代码的。 网上有很多LM算法的示例程序,但是如果你不理解这个算法的过程,要想看懂它们,很难。而且要对自己定义的函数使用LM算法,更加应该明白该算法的原理。 有一篇很不错的文章,解释了如何实现LM算法: http://www.ics.forth.gr/~lourakis/levmar/levmar.pdf