next up previous contents
Next: EIG Eigendecomposition of a Up: Transforms/Decompositions Previous: FFT (Inverse) Fast Fourier   Contents

Subsections

LU LU Decomposition for Matrices

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 = 
  <float>  - size: [3 3]
 
Columns 1 to 3
    1.0000000          2.0000000          3.0000000       
    4.0000000          5.0000000          8.0000000       
   10.000000          12.000000           3.0000000       
--> [l,u,p] = lu(a)
l = 
  <float>  - size: [3 3]
 
Columns 1 to 3
    1.0000000          0.00000000         0.00000000      
    0.10000000         1.0000000          0.00000000      
    0.40000001         0.24999994         1.0000000       
u = 
  <float>  - size: [3 3]
 
Columns 1 to 3
   10.000000          12.000000           3.0000000       
    0.00000000         0.79999995         2.7000000       
    0.00000000         0.00000000         6.1250005       
p = 
  <float>  - size: [3 3]
 
Columns 1 to 3
    0.00000000         0.00000000         1.0000000       
    1.0000000          0.00000000         0.00000000      
    0.00000000         1.0000000          0.00000000      
--> l*u
ans = 
  <float>  - size: [3 3]
 
Columns 1 to 3
   10.000000          12.000000           3.0000000       
    1.0000000          2.0000000          3.0000000       
    4.0000000          5.0000000          8.0000000       
--> p*a
ans = 
  <float>  - size: [3 3]
 
Columns 1 to 3
   10.000000          12.000000           3.0000000       
    1.0000000          2.0000000          3.0000000       
    4.0000000          5.0000000          8.0000000

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 = 
  <int32>  - size: [4 4]
	Matrix is sparse with 9 nonzeros
--> [l,u,p,q,r] = lu(a)
l = 
  <double>  - size: [4 4]
	Matrix is sparse with 4 nonzeros
u = 
  <double>  - size: [4 4]
	Matrix is sparse with 9 nonzeros
p = 
  <int32>  - size: [1 4]
 
Columns 1 to 4
             4              2              1              3  
q = 
  <int32>  - size: [1 4]
 
Columns 1 to 4
             3              2              1              4  
r = 
  <double>  - size: [4 4]
	Matrix is sparse with 4 nonzeros
--> full(l*a)
ans = 
  <double>  - size: [4 4]
 
Columns 1 to 2
    1.000000000000000         0.000000000000000      
    3.000000000000000         2.000000000000000      
    0.000000000000000         0.000000000000000      
    4.000000000000000         3.000000000000000      
 
Columns 3 to 4
    0.000000000000000         4.000000000000000      
    0.000000000000000         0.000000000000000      
    0.000000000000000         1.000000000000000      
    2.000000000000000         4.000000000000000      
--> b = R*a
Error: Undefined function or variable R
--> full(b(P,Q))
Error: Undefined function or variable b


next up previous contents
Next: EIG Eigendecomposition of a Up: Transforms/Decompositions Previous: FFT (Inverse) Fast Fourier   Contents
Samit K. Basu 2005-03-16