seemps.evolution.euler.euler#

seemps.evolution.euler.euler(H, t_span, state, steps=1000, strategy=<seemps.state.core.Strategy object>, callback=None, itime=False)[source]#

Solve a Schrodinger equation using the Euler method.

Integrates the Schrodinger equation in real or imaginary time using a first order Euler method. The equation is defined as .. math:

i\frac{d}{dt}\psi = H(t) \psi

in real time and as .. math:

\frac{d}{dt}\psi = -H(t) \psi

in imaginary time evolution.

The integration algorithm is very simple. It is .. math:

\psi(t_{n+1}) = \psi(t_{n}) - i \delta t H \psi(t_{n})

for real time and .. math:

\psi(t_{n+1}) = \psi(t_{n}) - \delta t H \psi(t_{n})

for imaginary time evolution. The integration step is deduced from the arguments as explained below.

The t_span denotes the integration interval. * If it is a single number T, the initial condition is ..math::t=0

the evolution proceeds in steps of \(\delta{t}=T/N\) where N=steps.

  • If t_span is a tuple, it contains the initial and final time, and the number of integration steps is deduced from N=steps as \(\delta{t}=T/N\)

  • If t_span is a sequence of numbers, starting with the initial condition, and progressing in time steps t_span[n+1]-t_span[n].

The Euler algorithm is a very bad integrator and is offered only for illustrative purposes.

Parameters:
HMPO

Hamiltonian in MPO form.

t_spanfloat | tuple[float, float] | Vector

Integration interval, or sequence of time steps.

stateMPS

Initial guess of the ground state.

stepsint, default = 1000

Integration steps, if not defined by t_span.

strategyStrategy, default = DEFAULT_STRATEGY

Truncation strategy for MPO and MPS algebra.

callbackOptional[Callable[[float, MPS], Any]]

A callable called after each iteration (defaults to None).

itimebool, default = False

Whether to solve the imaginary time evolution problem.