2013-04-13 175 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;