Eigen3 教程 (施工中)

这是一个 Eigen C++ 线性代数库的教程项目,包含了从基础到高级的示例代码。

这个教程与Eigen 官方文档 的区别是什么?

环境要求

查看 Eigen 版本

# 使用 pkg-config
pkg-config --modversion eigen3

# 或者查看头文件
grep "#define EIGEN_.*_VERSION" /usr/include/eigen3/Eigen/src/Core/util/Macros.h

文档附带的源代码中包括了一个eigen3version.cpp文件,正常能够编译运行的话, 会在终端打印Eigen 的版本。这一方面可以确认版本,另一方面可以确认Eigen 和相应工具链的配置是正确的。

安装 Eigen

Ubuntu/Debian

sudo apt-get update
sudo apt-get install libeigen3-dev

macOS

brew install eigen

Windows

  1. 使用 vcpkg:
    vcpkg install eigen3:x64-windows
    
  2. 或者手动下载:

配置环境变量

安装之后,需要配置环境变量,否则在编译时会找不到Eigen 的头文件。默认采用apt安装的Eigen 头文件位置为/usr/include/eigen3。因此,我们在编译时可以直接使用-I/usr/include/eigen3指定头文件位置。

g++ -I/usr/include/eigen3 eigen3version.cpp -o eigen3version
./eigen3version

如果能够正常打印Eigen 的版本,则说明Eigen 安装成功。

如果不希望每次编译都需要指定头文件位置,可以配置环境变量。打开.bashrc文件,添加以下内容:

vim ~/.bashrc

在文件末尾添加以下内容:

export EIGEN_ROOT=/usr/include/eigen3
export CPLUS_INCLUDE_PATH=$EIGEN_ROOT:$CPLUS_INCLUDE_PATH

保存文件并退出。然后重新加载.bashrc文件:

source ~/.bashrc

这样我们就可以在编译时直接使用-I/usr/include/eigen3指定头文件位置,而不需要每次都指定。当然,Eigen最好的地方(个人观点)也就是,它只有头文件,没有库文件,所以不需要链接和设置链接选项。

Windows 下微软编译器

采用微软编译器编译Eigen 时,同样需要指定头文件位置,运行vcvarsall.bat脚本设置环境变量,然后调用cl命令编译。

vcvarsall.bat
cl eigen3version.cpp /I "D:\Eigen3\eigen-3.4.0"

因为我们采用cmake编译,所以需要修改CMakeLists.txt文件,所以在Windows下面基本上也都是一样一样的。

项目总体结构

eigen3tutorial/
├── chapters/
├── CMakeLists.txt
├── eigen3version.cpp
├── README.md
├── chp01/          # 基础知识
│   ├── basic_matrix.cpp
│   ├── matrix_arithmetic.cpp
│   └── special_matrices.cpp
├── chp02/          # 矩阵操作
│   ├── matrix_operations.cpp
│   └── matrix_decompositions.cpp
├── chp03/          # 向量操作
│   ├── vector_operations.cpp
│   └── vector_advanced.cpp
├── chp04/          # 线性方程
│   ├── linear_equations.cpp
│   └── least_squares.cpp
├── chp05/          # 特征值
│   ├── eigenvalues.cpp
│   └── pca_example.cpp
├── chp06/          # 几何变换
│   ├── transforms.cpp
│   └── rotations.cpp
└── chp07/          # 高级特性
    ├── sparse_matrix.cpp
    └── advanced_features.cpp

本项目的结构设计旨在帮助用户快速找到所需的示例代码和文档。项目的根目录包含以下主要部分:

每个章节目录(如 chp01/)中包含多个 C++ 源文件,这些文件展示了如何使用 Eigen 库解决特定的线性代数问题。通过这种结构,用户可以轻松地导航到感兴趣的主题并查看相关的代码示例。

编译和运行

  1. 创建构建目录:
    mkdir build
    cd build
    
  2. 配置 CMake:
    cmake ..
    

如果 Eigen 安装在非标准位置,需要指定 Eigen3_DIR:

cmake .. -DEigen3_DIR=/path/to/eigen3/share/eigen3/cmake
  1. 编译:
    cmake --build .
    
  2. 运行示例:
    ./basic_matrix
    ./matrix_arithmetic
    # ... 其他示例
    

其他注意事项

  1. 包含路径:
    • 如果使用系统安装的 Eigen:#include <Eigen/...>
    • 如果使用自定义路径:可能需要调整 CMakeLists.txt 中的 include_directories
  2. 编译优化:
    • 建议开启 -O2 或 -O3 优化
    • SIMD 优化选项:
      • -march=native (自动检测并启用当前CPU支持的所有指令集)
      • -msse4.2 (启用 SSE4.2 指令集)
      • -mavx (启用 AVX 指令集)
      • -mavx2 (启用 AVX2 指令集)
      • -mfma (启用 FMA 指令集)
  3. 内存对齐:
    • Eigen 默认使用 16 字节对齐
    • 在类中使用固定大小的 Eigen 对象时,需要使用 EIGEN_MAKE_ALIGNED_OPERATOR_NEW

许可

本项目采用 MIT 许可证。详细信息请查看 LICENSE 文件。

您可以自由地:

但必须:

参考资料