使用循环用数字填充矩阵A(Eigen :: Matrix2d A)

时间:2016-10-07 14:50:23

标签: c++ eigen eigen3

每当我尝试这段代码时,我的断言都会失败! 如何使用循环填充矩阵A?

#include <iostream>
#include "../eigen3/Eigen/Dense"
int main ()
{
 Eigen::Matrix2d A;
 for (int row = 0; row < 5; ++row)
  {
   for (int col = 0; col < 5; ++col)
    {
//     A(row,col)=10;   // ???
    }
  }

}

2 个答案:

答案 0 :(得分:3)

嗯,你在做什么是正确的。但是,Matrix2d类,顾名思义是2x2矩阵。所以你不能将行/列增加到1:

 Eigen::Matrix2d A;
 for (int row = 0; row < 2; ++row)
  {
   for (int col = 0; col < 2; ++col)
    {
     A(row,col) = 10;
    }
  }

如果你想要一个5x5矩阵,你可以使用一个带有合适构造函数的Xd矩阵:

 Eigen::MatrixXd A(5, 5);
 for (int row = 0; row < 5; ++row)
  {
   for (int col = 0; col < 5; ++col)
    {
     A(row,col) = 10;
    }
  }

如果在编译时已知维度,您可以选择使用避免内存分配并存在于堆栈中的实现:

 Eigen::Matrix<double, 5, 5> A;
 for (int row = 0; row < 5; ++row)
  {
   for (int col = 0; col < 5; ++col)
    {
     A(row,col) = 10;
    }
  }

答案 1 :(得分:0)

Matrix2dMatrix<double, 2, 2>的typedef。所以它是一个2x2矩阵,你可以获得最多4行的列和行,这就是你获得Assertion failed的原因。您需要MatrixXd 5x5:

Eigen::MatrixXd A(5, 5);
for (int row = 0; row < 5; ++row)
{
   for (int col = 0; col < 5; ++col)
   {
        A(row,col) = 10;
   }
}