3

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

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

但是,这不起作用,因为diagonal_matrix缺少()操作员。使用特征设置对角矩阵的对角值的正确方法是什么?

4

1 回答 1

9

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

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

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

diag_mat.diagonal() = ArrayXi::LinSpaced(5,0,4).square() + 2;
于 2013-04-14T19:52:13.727 回答