Time-dependent perturbation theory and multi-variable series expansions review#

The perturbation module contains functionality for numerically computing perturbation theory expansions used in the study of the dynamics of quantum systems. Following [1], this discussion reviews key concepts required to understand and utilize the module, including the Dyson series and Magnus expansion, their generalization to a multi-variable setting, and the notation used to represent multi-variable power series in terms of multisets.

The Dyson series and Magnus expansion#

The Dyson series [2] and Magnus expansion [3][4] are time-dependent perturbation theory expansions for solutions of linear matrix differential equations (LMDEs). For an LMDE

\[\dot{U}(t) = G(t)U(t)\]

with \(U(0) = I\) the identity matrix, the Dyson series directly expands the solution:

\[\begin{split}U(t) &= I + \sum_{k=1}^\infty D_k(t)\textnormal{, with} \\ D_k(t) &= \int_0^t dt_1 \dots \int_0^{t_{k-1}} dt_k G(t_1) \dots G(t_k).\end{split}\]

The Magnus expansion alternatively seeks to construct a time-averaged generator, i.e. an operator \(\Omega(t)\) for which

\[U(t) = \exp(\Omega(t)).\]

The Magnus expansion provides a series expansion, which, under certain conditions [4], converges to \(\Omega(t)\):

\[\Omega(t) = \sum_{k=1}^\infty \Omega_k(t),\]

where explicit expressions for the \(\Omega_k(t)\) are given in the literature [4].

Generalizing to the multi-variable case#

In applications, these expansions are often used in a multi-variable setting, in which the generator \(G(t)\) depends on several variables \(c_0, \dots, c_{r-1}\), and the Dyson series or Magnus expansion are used to understand how the evolution changes under perturbations to several of these parameters simultaneously. For working with these expansions algorithmically it is necessary to formalize the expression of these expansions in the multi-variable setting.

Mathematically, we explicitly write the generator as a function of these variables \(G(t, c_0, \dots, c_{r-1})\), and expand \(G\) in a multi-variable power series in the variables \(c_i\):

\[G(t, c_0, \dots, c_{r-1}) = G_\emptyset(t) + \sum_{k=1}^\infty \sum_{0 \leq i_1 \leq \dots \leq i_k \leq r-1} c_{i_1} \dots c_{i_k} G_{i_1, \dots, i_k}(t).\]

For physical applications we take the existence of such a power series for granted: up to constant factors, the coefficients \(G_{i_1, \dots, i_k}(t)\) are the partial derivatives of \(G\) with respect to the variables \(c_i\). Commonly, \(G\) depends linearly on the variables, e.g. when representing couplings between quantum systems.

Before defining the multi-variable Dyson series and Magnus expansions, we transform the generator into the toggling frame of \(G_\emptyset(t)\) [5][6]. Denoting

\[V(t) = \mathcal{T}\exp\left(\int_{t_0}^t ds G_\emptyset(s)\right),\]

the generator \(G\) in the toggling frame of \(G_\emptyset(t)\), the unperturbed generator, is given by:

\[\begin{split}\tilde{G}(t, c_0, \dots, c_{r-1}) &= \sum_{k=1}^\infty \sum_{0 \leq i_1 \leq \dots \leq i_k \leq r-1} c_{i_1} \dots c_{i_k} \tilde{G}_{i_1, \dots, i_k}(t)\textnormal{, with} \\ \tilde{G}_{i_1, \dots, i_k}(t) &= V^{-1}(t) G_{i_1, \dots, i_k}(t)V(t)\end{split}\]

Denoting \(U(t, c_0, \dots, c_{r-1})\) as the solution of the LMDE with generator \(\tilde{G}\), note that

\[U(t, c_0, \dots, c_{r-1}) = V(t)\mathcal{T}\exp\left(\int_{t_0}^t ds \tilde{G}(s, c_0, \dots, c_{r-1})\right),\]

and hence solution for \(G\) and \(\tilde{G}\) are simply related by \(V(t)\).

Using this, [1] defines the multi-variable Dyson series for the generator \(\tilde{G}(t, c_0, \dots, c_{r-1})\) as:

