Looks great! I definitely overoptimized mine since I was trying to have my cake and eat it too by ensuring the interface was very simple to use while also avoiding excessive garbage collection or low-level management of temporary work vectors. At the time I think I was trying to solve a PDE with 100s/1000s of variables. Designing simple, performant APIs is surprisingly difficult!
Thanks Ricky! I'll be teaching an ODE class this Fall and will definitely cover numerical techniques. As a result, I wanted some code that was both very readable for the students and useful enough for us to explore some simple examples. I'll probably produce several more notebooks that imports this code.