张正友标定LM优化...

引用 learnhard对于LM的说明,本人完全同意他的说法, 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算法并非许多人刚接触时想像的那般难,当你了解了过程之后,你就会觉得它很有意思。希望所有在学习它的朋友们都能成功。

 

#robin1115 发表于2008-06-23 10:38:29  IP: 125.67.144.* 确实如此,我现在在写张正友法标定的优化,在优化没做的时候前面球出来的参数和论文中都基本一致(我使用的是论文中的数据来测试自己的算法的),但是到优化的时候说使用LM,我整理了下如果要包括每步计算出来的 R,T 再加上A 以及畸变系数 P1,P2那么就是有(3*3+3*1)*5+8+2=70个参数了,也就是说f函数对应的有70个参数,我现在正脑袋大,因为根据原理确实在求其中的雅各比矩阵的时候需要分别对每个参数求偏导,但是我这要多70个参数求偏导我觉得显然不合理,但是论文中说的是使用呢这种方法,然后我看了网上流传的那种MINPACK C语言包,和作者一样也是头大哈..不知道楼主对我有啥建议?你说的多参数的的时候使用POWELL我还没看过..我不知道很多说是使用LM算法做标定优化的是如何完成的,难道真的要对70个参数求偏导么?

你可能感兴趣的:(优化,算法,matlab,编程,工具,google)