petsc-3.11.1 2019-04-17
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 and MatNullSpace

### 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()

### Location

src/mat/interface/matrix.c

### Examples

src/ksp/ksp/examples/tutorials/ex67.c.html

Index of all Mat routines