The mp-imoments
command calculates the expectation values and higher moments of triangular operators (that is, operators that have infinite support and represent a sum of local operators (and generalizations).
Synopsis
mp-imoments [options] <psi> [operator]
The mp-imoments
command sums the infinite series of terms in a triangular MPO and returns the result as a polynomial function in the lattice size {$L$}. The algorithm used is described in http://arxiv.org/abs/1008.4667.
The wavefunction psi
must be an infinite MPS. The operator can be any triangular MPO expression. If the operator is not specified, then the wavefunction attribute Hamiltonian
is used (this provides a short-cut for calculating the energy and variance).
If no display options are specified (--real
, --imag
, --mag
, --arg
), then the default is to show both cartesian and polar coordinates of the result.
Options
--help
show help message
--power
=n
calculate moments of the n'th power of the operator [default 1]
-t
, --cumulants
calculate the cumulants {$\kappa_m$} instead of the moments
-c
, --cart
display the result in Cartesian (real,imag) coordinates [equivalent to --real --imag
]
-p
, --polar
display the result in polar coordinates [equivalent to --mag --arg
]
-r
, --real
display the real part of the result
-i
, --imag
display the imaginary part of the result
-m
, --mag
display the magnitude part of the result
-a
, --arg
display the argument part of the result
--radians
display the argument part of the result in radians instead of degrees
-u
, --unitcell
=n
scale the results to this unit cell size [default wavefunction unit cell size]
-d
, --degree
=n
force the degree of the operator to n. Some MPO's cannot autodetect the degree (for example if the highest power term is zero due to some symmetry).
-q
, --quiet
don't display the preamble or column headings
--tol
=n
tolerance of the eigensolver [default 1E-15]
--unityepsilon
=n
epsilon value for testing eigenvalues for unity [default 1E-12]
-q
, --quiet
don't display the preamble or column headings
-v
, --verbose
show additional debug information. Can be used multiple times
Examples
- Calculate the energy per unit cell of a wavefunction (assuming that the Hamiltonian is set by the wavefunction attribute)
$ mp-imoments psi --real
#mp-imoments psi --real
#Date: Thu, 12 May 2016 22:24:32 +1000
#operator "lat:4*H_zz+2*H_x"
#quantities are calculated per unit cell size of 2 sites
#moment #degree #real
1 1 -2.5450849718747
We used --real
to shorten the output, since we know that the imaginary part will be numerically zero. But this is rather dangerous to assume in general!
The interpretation of the results is that the total energy of the system is -2.5450849718747*N, where N is the number of unit cells (two physical lattice sites, in this case).
- Calculate the energy variance
$ mp-imoments psi --power 2 --real
#mp-imoments psi --power 2 --real
#Date: Thu, 12 May 2016 22:27:42 +1000
#operator "lat:4*H_zz+2*H_x"
#quantities are calculated per unit cell size of 2 sites
#moment #degree #real
1 1 -2.5450849718747
2 1 0.0026607795314968
2 2 6.4774575140627
The output shows both the first and second moments. The first moment gives the expectation value {$\langle H \rangle$}, which is the energy per unit cell. The second moment gives the expectation value {$\langle H^2 \rangle = e_0^2 L^2 + \sigma^2 L$} where {$e_0$} is the energy per unit cell and {$\sigma^2$} is the variance per unit cell. So the variance per unit cell is given by the coefficient of degree 1 of the 2nd moment, which in this example is 0.00266.
- Momentum distribution function
Often we would use this in a script with $k as a loop variable.
$ mp-imoments psi lattice:"sum_k($k, N(0)) * sum_k(-$k, N(0))"
We can simplify the expression here using the sq(X)
function, which is equivalent to inner(X,X)
, or adjoint(X)*X
.
$ mp-imoments psi lattice:"sq(sum_k(-$k, N(0)))"
- Large-distance limit of the string correlation function for a spin-1 chain
$ mp-imoments psi lattice:"sum_kink(exp(i*pi*Sz(0)), Sz(0))^2"