https://bottle.pythonprogramminghelp.com/3-types-of-steepest-descent-method/