diagonalize.lanczos
diagonalize.lanczos(A, v0=None, deg=None, rtol=1e-08, orth=0, sparse_mat=False, return_basis=False, seed=None, dtype=None)
Lanczos method for matrix tridiagonalization.
This function implements Paiges A27 variant (1) of the Lanczos method for tridiagonalizing linear operators, with additional modifications to support varying degrees of re-orthogonalization. In particular, orth=0
corresponds to no re-orthogonalization, orth < deg
corresponds to partial re-orthogonalization, and orth >= deg
corresponds to full re-orthogonalization.
Notes
The Lanczos method builds a tridiagonal T
from a symmetric A
via an orthogonal change-of-basis Q
: Q^T A Q = T Unlike other Lanczos implementations (e.g. SciPy’s eigsh
), which includes e.g. sophisticated restarting, deflation, and selective-reorthogonalization steps, this method simply executes deg
steps of the Lanczos method with the supplied v0
and returns the resulting tridiagonal matrix T
.
Rayleigh-Ritz approximations of the eigenvalues of A
can be further obtained by diagonalizing T
via any symmetric tridiagonal eigenvalue solver, scipy.linalg.eigh_tridiagonal
though note unlike eigsh
no checking is performed for ‘ghost’ or already converged eigenvalues. To increase the accuracy of these eigenvalue approximation, try increasing orth
and deg
. Supplying either negative values or values larger than deg
for orth
will result in full re-orthogonalization, though note the number of matvecs scales linearly with deg
and the number of inner-products scales quadratically with orth
.
Parameters
Name | Type | Description | Default |
---|---|---|---|
A |
scipy.sparse.linalg.LinearOperator or ndarray or sparray | Symmetric operator to tridiagonalize. | required |
v0 |
ndarray | Initial vector to orthogonalize against. | None |
deg |
int | Size of the Krylov subspace to expand. | None |
rtol |
float | Relative tolerance to consider the invariant subspace as converged. | 1e-8 |
orth |
int | Number of additional Lanczos vectors to orthogonalize against. | 0 |
sparse_mat |
bool | Whether to output the tridiagonal matrix as a sparse matrix. | False |
return_basis |
bool | If True , returns the Krylov basis vectors Q . |
False |
dtype |
dtype | The precision dtype to specialize the computation. | None |
Returns
Type | Description |
---|---|
tuple | A tuple (a,b) parameterizing the diagonal and off-diagonal of the tridiagonal matrix. If return_basis=True , the tuple (a,b), Q is returned, where Q represents an orthogonal basis for the degree-deg Krylov subspace. |
See Also
scipy.linalg.eigh_tridiagonal : Eigenvalue solver for real symmetric tridiagonal matrices. operator.matrix_function : Approximates the action of a matrix function via the Lanczos method.
References
- Paige, Christopher C. “Computational variants of the Lanczos method for the eigenproblem.” IMA Journal of Applied Mathematics 10.3 (1972): 373-381.