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§

Modules§

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

Traits§

  • Trait for primitive types which implements LAPACK subroutines

Type Aliases§