每当我尝试这段代码时,我的断言都会失败! 如何使用循环填充矩阵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; // ???
}
}
}
答案 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)
Matrix2d
是Matrix<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;
}
}