Eigen 代码结构
目录结构
Eigen 的目录结构分为两大部分 src 和 头文件,如下所示。头文件按照具体功能划分,使用时只需将其包含在内即可,例如想使用特征值计算,那么就直接 #include<Eigen/Eigenvalues>
即可;而 src 目录则是对应的实现。
Eigen$ tree -L 1
├── src
├── Cholesky
├── CholmodSupport
├── Core
├── Dense
├── Eigen
├── Eigenvalues
├── Geometry
├── Householder
├── IterativeLinearSolvers
├── Jacobi
├── KLUSupport
├── LU
├── MetisSupport
├── OrderingMethods
├── PardisoSupport
├── PaStiXSupport
├── QR
├── QtAlignedMalloc
├── Sparse
├── SparseCholesky
├── SparseCore
├── SparseLU
├── SparseQR
├── SPQRSupport
├── StdDeque
├── StdList
├── StdVector
├── SuperLUSupport
├── SVD
└── UmfPackSupport
src 虽然是对应的实现,但是却没有一个 cpp/cc 文件 ,而是与上一级头文件一一对应的子目录,各子目录是对应的实现(都是 .h 文件)。
$ ls Eigen/src/
Cholesky Jacobi PaStiXSupport SPQRSupport
CholmodSupport KLUSupport plugins StlSupport
Core LU QR SuperLUSupport
Eigenvalues MetisSupport SparseCholesky SVD
Geometry misc SparseCore UmfPackSupport
Householder OrderingMethods SparseLU
IterativeLinearSolvers PardisoSupport SparseQR
模块和头文件
下表列出常用的一些模块和它所对应的头文件,以及该模块包含的功能。
模块 | 头文件 | 内容 |
---|---|---|
Core | <Eigen/Core> | 矩阵和数组(向量)类(Matrix、Array),基于线性代数还有数组操作 |
Geometry | <Eigen/Geometry> | 变换、平移、缩放、2D 旋转和 3D 旋转(包括四元数和角轴) |
LU | <Eigen/LU> | 使用求解器进行求逆,行列式,LU 分解操作 |
Cholesky | <Eigen/Cholesky> | 使用求解器进行 LLT、LT、Cholesky 分解 |
Householder | <Eigen/Householder> | Householder 变换;被用作几个线性代数模块 |
SVD | <Eigen/SVD> | SVD 分解与最小二乘求解器 |
QR | <Eigen/QR> | QR 分解 |
Eigenvalues | <EIgen/Eigenvalues> | 特征值,特征向量分解 |
Sparse | <Eigen/Sparse> | 稀疏矩阵存储以及相关的基本线性代数 |
Dense | <Eigen/Dense> | 包括 Core、Geometry、LU、Cholesky、SVD、QR、Eigenvalues 的头文件 |
Eigen | <Eigen/Eigen> |