如何将两个 Eigen::DiagonalMatrix 相乘并将结果添加到 Eigen::SparseMatrix?

How can I multiply two Eigen::DiagonalMatrix and ad the result to an Eigen::SparseMatrix?

我正在尝试为线性系统编写求解器,来自 Matlab/NumPy 等,我发现 Eigen 的类型有点受限。

我当前的问题是围绕这个解决的:

D * DD + S

其中 DDD 属于 Eigen::DiagonalMatrix<double, Eigen::Dynamic, Eigen::Dynamic> 类型,S 是 Eigen::SparseMatrix`。

有没有(有效的)方法来做到这一点?这看起来很基本,所以我一定遗漏了一些东西。我愿意放弃 DDD 成为 DiagonalMatrix 而他们成为 SparseMatrix,只要上面的表达式太复杂。

假设稀疏矩阵 S 沿对角线已经有非零系数,你可以这样做:

S.diagonal() += D.cwiseProduct(DD);