Given a value of x, return a better x 
    using newton-gauss

def newton_update(x, a, c, step=1.0):
    """ 
    Given a value of x, return a better x 
    using newton-gauss 
    """
    return x - step*np.linalg.inv(hessian(x, a)).dot(gradient(x, a, c))