Skip to content

Commit 44d9ee6

Browse files
committed
docs: fix notation and add TEBD in introduction
Fix the mathematical notation in some equations. Introduce Vidal-form MPSs and the TEBD algorithm in the home page of the documentation.
1 parent 3f7a7ea commit 44d9ee6

4 files changed

Lines changed: 58 additions & 64 deletions

File tree

docs/src/examples/tebd.md

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# Time-evolving block decimation
22

33
The time-evolving block-decimation (TEBD) algorithm, introduced in
4-
[Vidal2003:slightly_entangled](@cite) is the ideal time-evolution scheme to
5-
simulate one-dimensional many-body systems that are characterised by at most
4+
[Vidal2004:tebd](@cite) is the ideal time-evolution scheme to simulate
5+
one-dimensional many-body systems that are characterised by at most
66
nearest-neighbour interactions.
77
With the quantum state encoded in a Vidal-form MPS, the TEBD algorithm can be
88
straightforwardly parallelised due to the Suzuki–Trotter decomposition of the
@@ -74,7 +74,17 @@ The `tebd1!` function evolves the `VidalMPS` `ψₜ` according to the specified
7474
Hamiltonian. It is enough to specfy the (full) Hamiltonian operator as an
7575
`OpSum` object: the `tebd1!` function will take care of computing the
7676
Suzuki-Trotter decomposition in odd and even terms.
77-
We also need to provide the `maxdim` and `cutoff` keyword argument in order to
77+
78+
!!! info "Suzuki-Trotter decomposition"
79+
In the decomposition, a single-site operators \\(h_k\\) on site \\(k\\) is
80+
split simmetrically between the evolution operator on sites \\((k-1,k)\\)
81+
and \\((k, k+1)\\).
82+
As of the time this guide was written, the Hamiltonian provided to the TEBD
83+
function (as an `OpSum`) can admit only single-site or nearest-neighbour
84+
two-site operators. Specifically, interaction between non-nearest-neighbour
85+
sites are not allowed.
86+
87+
We need to provide the `maxdim` and `cutoff` keyword argument in order to
7888
describe how the MPS has to be truncated after the application of the two-site
7989
time-evolution operators.
8090

@@ -102,7 +112,7 @@ U(t) = U_{odd}(t/2) U_{even}(t) U_{odd}(t/2);
102112
if we don't need to compute the expectation values in `cb` after each time step,
103113
we can merge the \\(U\sb{odd}(t/2)\\) in the \\(U(t)\\) across time steps, i.e.
104114

105-
```math
115+
```math
106116
U(t)^k = U_{odd}(t/2) U_{even}(t) \bigl(U_{odd}(t) U_{even}(t)\bigr)^{k-1} U_{odd}(t/2)
107117
```
108118

docs/src/index.md

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,16 @@ It is based on the [ITensor](https://itensor.org/) library.
77

88
## Package features
99

10-
The package contains an implementation of the one-site time-dependent variational principle (TDVP1) [Lubich2015:tdvp_evolution,Haegeman2016:unifying_time_evolution_optimization_mps,Paeckel2019:time_evolution_methods](@cite) in its standard version, together with:
11-
12-
* the variant with adaptive bond dimensions [Dunnett2021:adaptive_tdvp1](@cite),
13-
* the non-unitary version (for vectorised mixed states).
10+
The package implements:
11+
12+
* the one-site time-dependent variational principle (TDVP1)
13+
[Lubich2015:tdvp_evolution,Haegeman2016:unifying_time_evolution_optimization_mps,Paeckel2019:time_evolution_methods](@cite),
14+
in its standard version as well as
15+
* its variant with adaptive bond dimensions [Dunnett2021:adaptive_tdvp1](@cite),
16+
* a non-unitary version (for vectorised mixed states);
17+
* matrix-product states in the *Vidal* (or *canonical*) gauge,
18+
* the time-evolving block-decimation algorithm (TEBD) for Vidal-form MPS,
19+
together with automatic 1st and 2nd order Suzuki-Trotter decompositions.
1420

1521
See [Reference](@ref) for a complete list of features, and a description of the
1622
available methods.

docs/src/reference/vidal_mps.md

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -21,25 +21,23 @@ by Vidal [Vidal2003:slightly_entangled](@cite), this kind of MPS takes the form
2121
\end{equation}
2222
```
2323

24-
in which we have a *site tensor* \\(\Gamma^{(k,i\sb{k})}\\) for each degree of
24+
in which we have a *site tensor* \\(\Gamma^{(k)}\\) for each degree of
2525
freedom of the system and a *bond tensor* \\(\Lambda^{(k)}\\), namely a
2626
non-negative diagonal matrix, associated to each bond.
2727
In this package, a Vidal-form MPS is represented by the `VidalMPS` type, which
2828
is little more than a container of the two arrays of *site* and *bond*
2929
tensors.
3030

