levmar在Windows ×86编译及Demo示例
来源:互联网 发布:ubuntu aptget 已安装 编辑:程序博客网 时间:2024/05/18 09:16
编译levmar主要参考的链接如下:
64位 WIN 7/8 下VS2010配置CLAPCAK3.2.1和Levmar2.6
按照该链接提示的方法,下载clapack_cmake,然后调用cmake分别编译clapack和levmar,运行demo的时候是okay的。
对于编译我只有一点疑惑,在clapack下载网页,还有一个clapack_vs,我使用这个版本进行编译,levmar中是无法调用到clapack,目前还不知道为什么。
另外,本来计划编译lapack,但是到网上查了一下lapack编译需要Fortran的编译器;没有找到较好的且免费的Fortran编译器,所以还是选用lapack,反正也能够得到需要的效果。
接下来是学习Demo里的两个例子,部分截图我就直接从维基扯过来。
示例一:
Rosenbrock function(香蕉函数):具体定义可以参考到维基网页,是一个用来测试最佳化演算法性能的非凸函数;其全域最小值位于(x, y)=(1, 1)点,数值为f(x, y)=0。
在Levmar的Demo中,通过迭代的方式,去计算x,y。
先贴一下结果:
可以可看到迭代了1000次后,最终求出来的(x,y)已经非常接近(1,1)了。
下边是主要代码:
//main函数 int m=2; n=3; //m表示待求参数的维度,n表示测量值的维度 p[0]=-1.2; p[1]=1.0; //待求参数的初值 for(i=0; i<n; i++) x[i]=0.0; //模拟n次测量的结果,由于是求解,设为零 // 调用迭代入口函数 int ret=dlevmar_der(modros, //描述测量值之间关系的函数指针 jacmodros, //估计雅克比矩阵的函数指针 p, //初始化的待求参数,结果一并保存在其中 x, //测量值 m, //参数维度 n, //测量值维度 1000, //最大迭代次数 opts, //迭代的一些参数 info, //关于最小化结果的一些参数,不需要设为NULL NULL, NULL, NULL //一些内存的指针,暂时不需要,以后再学习这个具体由什么用);
在主函数中大致就是以上的几行简单的代码就能调用LM进行迭代,真的是感觉好膜拜啊;在上边调用的函数里还有两个函数指针,下边是关于这两个函数指针的东西。
#define ROSD 105.0//香蕉函数的公式f(x,y)=(1-x)^2 + 100(y-x^2)^2;void ros(double *p, double *x, int m, int n, void *data){ register int i; for(i=0; i<n; ++i) { //写出参数与x[i]之间的关系式,由于这里方程的右边没有观测值,只有参数看起来怪怪的~_~ x[i]=((1.0-p[0])*(1.0-p[0]) + ROSD*(p[1]-p[0]*p[0])*(p[1]-p[0]*p[0])); }}void jacros(double *p, double *jac, int m, int n, void *data){ register int i, j; //写出雅克比矩阵 for(i=j=0; i<n; ++i) { jac[j++]=(-2 + 2*p[0]-4*ROSD*(p[1]-p[0]*p[0])*p[0]); jac[j++]=(2*ROSD*(p[1]-p[0]*p[0])); }}
以上就是第一个示例,比较简单,但是看起来好有成就感!
levmar还有其他的函数,留到下次再研究,已经满足我目前的需求了!
levmar主要针对于稠密雅克比矩阵,所以jac其实是一个一维的数组,所以jac的大小为待求参数个数×观测次数×每次观察方程个数
- levmar在Windows ×86编译及Demo示例
- 在Matlab下编译levmar
- levmar ndk 编译
- 在Matlab中使用Levmar
- sipot eX.osip3.0.1在Windows下编译方法及简单UA示例
- eX.osip3.0.1在Windows下编译方法及简单UA示例
- eX.osip3.0.1在Windows下编译方法及简单UA示例
- sipot eX.osip3.0.1在Windows下编译方法及简单UA示例
- eX.osip3.0.1在Windows下编译方法及简单UA示例
- vs2010 编译 levmar 2.6,(Levenberg-Marquardt)
- osip及eXosip的编译及开发方法 和 eX.osip3.0.1在Windows下编译方法及简单UA示例
- 在vs2008中使用levmar进行曲线拟合
- openssl在windows编译及使用
- NSPR在Windows上编译及使用
- android studio 编译aidl以及示例demo
- boost在windows的编译及在vs2010中的配置
- eX.osip3.0.1在Windows下编译方法及简单UA示例(http://blog.csdn.net/lb_zhao/archive/2007/02/23/1513030.aspx)
- QT安装使用及Demo示例
- 线程的同步:通过同步方法实现
- oracle_DQL
- Stanford 机器学习-Advice for Applying Machine Learing
- cmd学习
- 利用KVO实现 UITextView 通过代码方式设置内容后,自动滚动到最后一行
- levmar在Windows ×86编译及Demo示例
- 在一个APP中使用多个tabBar
- 关于自定义转场动画,我都告诉你(上)
- Servlet的配置
- UI控件--Notification
- 第5周项目2(2)游戏中的角色类
- 链表排序交换节点为什么还得单独交换next指针?
- 线程中一些常用的函数
- Linux下简单Makefile文件的编写