Two-time correlation functions¶
With the QuTiP time-evolution functions (for example qutip.mesolve
and qutip.mcsolve
), a state vector or density matrix can be evolved from an initial state at \(t_0\) to an arbitrary time \(t\), \(\rho(t)=V(t, t_0)\left\{\rho(t_0)\right\}\), where \(V(t, t_0)\) is the propagator defined by the equation of motion. The resulting density matrix can then be used to evaluate the expectation values of arbitrary combinations of same-time operators.
To calculate two-time correlation functions on the form \(\left<A(t+\tau)B(t)\right>\), we can use the quantum regression theorem (see, e.g., [Gar03]) to write
We therefore first calculate \(\rho(t)=V(t, 0)\left\{\rho(0)\right\}\) using one of the QuTiP evolution solvers with \(\rho(0)\) as initial state, and then again use the same solver to calculate \(V(t+\tau, t)\left\{B\rho(t)\right\}\) using \(B\rho(t)\) as initial state.
Note that if the initial state is the steady state, then \(\rho(t)=V(t, 0)\left\{\rho_{\rm ss}\right\}=\rho_{\rm ss}\) and
which is independent of \(t\), so that we only have one time coordinate \(\tau\).
QuTiP provides a family of functions that assists in the process of calculating two-time correlation functions. The available functions and their usage is shown in the table below. Each of these functions can use one of the following evolution solvers: Master-equation, Exponential series and the Monte-Carlo. The choice of solver is defined by the optional argument solver
.
QuTiP function | Correlation function |
---|---|
qutip.correlation.correlation or
qutip.correlation.correlation_2op_2t |
\(\left<A(t+\tau)B(t)\right>\) or \(\left<A(t)B(t+\tau)\right>\). |
qutip.correlation.correlation_ss or
qutip.correlation.correlation_2op_1t |
\(\left<A(\tau)B(0)\right>\) or \(\left<A(0)B(\tau)\right>\). |
qutip.correlation.correlation_4op_1t |
\(\left<A(0)B(\tau)C(\tau)D(0)\right>\). |
qutip.correlation.correlation_4op_2t |
\(\left<A(t)B(t+\tau)C(t+\tau)D(t)\right>\). |
The most common use-case is to calculate correlation functions of the kind \(\left<A(\tau)B(0)\right>\), in which case we use the correlation function solvers that start from the steady state, e.g., the qutip.correlation.correlation_2op_1t
function. These correlation function solvers return a vector or matrix (in general complex) with the correlations as a function of the delays times.
Steadystate correlation function¶
The following code demonstrates how to calculate the \(\left<x(t)x(0)\right>\) correlation for a leaky cavity with three different relaxation rates.
In [1]: times = np.linspace(0,10.0,200)
In [2]: a = destroy(10)
In [3]: x = a.dag() + a
In [4]: H = a.dag() * a
In [5]: corr1 = correlation_ss(H, times, [np.sqrt(0.5) * a], x, x)
In [6]: corr2 = correlation_ss(H, times, [np.sqrt(1.0) * a], x, x)
In [7]: corr3 = correlation_ss(H, times, [np.sqrt(2.0) * a], x, x)
In [8]: figure()
Out[8]: <Figure size 640x480 with 0 Axes>
In [9]: plot(times, np.real(corr1), times, np.real(corr2), times, np.real(corr3))