svd package:base R Documentation _S_i_n_g_u_l_a_r _V_a_l_u_e _D_e_c_o_m_p_o_s_i_t_i_o_n _o_f _a _M_a_t_r_i_x _D_e_s_c_r_i_p_t_i_o_n: Compute the singular-value decomposition of a rectangular matrix. _U_s_a_g_e: svd(x, nu = min(n, p), nv = min(n, p), LINPACK = FALSE) La.svd(x, nu = min(n, p), nv = min(n, p)) _A_r_g_u_m_e_n_t_s: x: a real or complex matrix whose SVD decomposition is to be computed. nu: the number of left singular vectors to be computed. This must between '0' and 'n = nrow(x)'. nv: the number of right singular vectors to be computed. This must be between '0' and 'p = ncol(x)'. LINPACK: logical. Should LINPACK be used (for compatibility with R < 1.7.0)? In this case 'nu' must be '0', 'nrow(x)' or 'ncol(x)'. _D_e_t_a_i_l_s: The singular value decomposition plays an important role in many statistical techniques. 'svd' and 'La.svd' provide two slightly different interfaces. The main functions used are the LAPACK routines DGESDD and ZGESVD; 'svd(LINPACK = TRUE)' provides an interface to the LINPACK routine DSVDC, purely for backwards compatibility. Computing the singular vectors is the slow part for large matrices. The computation will be more efficient if 'nu <= min(n, p)' and 'nv <= min(n, p)', and even more efficient if one or both are zero. Unsuccessful results from the underlying LAPACK code will result in an error giving a positive error code: these can only be interpreted by detailed study of the FORTRAN code. _V_a_l_u_e: The SVD decomposition of the matrix as computed by LAPACK/LINPACK, *X = U D V'*, where *U* and *V* are orthogonal, *V'* means _V transposed_, and *D* is a diagonal matrix with the singular values D[i,i]. Equivalently, *D = U' X V*, which is verified in the examples, below. The returned value is a list with components d: a vector containing the singular values of 'x', of length 'min(n, p)'. u: a matrix whose columns contain the left singular vectors of 'x', present if 'nu > 0'. Dimension 'c(n, nu)'. v: a matrix whose columns contain the right singular vectors of 'x', present if 'nv > 0'. Dimension 'c(p, nv)'. For 'La.svd' the return value replaces 'v' by 'vt', the (conjugated if complex) transpose of 'v'. _R_e_f_e_r_e_n_c_e_s: Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) _The New S Language_. Wadsworth & Brooks/Cole. Dongarra, J. J., Bunch, J. R., Moler, C. B. and Stewart, G. W. (1978) _LINPACK Users Guide._ Philadelphia: SIAM Publications. Anderson. E. and ten others (1999) _LAPACK Users' Guide_. Third Edition. SIAM. Available on-line at . _S_e_e _A_l_s_o: 'eigen', 'qr'. _E_x_a_m_p_l_e_s: hilbert <- function(n) { i <- 1:n; 1 / outer(i - 1, i, "+") } X <- hilbert(9)[,1:6] (s <- svd(X)) D <- diag(s$d) s$u %*% D %*% t(s$v) # X = U D V' t(s$u) %*% X %*% s$v # D = U' X V