7个不稳定版本 (3个破坏性版本)
0.16.0 | 2022年10月4日 |
---|---|
0.15.0 | 2022年8月30日 |
0.2.0 | 2021年7月17日 |
0.1.0 | 2021年2月13日 |
#2 in #特征值
15,233 每月下载次数
用于 73 个crate(4个直接使用)
150KB
3.5K SLoC
线性代数扩展(LAX)
为ndarray-linalg crate实现提供LAPACK FFI的ndarray-free安全Rust包装器。这个crate负责
- 链接到LAPACK共享/静态库
- 使用
Lapack
特质根据标量类型调度到LAPACK例程
lib.rs
:
LAPACK的安全Rust包装器,无外部依赖。
[Lapack]特质
这个crate提供LAPACK包装器作为特质。例如,提供了一般矩阵的LU分解,如下
pub trait Lapack {
fn lu(l: MatrixLayout, a: &mut [Self]) -> Result<Pivot>;
}
参见[Lapack]获取详细信息。此特质已为[f32],[f64],[c32](f32的别名)和[c64](f64的别名)实现,你可以像使用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();
当你要编写针对实数和复数矩阵的泛型算法时,可以使用此特质作为特质限制
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(())
}
以下有几个类似的特质,以保持开发简单。它们被合并为一个特质[Lapack]。
线性方程,逆矩阵,条件数
根据输入矩阵的性质,使用几种类型的三角分解
- [solve]模块为一般矩阵提供LU分解的方法。
- [solveh]模块为对称/Hermitian不定矩阵的Bunch-Kaufman对角置换法提供方法。
- [cholesky]模块为对称/Hermitian正定矩阵的Cholesky分解提供方法。
特征值问题
根据输入矩阵的性质,有几个类型的特征值问题API
- [eig]模块为一般矩阵的特征值问题提供方法。
- [eigh]模块为对称/Hermitian矩阵的特征值问题提供方法。
- [eigh_generalized]模块为对称/Hermitian矩阵的广义特征值问题提供方法。
奇异值分解
- [svd]模块为一般矩阵的奇异值分解(SVD)提供方法
- [svddc] 通用矩阵奇异值分解(SVD)的划分征服算法模块
- [least_squares] 使用SVD求解最小二乘问题的模块
依赖项
~73MB
~1M SLoC