#qr #cgs2 #cgs #mgs

gramschmidt

经典、改进、重正交化的Gram Schmidt正交化和QR分解

4 个版本 (2 个重大变更)

0.6.0 2019年8月12日
0.5.0 2019年3月12日
0.4.1 2018年3月13日
0.4.0 2018年1月22日

算法 中排名 1180

MIT 许可证

37KB
641

Gram Schmidt 正交化

在 Rust 编程语言和 rust-ndarray 中实现矩阵的正交化和 QR 分解。

此软件包提供以下方法

  • 经典 Gram Schmidt,cgs
  • 改进 Gram Schmidt,mgs
  • 经典 Gram Schmidt 与重正交化,cgs2

用法

// Import openblas_src or another blas source to have the linker find all symbols.
extern crate openblas_src;

use gramschmidt::{
    GramSchmidt,
    Reorthogonalized,
    Result,
};
use ndarray::arr2;

fn main() -> Result<()> {
    let small_matrix = arr2(
        &[[2.0, 0.5, 0.0, 0.0],
          [0.0, 0.3, 0.0, 0.0],
          [0.0, 1.0, 0.7, 0.0],
          [0.0, 0.0, 0.0, 3.0]]
    );
    let mut cgs2 = Reorthogonalized::from_matrix(&small_matrix)?;
    cgs2.compute(&small_matrix)?;
    assert!(small_matrix.all_close(&cgs2.q().dot(cgs2.r()), 1e-14));
    Ok(())
}

最新版本

  • 0.6.0:修复了三角矩阵 R 的维度
    • 上一个版本在技术上足够大以容纳所有值,但矩阵维度仍然不正确。
    • 添加了如何使用不同算法因式分解 Lauchli 矩阵的示例。
  • 0.5.0:重构库并更新为 2018 版本
    • 现在所有 Gram Schmidt 因子分解都通过 GramSchmidt 特性实现;
    • 引入了一些错误处理;
    • 提供便利函数 cgscgs2mgs
  • 0.4.1:修复了文档测试并扩展和简化了测试。
  • 0.4.0:库结构的重大重构
    • 现在算法通过结构体配置,已删除特性;
    • 提供结构体 ClassicalGramSchmidtModifiedGramSchmidtReorthogonalizedGramSchmidt(在文献中分别称为 cgsmgscgs2);
    • cgscgs2 使用 blas 程序实现(速度大幅提升!);
    • 所有例程现在都能处理列主序(Fortran-)和行主序(C-)输入矩阵;
    • 删除并行代码。
  • 0.3.1:更新到 blas 0.16 并未指定默认后端(以便用户可以设置它)。
  • 0.3.0:更新到 ndarray 0.10ndarray-parallel 0.5
  • 0.2.1:添加了使用 rayon 的并行算法
  • 0.2.0:更新到 ndarray 0.9

依赖项

约2MB
约39K SLoC