Eigen 是一个高级的 C++ 库,用于线性代数、矩阵和向量运算、数值解决以及其他数学计算。它被设计为高效、易用,并且能够与 C++ 的特性无缝集成。Eigen库广泛应用于科学计算、工程、机器学习和计算机图形学等领域。
1. Eigen 库的主要特点:
-
性能:Eigen库非常注重性能,它利用了现代CPU的SIMD指令集(例如SSE、AVX)来加速计算。
-
内存管理:Eigen使用固定大小的模板化类来管理内存,这使得内存分配和释放都非常高效。
-
表达式模板:Eigen使用表达式模板来延迟计算,这允许在运行时优化复杂的表达式,减少不必要的计算和内存使用。
-
易用性:Eigen 的API设计简洁直观,使得编写和阅读代码都很容易。
-
兼容性:Eigen 库可以与多种其他库和工具链无缝集成,例如与CUDA、OpenMP等并行计算框架。
-
广泛的数学支持:Eigen 提供了广泛的数学运算支持,包括但不限于矩阵乘法、分解、求逆、特征值计算、最小二乘问题等。
-
模板化:Eigen 是完全模板化的,这意味着它可以处理任意大小和类型的矩阵和向量。
-
插件系统:Eigen 允许通过插件扩展其功能,例如支持稀疏矩阵、非线性优化等。
-
开源:Eigen 是一个开源项目,遵循MPL2(Mozilla Public License Version 2.0)许可证。
2. 安装 Eigen 库:
有两种方式:
2.1 apt 命令安装
sudo apt install libeigen3-dev
说明:eigen3 被默认安装到了usr/include里了(或usr/local/include,两者都是系统默认路径),然而在很多程序中include时经常使用#include <Eigen/Dense>而不是使用#include <eigen3/Eigen/Dense>,一些程序在编译时会因找不到Eigen/Dense而报错。
1.程序中,头文件引用<eigen3/Eigen/Dense>:
#include <eigen3/Eigen/Dense>
2.在CMakeLists.txt中指定eigen3路径:
# 添加Eigen头文件
#include_directories( "/usr/include/eigen3/" )
3. 将eigen3从/include/eigen3复制到/include:
执行复制命令,将Eigen文件夹及其内容复制到/usr/inlcude/或者/usr/local/include/下:
sudo cp -r /usr/include/eigen3/Eigen /usr/include
sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include
上面指令将usr/local/include/eigen3文件夹中的Eigen文件递归地复制到上一层文件夹/usr/local/include中,以便系统默认搜索。
2.2 源码安装
//下载链接
wget https://gitlab.com/libeigen/eigen /-/archive/3.4.0/eigen-3.4.0.tar.gz
//解压
tar xzvf ./eigen-3.4.0.tar.gz
//编译
cd eigen-3.4.0
mkdir build
cd build
cmake ..
//安装
make
sudo make install
可以在cmake的时候自定义路径:cmake .. -DCMAKE_INSTALL_PREFIX=/usr/envir/eigen-3.4.0 ,并使用软连接:sudo ln -s /usr/envir/eigen-3.4.0/include/eigen3/Eigen /usr/include/Eigen。
3. 代码测试
#include <iostream>
#include <Eigen/Dense>
using Eigen::MatrixXd;
int main()
{
MatrixXd m(2,2);
m(0,0) = 3;
m(1,0) = 2.5;
m(0,1) = -1;
m(1,1) = m(1,0) + m(0,1);
std::cout << m << std::endl;
}