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次下载

MIT许可证

145KB
2.5K SLoC

linxal

状态

Crate Version Build Status Documentation

描述

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-systemnetlib-system。这些与 openblasnetlib 类似,但它们使用您系统上安装的共享库,而不是从源代码编译它们。

文档

文档可在 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 问题,这类问题通常出现在计算机图形学、物理学或其他领域。有一些库,如 nalgebracgmath,专门针对低维算法进行了优化。

  • 表示灵活性:ndarray 是标准的矩阵表示,未来对专用格式(打包三角形、带状、三对角等)的表示可能不允许用户定义格式。

目标

  • 主要的线性代数例程
    • 特征值
    • 奇异值
    • 线性求解器
    • 线性最小二乘法
    • 矩阵分解(QR、LU 等)
      • QR
      • LU
      • Cholesky
      • Schur
    • 求逆
    • 广义特征值
    • 广义奇异值分解
  • 多种矩阵格式
    • 通用(通过 ndarray 直接)
    • 对称/厄米
    • 带状(打包)
  • 随机矩阵生成
    • 通用
    • 对称/厄米
    • 正数
    • 单位

贡献

欢迎所有类型的拉取请求(代码、文档、格式化、拼写检查)!

依赖项

~73MB
~1M SLoC