Eigen初见

Eigen是基于C++模板的矩阵运算库,在SLAM中是必须掌握的。Eigen有一个特别的地方就是它是一个完全用头文件搭建的库,不需要链接库文件
Eigen中矩阵的定义
【Eigen初见】在CMakeLists.txt中指定Eigen的头文件目录

include_directories("usr/include/eigen3")

//Eigen核心部分 #include //用于稠密矩阵的代数运算 #include Matrix A; Matrix B; Matrix C; // 支持动态大小的矩阵 Matrix3f P, Q, R; // 3x3 float matrix. Vector3f x, y, z; // 3x1 float matrix. RowVector3f a, b, c; // 1x3 float matrix. VectorXd v; // Dynamic column vector of doubles

矩阵类型转换。
Eigen矩阵不支持自动类型提升,必须显式地对矩阵类型进行转换。
//// Type conversion // Eigen// Matlab A.cast(); // double(A) A.cast(); // single(A) A.cast(); // int32(A) A.real(); // real(A) A.imag(); // imag(A) // if the original type equals destination type, no work is done

Eigen 求解线性方程组 Ax = b,一般不会直接求逆,而是采用矩阵分解,速度会快很多
x = A.ldlt().solve(b)); // A sym. p.s.d.#include x = A.llt().solve(b)); // A sym. p.d.#include x = A.lu().solve(b)); // Stable and fast. #include x = A.qr().solve(b)); // No pivoting.#include x = A.svd().solve(b)); // Stable, slowest. #include

Eigen 求矩阵特征值
A.eigenvalues(); // eig(A); EigenSolver eig(A); // [vec val] = eig(A) eig.eigenvalues(); // diag(val) eig.eigenvectors(); // vec

Eigen 的一些矩阵操作
trace(); //求迹 inverse(); //求逆矩阵 determinant(); //求行列式

    推荐阅读