参考
Eigen3 主页,Eigen3 官网教程
矩阵的本质,通过多种矩阵的应用去感受矩阵本质
3Blue1Brown 的线性代数,用可视化方法来表现线性代数的特性,强推
如何理解复数和虚数,有动画方便理解复数的意义
相关文章
Eigen3 基础数据类型和操作
矩阵的核心是向量和线性代数,而线性代数的核心是向量加法和标量乘法。
Vector 向量类
向量类是列或行只有 1 的特殊矩阵,Vector 类是列向量,RowVector 类是行向量。
预定义好的向量模板
和矩阵类似,向量也有预定义好的模板:
VectorNt 格式:N 大小的列向量,例如 Vector2f
是 Matrix<float, 2, 1>
;
RowVectorNt 格式:N 大小的行向量,例如 RowVector3d
是 Matrix<double, 1, 3>
;
维数大小 N ∈ {2,3,4,X}。
数据类型 t ∈ {i,f,d,cf,cd}。分别是 int ,float,double,complex<float>(复数),complex<double>(复数)。
向量初始化和系数读写
void TestVector()
{
setlocale(LC_ALL, "zh_CN.UTF-8"); // 支持 ros 打印中文
Eigen::Vector3i v(3, 6, 9);
ROS_INFO_STREAM("列向量3i v 构造初始化指定了系数和行数:" << std::endl << v);
//! 固定向量类不支持 << 赋值,会导致段错误,但是动态向量类支持。
Eigen::RowVectorXf u(5);
u << 1.2, 2.3, 3.4, 4.5, 5.6;
ROS_INFO_STREAM("动态行向量 u 默认初始化:" << std::endl << u);
Eigen::VectorXd w(5);
w.Random(5);
ROS_INFO_STREAM("列向量 w 随机赋值:" << std::endl << w);
ROS_INFO_STREAM("列向量[]访问 w[2]:" << std::endl << w[2]);
w[2] = 12.34;
ROS_INFO_STREAM("列向量[]修改 w[2]:" << std::endl << w[2]);
}