Source: https://cours.etsmtl.ca/SEG/mbeaudin/mat805/Bloc3/Resume3.pdf