Higher order time evolution in TEBD.


I am trying to implement a higher order time evolution in ITensor (specifically I need 4 th order time evolution).I have looked at this MPS Time Evolution · ITensors.jl & this structure works pretty well for me. But, I have few doubts.

i)I checked the paper https://arxiv.org/pdf/math-ph/0506007.pdf (page 7, Eq.44) for 4 th order trotter decomposition & implemented the same for a Z3 Potts model.But, I am still getting linear error scaling. I used brickwall structure circuit for time evolution (A denotes gates on odd bonds & B denotes gates on even bonds). Is this the proper way to do higher-order time evolution for MPS?

Note: I used a really small system (6 qutrits) & put sufficient maxdim to avoid truncation error.

ii) Is there a way to use MPO to do time evolve MPS in Julia? I didn’t find any option to exponentiate MPO unlike C++. Is there any specific advantage for gate based evolution compared to MPO approach? (I guess being a local operation may be advantageous for gate based evolution.Is there other reasons?)

Any suggestion would be really helpful.

Thanks a lot to the developers & maintainers of the library for creating this wonderful tool? I really appreciate their effort. Thank you.

Hi, so I’d say as long as you have a Hamiltonian which is suitable for gate-based evolution and you have a clear need for higher-order time evolution, then using Trotter gates is currently the best approach.

You should be able to implement any arbitrary Trotter gate pattern using the kind of code in the tutorial you linked (MPS Time Evolution) so if you are not observing the scaling you expect I would bet it is due to a bug in your implementation. Please note, for example, that the part of the code tutorial where the gates are added in reversed order at the end is a specific pattern for the second-order Trotter pattern and may not generalize to higher orders in such a straightforward way.

One other techique you might want to investigate is the time-dependent variational principle (TDVP). We are putting together an ITensor package for that and it’s almost ready. TDVP can also perform higher-order integrations though I’m not an expert on that aspect of TDVP myself.

Finally, regarding MPO time evolution, we don’t currently offer an automatic feature for it in Julia ITensor. One reason is that in practice it hasn’t performed as well as TDVP (neither in terms of speed or accuracy), and yet TDVP has most of the same advantages as using MPOs. The main advantage of using MPOs or TDVP is that you can treat rather arbitrary Hamiltonians including ones with long-range interactions, while doing that with Trotter gates can be hard.

But again if your Hamiltonian is short ranged, then Trotter gates is a very good option. For most cases, here are the advantages / disadvantages I see:

Trotter gates:

  • [+] easy to implement
  • [+] does not get stuck in a local minimum or ever fail to give the correct answer
  • [-] can be slower than TDVP
  • [-] hard or costly to implement further-neighbor or long-range interactions


  • [+] can be more accurate than Trotter
  • [+] usually faster than Trotter, especially for more complicated Hamiltonians
  • [+] can take larger time steps without losing accuracy
  • [-] can get stuck in a local minimum or fail due to a poor basis (though there are fixes for this in many situations)
  • [-] can be a bit more technical to use, though a good package or code can help a lot

Also thanks for the kind words about ITensor!

Thanks @miles for the response. My problem got significantly reduced by putting (ishermitian=true) in exp(tau*H) function for the Hamiltonian in real time evolution. I get an error upto 1e-8 which seems hard to reduce even with 4th order Trotter decomposition. ( I guess there are other sources of error which negates the gain achieved beyond 1e-8 with higher order evolution). Upto 1e-9,the I get errror scaling (both for 2nd & 4 th order case).

Also thanks for the suggestion regarding TDVP. It seems to be useful in my case. I shall surely try that .