Eigen+suitesparse for windows 安裝

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, 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 <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/1bnme4Rd
  • vs2010: ??http://pan.baidu.com/s/1dDr0bj7
  • vs2008測試例子:http://pan.baidu.com/s/1jGCU6lK
  • vs2010測試例子:http://pan.baidu.com/s/1qWL5MW0


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259066.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259066.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259066.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

軟件盤控制的問題

2019獨角獸企業重金招聘Python工程師標準>>> 在全屏模式或者是沉寢室標題欄 方案一&#xff1a;全屏模式 1.軟鍵盤被EditText遮擋住了&#xff0c;如果說EditText被嵌套在有滑動的視圖中,采取的方式是: activity中設置此屬性 android:windowSoftInputMode"…

python語言學習零基礎教學視頻_Python告白小白視頻教程(零基礎入門)

1 Python編程基礎入門篇通過本次課程的學習&#xff0c;我們每個人都可以進入python世界里&#xff0c;從簡單到高級&#xff0c;讓人人都能學會python&#xff0c;我們在學習的時候&#xff0c;python讓我們的運維變得更有樂趣&#xff0c;讓我們的運維更加的高大上&#xff0…

SQL 快速入門2.1

MySQL top&#xff08;MySQL limit&#xff09;語法 SELECT column_name(s) FROM table_name LIMIT number 例子 SELECT * FROM Persons LIMIT 5 SQL LIKE 操作符 SQL LIKE 操作符語法 SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern 原始的表 (用在例…

sencha touch 入門系列 (一)sencha touch 簡介

參考鏈接:http://mobile.51cto.com/others-278381.htm Sencha touch 是基于JavaScript編寫的Ajax框架ExtJS,將現有的ExtJS整合JQTouch、Rapha&euml;l庫&#xff0c;推出適用于最前沿Touch Web的移動應用開發框架&#xff0c;該框架是世界上第一個 基于HTML5的Mobile App框架…

求二叉樹的深度和寬度

// 求二叉樹的深度和寬度.cpp : 定義控制臺應用程序的入口點。 <pre name"code" class"cpp">#include <iostream> #include <queue> using namespace std;struct BTNode {char m_value;BTNode *m_left;BTNode *m_right; };//先序創建二叉…

漢堡包

在我們結對的這些天里&#xff0c;我清晰的感受到同伴對我的幫助&#xff0c;每當我有不懂的時候她都會積極的幫助我&#xff0c;也會聽取我的意見積極配合我&#xff0c;在我懶惰的時候也能夠提醒督促我&#xff0c;我想這些只有結對時才能體會到。我們都知道&#xff0c;結對…

zabbix自動發現監控磁盤(iops和讀寫量)

2019獨角獸企業重金招聘Python工程師標準>>> 對于磁盤有個iops的概念比較奇怪&#xff0c;想監控起來看下&#xff0c;利用zabbix的自動發現把每個磁盤的iops監控起來&#xff0c;思路&#xff1a;自動發現所有的磁盤&#xff0c;然后監控各個磁盤的iops。效果如下圖…

一個表單同時向兩個頁面傳值

現在有一個表單<form action"AddNewstu.asp" METHOD"POST" ><INPUT TYPE "Text" NAME "name" SIZE "20"><BR></FORM>此表單向AddNewstu.asp頁面傳入了一個name的值&#xff0c;如果同時把name…

matlab內置函數fitgeotrans與transformPointsForward解析

最近研究3000fps的實現&#xff0c;看了網上給的一個matlab代碼&#xff0c;里面有提到init_shape到mean_shape的對齊&#xff0c;里面使用了fitgeotrans和transformPointsForward兩個函數。于是參考matlab help研究了一下這兩個函數. fitgeotrans函數 語法: tform fitgeotr…

【電腦使用經驗】怎么查看無線網絡中電腦的IP地址?

1、 2、 3、 4、 5、 轉載于:https://www.cnblogs.com/happykoukou/p/4437111.html

win8硬盤安裝Ubuntu14.04雙系統參考教程

