Is there a built-in algorithm in ITensor to calculate the inverse of MPO?

Hi, dear developers

Recently I use Itensor to calculate the ground state energy and ground state of a one-dimensional antiferromagnetic Heisenberg chain. I would like to further obtain its dynamical spin Green’s functions. It can be defined as: \langle \Phi_{0}| S_{-\mathbf{q}}^z \frac{1}{\mathcal{H}-\omega-\omega_{0}+i\eta}S_{\mathbf{q}}^z |\Phi_{0}\rangle=\langle \Phi^{\prime}|\frac{1}{\mathcal{H}-\omega-\omega_{0}+i\eta} |\Phi^{\prime} \rangle. Here |\Phi_{0}\rangle is the ground state, which can be obtained from DMRG. |\Phi^{\prime}\rangle =S_{\mathbf{q}}^z |\Phi_{0}\rangle=\sum_{\mathbf{R}} S_{\mathbf{R}}^z e^{i \mathbf{k} \cdot \mathbf{R}}|\Phi_{0}\rangle, which can be calculated by using MPO S_{\mathbf{R}}^{z} times the ground state MPS. \mathcal{H} is the Hamiltonian of system, which is written as MPO in Itensor. \omega, \omega_{0}, and \eta are real numbers time a diagITensor. i is the square root of -1. The tricky part is how we get the inverse of MPO \mathcal{H} and apply it to |\Phi^{\prime}\rangle. So I would like to ask the developers if there is a built-in algorithm in ITensor to calculate the inverse of MPO or other suggestions?

Thank you for your patience, and I am looking to to hearing from you.

Regards,
Y.D.Shen.

Instead of computing |x\rangle=A^{-1}|y\rangle by explicitly taking the inverse A^{-1} it is probably better to reframe it as a linear equation, i.e. solve A|x\rangle=|y\rangle for |x\rangle. We have experimental support for MPS linear equation solving, if you load ITensorMPS.jl you can use the function linsolve which has very similar syntax to the other solvers. See ITensorMPS.jl/examples at main · ITensor/ITensorMPS.jl · GitHub for examples of using the other solvers, we don’t have an example of using linsolve yet since we still don’t know the best practices for that solver. Also see KrylovKit.linsolve.

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.