:orphan: # 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 - ***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 + U*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 [](ch_matrices), `Mat`, `MATLRC`, `MatLRCGetMats()` ## Level intermediate ## Location src/mat/impls/lrc/lrc.c ## Examples src/tao/pde_constrained/tutorials/elliptic.c
--- [Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/mat/impls/lrc/lrc.c) [Index of all Mat routines](index.md) [Table of Contents for all manual pages](/manualpages/index.md) [Index of all manual pages](/manualpages/singleindex.md)