- 先说明下 Eigen 中的 Matrix 和 Vector:
-
所有的矩阵和向量都是
Matrix模板类
(👉 官方指路) 的对象,向量 Vector 只是一种特殊的矩阵 Matrix (一行或者一列)// Matrix 模板类如下 template<typename Scalar_, int Rows_, int Cols_, int Options_, int MaxRows_, int MaxCols_> class Eigen::Matrix< Scalar_, Rows_, Cols_, Options_, MaxRows_, MaxCols_ >
模板参数 作用 值 Scalar_ 数据类型 如 float, double, int … Rows_ 行数 给定数值 or 动态 Dynamic,运行时确定 Cols_ 列数 给定数值 or 动态 Dynamic,运行时确定
-
⭐ 官方对于 Eigen::MatrixXd 和 Eigen::VectorXd
的说明: X 代表非固定,是动态的💜 Dynamic
- 本质上是两种官方提供了的便于使用的类型 (类似
Eigen::Matrix3d 和 Eigen::Vector3d
),具体设定如下
typedef Matrix< double, Dynamic, Dynamic > Eigen::MatrixXd 👉 Eigen::MatrixXd 官方文档指路
Dynamic
×Dynamic
matrix of type double.
typedef Matrix< double, Dynamic, 1 > Eigen::VectorXd 👉 Eigen::VectorXd 官方文档指路
Dynamic
×1 vector of type double.
- 构造函数 💜 不指定大小则不执行空间分配
// 默认构造: // 不执行任何空间分配,也不初始化元素 MatrixXd m; VectorXd v; // 指定大小: // 分配相应大小的空间,不初始化元素 MatrixXd m(2,2); VectorXd v(2);
- 获取元素 💜 通过括号获取
(i, j, ...)
or(i)
// MatrixXd: (i, j, ...) // MatrixXd m(2,2); m(0,0) = 1; m(1,0) = 2; m(0,1) = 3; m(1,1) = m(0,0) + m(1,0) + m(0,1); std::cout << "Matrix m:\n" << m << std::endl; // VectorXd (i) // VectorXd v(2); v(0) = 1; v(1) = v(0) + 1; std::cout << "Vector v:\n" << v << std::endl;