
Calculate selected eigenvalues and eigenvectors of a (supposedly sparse) graph.
spectrum(graph, algorithm = c("arpack", "auto", "lapack", "comp_auto",
"comp_lapack", "comp_arpack"), which = list(), options = arpack_defaults)
The input graph, can be directed or undirected.
The algorithm to use. Currently only arpack
is
implemented, which uses the ARPACK solver. See also arpack
.
A list to specify which eigenvalues and eigenvectors to calculate. By default the leading (i.e. largest magnitude) eigenvalue and the corresponding eigenvector is calculated.
Options for the ARPACK solver. See
arpack_defaults
.
Depends on the algorithm used.
For arpack
a list with three entries is returned:
See
the return value for arpack
for a complete description.
Numeric vector, the eigenvalues.
Numeric matrix, with the eigenvectors as columns.
The which
argument is a list and it specifies which eigenvalues and
corresponding eigenvectors to calculate: There are eight options:
Eigenvalues with the largest magnitude. Set pos
to
LM
, and howmany
to the number of eigenvalues you want.
Eigenvalues with the smallest magnitude. Set pos
to SM
and
howmany
to the number of eigenvalues you want.
Largest
eigenvalues. Set pos
to LA
and howmany
to the number of
eigenvalues you want.
Smallest eigenvalues. Set pos
to
SA
and howmany
to the number of eigenvalues you want.
Eigenvalues from both ends of the spectrum. Set pos
to BE
and
howmany
to the number of eigenvalues you want. If howmany
is
odd, then one more eigenvalue is returned from the larger end.
Selected eigenvalues. This is not (yet) implemented currently.
Eigenvalues in an interval. This is not (yet) implemented.
All
eigenvalues. This is not implemented yet. The standard eigen
function
does a better job at this, anyway.
Note that ARPACK might be unstable for graphs with multiple components, e.g. graphs with isolate vertices.
as_adj
to create a (sparse) adjacency matrix.
# NOT RUN {
## Small example graph, leading eigenvector by default
kite <- make_graph("Krackhardt_kite")
spectrum(kite)[c("values", "vectors")]
## Double check
eigen(as_adj(kite, sparse=FALSE))$vectors[,1]
## Should be the same as 'eigen_centrality' (but rescaled)
cor(eigen_centrality(kite)$vector, spectrum(kite)$vectors)
## Smallest eigenvalues
spectrum(kite, which=list(pos="SM", howmany=2))$values
# }
Run the code above in your browser using DataLab