Eigen的主要类及其功能
Eigen 是一个高性能的 C++ 模板库,主要用于线性代数、矩阵和向量运算。它提供了许多类来支持各种数学运算,以下是 Eigen 的主要类及其功能分类。
1. 核心矩阵和向量类
这些是 Eigen 中最常用的类,用于表示矩阵和向量:
-
Matrix
- 通用的动态或固定大小的矩阵类
示例:Matrix<float, 3, 3>
(3x3 浮点矩阵)、MatrixXd
(动态大小的双精度矩阵) -
Vector
- 向量是矩阵的特例(列向量或行向量)
示例:Vector3f
(3 维单精度列向量)、VectorXd
(动态大小的双精度列向量) -
Array
- 用于逐元素操作(非线性代数运算)
示例:ArrayXXd
(动态大小的双精度数组)
2. 矩阵和向量的初始化与操作
-
Map
- 将现有 C/C++ 数组映射为 Eigen 对象(零拷贝操作)
示例:Map<Vector3f>(data)
(将float[3]
转为 Eigen 向量) -
Block
- 表示矩阵或向量的子块
示例:matrix.block<2,2>(1,1)
(提取 2x2 的子矩阵) -
Transpose
- 矩阵转置视图 -
Conjugate
- 共轭视图 -
Diagonal
- 对角矩阵视图
3. 线性代数求解器
Eigen 提供了多种线性方程组求解器和分解方法:
-
直接求解器(适用于稠密矩阵)
-
PartialPivLU
- 部分主元 LU 分解 -
FullPivLU
- 完全主元 LU 分解 -
HouseholderQR
- QR 分解 -
ColPivHouseholderQR
- 列主元 QR 分解 -
FullPivHouseholderQR
- 完全主元 QR 分解 -
LLT
- Cholesky 分解(正定矩阵) -
LDLT
- LDLT 分解(半正定矩阵)
-
-
迭代求解器(适用于稀疏矩阵)
-
ConjugateGradient
- 共轭梯度法 -
BiCGSTAB
- 稳定双共轭梯度法 -
LeastSquaresConjugateGradient
- 最小二乘共轭梯度法
-
4. 几何变换类
用于 2D/3D 几何变换(旋转、平移、缩放等):
-
Rotation2D
- 2D 旋转 -
AngleAxis
- 轴角表示的 3D 旋转 -
Quaternion
- 四元数表示的旋转 -
Transform
- 仿射或射影变换(4x4 矩阵)
示例:Transform<float, 3, Affine>
(3D 仿射变换)
5. 稀疏矩阵类
用于处理稀疏矩阵:
-
SparseMatrix
- 稀疏矩阵表示(如SparseMatrix<double>
) -
SparseVector
- 稀疏向量 -
稀疏矩阵分解
-
SimplicialLLT
/SimplicialLDLT
- 稀疏 Cholesky 分解 -
SparseLU
- 稀疏 LU 分解 -
SparseQR
- 稀疏 QR 分解
-
6. 其他工具类
-
EigenBase
- 所有矩阵/表达式的基类 -
DenseBase
- 稠密矩阵的基类 -
IO
- 矩阵的输入/输出(如Eigen::IOFormat
) -
STL
兼容接口 - 允许 Eigen 对象与 STL 容器交互
示例代码片段
cpp
#include <Eigen/Dense>
using namespace Eigen;Matrix3f A; // 3x3 浮点矩阵
Vector4f b; // 4 维浮点向量
A << 1, 2, 3, 4, 5, 6, 7, 8, 9; // 初始化
b = A.col(0); // 提取第一列// 解线性方程组 Ax = b
Vector3f x = A.partialPivLu().solve(b);// 几何变换
Transform<float, 3, Affine> t = AngleAxisf(M_PI/2, Vector3f::UnitZ());
Eigen 的模块化设计允许用户仅包含需要的头文件(如 <Eigen/Dense>
或 <Eigen/Sparse>
)。具体文档可参考 Eigen 官方文档。