Eigen是著名的C++矩阵运算库,提供了许多矩阵运算的接口,主要包括两大部分,一部分是稠密矩阵,另一部分是稀疏矩阵。Eigen以源码形式提供给大家,用的时候,只要将源码包含在项目的包含路径上,具体安装和使用方法,可以参考如下链接:

《C++矩阵处理工具——Eigen》,《Eigen初步1:初步体验Eigen库》。

这次我们重点讲解一下如何安装suitesparse库。

SuiteSparse是世界上最优秀的稀疏矩阵处理工程之一。SuiteSparse是一组C、Fortran和MATLAB函数集,用来生成空间稀疏矩阵数据。在SuiteSparse中几何多种稀疏矩阵的处理方法,包括矩阵的LU分解,QR分解,Cholesky分解,提供了解非线性方程组、实现最小二乘法等多种函数代码。

SuitSparse包含了众多的依赖库,例如:blas库、lapack库、cholmod库等,所以安装很复杂。不过值得庆幸的是,国外早有大牛已经实现了在windows,linux或者mac等所平台上的cmake脚本,具体参考Github项目<>

打开Github,会发现作者已经写了详细的安装流程,不过经过我亲测,还是有很多的陷阱。所以我将一步步地将所有的步骤给大家讲清楚,希望大家也能将自己学习历程中一些重要的知识分享出来,共建我们的开源社区。

先说一下我的配置:

Windows 7 SP1, Visual studio 2008, cmake  2.8.

下面正式开始:

1. 安装Cmake

2.  下载或克隆Gthub上最新的项目版本,本版本为v1.3.0,然后解压到某个本地文件下,我们暂称这个路径为SP_ROOT,我这里是F:\suitsparse\suitesparse-metis-vs2008

我的如图所示:

这里注意:我们看到Gtihub上建议我们分别下载SuiteSparse-X.Y.Z.tar.gz和metis-X.Y.Z.tar.gz.(建议metis版本在5以下,比如metis-4.0.3,或者不要覆盖它),然后覆盖它原来所含的源代码。这里我觉得有点矛盾,因为我们打开https://github.com/jlblancoc/suitesparse-metis-for-windows/releases,就会看到v1.3.0的更新说明:

For the convenience of users, SuiteSparse+METIS souces are now also bundled in this package.

Support for CUDA builds (Enable WITH_CUDA)

所以根本没有必要下载上面两个文件,用它的就可以了。当然了,你重新下载两个文件,并覆盖原来的文件也是可行的。只要你按照它的说明去做即可。(再说一遍,最好不要覆盖这两个文件)

3.打开SP_ROOT/metis/CMakeLists.txt,在行project(METIS)后面加上命令 cmake_policy(SET CMP0022 NEW),

即:

cmake_minimum_required(VERSION 2.8)

project(METIS)

cmake_policy(SET CMP0022 NEW)

set(GKLIB_PATH "GKlib" CACHE PATH "path to GKlib")

set(SHARED FALSE CACHE BOOL "build a shared library")

if(MSVC)

set(METIS_INSTALL FALSE)

else()

set(METIS_INSTALL TRUE)

endif()

# Configure libmetis library.

if(SHARED)

set(METIS_LIBRARY_TYPE SHARED)

else()

set(METIS_LIBRARY_TYPE STATIC)

endif(SHARED)

include(${GKLIB_PATH}/GKlibSystem.cmake)

# Add include directories.

include_directories(${GKLIB_PATH})

include_directories(include)

# Recursively look for CMakeLists.txt in subdirs.

add_subdirectory("include")

add_subdirectory("libmetis")

add_subdirectory("programs")另外,如果你要使用CUDA,注意版本,具体见图:

4.  运行 CMake(cmake-gui),

然后:

设置"Source code"为SP_ROOT

设置"Build" 路径为任何空的路径,一般SP_ROOT/build

按"Configure"。

然后你会发现有很多红的地方,你可以点击它们,再"Configure",尤其注意的是为了避免一些编译器中关于复数可能会出      错,HAVE_COMPLEX被关闭。(但是经过我在平台上再三测试,你最好不要去勾,否则很容易在后面的编译阶段发生错误.)

按 "Generate"

如图:

5.编译和安装

