Source: https://people.eecs.berkeley.edu/~pabbeel/cs287-fa09/readings/CalafioreCampi-Convex-Optimization-MP.pdf