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();
//求行列式
推荐阅读
- 个人日记|K8s中Pod生命周期和重启策略
- 学习分享|【C语言函数基础】
- C++|C++浇水装置问题
- 数据结构|C++技巧(用class类实现链表)
- C++|从零开始学C++之基本知识
- 步履拾级杂记|VS2019的各种使用问题及解决方法
- leetcode题解|leetcode#106. 从中序与后序遍历序列构造二叉树
- 动态规划|暴力递归经典问题
- 麦克算法|4指针与队列
- 遇见蓝桥遇见你|小唐开始刷蓝桥(一)2020年第十一届C/C++ B组第二场蓝桥杯省赛真题