Eigen 简介:它是什么以及为什么需要它
Eigen 是一个用于 C++ 语言的高性能线性代数库。它提供了丰富的功能来处理向量、矩阵、稀疏矩阵,以及求解线性方程组、计算特征值和奇异值分解。Eigen 使用纯 C++(模板)编写,无需外部依赖,使其成为嵌入式系统、科学计算、计算机图形学、机器学习和机器人技术的理想选择。
为什么需要 Eigen?与许多其他库(例如 LAPACK 或 BLAS)不同,Eigen 提供了直观的 API,类似于在 MATLAB 或 NumPy 中处理矩阵。它支持惰性求值(lazy evaluation)和向量化(SSE、AVX、NEON),从而提供了接近手动汇编优化的性能。Eigen 还与现代 C++ 标准(C++11 及更高版本)完全兼容,并得到社区的积极维护。
主要功能:
- 处理任意大小的稠密和稀疏矩阵。
- 运算:加法、乘法、转置、求逆。
- 求解线性系统(LU、QR、Cholesky、SVD)。
- 计算特征值和特征向量。
- 几何变换(旋转、四元数)。
- 支持任意数据类型(float、double、complex、用户自定义类型)。
安装 Eigen
Eigen 是一个仅包含头文件的库(header-only)。这意味着您无需编译单独的库——只需在项目中包含所需的头文件即可。安装取决于操作系统和包管理器。
通过包管理器安装
Linux (Ubuntu/Debian):
sudo apt-get install libeigen3-devmacOS (Homebrew):
brew install eigenWindows (vcpkg):
vcpkg install eigen3Windows (Conan):
conan install eigen/3.4.0@手动安装(适用于所有操作系统)
从 官方网站 下载最新版本或克隆仓库:
git clone https://gitlab.com/libeigen/eigen.git然后在您的编译器中指定 Eigen 文件夹的路径。例如,对于 g++:
g++ -I /path/to/eigen my_program.cpp -o my_program注意: 如果您使用 CMake,请在 CMakeLists.txt 中添加:
find_package(Eigen3 REQUIRED)target_link_libraries(my_target Eigen3::Eigen)快速入门与代码示例
让我们编写一个简单的程序,创建一个矩阵和一个向量,执行乘法并输出结果。
#include <iostream>#include <Eigen/Dense>
int main() { // 创建一个 2x2 矩阵 Eigen::Matrix2d A; A << 1, 2, 3, 4;
// 创建一个 2x1 向量 Eigen::Vector2d b(5, 6);
// 矩阵乘以向量 Eigen::Vector2d x = A * b;
// 输出结果 std::cout << "A * b =" << x << std::endl;
return 0;}编译并运行:
g++ -I /path/to/eigen example.cpp -o example./example输出:
A * b =1739这个示例展示了使用 Eigen 是多么简单:语法类似于数学运算,并且输出会自动格式化。
Eigen 的主要方法和函数
以下是 10 个关键的 Eigen 方法/函数,包含详细描述、参数和示例。