Собственное создание супер / суб диагональной матрицы - PullRequest
0 голосов
/ 06 декабря 2018

Как можно создать матрицу с элементами вдоль любой указанной диагонали без зацикливания?

В качестве примера можно было бы указать матрицу единиц 3х3 и установить индексы равными -1,0,1 и получить полную матрицу, которая выглядела бы так:

 1     1     0
 1     1     1
 0     1     1

1 Ответ

0 голосов
/ 06 декабря 2018

Метод diagonal принимает индекс (ноль является значением по умолчанию и указывает основную диагональ).Отрицательные индексы - это субдиагонали, положительные - это супердиагонали.Например:

#include <iostream>
#include <Eigen/Core>

using namespace Eigen;

int main()
{
    MatrixXd mat(3,3);

    mat.setZero();

    for (auto i : { -1, 0, 1 })
        mat.diagonal(i).setConstant(1);

    std::cout << mat << "\n\n";
    return 0;
}

выводит матрицу, о которой вы спрашивали.

...