variational methods