稀疏对称矩阵初始化

Sparse symmetric matrix initialization

我对线性方程组的大型矩阵使用 Eigen::SparseMatrix,目前我使用 setFromTriplets() 设置它。

我的问题是我无法确定是否可以通过它有效地初始化对称矩阵。现在我必须将它的上部和下部都保存在内存中(在三元组列表中,这更糟糕,因为不仅有值本身,还有它的索引)。

如果那个函数可以在遇到时立即复制非对角元素就更好了。或者已经有这样的功能?

也可能有一个 属性 的矩阵是对称的,所以即使在初始化后它只在内存中保留一部分,所有其他算法都会考虑这个 属性 ?

如果矩阵 S 仅包含上(或下)三角形的一半集,则可以使用

S.selfadjointView<Eigen::Upper>();  // or Eigen::Lower

获得矩阵的自伴视图。对于实值矩阵,这相当于通过将转置的一半复制到未设置的一半而生成的对称矩阵。

这可以用于大多数使用稀疏矩阵的表达式,而无需显式存储矩阵的两半。

最小使用演示:https://godbolt.org/z/6UyDGZ

还有,所有Cholesky-related solvers自然只考虑输入矩阵的二分之一