Source: http://www.lirmm.fr/~vberry/COURS/POLYTECH/ALGO-MATLAB/poly-CM1-2.pdf