Eigen 稀疏矩阵操作
在许多应用中例如有限元方法通常处理非常大的矩阵其中只有少数系数不为零。在这种情况下可以通过使用仅存储非零系数的专用表示来减少内存消耗并提高性能。这样的矩阵称为稀疏矩阵。1. 稀疏矩阵模块模块头文件内容SparseCore#include Eigen/SparseCoreSparseMatrix 和 SparseVector 类、矩阵组装、基本稀疏线性代数包括稀疏三角求解器SparseCholesky#include Eigen/SparseCholesky直接用稀疏 LLT 和 LDLT Cholesky 分解来解决稀疏自伴随正定问题SparseLU#includeEigen/SparseLU稀疏 LU 分解来解决一般平方稀疏系统SparseQR#includeEigen/SparseQR用于解决稀疏线性最小二乘问题的稀疏 QR 分解IterativeLinearSolvers#include Eigen/IterativeLinearSolvers求解大型一般线性平方问题的迭代求解器包括自伴随正定问题Sparse#include Eigen/Sparse包含以上所有模块2. 稀疏矩阵格式SparseMatrix 类是 Eigen 稀疏模块的主要稀疏矩阵表示 它提供高性能和低内存使用率。 它实现了广泛使用的压缩列或行存储方案的更通用的变体。 它由四个紧凑的数组组成Values存储非零系数值。InnerIndices存储非零的行或列索引。OuterStarts为每一列或行存储前两个数组中第一个非零的索引。InnerNNZs存储每列相应行的非零数。inner指的是一个内部向量它是列主矩阵的列或行主矩阵的行。外部这个词指的是另一个方向。目前给定内部向量的元素保证总是通过增加内部索引进行排序。“_”表示可以快速插入新元素的可用空间。 假设不需要重新分配随机元素的插入因此在中其中是相应内部向量的非零数。另一方面在给定的内部向量中插入具有增加内部索引的元素效率更高因为这仅需要增加相应的 InnerNNZs 条目即 O(1) 操作。没有可用空间的情况是一种特殊情况称为压缩模式。它对应于广泛使用的压缩列或行存储方案CCS 或 CRS。 通过调用 SparseMatrix::makeCompressed() 函数可以将任何 SparseMatrix 转换为这种形式。在这种情况下可以注意到 InnerNNZs 数组与 OuterStarts 是冗余的因为我们等式InnerNNZs[j] OuterStarts[j1] - OuterStarts[j]。因此实际上调用 SparseMatrix::makeCompressed() 会释放此缓冲区。参考文献Eigen关于稀疏矩阵_爱数学的虹猫的博客-CSDN博客_eigen sparsematrixEigen教程3 - 稀疏矩阵操作_xuezhisdc的博客-CSDN博客_eigen 稀疏矩阵Eigen教程5 - 求解稀疏线性方程组_xuezhisdc的博客-CSDN博客_eigen 线性方程组Eigen: Solving Sparse Linear SystemsEigen: Quick reference guide for sparse matrices