[ top | up ]

Spectral Decomposition of a Matrix

Usage

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

Arguments

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 triangle 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.

Description

This function provides an interface to the EISPACK routines RS, RG, CH and CG.

Value

The spectral decomposition of x is returned as components of a list.
values a vector containing the eigenvalues of x, sorted decreasingly, according to Mod(values) if they are complex.
vectors a matrix whose columns contain the eigenvectors of x.

References

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

See Also

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

Examples

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)