netket.exact.lanczos_ed#
- netket.exact.lanczos_ed(operator, *, k=1, compute_eigenvectors=False, matrix_free=False, scipy_args=None)[source]#
Computes first_n smallest eigenvalues and, optionally, eigenvectors of a Hermitian operator using
scipy.sparse.linalg.eigsh()
.- Parameters:
operator (
AbstractOperator
) – NetKet operator to diagonalize.k (
int
) – The number of eigenvalues to compute.compute_eigenvectors (
bool
) – Whether or not to return the eigenvectors of the operator. With ARPACK, not requiring the eigenvectors has almost no performance benefits.matrix_free (
bool
) – If true, matrix elements are computed on the fly. Otherwise, the operator is first converted to a sparse matrix.scipy_args (
dict
|None
) – Additional keyword arguments passed toscipy.sparse.linalg.eigvalsh()
. See the Scipy documentation for further information.
- Returns:
Either w or the tuple (w, v) depending on whether compute_eigenvectors is True.
w: Array containing the lowest first_n eigenvalues.
v: Array containing the eigenvectors as columns, such that`v[:, i]` corresponds to w[i].
Example
Test for 1D Ising chain with 8 sites.
>>> import netket as nk >>> hi = nk.hilbert.Spin(s=1/2)**8 >>> hamiltonian = nk.operator.Ising(hi, h=1.0, graph=nk.graph.Chain(8)) >>> w = nk.exact.lanczos_ed(hamiltonian, k=3) >>> w array([-10.25166179, -10.05467898, -8.69093921])