您当前的位置: 首页 > 

我什么都布吉岛

暂无认证

  • 5浏览

    0关注

    292博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Eigen库学习(二)Matrix类

我什么都布吉岛 发布时间:2021-08-12 22:55:49 ,浏览量:5

在Eigen库中,所有的矩阵(matrices)和向量(Vector)都是Matrix模板的具体类。Vectors只是matrices的一种特殊情况,表示仅有一列的矩阵。

一、Matrix 矩阵

Matrix模板有六个模板参数,一般我们只需要用到最前面的三个。这三个参数都有默认参数,现阶段暂时不必理会。这三个强制参数如下:

Matrix
  • Scalar 是一个标量类型,换句话说就是系数类型。如果你想要操作的是浮点型,那就是float;如果操作的是整数,那就是int;
  • RowsAtCompileTime和ColsAtCompileTime是编译阶段已经确定的行列大小;

对于一些常见的矩阵类型,我们还提供了便利的typedef。例如:Matrix4f是一个 4 × 4 4\times4 4×4的浮点型矩阵,其typedef如下:

typedef Matrix Matrix4f;
便捷类型举例MatrixNt for MatrixMatrixXi for Matrix.VectorNt for MatrixVector2f for Matrix.RowVectorNt for MatrixRowVector3d for Matrix. 二、Vector 向量

前面说道Vector是Matrix的一种特殊情况,所以Vector只是一些别名:

typedef Matrix Vector3f;
typedef Matrix RowVector2i;
三、其他的特殊别名
typedef Matrix MatrixXd;
typedef Matrix VectorXi;
四、构造函数

默认构造函数将执行默认初始化:

Matrix3f a;
MatrixXf b;

这种方式是分配在栈上的,下面这个例子则是分配在堆上的:

MatrixXf a(10,15);//10*15未初始化的动态可扩展矩阵
VectorXf b(30);//30*1未初始化动态可扩展矩阵

为了保持编程的一致性,对于方阵Matrix3f,我们仍然可以使用下面这个方法进行初始化:

Matrix3f a(3,3);//虽然说,大小已经固定,但是为了逻辑一致性还是允许这样初始化

最后,对于向量这种类型,我们提供了一些额外的初始化方法:

Vector2d a(5.0, 6.0);
Vector3d b(5.0, 6.0, 7.0);
Vector4d c(5.0, 6.0, 7.0, 8.0); 
五、访问系数(元素,coefficient)
#include 
#include 
 
using namespace Eigen;
 
int main()
{
  MatrixXd m(2,2);
  m(0,0) = 3;
  m(1,0) = 2.5;
  m(0,1) = -1;
  m(1,1) = m(1,0) + m(0,1);
  std::cout             
关注
打赏
1658157489
查看更多评论
0.1115s