硬盤安裝&#xff0c;無需光盤、U盤。win8為主。Ubuntu14.04為輔。可將Windows或Ubuntu設置為開機默認啟動項。在Ubuntu下可查看、操作Windows系統下的文件&#xff1b;適用于安裝和14.04版本號相近的Ubuntu系統。假設以上所述正是你所須要的。那么這可能是一篇您值得參考的教程…

oracle nvarchar2,varchar2,char,nchar說明

char(size)&#xff1a; 數據長度為size&#xff0c;不足的用空格補&#xff0c;超出后報錯。char類型的數據最大長度是2000字節或字符&#xff0c;每個字符長度依賴于數據庫字符集&#xff0c;數據按字符存儲還是字節存儲取決于nls_length_semantics參數。如果每個字符占兩個字…

散列表查找失敗平均查找長度_Python數據結構與算法56:排序與查找:沖突解決方案...

注&#xff1a;本文如涉及到代碼&#xff0c;均經過Python 3.7實際運行檢驗&#xff0c;保證其嚴謹性。本文閱讀時間約為6分鐘。前面說過&#xff0c;如果兩個數據項被散列映射到同一個槽&#xff0c;需要一個系統化的方法在散列表中保存第二個數據項&#xff0c;這個過程被稱為…

Face Alignment by 3000 FPS系列學習總結(一)

廣播&#xff1a; 如今的opencv已經提供了LBF的訓練和測試代碼&#xff0c;推薦閱讀 《使用OpenCV實現人臉關鍵點檢測》 face alignment 流程圖 train階段 測試階段 預處理 裁剪圖片 tr_data loadsamples(imgpathlistfile, 2); 說明&#xff1a; 本函數用于將原始圖片取…

acm常見算法及例題

1 acm常見算法及例題2 3 初期:4 一.基本算法:5 (1)枚舉. (poj1753,poj2965)6 (2)貪心(poj1328,poj2109,poj2586)7 (3)遞歸和分治法.8 (4)遞推.9 (5)構造法.(poj3295)10 (6)模擬法.(poj1068,poj2632,poj1573,poj2993,poj2996)11 二.圖算法…

2爬蟲基礎了解

1.什么是爬蟲爬蟲&#xff0c;即網絡爬蟲&#xff0c;大家可以理解為在網絡上爬行的一直蜘蛛&#xff0c;互聯網就比作一張大網&#xff0c;而爬蟲便是在這張網上爬來爬去的蜘蛛咯&#xff0c;如果它遇到資源&#xff0c;那么它就會抓取下來。想抓取什么&#xff1f;這個由你來…

js(function(){alert(‘’‘)})

function(){alert(sss)}是個匿名函數。沒有名字。所以沒有辦法調用。在外面加個括號&#xff0c;就變成了一個值&#xff0c;值的內容是函數的引用。例如var a (function(){"nop"})a 就是對這個函數的引用。有了名字&#xff0c;之后可以調用&#xff0c;例如a()現在…

macbook 移動硬盤無法寫入_如何升級MacBook筆記本的SSD硬盤-菜鳥折騰系列一

2010 年的時候買了 09 年末的 MACBOOK 小白&#xff0c;由于技術發展&#xff0c;軟件越來越吃硬件內存&#xff0c;現在2G 內存別提基本的工作了&#xff0c;連開機都有困難&#xff0c;每次一點就一個風火輪&#xff0c;基本就是一塊 13 寸的板磚了。。。眾所周知 HDD 機械硬…

face alignment by 3000 fps系列學習總結(二)

準備初始數據 mean_shape mean_shape就是訓練圖片所有ground_truth points的平均值.那么具體怎么做呢&#xff1f;是不是直接將特征點相加求平均值呢&#xff1f; 顯然這樣做是倉促和不準確的。因為圖片之間人臉是各式各樣的&#xff0c;收到光照、姿勢等各方面的影響。因此…

parasoft Jtest 使用教程:功能配置之查找錯誤

2019獨角獸企業重金招聘Python工程師標準>>> parasoft Jtest介紹和試用>>> 今天開始為大家帶來parasoft Jtest功能配置板塊教程&#xff0c;也是系列教程中最重要的一部分。 通過運行Jtest的BugDetective和使用最重要的一套規則來進行編碼標準靜態分析&…