参考

64位 WIN 7/8 下VS2010配置CLAPCAK3.2.1和Levmar2.6

准备

下载CMake:https://cmake.org/
下载clapack_cmake:http://www.netlib.org/clapack/clapack-3.2.1-CMAKE.tgz
下载levmar:http://users.ics.forth.gr/~lourakis/levmar/levmar-2.6.tgz

编译

编译clapack

解压缩后,打开CMake配置源码路径和build路径,然后点击Configure和Generate即可,如下图所示:


关闭CMake,用VS2015打开build目录下的CLAPACK.sln,编译整个项目即可(注意此处我编译的是Release版本):

接下来整理一下编译好的库,其路径分别在

\build\BLAS\SRC\Release\blas.lib
\build\F2CLIBS\libf2c\Release\libf2c.lib
\build\SRC\Release\lapack.lib
\build\Testing\MATGEN\Release\tmglib.lib
  • 1
  • 2
  • 3
  • 4

本文将其放在\build\lib\build\lib目录下,当然你也可以放在其他指定目录:

编译levmar

打开CMake,设置源代码路径和build路径(CMake也要选择VS2015 X64),并点击一次Configure

接下来修改宏LAPACKBLAS_DIR,使其目录指向你刚刚设定的clapack的lib所在路径;修改F2C_LIB_NAME,使其和clapack一致,然后再点击一些Configure,最后点击Generate即可。


使用VS2015打开LEVMAR.sln,并将调整为Release,然后进行编译:

Demo示例

接下来是学习Demo里的一个例子,部分截图我就直接从维基扯过来。

工程配置

新建一个VS2015 X64 Release项目,并添加一个main.cpp

添加include和library



配置完成后编译:

代码讲解

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,       //关于最小化结果的一些参数,不需要设为NULLNULL, NULL, NULL //一些内存的指针,暂时不需要,以后再学习这个具体由什么用); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

在主函数中大致就是以上的几行简单的代码就能调用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]));}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

以上就是第一个示例,比较简单,但是看起来好有成就感!

levmar还有其他的函数,留到下次再研究,已经满足我目前的需求了!

levmar主要针对于稠密雅克比矩阵,所以jac其实是一个一维的数组,所以jac的大小为待求参数个数×观测次数×每次观察方程个数

Levmar:VS2015编译Levmar及Demo示例相关推荐

  1. IMX8M系列 OpenCL FFT 示例编译及其他demo测试(MYD-JX8MX)

    IMX8M系列 OpenCL FFT 示例编译测试及其他demo测试(MYD-JX8MX) 上一篇文章已经将如何编译镜像,如何用官方的方式FslBuild.py 脚本编译demo.不知道有没有成功的朋 ...

  2. 实践详细篇-Windows下使用VS2015编译的Caffe训练mnist数据集

    上一篇记录的是学习caffe前的环境准备以及如何创建好自己需要的caffe版本.这一篇记录的是如何使用编译好的caffe做训练mnist数据集,步骤编号延用上一篇 <实践详细篇-Windows下 ...

  3. c++ nvcc编译CUDA程序入门示例

    nvcc nvcc是NVIDIA CUDA Compiler,用来编译host和device程序. 这里的术语: host:指CPU及其内存 device:指GPU及其内存 使用nvcc,就可以编译C ...

  4. C对接国际验证码接口DEMO示例

    本文为您提供了C语言版本的国际验证码接口对接DEMO示例 //接口类型:互亿无线国际短信接口. //账户注册:请通过该地址开通账户 http://user.ihuyi.com/?AX7wLG //注意 ...

  5. 亚马逊AWS Kinesis Video Streams with KVS demo示例

    title: 亚马逊AWS Kinesis Video Streams with KVS demo示例 categories:[Linux C] tags:[亚马逊云平台] date: 2021/12 ...

  6. 如何使用VS2015编译运行DX11版本龙书配套源码

    这篇文章是翻译http://www.d3dcoder.net/网站上Frank Luna(龙书作者本人)的解决方案. 近来,我收到求助emails,emalis询问如何解决本书附带的代码使用Visul ...

  7. Seetaface 03 Seetaface python版 win10 vs2015编译

    01 环境 win10x64 vs2015 update3 cmake3.7.2 git 源码:https://github.com/5455945/SeetaFaceEngine.git 如果要测试 ...

  8. fcgi与c++服务器demo示例

    fcgi与c++构建多线程服务器demo示例 须安装fcgi库 yum -y install fcgi; yum -y install spawn-fcgi; 源码demo.cpp #include ...

  9. vs2015编译linux源码,使用Visual Studio 2017(VS2017)编译OpenCC 1.0.4 (Open Chinese Convert)源代码...

    摘要:本文介绍了Win7 64位环境下OpenCC(Open Chinese Convert) 1.0.4源码编译全过程,除VS2017外,VS2013以上版本也应该基本同样适用,其他版本的Windo ...

最新文章

  1. 基于oracle的数据系统,基于Oracle 的数据库系统
  2. 服务器中毒后老板差点把我开除了。。。
  3. SQL语言基础:SQL中的数据完整性约束用法
  4. 二叉树的三种遍历(递归,栈)
  5. Javascript预解析、作用域、作用域链
  6. java stringjoiner_java-为什么我们已经拥有StringBuilder时使用StringJoiner?
  7. 使用猫狗大战数据集进行一次完整的TensorFlow训练
  8. 基于Session的认证方式_实现认证功能_Spring Security OAuth2.0认证授权---springcloud工作笔记116
  9. HTML5中 audio标签的样式修改
  10. 家用冰箱里面用的抽屉模具图档分析
  11. SQL Server 双机热备份-实现主从复制
  12. cass打开dwg文件无效_CAD文件打开时图形文件显示无效怎么办
  13. 微信小程序体验版无法调用接口
  14. Transformer具体如何进行机器翻译
  15. 【Uplift】因果推断基础篇
  16. 安卓掌读小说v1.5.8破解版免费分享
  17. CHIP-seq流程学习笔记(9)-使用IDR 软件对生物学重复样本间的差异peak进行提取
  18. python求反余弦_余弦相似度计算公式:python代码找出相似文章
  19. Nginx+Tomcat实现负载均衡、动静分离集群部署
  20. 计算机农业应用答案,东北农业大学计算机应用技术网上作业及答案.doc

热门文章

  1. CCNA初认识——ACL命令
  2. 排序算法理解总结篇——冒泡排序、选择排序、插入排序、希尔排序、归并排序、堆排序、计数排序、基数排序、桶排序
  3. 【Python】自动化升级所有pip安装的包
  4. 【Html】Html基本标记
  5. python中的数据结构之deque
  6. 如何构建JavaScript警报框或弹出窗口
  7. --eval mongo_这就是为什么您的read-eval-print-loop如此惊人的原因
  8. javascript 应用_如何利用JavaScript的功能使您的应用脱机工作
  9. 108_Power Pivot购物篮分析分组GENERATE之笛卡尔积、排列、组合
  10. Python操作Excel最好选择什么模块?