View on GitHub

LinearAlgebra

Library that provides implementations or wrappers for linear algebra operations in C#.

Schur complement

Let us seprarate the rows and columns of a symmetric matrix A into 2 groups and define the block submatrices:

condensation_decomposition_matrix

If A22 is invertible, the Schur complement of the block A22 is defined as:

condensation_matrix

The Schur complement is important in many applications, such as domain decomposition methods, homogenization, etc, and has some interesting properties: e.g. if A is symmetric positive definite, then so is the Schur complement of A22 and vice-versa. For more details see this wikipedia article.

Static condensation

Let us apply the previous decomposition to a linear system A*x = b:

condensation_decomposition_matrix condensation_decomposition_vectors

Suppose we need to work only with the group 1 of rows/columns, without completely disregarding the contribution of group 2. In this case we typically condense the submatrix A22 using its Schur complement. We also condense the subvector b2:

condensation_rhs

Then we can solve the system with respect to x1 only:

condensation_system

If x2 is needed, it can be calculated afterwards by solving the linear system:

condensation_lhs