Uses Lanczos iteration to find the truncated eigen-decomposition of a symmetric matrix.
A symmetric matrix.
Must be non-negative. If
tolerance to use for convergence testing of eigenvalues. Error in eigenvalues will be less
than the magnitude of the dominant eigenvalue multiplied by
number of threads to use for leading order iterative multiplication of A by vector. May show no speed improvement on two processor machine.
kl is non-negative, returns the highest
k and lowest
with their corresponding eigenvectors. If
kl is negative, returns the largest magnitude
eigenvalues, with corresponding eigenvectors.
The routine implements Lanczos iteration with full re-orthogonalization as described in Demmel (1997). Lanczos
iteraction iteratively constructs a tridiagonal matrix, the eigenvalues of which converge to the eigenvalues of
as the iteration proceeds (most extreme first). Eigenvectors can also be computed. For small
approach is faster than computing the full symmetric eigendecompostion. The tridiagonal eigenproblems are handled using LAPACK.
The implementation is not optimal: in particular the inner triadiagonal problems could be handled more efficiently, and there would be some savings to be made by not always returning eigenvectors.
A list with elements
values (array of eigenvalues);
vectors (matrix with eigenvectors in its columns);
iter (number of iterations required).
Simon N. Wood firstname.lastname@example.org
Demmel, J. (1997) Applied Numerical Linear Algebra. SIAM
1 2 3 4 5 6 7 8 9 10 11 12
require(mgcv) ## create some x's and knots... set.seed(1); n <- 700;A <- matrix(runif(n*n),n,n);A <- A+t(A) ## compare timings of slanczos and eigen system.time(er <- slanczos(A,10)) system.time(um <- eigen(A,symmetric=TRUE)) ## confirm values are the same... ind <- c(1:6,(n-3):n) range(er$values-um$values[ind]);range(abs(er$vectors)-abs(um$vectors[,ind]))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.