

_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

     svd(x, nu=min(n,p), nv=min(n,p))

_A_r_g_u_m_e_n_t_s:

       x: a matrix whose SVD decomposition is to be com-
          puted.

      nu: the number of left eigenvectors to be computed.
          This must be one of `0', `nrow(x)' and `ncol(x)'.

      nv: the number of right eigenvectors to be computed.
          This must be one of `0', and `ncol(x)'.

_D_e_s_c_r_i_p_t_i_o_n:

     `svd' provides an interface to the LINPACK routine
     DSVDC.  The singular value decompostion plays an impor-
     tant role in many statistical techniques.

_V_a_l_u_e:

     The SVD decomposition of the matrix as computed by LIN-
     PACK,

                            X = U D V

     , where U and V are orthogonal, and D is a diagonal
     matrix with the singular values D[i,i].

     The components in the returned value correspond
     directly to the values returned by DSVDC.

       d: a vector containing the singular values of `x'.

       u: a matrix whose columns contain the left eigenvec-
          tors of `x'.

       v: a matrix whose columns contain the right eigenvec-
          tors of `x'.

_R_e_f_e_r_e_n_c_e_s:

     Dongarra, J. J., J. R. Bunch, C. B. Moler and G. W.
     Stewart (1978).  LINPACK Users Guide, SIAM Publica-
     tions, Philadelphia.

_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, "+") }
     str(X <- hilbert(9)[,1:6])
     str(s <- svd(X))
     Eps <- 10 * .Machine$double.eps

     all(abs(diag(s$d) - t(s$u)%*% X %*% s$v) < Eps)# TRUE:  D = U' X V

     X <- cbind(1,1:7)
     str(s <- svd(X))
     all(abs(diag(s$d) - t(s$u)%*% X %*% s$v) < Eps)# TRUE:  D = U' X V

