windows 安装metis_Eigen+suitesparse for windows 安装
Eigen是著名的C++矩陣運算庫,提供了許多矩陣運算的接口,主要包括兩大部分,一部分是稠密矩陣,另一部分是稀疏矩陣。Eigen以源碼形式提供給大家,用的時候,只要將源碼包含在項目的包含路徑上,具體安裝和使用方法,可以參考如下鏈接:
《C++矩陣處理工具——Eigen》,《Eigen初步1:初步體驗Eigen庫》。
這次我們重點講解一下如何安裝suitesparse庫。
SuiteSparse是世界上最優(yōu)秀的稀疏矩陣處理工程之一。SuiteSparse是一組C、Fortran和MATLAB函數(shù)集,用來生成空間稀疏矩陣數(shù)據(jù)。在SuiteSparse中幾何多種稀疏矩陣的處理方法,包括矩陣的LU分解,QR分解,Cholesky分解,提供了解非線性方程組、實現(xiàn)最小二乘法等多種函數(shù)代碼。
SuitSparse包含了眾多的依賴庫,例如:blas庫、lapack庫、cholmod庫等,所以安裝很復雜。不過值得慶幸的是,國外早有大牛已經(jīng)實現(xiàn)了在windows,linux或者mac等所平臺上的cmake腳本,具體參考Github項目<>
打開Github,會發(fā)現(xiàn)作者已經(jīng)寫了詳細的安裝流程,不過經(jīng)過我親測,還是有很多的陷阱。所以我將一步步地將所有的步驟給大家講清楚,希望大家也能將自己學習歷程中一些重要的知識分享出來,共建我們的開源社區(qū)。
先說一下我的配置:
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),
然后:
設(shè)置"Source code"為SP_ROOT
設(shè)置"Build" 路徑為任何空的路徑,一般SP_ROOT/build
按"Configure"。
然后你會發(fā)現(xiàn)有很多紅的地方,你可以點擊它們,再"Configure",尤其注意的是為了避免一些編譯器中關(guān)于復數(shù)可能會出 ? ? ?錯,HAVE_COMPLEX被關(guān)閉。(但是經(jīng)過我在平臺上再三測試,你最好不要去勾,否則很容易在后面的編譯階段發(fā)生錯誤.)
按?"Generate"
如圖:
5.編譯和安裝
在
Visual Studio,打開SuiteSparseProject.sln,并且建立Debug 和Release兩種模式下的INSTALL工程(設(shè)為啟動項目)。
可能會出現(xiàn)很多的警告,不過一切都是OK的。
6.注意:
SuiteSparseConfig.cmake應(yīng)該位于install路徑下,它將用于你的項目正確地連接到SuiteSparse
如圖即為cmake的結(jié)果:
這樣的話,就安裝好了。我們接下來,就可以使用了。我們是在Eigen中使用這個庫的,因為Eigen已經(jīng)封裝了它的接口。
舉例:
#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庫的相關(guān)文件。見圖:
在項目-》屬性-》C/c++ -》常規(guī)-》附加包含目錄中,加入SP_ROOT\build\install\include和SP_ROOT\build\install\include\suitesparse
鏈接器-》常規(guī)-》附加庫目錄,加入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中找到,復制即可。
這樣就可以運行了,結(jié)果為:
附:
我編譯的庫:
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
總結(jié)
以上是生活随笔為你收集整理的windows 安装metis_Eigen+suitesparse for windows 安装的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 同步现象 心理学_非心理专业背景的人,如
- 下一篇: jsp连接mysql数据库代码_JSP连