31-
```@docs; canonical=false
32-
VidalMPS
33-
```
34-
3531
An important feature of Vidal-form MPSs is their orthonormality rules, that
36-
allow simplifying many calculations. They are:
32+
allow simplifying many calculations. They are
3733

3834
```math
3935
\begin{equation}
4036
\begin{aligned}
41-
\sum_{i_k} \adj{(\Gamma^{(k,i_k)})} \adj{(\Lambda^{(k-1)})} \Lambda^{(k-1)} \Gamma^{(k,i_k)} &= \tr(\Lambda^{(k-1)\,2)},\\
42-
\sum_{i_k} \adj{(\Gamma^{(k,i_k)})} \Lambda^{(k)} \adj{(\Lambda^{(k)})} \Gamma^{(k,i_k)} &= \tr(\Lambda^{(k)\,2}),
37+
\sum_{i_k} \Gamma^{(k,i_k)\dagger} \Lambda^{(k-1)\dagger}
38+
\Lambda^{(k-1)} \Gamma^{(k,i_k)} &= \tr(\Lambda^{(k-1)2}),\\
39+
\sum_{i_k} \Gamma^{(k,i_k)} \Lambda^{(k)} \adj{(\Lambda^{(k)})}
40+
\Gamma^{(k,i_k)\dagger} &= \tr(\Lambda^{(k)2}),
4341
\end{aligned}
4442
\label{eq:vidalmps_cancellation_rules}
4543
\end{equation}
@@ -63,7 +61,10 @@ The type is designed to follow the same interface as ordinary MPSs from ITensor.
6361

6462
### Constructors
6563

66-
You can construct a trivial (i.e. a tensor-product) Vidal-form MPS with the same syntax as ordinary MPSs, that is, by specifying a list of site indices and a list of strings denoting the states, or a function of the site number, and so on.
64+
You can construct a trivial (i.e. a tensor-product) Vidal-form MPS with the same
65+
syntax as ordinary MPSs, that is, by specifying a list of site indices and a
66+
list of strings denoting the states, or a function of the site number, and so
67+
on.
6768

6869
```jldoctest vidalmps; setup = :(using ITensorMPS, MPSTimeEvolution), filter = r"id=\d+" => "id=###"
6970
julia> s = siteinds("S=1/2", 4);
@@ -130,7 +131,7 @@ julia> convert(MPS, vv; ortho_center=3)
130131
((dim=2|id=643|"S=1/2,Site,n=4"), (dim=2|id=826|"Link,l=3"))
131132
132133
```
133-
134+
134135
### Vector operations
135136

136137
In order to multiply a `VidalMPS` by a scalar (complex) number, or to add two or
@@ -163,9 +164,10 @@ julia> +(vv, ww; alg="densitymatrix");
163164

164165
### Bond dimension truncation
165166

166-
The Vidal-form MPS can be compressed at a specified bond \\(k\\) by deleting the singular values in \\(\Lambda^{(k)}\\) under a certain cutoff, or beyond a certain number, through a singular-value decomposition.
167-
This can be done simply by calling the `truncate` function (or its in-place
168-
version `truncate!`).
167+
The Vidal-form MPS can be compressed at a specified bond \\(k\\) by deleting the
168+
singular values in \\(\Lambda^{(k)}\\) under a certain cutoff, or beyond a
169+
certain number, through a singular-value decomposition. This can be done by
170+
calling the `truncate` function (or its in-place version `truncate!`).
169171

170172
```jldoctest vidalmps
171173
julia> truncate!(vv; cutoff=1e-12, site_range=3:3);
@@ -198,20 +200,20 @@ julia> apply(Sy2Sy3, vv; cutoff=1e-14);
198200
199201
```
200202

201-
The result can be truncated (just as in the `truncate` function) by using the
202-
`cutoff` and `maxdim` keyword arguments.
203+
The result can be truncated by using the `cutoff` and `maxdim` keyword
204+
arguments, in the same manner as with the `truncate` function.
203205

204206
### Inner products and expectation values
205207

206208
The `inner` (or `dot`) function implements the inner product between two
207-
Vidal-form MPS, and the norm of an MPS can be retrieved with `norm`.
208-
The `norm` function in practice doesn't compute the full inner product between a
209+
Vidal-form MPS, and the norm of an MPS can be retrieved with `norm`. The `norm`
210+
function, in practice, doesn't compute the full inner product between a
209211
`VidalMPS` and itself, but uses the cancellation rules in
210212
\eqref{eq:vidalmps_cancellation_rules} to obtain the norm just by computing the
211213
trace of the square of the bond tensors:
212214

213215
```math
214-
\norm{\psi}^2 = \prod_{k=1}^{n-1} \tr(\Lambda^{(k)\, 2)
216+
\norm{\psi}^2 = \prod_{k=1}^{n-1} \tr(\Lambda^{(k)2}).
215217
```
216218

217219
Expectation values of single-site operators can be computed via the `expect`

0 commit comments

Comments
 (0)