Crates.io | linxal |
lib.rs | linxal |
version | 0.6.0 |
source | src |
created_at | 2016-11-02 08:16:28.516135 |
updated_at | 2017-04-17 01:11:28.170857 |
description | Linear Algebra package with rust-ndarray interface |
homepage | |
repository | https://github.com/masonium/linxal |
max_upload_size | |
id | 7108 |
size | 172,972 |
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 rust-ndarray
as inputs and outputs.
linxal
is available on crates.io and can be installed via cargo
. In your Cargo.toml
file, you can use.
[dependencies]
....
linxal = "0.5"
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 openblas-src
. You can
use netlib LAPACK instead, via:
...
[dependencies.linxal]
version = "0.5"
default-features = false
features = ["netlib"]
Other possible features are openblas-system
and
netlib-system
. 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 can be found at https://github.masonium.io/rustdoc/linxal/.
#[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);
}
Correctness: linxal
will strive for correctness in all cases. Any
function returning a non-Err
result should return a correct
result.
Ease of Use: linxal
will provide a consistent interface and should
require minimal setup. Most routine should be high-level 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
Low-dimension 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
as nalgebra
and cgmath
that specialize in
low-dimensional 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
user-defined formats.
ndarray
)Pull requests of all kinds (code, documentation, formatting, spell-checks) are welcome!