最简单方式是安装编译器后直接包含头文件:#include ,使用MatrixXd、Vector3d等类型,无需链接外部库;三步包括配置头文件路径、编写含Eigen::MatrixXd的示例代码并编译运行。
直接上手 Eigen 最简单的方式是:装好编译器,加一行 #include ,然后用 MatrixXd、Vector3d 这类类型写矩阵和向量——它不依赖外部库,头文件即用,编译时也不用链接。
1. 确保你的项目能访问 Eigen 头文件(下载解压后把 Eigen/ 文件夹路径加入 include 目录)
2. 写个最简例子:
#include#include int main() { Eigen::MatrixXd A(2, 2); A << 1, 2, 3, 4; Eigen::VectorXd b(2); b << 5, 6; std::cout << "A * b =\n" << A * b << std::endl; }
3. 编译时加上 -std=c++11(或更高),无需额外链接选项
Eigen 的核心是模板矩阵类,类型名自带维度和精度信息:
Matrix:固定大小 3×3 双精度矩阵(栈上分配,快)MatrixXd:动态大小双精度矩阵(堆上分配,灵活)Vector3d:固定长度 3 的双精度向量(等价于 Matrix)RowVectorXf:动态行向量,单精度初始化推荐用逗号初始化器(),支持链式赋值;也可用 setZero()、setIdentity()、Random() 等成员函数
算术运算符重载自然直观,但注意:所有运算默认返回表达式对象(lazy evaluation),真正计算发生在赋值时:
A + B、A - B、A * B(矩阵乘法,不是逐元素).array():A.array() * B.array() 是哈达玛积A.transpose()、A.conjugate()、A.adjoint()
FullPivLU、PartialPivLU、SelfAdjointEigenSolver 等分解类,不建议直接调 inverse()
解 Ax = b 别手写高斯消元,用 Eigen 提供的分解接口更稳更快:
PartialPivLU(快,适合多次解不同右端项)LLT(最快最稳)HouseholderQR 或 ColPivHouseholderQR
例如:
Eigen::MatrixXd A = Eigen::MatrixXd::Random(3, 3); Eigen::VectorXd b = Eigen::VectorXd::Random(3); auto lu = A.partialPivLu(); Eigen::VectorXd x = lu.solve(b); // 自动选最优算法