2013-04-13 128 views
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缺乏()操作。使用特征值设置对角矩阵对角线值的正确方法是什么?

回答

7

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

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

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

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