本征创建 super/sub 对角矩阵

eigen create super/sub diagonal matrix

如何在不循环的情况下创建一个沿任意指定对角线包含元素的矩阵?

一个玩具示例将指定一个 3x3 的矩阵并将索引设置为 -1,0,1 并获得一个完整的矩阵,如下所示:

 1     1     0
 1     1     1
 0     1     1

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

输出你问的矩阵。