Visual Studio,打开SuiteSparseProject.sln,并且建立Debug 和Release两种模式下的INSTALL工程(设为启动项目)。

可能会出现很多的警告,不过一切都是OK的。

6.注意:

SuiteSparseConfig.cmake应该位于install路径下,它将用于你的项目正确地连接到SuiteSparse

如图即为cmake的结果:

这样的话,就安装好了。我们接下来,就可以使用了。我们是在Eigen中使用这个库的,因为Eigen已经封装了它的接口。

举例:

#include

#include "Eigen/Eigen"

#include "Eigen/SPQRSupport"

using namespace Eigen ;

int main ( ) {

SparseMatrix < double > A ( 4 , 4 ) ;

std :: vector < Triplet < double > > triplets ;

// 初始化非零元素

int r [ 3 ] = { 0 , 1 , 2 } ;

int c [ 3 ] = { 1 , 2 , 2 } ;

double val [ 3 ] = { 6.1 , 7.2 , 8.3 } ;

for ( int i = 0 ; i < 3 ; ++ i )

triplets . push_back( Triplet < double >(r [ i ] , c [ i ] , val [ i ]) ) ;

// 初始化稀疏矩阵

A . setFromTriplets ( triplets . begin ( ) , triplets . end ( ) ) ;

std :: cout << "A = \n" << A << std :: endl ;

// 一个QR分解的实例

SPQR < SparseMatrix < double > > qr ;

// 计算分解

qr . compute ( A ) ;

// 求一个A x = b

Vector4d b ( 1 , 2 , 3 , 4 ) ;

Vector4d x = qr . solve ( b ) ;

std :: cout << "x = \n" << x ;

std :: cout << "A x = \n" << A * x ;

return 0 ;

}

具体可参考:< Eigen 3.2稀疏矩阵入门>。

使用方法:

安装好Eigen,将源程序路径加入vs2008的C++包含路径中,如图:

然后加入刚才编译的SuiteSparse库的相关文件。见图:

在项目-》属性-》C/c++ -》常规-》附加包含目录中,加入SP_ROOT\build\install\include和SP_ROOT\build\install\include\suitesparse

链接器-》常规-》附加库目录,加入SP_ROOT\build\install\lib, SP_ROOT\build\install\lib\lapack_blas_windows

,SP_ROOT\build\install\lib64,SP_ROOT\build\lib\Debug

如图:

链接器-》输入-》附加依赖项,加入:

debug模式下:

libamdd.lib

libbtfd.lib

libcamdd.lib

libccolamdd.lib

libcholmodd.lib

libcolamdd.lib

libcxsparsed.lib

libklud.lib

libldld.lib

libspqrd.lib

libumfpackd.lib

suitesparseconfigd.lib

libblas.lib

liblapack.lib

metisd.lib

注意以上为debug模式下,Release模式下同理加入相对的lib。

Release模式下:

libamd.lib

libbtf.lib

libcamd.lib

libccolamd.lib

libcholmod.lib

libcolamd.lib

libcxsparse.lib

libklu.lib

libldl.lib

libspqr.lib

metis.lib

suitesparseconfig.lib

libblas.lib

liblapack.lib

最后在生成的debug文件下加入如下dll,

libblas.dll

libgcc_s_dw2-1.dll

libgfortran-3.dll

liblapack.dll

libquadmath-0.dll

可以在SP_ROOT\build\install\lib\lapack_blas_windows中找到,复制即可。

这样就可以运行了,结果为:

附:

我编译的库:

vs2008:http://pan.baidu.com/s/1bnme4Rd

vs2010:   http://pan.baidu.com/s/1dDr0bj7

vs2008测试例子:http://pan.baidu.com/s/1jGCU6lK

vs2010测试例子:http://pan.baidu.com/s/1qWL5MW0

