Skip to main content
`Ctrl`+`K`

# MatCreateLRC

Creates a new matrix object that behaves like A + UCV’ of type `MATLRC`

## Synopsis

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

Collective

## Input Parameters

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

- U - dense rectangular (tall and skinny) matrix

- V - dense rectangular (tall and skinny) matrix

- c - a vector containing the diagonal of C (can be `NULL`)

## Output Parameter

- N - the matrix that represents A + UCV’

## Notes

The matrix A + UCV’ 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 UCV’.

Use `V`=`U` (or `V`=`NULL`) for a symmetric low-rank correction, A + UCU’.

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

src/mat/impls/lrc/lrc.c

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