https://courses.grainger.illinois.edu/bioe476/fa2019/Lectures/Lec12_Fa19_update2.pdf