Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

C. API 快速索引

矩阵创建与初始化

功能API所在章节
固定大小矩阵Matrix3d, Matrix4f3.1
动态大小矩阵MatrixXd, MatrixXf3.1
向量类型Vector3d, VectorXd3.1
零矩阵Matrix::Zero(rows, cols)3.2
单位矩阵Matrix::Identity(rows, cols)3.2
随机矩阵Matrix::Random(rows, cols)3.2
常量矩阵Matrix::Constant(rows, cols, value)3.2

算术运算

功能API所在章节
矩阵加法A + B3.3
矩阵减法A - B3.3
矩阵乘法A * B3.3
数乘A * scalar3.3
转置A.transpose()3.3
行列式A.determinant()3.3
逆矩阵A.inverse()3.3
点积v1.dot(v2)3.4
叉积v1.cross(v2)3.4
范数v.norm(), v.lpNorm<1>()3.4

块操作

功能API所在章节
通用块A.block(i, j, rows, cols)4.1
A.row(i)4.1
A.col(j)4.1
左上角A.topLeftCorner(rows, cols)4.1
右下角A.bottomRightCorner(rows, cols)4.1
向量头部v.head(n)4.1
向量尾部v.tail(n)4.1
向量段v.segment(start, n)4.1

矩阵分解与求解

功能API所在章节
LU分解PartialPivLU, FullPivLU5.1, 5.4
QR分解HouseholderQR, ColPivHouseholderQR5.1, 5.4
完全正交分解CompleteOrthogonalDecomposition5.1
Cholesky分解LLT, LDLT5.1, 5.4
SVD分解JacobiSVD, BDCSVD5.1, 5.3
特征值分解EigenSolver, SelfAdjointEigenSolver5.2
求解线性方程solver.solve(b), completeOrthogonalDecomposition().solve(b)5.1

几何变换

功能API所在章节
旋转矩阵Rotation2D, AngleAxis, toRotationMatrix()6.1, 6.2
四元数Quaterniond6.2
欧拉角MatrixBase::eulerAngles(a0, a1, a2)6.3
变换矩阵Transform, Affine3d, Isometry3d6.4
旋转+平移Translation3d * AngleAxisd, Translation3d * Quaterniond6.4

Array 类(逐元素运算)

功能API所在章节
逐元素乘法A.array() * B.array()4.2
逐元素除法A.array() / B.array()4.2
平方根A.array().sqrt()4.2
指数A.array().exp()4.2
对数A.array().log()4.2
幂运算A.array().pow(n)4.2
三角函数A.array().sin(), .cos()4.2
绝对值A.array().abs()4.2

D. 常见错误速查表

错误信息可能原因解决方案参考章节
Eigen/Core: No such file头文件路径错误检查-I路径配置1.1, 1.2
requires at least c++14C++标准过低添加-std=c++14 或更高标准9.1
JacobiSVD is not a member of Eigen模块头文件缺失补充 <Eigen/Dense> 或按需包含模块头文件9.1
incomplete type ... used in nested name specifier包含层级不完整检查是否缺少 SVD / Eigenvalues 等头文件9.1
Assertion failed维度不匹配验证运算兼容性9.2, 9.3
矩阵包含NaN/Inf数值溢出或奇异矩阵检查条件数或最小奇异值,必要时使用伪逆9.3, 9.6
内存对齐错误固定大小矩阵对齐敏感场景使用EIGEN_MAKE_ALIGNED_OPERATOR_NEW等方案9.2
编译缓慢模板展开开销使用预编译头、减少不必要头文件包含8.3
运行时断言失败调试模式检查检查输入维度和别名问题9.2, 9.3

E. 快速参考表

常用类型别名

别名等价定义说明
Matrix3dMatrix<double, 3, 3>3×3双精度矩阵
Vector3dMatrix<double, 3, 1>3维列向量
RowVector3dMatrix<double, 1, 3>3维行向量
MatrixXdMatrix<double, Dynamic, Dynamic>动态矩阵
VectorXdMatrix<double, Dynamic, 1>动态列向量
ArrayXXdArray<double, Dynamic, Dynamic>动态数组

常用函数

函数说明
setRandom()随机初始化 [-1, 1]
setZero()置零
setOnes()置一
setIdentity()单位矩阵
norm()L2范数
squaredNorm()L2范数平方
dot()点积
cross()叉积(3D)
transpose()转置
inverse()逆矩阵
determinant()行列式
trace()

F. 编译选项速查

# 说明:Eigen 5.0.x 的最低要求是 C++14,本教程中的示例默认按 C++17 组织

# 基础编译
g++ -std=c++17 -I/path/to/eigen -O2 program.cpp

# 通用高性能编译
g++ -std=c++17 -I/path/to/eigen -O3 -march=native \
    -DEIGEN_NO_DEBUG -DNDEBUG program.cpp

# 多线程并行(详见优化篇 8.4 节)
# g++ -std=c++17 -I/path/to/eigen -O3 -march=native -fopenmp \
#     -DEIGEN_NO_DEBUG -DNDEBUG program.cpp

# 调试编译
g++ -std=c++17 -I/path/to/eigen -O0 -g program.cpp

G. 推荐学习资源

  1. 官方文档: https://eigen.tuxfamily.org/
  2. 官方教程: https://eigen.tuxfamily.org/dox/GettingStarted.html
  3. API参考: https://eigen.tuxfamily.org/dox/modules.html
  4. GitLab仓库: https://gitlab.com/libeigen/eigen

总结

本教程系统介绍了 Eigen 库的各个方面:

  • 基础篇:了解 Eigen 的核心特性和设计理念
  • 安装篇:掌握多平台安装和 CMake 集成方法
  • 矩阵基础篇:熟练进行矩阵与向量操作
  • 进阶篇:掌握块操作、广播、Map/Ref 等高级用法
  • 线性代数篇:学习矩阵分解与求解的一切
  • 几何变换篇:掌握旋转、四元数、仿射变换
  • 稀疏矩阵篇:处理大规模稀疏计算
  • 优化篇:学会性能调优技巧
  • 调试篇:具备问题排查能力
  • 实战篇:能够应用于实际项目
  1. 熟练运用Eigen进行科学计算
  2. 根据场景选择合适的算法和数据结构
  3. 优化代码性能,发挥硬件潜力
  4. 独立解决开发中遇到的问题

本教程基于Eigen 5.0.1版本编写,以官方文档为准。