LU LU Decomposition for Matrices

Section: Transforms/Decompositions

Usage

Computes the LU decomposition for a matrix. The form of the command depends on the type of the argument. For full (non-sparse) matrices, the primary form for lu is
   [L,U,P] = lu(A),

where L is lower triangular, U is upper triangular, and P is a permutation matrix such that L*U = P*A. The second form is

   [V,U] = lu(A),

where V is P'*L (a row-permuted lower triangular matrix), and U is upper triangular. For sparse, square matrices, the LU decomposition has the following form:

   [L,U,P,Q,R] = lu(A),

where A is a sparse matrix of either double or dcomplex type. The matrices are such that L*U=P*R*A*Q, where L is a lower triangular matrix, U is upper triangular, P and Q are permutation vectors and R is a diagonal matrix of row scaling factors. The decomposition is computed using UMFPACK for sparse matrices, and LAPACK for dense matrices.

Example

First, we compute the LU decomposition of a dense matrix.
--> a = float([1,2,3;4,5,8;10,12,3])

a = 
  1  2  3 
  4  5  8 
 10 12  3 

--> [l,u,p] = lu(a)
l = 
    1.0000         0         0 
    0.1000    1.0000         0 
    0.4000    0.2500    1.0000 

u = 
   10.0000   12.0000    3.0000 
         0    0.8000    2.7000 
         0         0    6.1250 

p = 
 0 0 1 
 1 0 0 
 0 1 0 

--> l*u

ans = 
 10 12  3 
  1  2  3 
  4  5  8 

--> p*a

ans = 
 10 12  3 
  1  2  3 
  4  5  8 

Now we repeat the exercise with a sparse matrix, and demonstrate the use of the permutation vectors.

--> a = sparse([1,0,0,4;3,2,0,0;0,0,0,1;4,3,2,4])

a = 
 1 1 1
 2 1 3
 4 1 4
 2 2 2
 4 2 3
 4 3 2
 1 4 4
 3 4 1
 4 4 4
--> [l,u,p,q,r] = lu(a)
l = 
 1 1 1
 2 2 1
 3 3 1
 4 4 1
u = 
 1 1 0.153846
 1 2 0.230769
 2 2 0.4
 1 3 0.307692
 2 3 0.6
 3 3 0.2
 1 4 0.307692
 3 4 0.8
 4 4 1
p = 
 4 
 2 
 1 
 3 

q = 
 3 
 2 
 1 
 4 

r = 
 1 1 0.2
 2 2 0.2
 3 3 1
 4 4 0.0769231
--> full(l*a)

ans = 
 1 0 0 4 
 3 2 0 0 
 0 0 0 1 
 4 3 2 4 

--> b = r*a

b = 
 1 1 0.2
 2 1 0.6
 3 1 0
 4 1 0.307692
 1 2 0
 2 2 0.4
 3 2 0
 4 2 0.230769
 1 3 0
 2 3 0
 3 3 0
 4 3 0.153846
 1 4 0.8
 2 4 0
 3 4 1
 4 4 0.307692
--> full(b(p,q))

ans = 
    0.1538    0.2308    0.3077    0.3077 
         0    0.4000    0.6000         0 
         0         0    0.2000    0.8000 
         0         0         0    1.0000