\[U(t, c_0, \dots, c_{r-1}) = I + \sum_{k=1}^\infty \sum_{0 \leq i_1 \leq \dots \leq i_k \leq r-1} c_{i_1} \dots c_{i_k} \mathcal{D}_{i_1, \dots, i_k}(t),\]

where the \(\mathcal{D}_{i_1, \dots, i_k}(t)\) are defined implicitly by the above equation, and are called the multi-variable Dyson series terms. Similarly the multi-variable Magnus expansion for \(\tilde{G}\) is given as:

\[\Omega(t, c_0, \dots, c_{r-1}) = \sum_{k=1}^\infty \sum_{0 \leq i_1 \leq \dots \leq i_k \leq r-1} c_{i_1} \dots c_{i_k} \mathcal{O}_{i_1, \dots, i_k}(t),\]

with the \(\mathcal{O}_{i_1, \dots, i_k}(t)\) again defined implicitly, and called the multi-variable Magnus expansion terms.

Computing multi-variable Dyson series and Magnus expansion terms#

Given a power series decomposition of the generator as above, the function solve_lmde_perturbation() computes, in the toggling frame of the unperturbed generator, either multi-variable Dyson series or Magnus expansion terms via the algorithms in [1]. It can also be used to compute Dyson-like terms via the algorithm in [7]. In the presentation here and elsewhere, the expansions are phrased as infinite series, but of course in practice truncated versions must be specified and computed.

Utilizing this function, and working with the other objects in the module, requires understanding the notation and data structures used to represent power series.

Multiset power series notation#

Following [1], the perturbation module utilizes a multiset notation to more compactly represent and work with power series.

Consider the power series expansion above for the generator \(G(t, c_0, \dots, c_{r-1})\). Structurally, each term in the power series is labelled by the number of times each variable \(c_0, \dots, c_{r-1}\) appears in the product \(c_{i_1} \dots c_{i_k}\). Equivalently, each term may be indexed by the number of times each variable label \(0, \dots, r-1\) appears. The data structure used to represent these labels in this module is that of a multiset, i.e. a “set with repeated entries”. Denoting multisets with round brackets, e.g. \(I = (i_1, \dots, i_k)\), we define

\[c_I = c_{i_1} \times \dots \times c_{i_k}.\]

and similarly denote \(G_I = G_{i_1, \dots, i_k}\). This notation is chosen due to the simple relationship between algebraic operations and multiset operations. E.g., for two multisets \(I, J\), it holds that:

\[c_{I + J} = c_I \times c_J,\]

where \(I + J\) denotes the multiset whose object counts are the sum of both \(I\) and \(J\).

Some example usages of this notation are:

  • \(c_{(0, 1)} = c_0 c_1\),

  • \(c_{(1, 1)} = c_1^2\), and

  • \(c_{(1, 2, 2, 3)} = c_1 c_2^2 c_3\).

Finally, we denote the set of multisets of size $k$ with elements in \(\{0, \dots, r-1\}\) as \(\mathcal{I}_k(r)\). Combining everything, the power series for \(G\) may be rewritten as:

\[G(t, c_0, \dots, c_{r-1}) = G_\emptyset(t) + \sum_{k=1}^\infty \sum_{I \in \mathcal{I}_k(r)} c_I G_I(t).\]

Similarly, the multi-variable Dyson series is written as:

\[U(t, c_0, \dots, c_{r-1}) = I + \sum_{k=1}^\infty \sum_{I \in \mathcal{I}_k(r)} c_I \mathcal{D}_I(t),\]

and the multi-variable Magnus expansion as:

\[\Omega(t, c_0, \dots, c_{r-1}) = \sum_{k=1}^\infty \sum_{I \in \mathcal{I}_k(r)} c_I \mathcal{O}_I(t).\]

In the module, multisets are represented using the Multiset object in the multiset package. Arguments to functions which must specify a multiset or a list of multisets accept either Multiset instances directly, or a valid argument to the constructor to Multiset, with the restriction that the multiset entries must be non-negative integers.

References