Gradient Methods For Minimizing Functionals