# MatCreateLRC#

Creates a new matrix object that behaves like A + U*C*V’ of type `MATLRC`

## Synopsis#

```
#include "petscmat.h"
PetscErrorCode MatCreateLRC(Mat A, Mat U, Vec c, Mat V, Mat *N)
```

Collective

## Input Parameters#

the (sparse) matrix (can be**A -**`NULL`

)dense rectangular (tall and skinny) matrix**U -**dense rectangular (tall and skinny) matrix**V -**a vector containing the diagonal of C (can be**c -**`NULL`

)

## Output Parameter#

the matrix that represents A + U**N -***C*V’

## Notes#

The matrix A + U*C*V’ is not formed! Rather the new matrix
object performs the matrix-vector product `MatMult()`

, by first multiplying by
A and then adding the other term.

`C`

is a diagonal matrix (represented as a vector) of order k,
where k is the number of columns of both `U`

and `V`

.

If `A`

is `NULL`

then the new object behaves like a low-rank matrix U*C*V’.

Use `V`

=`U`

(or `V`

=`NULL`

) for a symmetric low-rank correction, A + U*C*U’.

If `c`

is `NULL`

then the low-rank correction is just U*V’.
If a sequential `c`

vector is used for a parallel matrix,
PETSc assumes that the values of the vector are consistently set across processors.

## See Also#

Matrices, `Mat`

, `MATLRC`

, `MatLRCGetMats()`

## Level#

intermediate

## Location#

## Examples#

src/tao/pde_constrained/tutorials/elliptic.c

Index of all Mat routines

Table of Contents for all manual pages

Index of all manual pages