Fourier Transform Product state
Posted: 09 Mar 2021, 13:49
Within some approximation a system has the ground state \(|\tilde{\psi}_0 \rangle\) and an excited state \(|\tilde{\psi}_1 \rangle = \hat{O}|\tilde{\psi}_0 \rangle \) that is connected via the operator \(\hat{O}\), which is known.
I now did a DMRG calculation for that system, obtaining the real ground state \(|\psi_0 \rangle\). As a first guess, I want to try to apply this operator to the real ground state (knowing that the operator is not the 'real' operator anymore) and then compare the spectrum in k-space. Performing a calculation on L sites I want to calculate the energy of the Fourier transformed, excited MPS \(|\psi_1 \rangle_k = \sum_{i=0}^{L-1} e^{ikr_i}\hat{O}_i|\psi_0 \rangle\).
What's the most efficient way to compute these energies? I can apply \(\hat{O}\) using mps.apply_local_op(), but the '+' operator is not overloaded for the mps class, so I wonder if there's a method to construct \(|\psi_0 \rangle_k \), or whether I have to calculate the energy for all the different combinations of the summands in \(|\psi_1 \rangle_k \) and \( \langle\psi_1 |_k \).
Concerning the energy calculation of \(|\psi_1 \rangle_k \), I haven't found an 'energy()' method in the mps-class. Should I use the mps.expectation_value() method, and if yes, is there some predefined Energy operator that I can pass as a string (like 'Sx' or 'Sp'), or is there a better way?
I now did a DMRG calculation for that system, obtaining the real ground state \(|\psi_0 \rangle\). As a first guess, I want to try to apply this operator to the real ground state (knowing that the operator is not the 'real' operator anymore) and then compare the spectrum in k-space. Performing a calculation on L sites I want to calculate the energy of the Fourier transformed, excited MPS \(|\psi_1 \rangle_k = \sum_{i=0}^{L-1} e^{ikr_i}\hat{O}_i|\psi_0 \rangle\).
What's the most efficient way to compute these energies? I can apply \(\hat{O}\) using mps.apply_local_op(), but the '+' operator is not overloaded for the mps class, so I wonder if there's a method to construct \(|\psi_0 \rangle_k \), or whether I have to calculate the energy for all the different combinations of the summands in \(|\psi_1 \rangle_k \) and \( \langle\psi_1 |_k \).
Concerning the energy calculation of \(|\psi_1 \rangle_k \), I haven't found an 'energy()' method in the mps-class. Should I use the mps.expectation_value() method, and if yes, is there some predefined Energy operator that I can pass as a string (like 'Sx' or 'Sp'), or is there a better way?