c++ Eigen库怎么入门 c++矩阵运算与线性代数【教程】

最简单方式是安装编译器后直接包含头文件:#include ,使用MatrixXd、Vector3d等类型,无需链接外部库;三步包括配置头文件路径、编写含Eigen::MatrixXd的示例代码并编译运行。

直接上手 Eigen 最简单的方式是:装好编译器,加一行 #include ,然后用 MatrixXdVector3d 这类类型写矩阵和向量——它不依赖外部库,头文件即用,编译时也不用链接。

快速开始:三步跑通第一个矩阵计算

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 + BA - BA * B(矩阵乘法,不是逐元素)
  • 逐元素运算加 .array()A.array() * B.array() 是哈达玛积
  • 转置、共轭、伴随:A.transpose()A.conjugate()A.adjoint()
  • 求逆、行列式、特征值:用 FullPivLUPartialPivLUSelfAdjointEigenSolver 等分解类,不建议直接调 inverse()

线性方程组与分解技巧

Ax = b 别手写高斯消元,用 Eigen 提供的分解接口更稳更快:

  • 一般矩阵 → PartialPivLU(快,适合多次解不同右端项)
  • 对称正定矩阵 → LLT(最快最稳)
  • 需要最小二乘 → HouseholderQRColPivHouseholderQR

例如:

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); // 自动选最优算法