在 C++中,庫的地位是非常高的。C++之父 Bjarne Stroustrup先生多次表示了設計庫來擴充功能要好過設計更多的文法的言論。現實中,C++的庫門類繁多,解決的問題也是極其廣泛,庫從輕量級到重量級的都有。不少都是讓人眼界大開,亦或是望而生歎的思維傑作。由於庫的數量非常龐大,而且限於筆者水平,其中很多並不瞭解。所以文中所提的一些庫都是比較著名的大型庫。
C++各大有名庫的介紹——科學計算
1、Blitz++
參考網站:http://www.oonumerics.org/blitz
Blitz++ 是一個高效率的數值計算函數庫,它的設計目的是希望建立一套既具像C++ 一樣方便,同時又比Fortran速度更快的數值計算環境。通常,用C++所寫出的數值程式,比 Fortran慢20%左右,因此Blitz++正是要改掉這個缺點。方法是利用C++的template技術,程式執行甚至可以比Fortran更快。
Blitz++目前仍在發展中,對於常見的SVD,FFTs,QMRES等常見的線性代數方法並不提供,不過使用者可以很容易地利用Blitz++所提供的函數來構建。
2、POOMA
參考網站:http://www.codesourcery.com/pooma/pooma
POOMA是一個免費的高效能的C++庫,用於處理並行式科學計算。POOMA的物件導向設計方便了快速的程式開發,對並行機器進行了最佳化以達到最高的效率,方便在工業和研究環境中使用。
3、MTL
參考網站:http://www.osl.iu.edu/research/mtl
Matrix Template Library(MTL)是一個高效能的泛型組件庫,提供了各種格式矩陣的大量線性代數方面的功能。在某些應用使用高效能編譯器的情況下,比如Intel的編譯器,從產生的彙編代碼可以看出其與手寫幾乎沒有兩樣的效能。
4、CGAL
參考網站:http://www.cgal.org/
Computational Geometry Algorithms Library的目的是把在計算幾何方面的大部分重要的解決方案和方法以C++庫的形式提供給工業和學術界的使用者。
Intel Math Kernel Library
1.基本線形代數運算(BLAS) 向量與向量、向量與矩陣、矩陣與矩陣的運算
2.稀疏線形代數運算
3.快速傅立葉變換(單精確度/雙精確度)(fftw)
4.LAPACK(求解線形方程組、最小方差、特徵值、Sylvester方程等)
5.向量數學庫(VML)
6.向量統計學庫(VSL)
7.進階離散傅立葉變換
IMSL
軟體名稱 IMSL C Numerical Library(不相容vc6編譯器)
程式設計語言 C, Forton, C#, Java
資源網址 http://www.vni.com/
功能概述 分為統計庫和數學庫兩部分. 數學庫包含應用數學和特殊函數.IMSL 程式庫 - 已成為數值分析解決方案的工業標準。 IMSL 程式庫提供最完整與最值得信賴的函數庫。 IMSL 數值程式庫提供目前世界上最廣泛被使用的 IMSL 演算法,有超過 370 驗證過、最正確與 thread-safe 的數學與統計程式。 IMSL FORTRAN 程式庫提供新一代以 FORTRAN 90 為程式庫基礎的程式,能展現出最佳化的演算法能力應用於多處理器與其它高效能運算系統。
lapack
軟體名稱 Linear Algebra Package
程式設計語言 Fortran 77
資源網址 http://www.netlib.org/lapack
功能概述 線性代數計運算元程式包
lapack++
軟體名稱 Linear Algebra Package in c++
程式設計語言 c++
資源網址 http://math.nist.gov/lapack++/
功能概述 c++版的線性代數計運算元程式包
BLAS
軟體名稱 Basic Linear Algebra Subroutines
程式設計語言 Fortran 77
主要開發人員 Kagstrom B. ,Ling P. ,Van Loan C.
資源網址 http://www.netlib.org/blas
功能概述 Blas是執行向量和矩陣運算的子程式集合。
uBLAS
BLAS in C++ with expression templates. 運算式模版形式的 C++中的BLAS ,
gsl
軟體名稱 GNU Scientific Library (linux)
程式設計語言 C , C++ compable
資源網址 http://www.gnu.org/software/gsl/
功能概述 範圍廣泛, 包括數值分析的常見內容
Blitz++
軟體名稱 Blitz++ (不相容vc6編譯器)
資源網址 http://sourceforge.net/project/showfiles.php?group_id=63961
功能概述 The current versions provide dense arrays and vectors, random number generators, and small vectors and matrices.是一個高效率的數值計算函數庫,它的設計目的是希望建立一套既具像 C++ 一樣方便,同時又比 Fortran 速度更快的數值計算環境。通常,用 C++ 所寫出的數值程式,比 Fortran 慢 20% 左右,因此Blitz++ 正是要改掉這個缺點。方法是利用 C++ 的 template 技術,程式執行甚至可以比 Fortran 更快。
MTL
軟體名稱 Matrix Template Library(相容vc6編譯器)
資源網址 http://www.osl.iu.edu/research/mtl/
功能概述 The Matrix Template Library (MTL) is a high-performance generic component library that provides comprehensive linear algebra functionality for a wide variety of matrix formats. MTL專註於線性代數相關的計算任務,如各種形式矩陣的產生(對角,共軛,稀疏,對稱等),相關的計算,變換,以及與一維向量的運算。