arnoldi {sanic} | R Documentation |
Krylov Subspace Spectral Decomposition
Description
Arnoldi iteration and Lanczos method to iteratively approximate the
Hessenberg or tridiagonal form of a matrix A
and find its
eigenvalues.
Usage
arnoldi(
a,
b,
symmetric,
iter = nrow(a),
tol = .Machine$double.eps,
eigen = TRUE,
orthogonalise = TRUE
)
lanczos(
a,
b,
iter = nrow(a),
tol = .Machine$double.eps,
eigen = TRUE,
orthogonalise = TRUE
)
Arguments
a |
Square numeric matrix. |
b |
Arbitrary numeric non-zero vector used to construct the basis. |
symmetric |
Logical scalar indicating whether 'a' is symmetric. By default symmetry is checked up to machine precision, which may take a long time for symmetric matrices. |
iter |
Integer scalar with the maximum number of iterations. Defaults to the theoretical maximum, i.e. the number of columns in 'a'. |
tol |
Numeric scalar with the desired tolerance. Defaults to the machine precision. |
eigen |
Logical scalar indicating whether to compute eigenvalues from the decomposition. |
orthogonalise |
Logical scalar indicating whether to use plain Lanczos or full reorthogonalisation. Defaults to reorthogonalisation. |
Value
Returns a list with slots "H"
for the Hessenberg form of 'a'
or slots "diagonal"
and "subdiagonal"
for its triangular form,
slot "Q"
with the orthonormal basis, and, if requested, eigenvalues
in the slot "values"
.
Examples
set.seed(42)
# Compute Hessenberg of a square matrix
A <- matrix(rnorm(9), nrow = 3, ncol = 3)
ks <- arnoldi(A, symmetric = FALSE)
# Compute tridiagonal of a symmetric matrix
A <- crossprod(matrix(rnorm(9), nrow = 3, ncol = 3))
ks <- lanczos(A)
ks <- arnoldi(A, symmetric = TRUE) # Short-hand