[原创]LM算法的实现
来源:互联网 发布:公告源码php 后台管理 编辑:程序博客网 时间:2024/04/28 19:02
完整文章请查看这里。转载请注明出处:本文来自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
用Google搜索“Levenberg-Marquardt”,会有很多资料可参考。有一些现成的库也可以使用,不过,到你弄明白怎么用的时候,你都能够自己写出完整的代码了。当初我对LM也是很困惑,一直没弄清它的原理,网上的示例我怎么都用不对,后来一怒之下不再看网上的sample code,重新回到理论上,后来终于弄明白了,于是自己写出了完整的LM实现代码。
需要说明的是,这是非线性无约束的问题,如果待估参数是有约束的(例如参数在某一范围内变动),要想用在LM算法中,我还不知道怎样做,但是这一个帖子或许能给你一些启示(我尚未试验):http://www.numerical-recipes.com/forum/showthread.php?threadid=179
最后,不得不说的就是,LM算法并非许多人刚接触时想像的那般难,当你了解了过程之后,你就会觉得它很有意思。希望所有在学习它的朋友们都能成功。
- [原创]LM算法的实现
- LM算法的C++实现
- 【转】LM(Levenberg-Marquard)算法的实现
- LM(Levenberg-Marquard)算法的实现
- LM算法
- LM算法
- LM 算法
- LM算法
- LM算法
- matlab ,lsqnonlin的使用 LM算法
- 视觉orb_slam中LM算法的分析
- 单应性矩阵的优化(LM算法)
- 列文伯格算法(LM算法)理解、使用及实现
- [原创]TEA算法的VB实现代码
- 【原创】TOP k算法的简单实现
- LM算法入门
- Levenberg-Marquardt(LM算法)
- 实现PROXY穿越(6):LM-Hash的实现
- 几个开源协议的简要介绍
- 我是东软人
- 收藏的文章
- 数据库建模工具一缆
- Blackberry常见问题
- [原创]LM算法的实现
- 网站自动操作系统(AutoWeb)
- 简单图书管理系统
- vb.net中进行类强制转换
- 字节对齐详解
- javascript之XML DOM对象
- Linux C 函数参考之内存及字符串操作篇
- 使用cacti监测系统性能
- 理解物化视图刷新过程中出现的约束冲突