#c #eigen #eigen3
#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; // ???
}
}
}
Комментарии:
1. я должен был использовать Eigen::MatrixXd A (S, B); теперь это работает ,,
Ответ №1:
Ну, то, что вы делаете, правильно. Однако Matrix2d
класс, как следует из названия, представляет собой матрицу 2×2. Таким образом, вы не можете увеличить row / col выше 1:
Eigen::Matrix2d A;
for (int row = 0; row < 2; row)
{
for (int col = 0; col < 2; col)
{
A(row,col) = 10;
}
}
Если вам нужна матрица 5×5, вы можете использовать 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;
}
}
Ответ №2:
Matrix2d
является определением Matrix<double, 2, 2>
типа . Итак, это матрица 2×2, и вы обрабатываете столбцы и строки до 4, вот почему вы получаете Assertion failed
. Вам нужно MatrixXd
5×5:
Eigen::MatrixXd A(5, 5);
for (int row = 0; row < 5; row)
{
for (int col = 0; col < 5; col)
{
A(row,col) = 10;
}
}