Convex Optimization by Stephen Boyd and Lieven Vandenberghe