I want to implement time evolution operator of a hamiltonian in qiskit. I am using circ.hamiltonian(H,time,list(range(N)))
to get the circuit. This method does not allow me to input imaginary time. Is there a way I can get the time evolution operator in qiskit with imaginary time as input?
1 Answer
Imaginary time evolution cannot be implemented with a unitary gate, as $e^{-tH}$ for a Hamiltonian $H$ is no unitary operation and does not preserve the norm of the quantum state. Classically, we can just renormalize the state after the application $$ \begin{aligned} |\tilde\psi(t+\Delta_t)\rangle &= e^{-\Delta_t H}|\psi(t)\rangle \\ |\psi(t+\Delta_t)\rangle &= \frac{|\tilde\psi(t+\Delta_t)\rangle}{\sqrt{\langle\tilde\psi(t+\Delta_t)|\tilde\psi(t+\Delta_t)\rangle}} \end{aligned} $$ However on the quantum computer we have to make use of different techniques, as we cannot simply normalize the state (nor implement the non-unitary operation).
Common approaches are
- Mapping the evolution of the state to the evolution of parameters in an ansatz using a variational principle. This is also available in Qiskit: https://qiskit.org/documentation/stubs/qiskit.algorithms.VarQITE.html.
- Extending the system with additional qubits: https://qiskit.org/documentation/stubs/qiskit.algorithms.VarQITE.html
- Embedding the non-unitary operator $e^{-tH}$ in a larger system to make it unitary: https://journals.aps.org/prxquantum/abstract/10.1103/PRXQuantum.2.010342
The simplest to get started is likely the variational time evolution, as there is also a Qiskti implementation available.