12个版本 (5个破坏性版本)
使用旧的Rust 2015
0.6.0 | 2017年4月17日 |
---|---|
0.5.2 | 2017年4月7日 |
0.5.1 | 2017年3月15日 |
0.4.2 | 2016年11月29日 |
0.1.6 | 2016年11月3日 |
#756 in 数学
每月47次下载
145KB
2.5K SLoC
linxal
状态
描述
linxal
是一个用于rust的线性代数库。 linxal
使用LAPACK作为后端,(具体使用 lapack
包),通过 rust-ndarray
作为输入和输出执行线性代数例程。
安装/使用
linxal
可在 crates.io 上找到,并且可以通过 cargo
进行安装。在你的 Cargo.toml
文件中,你可以使用。
[dependencies]
....
linxal = "0.5"
特性
linxal
提供了选择底层 LAPACK / BLAS 源的特性。默认情况下,linxal
启用了 openblas
特性,该特性通过 OpenBLAS 发布版(通过 openblas-src
)编译 LAPACK 和 BLAS。您可以使用 netlib LAPACK,通过
...
[dependencies.linxal]
version = "0.5"
default-features = false
features = ["netlib"]
其他可能的特性是 openblas-system
和 netlib-system
。这些与 openblas
和 netlib
类似,但它们使用您系统上安装的共享库,而不是从源代码编译它们。
文档
文档可在 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);
}
优先级
-
正确性:
linxal
将努力在各种情况下保持正确性。任何返回非-Err
结果的函数应返回正确的结果。 -
易用性:
linxal
将提供一致的接口,并且应该需要最少的设置。大多数例程应该是高级的,并且不需要了解底层LAPACK例程。linxal
将最小化令人惊讶的行为。 -
文档:
linxal
将努力为所有功能提供文档。未记录的公共功能是错误。 -
人体工程学:
linxal
将在适当的时候尝试最小化样板代码。 -
速度
非目标
-
低维算术:
linxal
并未专门设计或优化用于处理 {2,3,4}-D 问题,这类问题通常出现在计算机图形学、物理学或其他领域。有一些库,如nalgebra
和cgmath
,专门针对低维算法进行了优化。 -
表示灵活性:
ndarray
是标准的矩阵表示,未来对专用格式(打包三角形、带状、三对角等)的表示可能不允许用户定义格式。
目标
- 主要的线性代数例程
- 特征值
- 奇异值
- 线性求解器
- 线性最小二乘法
- 矩阵分解(QR、LU 等)
- QR
- LU
- Cholesky
- Schur
- 求逆
- 广义特征值
- 广义奇异值分解
- 多种矩阵格式
- 通用(通过
ndarray
直接) - 对称/厄米
- 带状(打包)
- 通用(通过
- 随机矩阵生成
- 通用
- 对称/厄米
- 正数
- 单位
贡献
欢迎所有类型的拉取请求(代码、文档、格式化、拼写检查)!
依赖项
~73MB
~1M SLoC