如何使用eigen设置沿对角矩阵的值?

时间:2013-04-13 21:30:19

标签: eigen

我正在尝试使用特征构造对角矩阵,然后沿对角线设置值:

        Eigen::DiagonalMatrix<int, Eigen::Dynamic> diagonal_matrix(5);
        for (int i = 0; i < 5; ++i) {
            diagonal_matrix(i, i) = i * i + 2;
        }

但是,这不起作用,因为diagonal_matrix缺少()运算符。使用特征?

设置对角矩阵的对角线值的正确方法是什么?

1 个答案:

答案 0 :(得分:9)

这个运算符不可用,因为我们不得不禁止用i!= j用(i,j)调用它,因此这样的函数没有意义。你必须使用一个更详细的方法,包括采取对角线:

diag_mat.diagonal()[i] = ...;

这里,.diagonal()成员返回对角线的表达式作为1D向量。您也可以使用高级例程设置它,例如线性间隔值的随机值。要重现您的示例:

diag_mat.diagonal() = ArrayXi::LinSpaced(5,0,4).square() + 2;