Source: https://www.sjsu.edu/firstintheworld/docs/workshop_gp_lp_2018/cpp_2018/CPP_Hosseini_CalculusSeveralVariables.pdf