https://github.com/cvanaret/symmetricblockmatrix
Form symmetric block matrices and condense them (eliminating blocks) at compile time using Schur complements. The goal is to manipulate KKT/augmented/saddle-point systems symbolically to obtain equivalent systems (typically: unsymmetric, symmetrized, and normal equations) that can be tackled by various numerical solvers
https://github.com/cvanaret/symmetricblockmatrix
compile-time compile-time-meta-programming cpp cpp17 gaussian-elimination kkt-system linear-algebra linear-systems linear-systems-equations saddle-point-system schur-complement symbolic-computation template-metaprogramming
Last synced: 8 months ago
JSON representation
Form symmetric block matrices and condense them (eliminating blocks) at compile time using Schur complements. The goal is to manipulate KKT/augmented/saddle-point systems symbolically to obtain equivalent systems (typically: unsymmetric, symmetrized, and normal equations) that can be tackled by various numerical solvers
- Host: GitHub
- URL: https://github.com/cvanaret/symmetricblockmatrix
- Owner: cvanaret
- License: mit
- Created: 2024-07-18T23:31:51.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-07-19T22:44:13.000Z (over 1 year ago)
- Last Synced: 2025-04-10T00:51:18.079Z (12 months ago)
- Topics: compile-time, compile-time-meta-programming, cpp, cpp17, gaussian-elimination, kkt-system, linear-algebra, linear-systems, linear-systems-equations, saddle-point-system, schur-complement, symbolic-computation, template-metaprogramming
- Language: C++
- Homepage:
- Size: 7.81 KB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# SymmetricBlockMatrix
This is a C++ attempt at forming symmetric bloc matrices and condensing them at compile time using [Schur complements](https://en.wikipedia.org/wiki/Schur_complement#Application_to_solving_linear_equations). By condensation, we mean eliminating certain row blocks and substituting in the other block equations.
The goal is to manipulate KKT/augmented/saddle-point systems symbolically to obtain equivalent systems (typically: unsymmetric, symmetrized, and normal equations) that can be tackled by various numerical solvers.
An $n \times n$ symmetric block matrix is represented as a sequence of blocks in the upper triangular part of the matrix:
```
A_{11} A_{12} ... A_{1n}
A_{22} ... A_{2n}
...
A_{nn}
```
*Contributions are welcome!*