Какой самый эффективный способ добавить Eigen :: DiagonalMatrix в Eigen :: SparseMatrix

Я удивлен, узнав, что невозможно просто добавить Eigen::DiagonalMatrix для Eigen::SparseMatrix:

#include <Eigen/Core>
#include <Eigen/Sparse>

int main()
{
Eigen::Matrix4d M;
M<<1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16;
Eigen::SparseMatrix<double> S = M.sparseView();
Eigen::DiagonalMatrix<double,Eigen::Dynamic> D =
Eigen::VectorXd::LinSpaced(4,1,4).asDiagonal();
Eigen::SparseMatrix<double> T = D+S;
}

не скомпилирует:

 error: invalid operands to binary expression ('Eigen::DiagonalMatrix<double, Eigen::Dynamic>' and 'Eigen::SparseMatrix<double>')
Eigen::SparseMatrix<double> T = D+S;

Кажется, в Eigen 3.3 я могу использовать:

  T.diagonal() = D.diagonal() + T.diagonal();

Но это не компилируется для более старой (более стабильной) Eigen 3.2. *:

error: no viable overloaded '='
T.diagonal() = D.diagonal() + T.diagonal();

Действительно ли мне нужно перебирать записи и вставлять их одну за другой?

 Eigen::SparseMatrix<double> T = S;
for(int i = 0;i<T.rows();i++) T.coeffRef(i,i) += D.diagonal()(i);

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]