Метод 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;
}
выводит матрицу, о которой вы спрашивали.