Diffusion Monte Carlo
Diffusion Monte Carlo (DMC) is a quantum Monte Carlo method that uses a Green's function to solve the Schrödinger equation. DMC is potentially numerically exact, meaning that it can find the exact ground state energy within a given error for any quantum system. When actually attempting the calculation, one finds that for bosons, the algorithm scales as a polynomial with the system size, but for fermions, DMC is exponentially scaling with the system size. This makes exact large-scale DMC simulations for fermions impossible; however, with a clever approximation known as fixed-node, very accurate results can be obtained. What follows is an explanation of the basic algorithm, how it works, why fermions cause a problem, and how the fixed-node approximation resolves this problem.
The Projector Method
To motivate the algorithm, let's look at the Schrödinger equation for a particle in some potential in one dimension:
We can condense the notation a bit by writing it in terms of an operator equation, with
So then we have
where we have to keep in mind that H is an operator, not a simple number or function. There are special functions, called eigenfunctions, for which , where E is a number. These functions are special because no matter where we evaluate the action of the H operator on the wave function, we always get the same number E. These functions are called stationary states, because the time derivative at any point x is always the same, so the amplitude of the wave function never changes in time. Since the overall phase of a wave function is not measurable, the system does not change in time.
We are usually interested in the wave function with the lowest energy eigenvalue, the ground state. We're going to write a slightly different version of the Schrödinger equation that will have the same energy eigenvalue, but, instead of being oscillatory, it will be convergent. Here it is:
We've removed the imaginary number from the time derivative and added in a constant offset of , which is the ground state energy. We don't actually know the ground state energy, but there will be a way to determine it self-consistently which we'll introduce later. Our modified equation(some people call it the imaginary-time Schrödinger equation) has some nice properties. The first thing to notice is that if we happen to guess the ground state wave function, then and the time derivative is zero. Now suppose that we start with another wave function(), which is not the ground state but is not orthogonal to it. Then we can write it as a linear sum of eigenfunctions:
Since this is a linear differential equation, we can look at the action of each part separately. We already determined that is stationary. Suppose we take . Since is the lowest-energy eigenfunction, the associate eigenvalue of satisfies the property . Thus the time derivative of is negative, and will eventually go to zero, leaving us with only the ground state. This observation also gives us a way to determine . We watch the amplitude of the wave function as we propagate through time. If it increases, then decrease the estimation of the offset energy. If the amplitude decreases, then increase the estimate of the offset energy.
Now we have an equation that, as we propagate it forward in time and adjust appropriately, we find the ground state of any given Hamiltonian. This is still a harder problem than classical mechanics, though, because instead of propagating single positions of particles, we must propagate entire functions. In classical mechanics, we could simulate the motion of the particles by setting , if we assume that the force is constant over the time span of . For the imaginary time Schrödinger equation, instead, we propagate forward in time using a convolution integral with a special function called a Green's function. So we get . Similarly to classical mechanics, we can only propagate for small slices of time; otherwise the Green's function is inaccurate. As the number of particles increases, the dimensionality of the integral increases as well, since we have to integrate over all coordinates of all particles. We can do these integrals by Monte Carlo integration.