This post is to continue a discussion posted by @Bruno_Amorim in another thread.
I occasionally teach a class about numerical methods. On one occasion (a small advanced course) I managed to use Julia with my students, but in the other class (a massive 2nd-year course) I would need to first convince my department (I think it will be possible soon enough).
Now, I’ve started an online resource that aims to provide a reference for this matter, which is my Numerical Computing in Julia tutorial booklet.
I made that tutorial in hurry to cover the immediate needs of that class, but I’m wondering of how to continue developing it.
I have various topics on my to-do list: optimization (with AD), finite differences, finite elements, Interval Arithmetic, and so on.
However, besides covering more content, I was wondering if there is some discussion we could have about the packages that we perhaps should consider “standard” in this area, and that we should refer to beginners/students.
Now, I’m not a big fan of massive packages where you define a problem
and then you call solve
. I’d rather rely on a slightly more modular approach, which also makes the math more transparent, and where access to the actual code being run is easy. Especially for this goal of teaching a class.
For example, for quadrature, I’d rather say in my class that the best option is probably FastGaussQuadrature
which provides nodes and weights in O(n)
time (this gives something to discuss in the class, as well), and if not applicable (due to unknown singularities), Quadgk
is probably the go-to package (but maybe this just reflects my previous Matlab experience and there is a better package?).
For iterative solvers, we also had some discussion on this thread about the differences between KrylovKit
, Krylov
, and IterativeSolvers
. I think KrylovKit
has the best generic API, but still couldn’t find the time to analyze it more thoroughly (like, how easy is to include preconditioners). I’m inclined to refer to KrylovKit
as the cleanest solution.
As for eigensolvers, I’ve successfully used the eigs
function from the LinearAlgebra
package. I’m not aware of its limitations. Why should we refer to any other package?
For Plotting, I think Plots.jl is the standard as it has so many backends.
For piecewise polynomial interpolation (splines or piecewise-linear) I think the Interpolations.jl
is perfectly fine. For high-order polynomial interpolation, I’d rather share some code snippets and then refer to ApproxFun
.
Anyway, that was off the top of my head, any discussion is welcome!