https://medium.com/@monocosmo77/understanding-gaussian-elimination-part2-machine-learning-91a2b32da107