Eigen核心三点:正确包含头文件、选对矩阵类型、用好表达式模板;纯头文件实现,无需BLAS,编译快、性能高;常用MatrixXd(动态双精度)和Matrix3d(固定3×3),构造即初始化,如MatrixXd A(3,4)创建3行4列零矩阵。

用Eigen做C++矩阵运算,核心就三点:正确包含头文件、选对矩阵类型、用好表达式模板。它不依赖外部BLAS,纯头文件实现,编译快、性能高,适合大多数科学计算场景。
快速上手:定义与初始化矩阵
Eigen里最常用的是MatrixXd(动态大小、double精度)和Matrix3d(固定3×3)。不需要手动管理内存,构造即初始化。
-
动态矩阵:
MatrixXd A(3, 4);创建3行4列全零矩阵;A 按行赋值(逗号分隔,分号换行) -
固定大小矩阵:
Matrix3f B; B.setIdentity();快速得单位阵;Vector3d v(1, 2, 3);列向量也是Matrix的特例 -
从C数组构造:
double raw[6] = {1,2,3,4,5,6}; Map零拷贝映射,适合对接旧代码M(raw, 2, 3);
常用运算:写法自然,自动优化
加减乘除、转置、逆、行列式等都用直观操作符或成员函数,Eigen在编译期做表达式模板优化,多数运算不产生临时对象。
-
基本运算:
C = A * B + A.transpose();一行完成,内部自动调度;A.array() * B.array()表示逐元素乘(注意.array()) -
分解与求解:
LLT做Cholesky分解;chol(A); VectorXd x = chol.solve(b);解Ax=b,比手写更稳更快 -
特征值:
SelfAdjointEigenSolver仅适用于对称阵;eig(A); eig.eigenvalues()返回VectorXcd(复数)
性能与安全提醒
默认开启断言检查(如越界访问、维度不匹配),发布版可加-DNDEBUG关闭。真正影响速度的是内存布局和表达式惰性求值——别反复调用.eval(),除非需要强制计算。
立即学习“C++免费学习笔记(深入)”;
- 列优先存储(Fortran风格),遍历时优先用
for (int j=0; j - 避免写
A = A * B;(会触发别名问题),改用A.noalias() = A * B;或直接A *= B; - 大矩阵建议用
MatrixXf(float)省内存,精度够用时比double快不少
基本上就这些。Eigen不复杂但容易忽略细节,把矩阵类型选对、运算符用准,再配上合适的分解器,日常线性代数任务基本全覆盖。










