Im making a package called MatrixProductStates.jl that solves for ground states of large 1D quantum mechanical systems in a way that’s linear in the system size instead of exponential as would be the case in an exact diagonalization of the Hamiltonian. This method allows one to find eigenvalues and eigenstates of linear operators (if they have some special properties) where even the eigenvector would be too big to store on the memory of a computer, ie. I’ve already used to to solve a system that would be represented by a
2^70 x 2^70 complex, Hermitian matrix, so one eigenvector would take about the storage space of all hard drives on earth to write out.
During the solving, one breaks the problem into many, smaller ‘local’ eigenproblems which are actually tractable (~ 40,000 x 40,000 matrices) and solves those eigenproblems in sweeps across the crystal lattice one at a time until you arrive at a ground state. After my first sweep, I already have a bunch of vectors that are approximately eigenvectors so there’s a pretty big performance improvement if I’m able to use those as an initial guess for the subsequent eigenproblems.