lu                  package:Matrix                  R Documentation

_T_r_i_a_n_g_u_l_a_r _D_e_c_o_m_p_o_s_i_t_i_o_n _o_f _a _S_q_u_a_r_e _M_a_t_r_i_x

_D_e_s_c_r_i_p_t_i_o_n:

     Computes triangular decompositions of square matrices.

_U_s_a_g_e:

     lu(x, ...)
     ## S4 method for signature 'dgeMatrix':
     lu(x, warnSing = TRUE, ...)

_A_r_g_u_m_e_n_t_s:

       x: a matrix of square dimension.  No missing values or IEEE
          special values are allowed.

warnSing: (when 'x' is a '"denseMatrix"') logical specifying if a
          'warning' should be signalled when 'x' is singular.

     ...: further arguments passed to or from other methods.

_D_e_t_a_i_l_s:

     'lu()' is a generic function with special methods for different
     types of matrices.  Use 'showMethods("lu")' to list all the
     methods for the 'lu' generic.

     The method for class 'dgeMatrix' (and all dense matrices) is based
     on LAPACK's '"dgetrf"' subroutine.  It returns a decomposition
     also for singular matrices.

     The method for class 'dgCMatrix' (and all sparse matrices) is
     based on functions from the CSparse library.  It signals an error
     when the decomposition algorithm fails, as when 'x' is (too close
     to) singular.

_V_a_l_u_e:

     An object of class '"LU"', i.e., '"denseLU"' or '"sparseLU"', see
     'sparseLU'; this is a representation of a triangular decomposition
     of 'x'.

_R_e_f_e_r_e_n_c_e_s:

     Golub, G., and Van Loan, C. F. (1989). _Matrix Computations,_ 2nd
     edition, Johns Hopkins, Baltimore.

     Tim Davis (2005) <URL:
     http://www.cise.ufl.edu/research/sparse/CSparse/>

     Timothy A. Davis (2006) _Direct Methods for Sparse Linear
     Systems_, SIAM Series "Fundamentals of Algorithms".

_S_e_e _A_l_s_o:

     Class definitions 'LU' and 'sparseLU' and function 'expand'; 'qr',
     'chol'.

_E_x_a_m_p_l_e_s:

     ##--- Dense  -------------------------
     x <- Matrix(rnorm(9), 3, 3)
     lu(x)

     ##--- Sparse ------------------------

     pm <- as(readMM(system.file("external/pores_1.mtx",
                                 package = "Matrix")),
              "CsparseMatrix")
     str(pmLU <- lu(pm))             # p is a 0-based permutation of the rows
                                     # q is a 0-based permutation of the columns
     ## permute rows and columns of original matrix
     ppm <- pm[pmLU@p + 1L, pmLU@q + 1L]
     pLU <- pmLU@L %*% pmLU@U
     ## equal up to "rounding"
     ppm[1:14, 1:5]
     pLU[1:14, 1:5]  # product can have extra zeros
     ## "prove" consistency (up to rounding):
     i0 <- ppm != pLU & ppm == 0
     iN <- ppm != pLU & ppm != 0
     stopifnot(all(abs((ppm - pLU)[i0]) < 1e-7), # absolute error for true 0
               all(abs((ppm - pLU)[iN]/ppm[iN]) < 1e-9)) # relative error

