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