added steepest descent and BFGS method