13 releases (5 breaking)
0.6.0  Apr 17, 2017 

0.5.2  Apr 7, 2017 
0.5.1  Mar 15, 2017 
0.4.2  Nov 29, 2016 
0.1.6  Nov 3, 2016 
#76 in Math
77 downloads per month
144KB
2.5K
SLoC
linxal
Status
Description
linxal
is a linear algebra package for rust. linxal
uses LAPACK as a
backend, (specifically with the lapack
package) to execute linear
algebra routines with rustndarray
as inputs and outputs.
Installation / Usage
linxal
is available on crates.io and can be installed via cargo
. In your Cargo.toml
file, you can use.
[dependencies]
....
linxal = "0.5"
Features
linxal
exposes features to choose the underlying LAPACK / BLAS
source. By default, linxal
enables the openblas
feature, which
compiles LAPACK and BLAS from the OpenBLAS
distribution
via openblassrc
. You can
use netlib LAPACK instead, via:
...
[dependencies.linxal]
version = "0.5"
defaultfeatures = false
features = ["netlib"]
Other possible features are openblassystem
and
netlibsystem
. These are similar to openblas
and netlib
, execpt
that they use the installed shared libraries on your system instead of
compiling them from source.
Documentation
Documentation can be found at https://github.masonium.io/rustdoc/linxal/.
Example
#[macro_use]
extern crate linxal;
extern crate ndarray;
use linxal::types::{c32, LinxalMatrix};
use ndarray::{arr1, arr2};
fn main() {
let m = arr2(&[[1.0f32, 2.0],
[2.0, 1.0]]);
let r = m.eigenvalues(false, false);
assert!(r.is_ok());
let r = r.unwrap();
let true_evs = arr1(&[c32::new(1.0, 2.0), c32::new(1.0, 2.0)]);
assert_eq_within_tol!(true_evs, r.values, 0.01);
let b = arr1(&[1.0, 1.0]);
let x = m.solve_linear(&b).unwrap();
let true_x = arr1(&[0.6, 0.2]);
assert_eq_within_tol!(x, true_x, 0.0001);
}
Priorities

Correctness:
linxal
will strive for correctness in all cases. Any function returning a nonErr
result should return a correct result. 
Ease of Use:
linxal
will provide a consistent interface and should require minimal setup. Most routine should be highlevel and should require no knowledge of the underlying LAPACK routines.linxal
will minimize surprising behaviour. 
Documentation:
linxal
will strive to provide documentation for all functionality. Undocumented public features are a bug. 
Ergonomics:
linxal
will try to minimize boilerplate whenever appropriate. 
Speed
NonGoals

Lowdimension arithmetic:
linxal
is not specifically designed or optimized for {2,3,4}D problems, as you would encounter in computer graphics, physics, or other domains. There are libraries such asnalgebra
andcgmath
that specialize in lowdimensional algorithms. 
Representation flexibility:
ndarray
is the only for standard matrices, and future representations of specialized formats (packed triangular, banded, tridiagonal, etc.) will probably not allow for userdefined formats.
Goals
 Major linear algebra routines
 Eigenvalues
 Singular Value
 Linear Solvers
 Linear LeastSquares
 Matrix Factorizations (QR, LU, etc.)
 QR
 LU
 Cholesky
 Schur
 Inversion
 Generalized Eigenvalues
 Generalized Singular Value Decomposition
 Multiple matrix formats
 General (direct via
ndarray
)  Symmetric / Hermitian
 Banded (Packed)
 General (direct via
 Random matrix generation
 General
 Symmetric / Hermitian
 Positive
 Unitary
Contributing
Pull requests of all kinds (code, documentation, formatting, spellchecks) are welcome!
Dependencies
~32MB
~654K SLoC