# Linear algebra¶

## Matrix factorizations¶

Matrix factorizations (a.k.a. matrix decompositions) compute the factorization of a matrix into a product of matrices, and are one of the central concepts in linear algebra.

The following table summarizes the types of matrix factorizations that have been implemented in Julia. Details of their associated methods can be found in the Linear Algebra section of the standard library documentation.

 Cholesky Cholesky factorization CholeskyPivoted Pivoted Cholesky factorization LU LU factorization LUTridiagonal LU factorization for Tridiagonal matrices UmfpackLU LU factorization for sparse matrices (computed by UMFPack) QR QR factorization QRCompactWY Compact WY form of the QR factorization QRPivoted Pivoted QR factorization Hessenberg Hessenberg decomposition Eigen Spectral decomposition SVD Singular value decomposition GeneralizedSVD Generalized SVD

## Special matrices¶

Matrices with special symmetries and structures arise often in linear algebra and are frequently associated with various matrix factorizations. Julia features a rich collection of special matrix types, which allow for fast computation with specialized routines that are specially developed for particular matrix types.

The following tables summarize the types of special matrices that have been implemented in Julia, as well as whether hooks to various optimized methods for them in LAPACK are available.

 Hermitian Hermitian matrix UpperTriangular Upper triangular matrix LowerTriangular Lower triangular matrix Tridiagonal Tridiagonal matrix SymTridiagonal Symmetric tridiagonal matrix Bidiagonal Upper/lower bidiagonal matrix Diagonal Diagonal matrix UniformScaling Uniform scaling operator

### Elementary operations¶

Matrix type + - * \ Other functions with optimized methods
Hermitian       MV inv(), sqrtm(), expm()
UpperTriangular     MV MV inv(), det()
LowerTriangular     MV MV inv(), det()
SymTridiagonal M M MS MV eigmax(), eigmin()
Tridiagonal M M MS MV
Bidiagonal M M MS MV
Diagonal M M MV MV inv(), det(), logdet(), /()
UniformScaling M M MVS MVS /()

Legend:

 M (matrix) An optimized method for matrix-matrix operations is available V (vector) An optimized method for matrix-vector operations is available S (scalar) An optimized method for matrix-scalar operations is available

### Matrix factorizations¶

Matrix type LAPACK eig() eigvals() eigvecs() svd() svdvals()
Hermitian HE   ARI
UpperTriangular TR A A A
LowerTriangular TR A A A
SymTridiagonal ST A ARI AV
Tridiagonal GT
Bidiagonal BD       A A
Diagonal DI   A

Legend:

 A (all) An optimized method to find all the characteristic values and/or vectors is available e.g. eigvals(M) R (range) An optimized method to find the ilth through the ihth characteristic values are available eigvals(M, il, ih) I (interval) An optimized method to find the characteristic values in the interval [vl, vh] is available eigvals(M, vl, vh) V (vectors) An optimized method to find the characteristic vectors corresponding to the characteristic values x=[x1, x2,...] is available eigvecs(M, x)

### The uniform scaling operator¶

A UniformScaling operator represents a scalar times the identity operator, λ*I. The identity operator I is defined as a constant and is an instance of UniformScaling. The size of these operators are generic and match the other matrix in the binary operations +, -, * and \. For A+I and A-I this means that A must be square. Multiplication with the identity operator I is a noop (except for checking that the scaling factor is one) and therefore almost without overhead.