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) 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