Eigen线性代数库相关教程

重要说明:本文从网上资料整理而来,仅记录博主学习相关知识点的过程,侵删。

一、参考资料

Eigen官网
Eigen库学习笔记
Eigen 部分功能介绍
eigen 中四元数、欧拉角、旋转矩阵、旋转向量
Eigen中三维位姿表示方式以及相互转换
SLAM本质剖析-Eigen

二、相关介绍

1. Eigen简介

Eigen库是一个开源的C++线性代数库,它提供了快速的有关矩阵的线性代数运算,矩阵和矢量运算,数值分析及其相关的算法,还包括解方程等功能。

2. 向量点乘与叉乘

向量点乘与叉乘的概念及几何意义

三、Matrix矩阵类

1. Matrix矩阵

Matrix
// 定义一个3x3的float型的矩阵a
Matrix a;

2. 向量

// 定义列向量,3行1列,float类型
typedef Matrix Vector3f;

// 定义行向量,1行2列,int类型
typedef Matrix RowVector2i;

3. 动态矩阵

在Eigen中的矩阵,可以不在编译阶段指定矩阵大小(rowcol),可以使用 Dynamic 来指定矩阵大小。

// 定义一个未知大小的动态矩阵,元素类型为 `float`
typedef Matrix MatrixXf;

// 定义一个未知大小的动态矩阵,元素类型为 `double`
typedef Matrix MatrixXd;

// 定义一个行数未知的动态向量,元素类型为 `int`
typedef Matrix VectorXi;

// 定义一个行数未知的动态向量,元素类型为 `float`
typedef Matrix VectorXf;

// 定义一个行数为3,列数未知的动态矩阵,元素类型为 `float`
Matrix a;

4. 构建矩阵

构建动态矩阵/向量

// 构建一个3x3的矩阵,元素类型为 `float`
Matrix3f a;

// 构建一个3x3的动态矩阵,大小为0x0,元素类型为 `float`
MatrixXf b;

// 构建一个10x15的动态矩阵
MatrixXf c(10, 15);

// 构建一个长度为30的动态列向量,元素类型为 `float`
VectorXf d(30);

构建固定矩阵/向量

// 构建一个长度为2的列向量,元素类型为 `double`
Vector2d e(5.0, 6.0);

// 构建一个长度为3的列向量,元素类型为 `double`
Vector3d f(5.0, 6.0, 7.0);

// 构建一个长度为4的列向量,元素类型为 `double`
Vector4d g(5.0, 6.0, 7.0, 8.0);

四、Array数组类

Array

array可以表示一维数组和二维数组。

Array ArrayXf;

Array Array3f;

Array ArrayXXd;

Array Array33d;

1. 构造数组

ArrayXXf m(2, 2);
m << 1.0, 2.0,
	3.0, 4.0;

m(0, 0) = 1.0; m(0, 1) = 2.0;
m(1, 0;) = 3.0; m(1, 1) = m(0, 1)+m(1, 0);

2. 矩阵类与数组类

如果需要线性代数相关的运算,就使用矩阵类;如果只是需要元素级别的操作,就使用数组类。

  • 矩阵类转数组类:.array()
  • 数组类转矩阵类:.matrix()

五、Eigen相关经验

1. 安装Eigen

Eigen

# 安装eigen
sudo apt-get install libeigen3-dev

2. 调用Eigen

2.1 配置CMakeList.txt文件

find_package(……Eigen3 REQUIRED)

2.2 导入头文件

#include 

3. Eigen常用语法

// 创建了一个 3*3的矩阵
MatrixXd m = MatrixXd::Random(3, 3);

// 矩阵数据的获取
m.rows();//获取行数
m.cols();//获取列数
m.size();//获取系数

// 改变resize
m.resize(4, 4);

你可能感兴趣的:(自动驾驶技术,Eigen,线性代数库)