当前位置:网站首页>Eigen sparse matrix operation

Eigen sparse matrix operation

2022-07-06 06:03:00 Zhan Miao

In many applications ( for example , The finite element method ), Usually deal with very large matrices , Among them, only a few coefficients are not zero . under these circumstances , You can reduce memory consumption and improve performance by using a dedicated representation that stores only non-zero coefficients . Such a matrix is called sparse matrix .

1. Sparse matrix module

modular

The header file

Content

SparseCore

#include <Eigen/SparseCore>

SparseMatrix and SparseVector class 、 matrix assemble 、

Basic sparse linear algebra ( Including sparse triangle solver )

SparseCholesky

#include <Eigen/SparseCholesky>

Directly use sparse LLT and LDLT Cholesky Decomposition to solve the sparse self adjoint positive definite problem

SparseLU

#include<Eigen/SparseLU>

sparse LU Decomposition to solve the general square sparse system

SparseQR

#include<Eigen/SparseQR

Sparse for solving sparse linear least squares problem QR decompose

IterativeLinearSolvers

#include <Eigen/IterativeLinearSolvers>

Iterative solver for solving large general linear square problems ( Including the self adjoint positive definite problem )

Sparse

#include <Eigen/Sparse>

Including all the above modules

2. Sparse matrix format

SparseMatrix Class is Eigen The main sparse matrix representation of the sparse module ; It provides high performance and low memory usage . It implements widely used compressed columns ( Or yes ) A more general variant of the storage scheme . It consists of four compact arrays :

Values: Store non-zero coefficient values .
InnerIndices: Store non-zero rows ( Or column ) Indexes .
OuterStarts: For each column ( Or yes ) Store the first non-zero index in the first two arrays .
InnerNNZs: Store each column ( Corresponding line ) Nonzero number of . inner It refers to an internal vector , It is the column of the column master matrix , Or row of the row master matrix . The word external refers to the other direction .

at present , The elements of a given internal vector are always sorted by adding an internal index . “_” Represents the available space to quickly insert new elements . Assume no reallocation , The insertion of random elements is therefore in O(nnz_j) in , among nnz_j Is the nonzero number of the corresponding internal vector . On the other hand , It is more efficient to insert elements with increased internal indexes into a given internal vector , Because this only needs to increase the corresponding InnerNNZs entry , namely O(1) operation .

The case of no available space is a special case , Called compression mode . It corresponds to the widely used compressed column ( Or yes ) Storage plan (CCS or CRS). By calling SparseMatrix::makeCompressed() function , Any SparseMatrix Convert to this form . under these circumstances , It can be noted that InnerNNZs An array with the OuterStarts It's redundant , Because our equation :InnerNNZs[j] = OuterStarts[j+1]-OuterStarts[j]. therefore , Actually call SparseMatrix::makeCompressed() This buffer will be released .

reference

Eigen On sparse matrix _ The blog of rainbow cat who loves Mathematics -CSDN Blog _eigen sparsematrix

Eigen course 3 - Sparse matrix operation _xuezhisdc The blog of -CSDN Blog _eigen sparse matrix

Eigen course 5 - Solve sparse linear equations _xuezhisdc The blog of -CSDN Blog _eigen System of linear equations

Eigen: Solving Sparse Linear Systems 

Eigen: Quick reference guide for sparse matrices

原网站

版权声明
本文为[Zhan Miao]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207060557470748.html