在线购物网站建设,外贸网站模版,制作旅游网站网页的代码,远程教育网站开发Eigen是著名的C矩阵运算库#xff0c;提供了许多矩阵运算的接口#xff0c;主要包括两大部分#xff0c;一部分是稠密矩阵#xff0c;另一部分是稀疏矩阵。Eigen以源码形式提供给大家#xff0c;用的时候#xff0c;只要将源码包含在项目的包含路径上#xff0c;具体安装…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项目suitesparse-metis-for-windows 打开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, SuiteSparseMETIS 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 iostream
#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 bVector4d 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/1bnme4Rdvs2010: http://pan.baidu.com/s/1dDr0bj7vs2008测试例子http://pan.baidu.com/s/1jGCU6lKvs2010测试例子http://pan.baidu.com/s/1qWL5MW0