### 7 unstable releases (3 breaking)

0.16.0 | Oct 4, 2022 |
---|---|

0.15.0 | Aug 30, 2022 |

0.2.0 | Jul 17, 2021 |

0.1.0 | Feb 13, 2021 |

#**2** in #eigenvalues

**15,233** downloads per month

Used in **73** crates
(4 directly)

**MIT/Apache**

150KB

3.5K
SLoC

# Linear Algebra eXtension (LAX)

ndarray-free safe Rust wrapper for LAPACK FFI for implementing ndarray-linalg crate. This crate responsibles for

- Linking to LAPACK shared/static libraries
- Dispatching to LAPACK routines based on scalar types by using

trait`Lapack`

###
`lib.rs`

:

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

,
and [c64] which is an alias to `num ::`Complex

`<``f32``>``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

#### Dependencies

~**73MB**

~1M SLoC