A linear algebra module with an emphasis on correctness and performance (in that order).
At A Glance
- 100% statement and branch coverage
- Emphasis on numerical accuracy
- Work in any number of dimensions
- Sticks to the Mathematica API whenever possible
Please use a mature library when doing mission-critical work. I am no expert in numerical analysis. (If you are, let me know so I can add you as a contributor!)
linalg uses native arrays because of their raw speed.
l =assert =// identity is now a 2-D Arrayidentity = l// points are 1-D arrayspoint = 2 4 6// let's create a stupid simple 3D perpendicular frameframe = identity// singular value decomposition to come...hang = lstretch = identityalign = identity// feel free to string these alongA = l// this (matrix . vector) operation should do nothingassert
I needed a performance focused linear algebra module for visualizing data in 10+ dimensions, and implementing machine learning algorithms. I quickly learned that naive solutions to linear algebra operations can produce numerical errors so significant they are utterly useless for anything other than casual playtime. After that, I prioritized correctness over performance.
I started out with a chainable, vektor-like API, but found that no matter how hard I tried, using anything other than native
Array resulted in a 20-500x slowdown depending on the operation.
I'd like this module to be a low-level framework for others to build upon. It should just be a library of the best known linear algebra algorithms, with minimal sugar added.