Crate lax

Source
Expand description

Safe Rust wrapper for LAPACK without external dependency.

§Lapack trait

This crates provides LAPACK wrapper as a traits. For example, LU decomposition of general matrices is provided like:

pub trait Lapack {
    fn lu(l: MatrixLayout, a: &mut [Self]) -> Result<Pivot>;
}

see Lapack for detail. This trait is implemented for f32, f64, c32 which is an alias to num::Complex<f32>, and c64 which is an alias to num::Complex<f64>. You can use it like f64::lu:

use lax::{Lapack, layout::MatrixLayout, Transpose};

let mut a = vec![
  1.0, 2.0,
  3.0, 4.0
];
let mut b = vec![1.0, 2.0];
let layout = MatrixLayout::C { row: 2, lda: 2 };
let pivot = f64::lu(layout, &mut a).unwrap();
f64::solve(layout, Transpose::No, &a, &pivot, &mut b).unwrap();

When you want to write generic algorithm for real and complex matrices, this trait can be used as a trait bound:

use lax::{Lapack, layout::MatrixLayout, Transpose};

fn solve_at_once<T: Lapack>(layout: MatrixLayout, a: &mut [T], b: &mut [T]) -> Result<(), lax::error::Error> {
  let pivot = T::lu(layout, a)?;
  T::solve(layout, Transpose::No, a, &pivot, b)?;
  Ok(())
}

There are several similar traits as described below to keep development easy. They are merged into a single trait, Lapack.

§Linear equation, Inverse matrix, Condition number

According to the property input metrix, several types of triangular decomposition are used:

  • solve module provides methods for LU-decomposition for general matrix.
  • solveh module provides methods for Bunch-Kaufman diagonal pivoting method for symmetric/Hermitian indefinite matrix.
  • cholesky module provides methods for Cholesky decomposition for symmetric/Hermitian positive dinite matrix.

§Eigenvalue Problem

According to the property input metrix, there are several types of eigenvalue problem API

  • eig module for eigenvalue problem for general matrix.
  • eigh module for eigenvalue problem for symmetric/Hermitian matrix.
  • eigh_generalized module for generalized eigenvalue problem for symmetric/Hermitian matrix.

§Singular Value Decomposition

  • svd module for singular value decomposition (SVD) for general matrix
  • svddc module for singular value decomposition (SVD) with divided-and-conquer algorithm for general matrix
  • least_squares module for solving least square problem using SVD

Re-exports§

pub use self::least_squares::LeastSquaresOwned;
pub use self::svd::SvdOwned;
pub use self::svd::SvdRef;
pub use self::tridiagonal::LUFactorizedTridiagonal;
pub use self::tridiagonal::Tridiagonal;
pub use self::flags::*;

Modules§

alloc
cholesky
Factorize positive-definite symmetric/Hermitian matrices using Cholesky algorithm
eig
Eigenvalue problem for general matricies
eigh
Eigenvalue problem for symmetric/Hermitian matricies
eigh_generalized
Generalized eigenvalue problem for symmetric/Hermitian matrices
error
flags
Charactor flags, e.g. 'T', used in LAPACK API
layout
Memory layout of matrices
least_squares
Least squares
opnorm
Operator norm
qr
QR decomposition
rcond
Reciprocal conditional number
solve
Solve linear equations using LU-decomposition
solveh
Factorize symmetric/Hermitian matrix using Bunch-Kaufman diagonal pivoting method
svd
Singular-value decomposition
svddc
Compute singular value decomposition with divide-and-conquer algorithm
triangular
Linear problem for triangular matrices
tridiagonal
Implement linear solver using LU decomposition for tridiagonal matrix

Traits§

Lapack
Trait for primitive types which implements LAPACK subroutines

Type Aliases§

Pivot