Numerical Optimization: Computing Derivatives