This is the first example in the QMC series.
I wanted to try quantum monte carlo to understand it better, so I thought I would work
through from simple atoms to more complicated chemicals.
I don't expect that there will be much interest in this, so I'm not going to write it up extensively.
Quantum mechanics allows us to calculate energy levels of atoms and molecules accurately -
which is one of the strongest pieces of experimental support for the theory.
For hydrogen, we have an analytic expression for the ground state energy which gives -0.5 Hartrees as the correct answer, but for the purposes of trying QMC, let's do the following:
We've got a wavefunction that takes several parameters (in this example 1).
We try to minimise (psi|H|psi)/(psi|psi) with respect to the parameters. Note that the denominator is needed because psi is not normalised.
In more detail, here's what happens in the code:
We start off with guessed parameters.
We pick a random position vector, "x".
We evaluate (x|H|psi) and (x|psi). H contains 2nd derivatives. These are calculated numerically.
We also evaluate the derivatives of the two above expressions with respect to the parameters.
We keep repeating the last three steps.
Eventually we have a good estimate for (x|H|psi) and (x|psi) and their derivatives with respect to the parameters.
We can calculate the expectation of (psi|H|psi)/(psi|psi), which is our energy estimate, and also the gradient of that with respect to the parameters
We can update the parameters, doing gradient descent to try to minimise the energy.
Here's the trial wavefunction:
Here's the history of energy estimates:
Final energy (correct energy = -0.5, correct parameter = 1):
Back to QMC.