Eigen是纯头文件C++库,无需编译,包含即可使用;支持矩阵向量定义如MatrixXd、Vector3d,常用操作有乘法、求逆、转置、行列式、特征分解及LU/QR解线性方程组,语法简洁高效。

在C++中使用Eigen库进行线性代数计算非常高效且直观。Eigen是一个开源的C++模板库,专门用于矩阵、向量和线性代数运算,无需额外编译,只需包含头文件即可使用。
安装与配置Eigen
Eigen是纯头文件库,不需要编译,使用前只需下载并配置好头文件路径:
- 从官网 https://eigen.tuxfamily.org 下载最新版本
- 解压后将Eigen文件夹复制到项目include目录,或系统头文件目录
- 在代码中通过
#include引入核心模块
基本矩阵与向量定义
Eigen提供了多种矩阵和向量类型,常用的是Matrix模板。
常用简写包括:MatrixXd(双精度动态大小矩阵)、Vector3d(三维双精度向量)等。
立即学习“C++免费学习笔记(深入)”;
示例:
#include#include int main() { Eigen::MatrixXd A(2, 2); // 2x2 动态大小矩阵 A << 1, 2, 3, 4;
Eigen::VectorXd b(2); // 2维向量 b << 5, 6; std::cout zuojiankuohaophpcnzuojiankuohaophpcn "Matrix A:\n" zuojiankuohaophpcnzuojiankuohaophpcn A zuojiankuohaophpcnzuojiankuohaophpcn "\n\n"; std::cout zuojiankuohaophpcnzuojiankuohaophpcn "Vector b:\n" zuojiankuohaophpcnzuojiankuohaophpcn b zuojiankuohaophpcnzuojiankuohaophpcn "\n";}
常见线性代数操作
Eigen支持丰富的线性代数运算,语法简洁自然。
-
矩阵乘法:使用
*操作符Eigen::VectorXd x = A * b; -
求逆:调用
.inverse()Eigen::MatrixXd A_inv = A.inverse(); -
转置:调用
.transpose()Eigen::MatrixXd A_trans = A.transpose(); -
行列式:调用
.determinant()double det = A.determinant(); -
特征值分解:
SelfAdjointEigenSolver或EigenSolverEigen::EigenSolver<:matrixxd> es(A);
求解线性方程组 Ax = b
推荐使用QR分解或LU分解,比显式求逆更稳定。
示例(使用LU分解):
Eigen::VectorXd x = A.lu().solve(b);
if ((A * x - b).norm() < 1e-10) {
std::cout << "Solution x:\n" << x << "\n";
}
也可使用.colPivHouseholderQr().solve(b)获得更鲁棒的解。
基本上就这些。Eigen语法贴近数学表达,配合现代C++特性,能大幅简化线性代数编程。只要正确引入头文件,定义矩阵向量,就可以直接进行各种高效计算。











