Variational methods