Eigenstates
Eigenstates from imaginary time evolution.
Propagating in imaginary time, \(\Delta t = -i\tau\), damps each eigenstate as \(e^{-E_n\tau}\), so any start state relaxes to the ground state. Excited states follow by repeatedly projecting out the states found before (Gram-Schmidt), which leaves the lowest remaining state to survive.
lowest_eigenstates(grid, n_states, dt=0.01, tol=1e-10, max_steps=100000, check_every=20, rng=None)
Find the lowest eigenstates by imaginary time evolution.
Each state starts from random noise, which overlaps with every
eigenstate, and is propagated in imaginary time. Every check_every
steps the states found before are projected out and the state is
renormalized. A state counts as converged when its energy
\(\langle H\rangle\) changes by less than tol (relative to
\(\max(1, |E|)\)) between two checks.
The states are eigenstates of the split operator propagator, which differ from the exact ones by \(O(\Delta t^2)\); the energies are variational and accurate to \(O(\Delta t^4)\). Convergence is slow for nearly degenerate states: the error decays as \(e^{-(E_{n+1}-E_n)\tau}\).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
grid
|
Grid object
|
Grid with a time-independent potential. Afterwards |
required |
n_states
|
int
|
Number of states. |
required |
dt
|
float
|
Imaginary time step \(\tau\). |
0.01
|
tol
|
float
|
Convergence tolerance for the energy; for a complex64 grid it is at
least |
1e-10
|
max_steps
|
int
|
Maximum number of steps per state; a warning is logged if a state has not converged by then. |
100000
|
check_every
|
int
|
Steps between projections and convergence checks. |
20
|
rng
|
Generator or int
|
Random generator or seed for the start states. |
None
|
Returns:
| Name | Type | Description |
|---|---|---|
energies |
array
|
Energies \(E_0 \le E_1 \le \dots\) |
states |
list of arrays
|
Normalized, mutually orthogonal eigenstates. |
ground_state(grid, dt=0.01, tol=1e-10, max_steps=100000, rng=None)
Relax grid.psi to the ground state by imaginary time evolution.
See :func:lowest_eigenstates for the parameters.
Returns:
| Name | Type | Description |
|---|---|---|
E0 |
float
|
Ground state energy; |