

_S_p_e_c_t_r_a_l _D_e_c_o_m_p_o_s_i_t_i_o_n _o_f _a _M_a_t_r_i_x

     eigen(x, symmetric, only.values=FALSE)

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

       x: a matrix whose spectral decomposition is to be
          computed.

symmetric: if `TRUE', the matrix is assumed to be symmetric
          (or Hermitian if complex) and only its lower tri-
          angle is used.  If `symmetric' is not specified,
          the matrix is inspected for symmetry.

only.values: if `TRUE', only the eigenvalues are computed
          and returned, otherwise both eigenvalues and
          eigenvectors are returned.

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

     This function provides an interface to the EISPACK rou-
     tines `RS', `RG', `CH' and `CG'.

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

     The spectral decomposition of `x' is returned as com-
     ponents of a list.

  values: a vector containing the p eigenvalues of `x',
          sorted decreasingly, according to `Mod(values)' if
          they are complex.

 vectors: a p * p matrix whose columns contain the eigenvec-
          tors of `x', or `NULL' if `only.values' is `TRUE'.

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

     Smith, B. T, J. M. Boyle, J. J. Dongarra, B. S. Garbow,
     Y. Ikebe, V. Klema, C. B. Moler (1976).  Matrix Eigen-
     systems Routines - EISPACK Guide.  Springer-Verlag Lec-
     ture Notes in Computer Science.

_S_e_e _A_l_s_o:

     `svd', a generalization of `eigen'; `qr', and `chol'
     for related decompositions.

_E_x_a_m_p_l_e_s:

     eigen(cbind(c(1,-1),c(-1,1)))
     eigen(cbind(c(1,-1),c(-1,1)), symmetric = FALSE)# same (different algorithm).

     eigen(cbind(1,c(1,-1)), only.values = TRUE)
     eigen(cbind(-1,2:1)) # complex values
     eigen(print(cbind(c(0,1i), c(-1i,0))))# Hermite ==> real Eigen values
     ## 3 x 3:
     eigen(cbind( 1,3:1,1:3))
     eigen(cbind(-1,c(1:2,0),0:2)) # complex values

     m <- matrix(rnorm(25),5,5) ; m <- m + t(m) #- a symmetric matrix
     em <- eigen(m); V <- em$vect; lam <- em$values
     all(c(    m     - V %*% diag(lam) %*% t(V)) < 60*.Machine$double.eps)
     all(c(m %*% V - V %*% diag(lam))            < 60*.Machine$double.eps)

