Two-time correlation functions

We can calculate the two-time correlation function $g(t) = \langle A(t)B\rangle$ of a system for a given list of times with the implemented function timecorrelations.correlation

tspan = [0:0.1:10;]
g = timecorrelations.correlation(tspan, ρ0, H, J, A, B)

The calculation is performed by applying the operator B to the initial density matrix ρ0, which is then used as initial state for a time evolution according to a master equation with timeevolution.master. The correlation g is then just the expectation value of A at every time-step.

If the list of times tspan is omitted, the function automatically calculates the correlation until steady-state is reached.

Furthermore, we can calculate the spectrum by means of the Wiener-Khinchin theorem, i.e. as Fourier transform of the correlation function,

\[S(\omega) = 2\Re\left\{\int_0^\infty dt e^{-i\omega t}\langle A^\dagger(t)A\rangle\right\}.\]

This can be done directly by using timecorrelations.spectrum, which internally calculates the correlation function and the spectrum for a given list of frequencies. Alternatively, if you already calculated the correlation function you can calculate the spectrum and the corresponding frequencies with timecorrelations.correlation2spectrum.

ωlist = [-2π:0.1:2π;]
spec = timecorrelations.spectrum(ωlist, H, J, A)
ω, spec = timecorrelations.correlation2spectrum(tspan, g)

If the list of frequencies ωlist is omitted, the correlation function is calculated up to steady-state and a list of the frequencies corresponding to the time it takes the system to reach steady-state is returned in addition to the spectrum.