Как я могу умножить два Eigen::DiagonalMatrix и добавить результат к Eigen::SparseMatrix?

Я пытаюсь написать решатель для линейной системы, и, исходя из Matlab/NumPy и т.п., я нахожу типы Eigen немного ограниченными.

Моя текущая проблема решается следующим образом:

D * DD + S

Где D и DD имеют тип Eigen::DiagonalMatrix<double, Eigen::Dynamic, Eigen::Dynamic>, а S — это Eigen::SparseMatrix`.

Есть ли (эффективный) способ сделать это? Это кажется довольно простым, поэтому я должен что-то упустить. Я готов отказаться от того, чтобы D и DD были DiagonalMatrix, а они были SparseMatrix, пока приведенное выше выражение слишком сложное.


person rubenvb    schedule 04.12.2017    source источник


Ответы (1)


Предполагая, что разреженная матрица S уже имеет ненулевые коэффициенты по диагонали, вы можете сделать:

S.diagonal() += D.cwiseProduct(DD);
person ggael    schedule 04.12.2017