Source: https://www.eng.auburn.edu/~clemept/CEANALYSIS_SPRING2011/matrixoperations_notes.pdf