Eigen3:仅沿一维的动态矩阵:构造失败

问题描述

我可以轻松定义固定行数和未定义列数的矩阵类型:

  typedef Matrix<double,6,Dynamic> dMat6rowsNCols;
  dMat6rowsNCols M1;

但我不知道如何实例化它,这些尝试无法编译:

  M1.Zero(4);
  M1 = dMat6rowsNCols::Zero(4);

我可以问你一些提示吗?

干杯

西尔文

解决方法

来自DenseBase::Zero(Index)的{​​{3}}:

这仅适用于向量(行向量或列向量),即在编译时已知具有一行或一列的矩阵。

您必须使用 DenseBase::Zero(Index,Index)

M1 = dMat6rowsNCols::Zero(6,4);

如果您使用的是当前的 Eigen 主干,您可以使用 Eigen::NoChange 来实现某些功能,例如

M1.setZero(Eigen::NoChange,4);

附带说明:调用 M1.Zero 不会调用将所有系数设置为 0 的成员函数,而是一种不太常见的调用静态函数 documentation 的方法。您可能正在寻找 DenseBase::::Zero