1个不稳定版本
0.1.0 | 2022年12月30日 |
---|
#1015 in 数学
82KB
1.5K SLoC
stack-algebra
一个用于裸机应用的堆栈分配轻量级代数库。
概述
此包提供了一种编译时确定大小的堆栈分配矩阵类型。此库的主要目标是用于在Rust中构建机器人应用。这意味着几个方面
- 目标平台通常是裸机
- 矩阵的大小通常可以在编译时定义
- 问题解决不需要大矩阵或重型优化
- 用户不是Rust专家,但通常熟悉科学工具(例如Python或MATLAB)
如果提供简单的抽象和必要的代数例程,则可以在Rust中实现数值算法,使其更加高效和直观。此库是一个不断增长的集合,旨在满足这些需求。它主要基于vectrix
的核心实现。
安装
使用cargo将此库添加到您的项目中(或手动添加到您的Cargo.toml
)
cargo add stack-algebra
然后通过以下方式导入到您的模块中
use stack_algebra::*; // or import just the items you need
用法
-
可以使用
matrix!
宏创建新矩阵// 2-by-3 matrix let m = matrix![ 1.0, 2.0, 3.0; 4.0, 5.0, 6.0; // Semicolon here is optional ];
-
可以使用
vector!
宏创建行/列向量// 1-by-3 row vector let r = vector![1.0, 2.0, 3.0]; // 3-by-1 column vector let c = vector![1.0; 2.0; 3.0]; // Vector to tuple conversion (for 3 or 4 element vectors) let (x, y, z) = r.into();
-
使用
eye!
创建方阵单位矩阵let m = eye!(2); let exp = matrix![ 1.0, 0.0; 0.0, 1.0 ]; assert_eq!(m, exp);
-
使用
zeros!
创建零值矩阵let m = zeros!(2); // Square 2-by-2 matrix let exp = matrix![ 0.0, 0.0; 0.0, 0.0 ]; assert_eq!(m, exp); let m = zeros!(2,3); // 2-by-3 matrix let exp = matrix![ 0.0, 0.0, 0.0; 0.0, 0.0, 0.0 ]; assert_eq!(m, exp);
-
使用
ones!
创建包含1.0的矩阵(与zeros!
用法相同) -
使用
diag!
创建给定条目的对角矩阵(大小最多为6x6)let m = diag!(1.0, 2.0, 3.0); let exp = matrix![ 1.0, 0.0, 0.0; 0.0, 2.0, 0.0; 0.0, 0.0, 3.0 ]; assert_eq!(m, exp);
-
使用
[i]
或[(r,c)]
访问单个元素let m = matrix![ 1.0, 2.0, 3.0; 4.0, 5.0, 6.0 ]; assert_eq!(m[1], 4.0); // Using a single index assumes column-major order assert_eq!(m[(1,2)], 6.0);
-
使用
*
、/
、+
和-
进行矩阵算术运算let m = matrix![ 1.0, 2.0; 3.0, 4.0 ]; let exp = matrix![ 2.0, 4.0; 6.0, 8.0 ]; assert_eq!(m + m, exp); // Add matrices let exp = matrix![ 2.0, 3.0; 4.0, 5.0 ]; assert_eq!(m + 1.0, exp); // Add scalar to matrix (note scalar has to be behind the operator)
-
使用
.T()
进行矩阵转置let m = matrix![ 1.0, 2.0; 3.0, 4.0 ]; let exp = matrix![ 1.0, 3.0; 2.0, 4.0 ]; assert_eq!(m.T(), exp);
-
.norm()
用于计算Frobenius 范数
let m = matrix![ 1.0,-2.0; -3.0, 6.0; ]; assert_relative_eq!(m.norm(), 7.0710678, max_relative = 1e-6);
-
.trace()
用于计算方阵对角线元素之和let m = matrix![ 9.0, 8.0, 7.0; 6.0, 5.0, 4.0; 3.0, 2.0, 1.0; ]; assert_eq!(m.trace(), 15.0);
-
.det()
用于计算行列式(仅适用于方阵)let m = matrix![ 3.0, 7.0; 1.0, -4.0; ]; assert_eq!(m.det(), -19.0);
-
.inv()
用于计算矩阵的逆(适用于可逆方阵)let m = matrix![ 6.0, 2.0, 3.0; 1.0, 1.0, 1.0; 0.0, 4.0, 9.0; ]; let exp = matrix![ 0.20833333, -0.25, -0.04166667; -0.375, 2.25, -0.125; 0.16666667, -1.0, 0.16666667; ]; assert_relative_eq!(m.inv().unwrap(), exp, max_relative = 1e-6);
许可证
本项目根据 MIT 许可证和 Apache 许可证(版本 2.0)的条款进行分发。
有关详细信息,请参阅 LICENSE-APACHE 和 LICENSE-MIT。
依赖项
约 2MB
约 47K SLoC