A simple library for common numerical computations.

The design rationale behind the library was to make it maximally easy to use, with performance a secondary consideration. It turns out however, that for most high level algorithms, there is only one good way to implement them, so the performance tends to be quite good.

Currently, RNP supports all common linear algebra operations typically used in the physical sciences. In this respect, RNP is currently feature complete (the target feature set does not include the TODO items marked below), but some interfaces are not finalized, certain parameters are not respected, and memory allocation is not optimal.

Documentation for the different modules is listed below.

- IO
- Random
- TBLAS
- Sparse
- LinearSolve
- Eigensystems
- Generalized Eigensystems
- Iterative Linear Solvers
- Iterative Generalized Eigensystems
- LeastSquares – TODO: Dense least squares/norm approximation
- IRA (Implicitly Restarted Arnoldi; ARPACK)
- SVD – TODO: Dense SVD
- Iterative SVD – TODO
- Integration – TODO

Documentation for activities related to the library is listed below.

From now on, the code is hosted on GitHub. You can download the latest snapshot there.

Are there specialized routines for symmetric or positive definite problems?

No, not yet. Chances are you can find code on the Internet for symmetric routines, since those are far simpler.

How do I invert a matrix?

Perform a matrix solve with your matrix and use the identity matrix for the right hand side. A slightly more optimal way is to perform the factorization and invert the L and U factors yourself. Seriously, this is the best way. There is no built function since matrix solves are destructive, and the storage conventions depend on the application. You can write your own suitable wrapper for this if you really want it to be more convenient.

- Ensure IterativeGeneralizedEigensolvers respect iteration limits and multiply limits.
- Improve tests.
- Port some symmetric eigensolvers: zheev, dsyev, and PRIMME’s JDQMR.
- Port root-finding routines.
- Rework JDQZ into its own namespace.
- Add constrained JDQZ (linear homogeneous constraints).

I'm not big on keeping track of licenses, but I will do my best below. Since this library is intended for prototyping, I think it is unlikely anyone will have to bother with looking at licenses.

The code contained in RNP is a mixture of code I wrote and code translated from other sources. Modules IO, Sparse, and the Jacobi eigenssolver are written by myself, and are in the public domain. Modules Random, most of TBLAS, LinearSolve, Eigensystems, and GeneralizedEigensystems are translated from BLAS/LAPACK, and are subject to its license. IterativeLinearSolvers and IterativeGeneralizedEigensystems are translated from Matlab/Fortran code by Martin van Gijzen, Peter Sonneveld, and Gerard L. G. Sleijpen, and are under the GNU General Public License version 2 or later.

This library is maintained by Victor Liu. Email is vee kay ell (three letters) at stanford dot edu.