petsc-3.12.0 2019-09-29
Report Typos and Errors

MatSetTransposeNullSpace

attaches a null space to a matrix.

Synopsis

#include "petscmat.h"
PetscErrorCode MatSetTransposeNullSpace(Mat mat,MatNullSpace nullsp)
Logically Collective on Mat

Input Parameters

 mat - the matrix nullsp - the null space object

Notes

For inconsistent singular systems (linear systems where the right hand side is not in the range of the operator) this allows the linear system to be solved in a least squares sense. You must also call MatSetNullSpace()

The fundamental theorem of linear algebra (Gilbert Strang, Introduction to Applied Mathematics, page 72) states that the domain of a matrix A (from R^n to R^m (m rows, n columns) R^n = the direct sum of the null space of A, n(A), + the range of A^T, R(A^T). Similarly R^m = direct sum n(A^T) + R(A). Hence the linear system A x = b has a solution only if b in R(A) (or correspondingly b is orthogonal to n(A^T)) and if x is a solution then x + alpha n(A) is a solution for any alpha. The minimum norm solution is orthogonal to n(A). For problems without a solution the solution that minimizes the norm of the residual (the least squares solution) can be obtained by solving A x = \hat{b} where \hat{b} is b orthogonalized to the n(A^T).

Krylov solvers can produce the minimal norm solution to the least squares problem by utilizing MatNullSpaceRemove().

MatCreate(), MatNullSpaceCreate(), MatSetNearNullSpace(), MatGetNullSpace(), MatSetNullSpace(), MatGetTransposeNullSpace(), MatNullSpaceRemove()