Imaginary-Time Evolution
Closed this issue · 4 comments
Hi there, new to QuEST and was hoping for a pointer in the right direction.
Within QuEST I would like to prepare the state
Alternately a function that acts similarly to the ApplyTrotterCircuit function but instead evolves the state in imaginary time.
I would be grateful for some advice, or if a small example could be provided demonstrating how this could be implemented.
Thanks,
Joe
Hi Joe,
Sure, something like this is very doable, albeit not directly with a single function.
Is your Hamiltonian
Apologies for the delay - I hope this is still valuable!
You can trotterise the (non-unitary) "imaginary-time generator" exp(- beta t H)
like is done in this work. Each term in the product resembles operator exp(coeff * pauli product)
. Because coeff
is real, this operator not a Pauli gadget like QuEST supports.
But as I show here,
exp(coeff * pauli-prod) = cosh(coeff) * Identity + sinh(coeff) * pauli-prod
QuEST is soon (well, some months away still) to receive functions that make effecting such operators trivial.
But right now, you could effect it upon a given state qureg
by...
- cloning
qureg
into a copytmp
viacloneQureg()
- apply the pauli-product upon
qureg
as a single-term sum viaapplyPauliSum()
- combine the registers via
setWeightedQureg()
, givingtmp
coefficientcosh(coeff)
andqureg
coefficientsinh(coeff)
, overwritingqureg
.
Let me know if I'm not uselessly late and I can help with a full implementation. Please leave this issue open in any case, since I think incorporating a Trotterised imaginary-time evolver is a good idea, and I'll make a full implementation (faster than the above hack) after the aforementioned QuEST changes.
Hi Tyson,
I have since started using QuESTlink instead to perform these calculations (which I am enjoying much more 😁), but thank you for the answer.