Applies an operator to this state as \( |\psi\rangle \to \hat O |\psi\rangle\) using apply_op_naive(); prefer using apply_op_itrunc() if you want to truncate the state later.
op | operator to apply to the state. |
The order of multiplication is tricky. If the state tensor (A) is of size d·m·m and the operator tensor (W) of size w·w·d·d, then the left and right fuses (L, R) are of size wm·m·w.
There are five possible orderings (due to symmetry, exchange L/R to get the other 5):
Of these, 3) is strictly better than 4) [m < dm]. 1) is strictly better than 2) [2w < w²+1]. Comparing 1) and 3), we find: d + 2w·m ? dw + (w+1)m with d << m always. If w << m, then (w+1) < 2w is enough for 3) to be better. If w ~ m, then we have d + 2m² ? m² + (d+1)m. Since d+1 < 2m, 3) wins.
This means that operator application to a state without truncation is of cost O(L dw²m² [(w+1)·m + dw]) for L sites.
References syten::MPS::apply_op_naive().