Skip to content

Latest commit

 

History

History
36 lines (29 loc) · 2.06 KB

README.md

File metadata and controls

36 lines (29 loc) · 2.06 KB

Matlab Algorithms for Randomized Linear Algebra (MARLA)

MARLA is a Matlab library for prototyping algorithms in a future C++ library for randomized numerical linear algebra. The library is meant to be "LAPACK-like" and organizes its functionality into high-level "drivers" and lower-level "computational routines". All of its driver-level functionality has at least basic tests. MARLA is to be viewed as an informal, "proof of mathematical concept"-type library, serving only as a rough sketch for the future library. At the moment, MARLA is not maintained for the purposes of external use (unless per explicit requests).

MARLA has a companion Python package called PARLA. PARLA has an object-oriented design which is more flexible than the current implementations in MARLA. The state of MARLA and PARLA's APIs and unit tests is summarized in this Google Sheets spreadsheet. (It will be hard to read that spreadsheet without having the RandLAPACK design document on-hand.)

Notes on tests

  • Tests are for basic correctness.
  • We're using an object-oriented testing framework for eigendecomposition methods (evd1, evd2). These tests were written last. We might go back and use this as an organizing principle when cleaning up other tests.

Important TODOs

  • Clean up tests.
  • Complete documentation (and revise existing documentation to follow a common style).

Less important TODOs

  • Add tests for computational routines that aren't used in downstream drivers (refer to the spreadsheet for which routines those are).
  • Matlab doesn't have native support for abstract linear operators. So far this is only a minor limitation. The main way that PARLA uses abstract linear operators is in a common interface for sketching operators that are only represented implicitly. In Matlab it would suffice to define a special class just for SRTTs. The special class would just need to overload "*" (matmul) and "'" (transpose).