ARPACK eigenvector calculation
Interface to the ARPACK library for calculating eigenvectors of sparse matrices
arpack_defaults arpack( func, extra = NULL, sym = FALSE, options = arpack_defaults, env = parent.frame(), complex = !sym )
func |
The function to perform the matrix-vector multiplication. ARPACK
requires to perform these by the user. The function gets the vector x
as the first argument, and it should return Ax, where A is the
“input matrix”. (The input matrix is never given explicitly.) The
second argument is |
extra |
Extra argument to supply to |
sym |
Logical scalar, whether the input matrix is symmetric. Always
supply |
options |
Options to ARPACK, a named list to overwrite some of the default option values. See details below. |
env |
The environment in which |
complex |
Whether to convert the eigenvectors returned by ARPACK into R
complex vectors. By default this is not done for symmetric problems (these
only have real eigenvectors/values), but only non-symmetric ones. If you
have a non-symmetric problem, but you're sure that the results will be real,
then supply |
An object of class list
of length 14.
ARPACK is a library for solving large scale eigenvalue problems. The
package is designed to compute a few eigenvalues and corresponding
eigenvectors of a general n by n matrix A. It is most
appropriate for large sparse or structured matrices A where structured
means that a matrix-vector product w <- Av
requires order n
rather than the usual order n^2 floating point operations. Please see
http://www.caam.rice.edu/software/ARPACK/ for details.
This function is an interface to ARPACK. igraph does not contain all ARPACK routines, only the ones dealing with symmetric and non-symmetric eigenvalue problems using double precision real numbers.
The eigenvalue calculation in ARPACK (in the simplest case) involves the
calculation of the Av product where A is the matrix we work with
and v is an arbitrary vector. The function supplied in the fun
argument is expected to perform this product. If the product can be done
efficiently, e.g. if the matrix is sparse, then arpack
is usually
able to calculate the eigenvalues very quickly.
The options
argument specifies what kind of calculation to perform.
It is a list with the following members, they correspond directly to ARPACK
parameters. On input it has the following fields:
Character constant, possible values: ‘I
’, standard
eigenvalue problem, A*x=lambda*x; and ‘G
’,
generalized eigenvalue problem, A*x=lambda B*x.
Currently only ‘I
’ is supported.
Numeric scalar. The
dimension of the eigenproblem. You only need to set this if you call
arpack
directly. (I.e. not needed for
eigen_centrality
, page_rank
, etc.)
Specify which eigenvalues/vectors to compute, character constant with exactly two characters.
Possible values for symmetric input matrices:
Compute nev
largest (algebraic) eigenvalues.
Compute nev
smallest (algebraic)
eigenvalues.
Compute nev
largest (in
magnitude) eigenvalues.
Compute nev
smallest
(in magnitude) eigenvalues.
Compute nev
eigenvalues, half from each end of the spectrum. When nev
is odd,
compute one more from the high end than from the low end.
Possible values for non-symmetric input matrices:
Compute nev
eigenvalues of largest
magnitude.
Compute nev
eigenvalues of
smallest magnitude.
Compute nev
eigenvalues
of largest real part.
Compute nev
eigenvalues of smallest real part.
Compute
nev
eigenvalues of largest imaginary part.
Compute nev
eigenvalues of smallest imaginary
part.
This parameter is sometimes overwritten by the various functions, e.g.
page_rank
always sets ‘LM
’.
Numeric scalar. The number of eigenvalues to be computed.
Numeric scalar. Stopping criterion: the relative accuracy of the
Ritz value is considered acceptable if its error is less than tol
times its estimated value. If this is set to zero then machine precision is
used.
Number of Lanczos vectors to be generated.
Numberic scalar. It should be set to zero in the current implementation.
Either zero or one. If zero then the shifts are provided by the user via reverse communication. If one then exact shifts with respect to the reduced tridiagonal matrix T. Please always set this to one.
Maximum number of Arnoldi update iterations allowed.
Blocksize to be used in the recurrence. Please always leave this on the default value, one.
The type of the eigenproblem to be solved. Possible values if the input matrix is symmetric:
A*x=lambda*x, A is symmetric.
A*x=lambda*M*x, A is symmetric, M is symmetric positive definite.
K*x=lambda*M*x, K is symmetric, M is symmetric positive semi-definite.
K*x=lambda*KG*x, K is symmetric positive semi-definite, KG is symmetric indefinite.
A*x=lambda*M*x, A is symmetric, M is symmetric positive semi-definite. (Cayley transformed mode.)
Please
note that only mode==1
was tested and other values might not work
properly.
Possible values if the input matrix is not symmetric:
A*x=lambda*x.
A*x=lambda*M*x, M is symmetric positive definite.
A*x=lambda*M*x, M is symmetric semi-definite.
A*x=lambda*M*x, M is symmetric semi-definite.
Please note that only mode==1
was tested
and other values might not work properly.
Not used currently. Later it be used to set a starting vector.
Not used currently.
Not use currently.
On output the following additional fields are added:
Error flag of ARPACK. Possible values:
Normal exit.
Maximum number of iterations taken.
No shifts could be applied during a cycle of the Implicitly
restarted Arnoldi iteration. One possibility is to increase the size of
ncv
relative to nev
.
ARPACK can return more error conditions than these, but they are converted to regular igraph errors.
Number of Arnoldi iterations taken.
Number of “converged” Ritz values. This represents the number of Ritz values that satisfy the convergence critetion.
Total number of matrix-vector multiplications.
Not used currently.
Total number of steps of re-orthogonalization.
Please see the ARPACK documentation for additional details.
A named list with the following members:
values |
Numeric vector, the desired eigenvalues. |
vectors |
Numeric matrix, the desired
eigenvectors as columns. If |
options |
A named
list with the supplied |
Rich Lehoucq, Kristi Maschhoff, Danny Sorensen, Chao Yang for ARPACK, Gabor Csardi csardi.gabor@gmail.com for the R interface.
D.C. Sorensen, Implicit Application of Polynomial Filters in a k-Step Arnoldi Method. SIAM J. Matr. Anal. Apps., 13 (1992), pp 357-385.
R.B. Lehoucq, Analysis and Implementation of an Implicitly Restarted Arnoldi Iteration. Rice University Technical Report TR95-13, Department of Computational and Applied Mathematics.
B.N. Parlett & Y. Saad, Complex Shift and Invert Strategies for Real Matrices. Linear Algebra and its Applications, vol 88/89, pp 575-595, (1987).
eigen_centrality
, page_rank
,
hub_score
, cluster_leading_eigen
are some of the
functions in igraph which use ARPACK. The ARPACK homepage is at
http://www.caam.rice.edu/software/ARPACK/.
# Identity matrix f <- function(x, extra=NULL) x arpack(f, options=list(n=10, nev=2, ncv=4), sym=TRUE) # Graph laplacian of a star graph (undirected), n>=2 # Note that this is a linear operation f <- function(x, extra=NULL) { y <- x y[1] <- (length(x)-1)*x[1] - sum(x[-1]) for (i in 2:length(x)) { y[i] <- x[i] - x[1] } y } arpack(f, options=list(n=10, nev=1, ncv=3), sym=TRUE) # double check eigen(laplacian_matrix(make_star(10, mode="undirected"))) ## First three eigenvalues of the adjacency matrix of a graph ## We need the 'Matrix' package for this if (require(Matrix)) { set.seed(42) g <- sample_gnp(1000, 5/1000) M <- as_adj(g, sparse=TRUE) f2 <- function(x, extra=NULL) { cat("."); as.vector(M %*% x) } baev <- arpack(f2, sym=TRUE, options=list(n=vcount(g), nev=3, ncv=8, which="LM", maxiter=2000)) }
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.