windows 安装metis_Eigen+suitesparse for windows 安装相关推荐

  1. mysql数据库解压安装教程_MySQL数据库之windows 10下解压版MySql安装配置方法教程...

    本文主要向大家介绍了MySQL数据库之windows 10下解压版MySql安装配置方法教程 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. windows 10 下安装解压版的 ...

  2. Windows LTSC、LTSB、Server 安装 Windows Store 应用商店

    下载安装包 打开网址 https://store.rg-adguard.net/ 以 PackageFamilyName 方式搜索 Microsoft.WindowsStore_8wekyb3d8bb ...

  3. Windows SDK 7.1 (包含directshow)安装配置

    最近一直在做毕业设计的事情,需要利用directshow进行视频开发,但是现在单独的directshow包已经没有了,从directx9.0c开始directshow和directx分开发布,现在的d ...

  4. python数据库安装教程_python MySQLdb Windows下安装教程及问题解决方法

    使用python访问mysql,需要一系列安装 linux下MySQLdb安装见 Python MySQLdb在Linux下的快速安装 https://www.jb51.net/article/657 ...

  5. Windows下当地RabbitMQ服务的安装

    Windows下本地RabbitMQ服务的安装 本文参考:刘若泽相关技术文档 当然这些内容页可以通过RabbitMQ官方网站获得. RabbitMQ配置说明手册 一.RaibbitMQ服务器配置 1. ...

  6. windows 如何安装oracle 补丁包,Windows Server 2003 上安装 Oracle10g(10.2.0.1)并升级 至补丁(10.2.0.4) 图解...

    Windows Server 2003 上安装 Oracle10g(10.2.0.1)并升级 至补丁(10.2.0.4) 图解 第一部分:安装 Oracle 10.2.0.1 1.选择安装方法 2.选 ...

  7. 未找到文件 服务器可能无此更新包文件,win7安装xampp提示windows找不到-n文件(安装成功后,443端口占用,apache服务器无法正常启动)的解决方案...

    1. 环境:win7 64位安装xampp 32位. 2. 安装过程最后,报错,提示windows找不到-n文件.以及说没有安装Microsoft Visual C++ 2008 Redistribu ...

  8. windows 10 anaconda python 3.7 安装keras-gpu tensorflow-gpu

    我的个人博客:zhang0peter的个人博客 win 10 anaconda python3.7 安装keras tensorflow-gpu pytorch的安装参考这篇文章:windows an ...

  9. centos安装mysql wsl_在 Windows Linux 子系统中安装 CentOS

    微软在 Windows 10 中引入了 Windows Subsystem Linux(WSL) 功能, 这使得我们可以在 Windows 中就能使用 Linux 的各种命令. 目前 Windows ...

最新文章

  1. Numpy的广播机制详解(broadcasting)
  2. Git和Github的区别与操作简介
  3. 揭秘!如何快速提高网站权重-关键词百度指数叠加
  4. Sonar-project.properties配置
  5. inur new.php id,Cmsez(随易)全站系统注入0day
  6. [数据结构-严蔚敏版]P65离散事件模拟(银行客户的离散事件驱动模拟程序)
  7. w ndows10电脑配置看哪里,Windows10怎么自动登录?Windows10自动登录的设置方法
  8. Versant 对象型数据库
  9. 现在的挂黑链外链链接的手法非常的高级
  10. 如何使用移动硬盘加密
  11. 典型相关分析(CCA)原理及例子
  12. 基于单片机语音控制灯系统设计
  13. iPhone/苹果手机不用数据线传输文件到电脑的方法/步骤
  14. 计算机设计大赛参赛作品——疫情看板
  15. 一文读懂中国历代龙纹演变(推荐收藏)
  16. 对于网站优化该怎么去做外链?
  17. iPhone OS 4发布:支持多任务
  18. 高斯消元法(高斯·约当消元法)(浮点)
  19. 第十届颗携枪通过固定障碍
  20. 经典美剧《越狱》口语精华及经典台词

热门文章

  1. 一文掌握开发利器:正则表达式
  2. MPEG4 (ISO/IEC 14496) 文档内容 简介
  3. Nginx HTTP之请求行解析函数ngx_http_parse_request_line
  4. 万众瞩目Instant Apps终于全面问世啦
  5. QTWebEngine的使用
  6. leetcode 581. Shortest Unsorted Continuous Subarray | 581. 最短无序连续子数组(单调栈)
  7. 430. Flatten a Multilevel Doubly Linked List | 430. 扁平化多级双向链表(DFS)
  8. 【Python Flask】SQLAlchemy增删改查总结;不重复查询某一列
  9. C语言文件操作(五)将txt格式16进制编码转化为txt格式汉字
  10. Hive体系结构(二)Hive的执行原理、与关系型数据库的比较