引言
Eigen是一个基于c++模板的线性代数库,以支持在C++中进行矩阵运算。要在C++中使用Eigen,需要在项目路径中包含文件目录,同时在程序开始前要包含所需头文件路径:
#include <Eigen>
1.矩阵定义
基本矩阵
向量定义(以double类型为例)
Eigen::Vector2d x(1,2) // 2维向量
Eigen::Vector3d x(1,2,3) // 3维向量
Eigen::VectorXd x(n) // 自定义n维向量
矩阵定义(以double类型为例)
Eigen::Matrix2d mat // 2维矩阵
Eigen::Matrix3d mat // 3维矩阵
Eigen::Matrix4d mat // 4维矩阵
Eigen::MatrixXd mat(m,n) // 自定义m行,n列矩阵
Eigen::Matrix <double, m, n> mat; // 自定义m行,n列矩阵
特殊矩阵
单位矩阵:Eigen::MatrixXd::Identity(m, n);
全零矩阵:Eigen::MatrixXd::Zero(m, n);
全一矩阵:Eigen::MatrixXd::Ones(m, n);
随机矩阵:Eigen::MatrixXd::Random(m, n);
**使用:**
先定义:Eigen::Matrix3d mat;
再赋值:mat = Eigen::MatrixXd::Identity(m, n);
三维矩阵(定长):Eigen::Matrix4d mat[10];
索引 mat[2](m,n)
2.矩阵赋值
**向量赋值**
定义:Eigen::VectorXd x(n) // 自定义n维向量
赋值:x(1) = 2;
**矩阵赋值**
定义:Eigen::MatrixXd mat(2,2)
赋值1: mat << 1,2,
3,4;
赋值2: mat(0,1) = 2
3.矩阵运算
+-*/ // 加减乘除
mat.inverse(); // 逆矩阵
mat.dot(w); // 向量mat点积向量w,
mat.cross(w); // 向量mat叉乘向量w
mat.transpose() // 转置
mat.norm() //向量求模,矩阵范数
4.访问矩阵
vec.size(); // 访问向量长度
mat.rows(); // 访问矩阵行数
mat.cols(); // 访问矩阵列数
mat.block<m,n>(i,j) //矩阵块操作,从i,j开始,取m×n大小的矩阵
5.机器人学常用
仿射变换矩阵:Eigen::Affine3d mat;
- 转换4*4矩阵为仿射矩阵:Eigen::Affine3d mat(T);
- 得到旋转矩阵:mat.linear();
- 得到平移矩阵:mat.translation();
创建四元数:Eigen::Quaterniond q(w, x, y, z);
- 访问四元数:q.x() q.y() q.z() q.w();
- 四元数转向量:q.coeffs();
- 四元数转旋转矩阵:q.toRotationMatrix();
- 四元数插值:q_ini.slerp(s,q_fin);