MATLAB Function Reference    

LU matrix factorization



The lu function expresses a matrix X as the product of two essentially triangular matrices, one of them a permutation of a lower triangular matrix and the other an upper triangular matrix. The factorization is often called the LU, or sometimes the LR, factorization. X can be rectangular.

[L,U] = lu(X) returns an upper triangular matrix in U and a "psychologically lower triangular" matrix (i.e., a product of lower triangular and permutation matrices) in L, so that X = L*U.

[L,U,P] = lu(X) returns an upper triangular matrix in U, a lower triangular matrix with a unit diagonal in L, and a permutation matrix in P, so that L*U = P*X.

Y = lu(X) for full X, returns the output from the LAPACK routine DGETRF or ZGETRF. For sparse X, lu returns the strict lower triangular L, i.e., without its unit diagonal, and the upper triangular U embedded in the same matrix Y, so that if [L,U,P] = lu(X), then Y = U+L-speye(size(X)). The permutation matrix P is lost.

[L,U,P,Q] = lu(X) for sparse non-empty X, returns a unit lower triangular matrix L, an upper triangular matrix U, a row permutation matrix P, and a column reordering matrix Q, so that P*X*Q = L*U. This syntax uses UMFPACK and is significantly more time and memory efficient than the other syntaxes, even when used with colamd. If X is empty or not sparse, lu displays an error message.

[L,U,P] = lu(X,thresh) controls pivoting in sparse matrices, where thresh is a pivot threshold in the interval [0.0,1.0]. Pivoting occurs when the diagonal entry in a column has magnitude less than thresh times the magnitude of any sub-diagonal entry in that column. thresh = 0.0 forces diagonal pivoting. thresh = 1.0 (conventional partial pivoting) is the default.

[L,U,P,Q] = lu(X,thresh) controls pivoting in UMFPACK, where thresh is a pivot threshold in the interval [0.0,1.0]. A value of 1.0 or 0.0 results in conventional partial pivoting. The default value is 0.1. Smaller values tend to lead to sparser LU factors, but the solution can become inaccurate. Larger values can lead to a more accurate solution (but not always), and usually an increase in the total work. Given a pivot column j, UMFPACK selects the sparsest candidate pivot row i such that the absolute value of the pivot entry is greater than or equal to thresh times the absolute value of the largest entry in the column j. The magnitude of entries in L is limited to 1/thresh. For complex matrices, absolute values are computed as abs(real(a)) + abs(imag(a)).


Most of the algorithms for computing LU factorization are variants of Gaussian elimination. The factorization is a key step in obtaining the inverse with inv and the determinant with det. It is also the basis for the linear equation solution or matrix division obtained with \ and /.


Rectangular matrix to be factored.
Pivot threshold for sparse matrices. Valid values are in the interval [0,1]. If you specify the fourth output Q, the default is 0.1. Otherwise the default is 1.0.
Factor of X. Depending on the form of the function, L is either a unit lower triangular matrix, or else the product of a unit lower triangular matrix with P'.
Upper triangular matrix that is a factor of X.
Row permutation matrix satisfying the equation L*U = P*X, or L*U = P*X*Q. Used for numerical stability.
Column permutation matrix satisfying the equation P*X*Q = L*U. Used to reduce fill-in in the sparse case.


Example 1. Start with

To see the LU factorization, call lu with two output arguments.

Notice that L is a permutation of a lower triangular matrix that has 1s on the permuted diagonal, and that U is upper triangular. To check that the factorization does its job, compute the product

which returns the original A. The inverse of the example matrix, X = inv(A), is actually computed from the inverses of the triangular factors

Using three arguments on the left side to get the permutation matrix as well

returns the same value of U, but L is reordered.

To verify that L*U is a permuted version of A, compute L*U and subtract it from P*A:

In this case, inv(U)*inv(L) results in the permutation of inv(A) given by inv(P)*inv(A).

The determinant of the example matrix is

It is computed from the determinants of the triangular factors

The solution to is obtained with matrix division

The solution is actually computed by solving two triangular systems

Example 2. Generate a 60-by-60 sparse adjacency matrix of the connectivity graph of the Buckminster-Fuller geodesic dome.

Use the sparse matrix syntax with four outputs to get the row and column permutation matrices.

Apply the permutation matrices to B, and subtract the product of the lower and upper triangular matrices.

The 1-norm of their difference is within roundoff error, indicating that L*U = P*B*Q.


For full matrices X, lu uses the subroutines DGETRF (real) and ZGETRF (complex) from LAPACK.

For sparse X, with four outputs, lu uses UMFPACK. With three or fewer outputs, lu uses code introduced in MATLAB 4.

See Also

cond, det, inv, luinc, qr, rref

The arithmetic operators \ and /


[1]  Anderson, E., Z. Bai, C. Bischof, S. Blackford, J. Demmel, J. Dongarra, J. Du Croz, A. Greenbaum, S. Hammarling, A. McKenney, and D. Sorensen, LAPACK User's Guide (, Third Edition, SIAM, Philadelphia, 1999.

[2]  Davis, T. A., UMFPACK Version 4.0 User Guide (, Dept. of Computer and Information Science and Engineering, Univ. of Florida, Gainesville, FL, 2002.

  lsqr luinc