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

Fill matrix A ( Eigen::Matrix2d A) with numbers using loops

本文关键字:Eigen Matrix2d 循环 数字 填充      更新时间:2023-10-16

每当我尝试这段代码,我得到一个断言失败!如何用循环填充矩阵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;   // ???
    }
  }
}

好吧,你做的是对的。然而,Matrix2d类,顾名思义,是一个2x2矩阵。所以你不能在1之上增加row/col:

 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;
    }
  }

Matrix2dMatrix<double, 2, 2>的类型定义。所以它是一个2x2矩阵,你访问的列和行一直到4,这就是为什么你得到Assertion failed。你需要一个 MatrixXdx5:

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