我需要在我的程序中求解一个线性方程组。是否有一个简单的 C++ 线性代数库,最好由不超过几个头文件组成?我已经找了将近一个小时,所有我发现的都需要在 Linux 上搞乱,在 MinGW 中编译 DLL 等等等等(我使用的是 Visual Studio 2008。)
4 回答
我认为 Eigen 是您正在寻找的。
http://eigen.tuxfamily.org/index.php?title=Main_Page
它是一个只有头文件的库,可以在许多编译器上编译。它甚至使用奇异的汇编来加快数学运算。
这是展示线性求解器 api 的页面。
http://eigen.tuxfamily.org/dox-2.0/TutorialAdvancedLinearAlgebra.html
它有几个带有简单 api 的求解器。
Boost有一些基本的线性代数的东西。
我是犰狳的忠实粉丝,但根据下载页面的末尾,您的编译器可能是一个问题 :
视窗
到目前为止,Armadillo 的开发和测试主要在类 UNIX 平台上完成,但是应该很少或没有特定于平台的代码。虽然初步测试是在 Windows 机器上完成的,但开发人员有兴趣了解 Armadillo 在更彻底的测试中的工作情况。
如果您在使用“MS Visual C++ 2008 Express Edition”编译器时遇到问题(由于它对 C++ 标准的支持不完整),您可能需要尝试以下替代免费编译器:
- 英特尔的 C++ 编译器
- GCC(MinGW 的一部分)
- GCC(CygWin 的一部分)
值得一试,因为这是一个精心设计的(并且大部分是模板化的)库。
否则,也许尝试Eigen2它将您的编译器列为受支持。
编辑:作为对评论的回应,犰狳不需要Lapack,但可以更好地使用它(并且更好地使用经过调整的 Blas):
问:我还需要哪些其他库才能充分利用 Armadillo?
A:犰狳可以在没有外部库的情况下工作。但是,建议安装 LAPACK 和 ATLAS 库以获得附加功能。Armadillo 将尽可能使用 ATLAS 例程代替 LAPACK。问:如果没有 LAPACK/ATLAS,犰狳的工作情况如何?
答:基本功能将可用(例如矩阵加法和乘法),但特征分解等功能将不可用。矩阵乘法(主要用于大矩阵)不会那么快。