36个版本 (稳定)
5.7.0 | 2023年8月24日 |
---|---|
5.4.0 | 2023年5月7日 |
5.0.2 | 2022年12月6日 |
5.0.1 | 2022年11月29日 |
0.9.0 | 2021年11月2日 |
#206 in 算法
在 7 crates 中使用
105KB
3K SLoC
Opis
Opis 是一个有理数和矩阵算术库。
作者
特性
- 任意精度整数表示和算术
- 分数算术
- 矩阵算术 & 线性回归
使用
导入
use opis::{ Bit, Integer, Fraction, Matrix };
位
加 a + b
和 a & b
等 a == a
非 !a
或 a | b
异或 a ^ b
整数
pub struct Integer(pub Vec)
- 哈希
- 显示
- 调试 (:?, :#, :x, :b)
加法 a + b, a += b
和 a & b
二进制 Integer::from_bin("1010101"), a.to_bin()
十进制 Integer::from_dec("674755"), a.to_dec()
十六进制基数 Integer::from_hex("00ABC012"), a.to_hex()
字节 Integer::from(&bytes), a.into()
比较 a < b, a <= b, a > b, a >= b
除法 a / b?
相等 a == b
扩展欧几里得算法 a.ext_gcd(&b)
扩展位 a.to_ext_bits(256)
扩展字节 a.to_ext_bytes(32)
线性反馈移位寄存器 a.lfsr(1)?
取模: a.modulo(&m)
模幂运算: base.mod_pow(&exponent, &modulus)
乘法 a * b, a *= b
取负 a.negate()
非 !a
或 a | b
指数运算 a.pow(e)?
取余: a % b?
移位 a << 1, a <<= 1, a >> 1, a >>= 1
字符串转换
fn try_from(value: &str) -> 结果<Self, Box<dyn Error>>
- 二进制 (b'11, b'00, b'01)
- 十进制 (-1, 0, 1)
- 十六进制 (0xFF, 0x00, 0x01)
减法 a - b, a -= b
类型转换
- 从: &[Bits], &[u8], u8, u16, u32, u64, u128, usize
- 到: Vec
字符串转换
支持: 二进制,十进制,十六进制,浮点字面量
分数
pub struct Fraction(pub Integer, pub Integer)
- 克隆
- 哈希
- 显示
- 调试 (:?, :#, :x, :b)
加法
(a,b) + (c,d) = (ad + bc, bd)
- 加 (+)
- 加赋值 (+=)
减法
(a,b) - (c,d) = (ad - bc, bd)
- 减法操作 (-)
- 减法赋值操作 (-=)
乘法
(a,b) * (c,d) = (ac, bd)
- 乘法操作 (*)
- 乘法赋值操作 (*=)
除法
(a,b) / (c,d) = (ad, bc) 且 c != 0
- 除法操作 (/) ->
Result<Fraction, Box<dyn Error>>
比较与等式
加法逆元/相反数
-(a,b) = (-a,b)
分数.相反数() ->分数
乘法逆元/倒数
(a,b)^-1 = (b,a)
分数.倒数() -> 结果<分数,Box<dyn Error>>
简化
pub fn 简化(&mut self)
pub fn 简化(&self) ->分数
字符串转换
支持:二进制、十进制、十六进制、浮点字面量
类型转换
来源:整数、u8、u16、u32、u64、u128、usize
矩阵
加法
fn add(self, b: Self) -> 结果<矩阵<T>, Box<dyn Error>>
余子式
fn 余子式(&self, neg_one:T) -> 结果<矩阵<T>, Box<dyn Error>>
A = [ 3 -1 -2] C = [ 3 1 -2]
[ 3 1 -1] [-3 1 1]
[ 3 4 2] [ 3 -4 2]
行列式
fn 行列式(&self, neg_one:T) -> 结果<T,Box<dynstd::error::Error>>
维度
fn 维度(&self) -> 结果<(usize, usize), Box<dyn Error>>
等式
fn eq(&self, b: &Self) -> bool
单位元
fn 单位元(size: usize, 零:T,一:T) -> 矩阵<T>
逆元
fn 逆元(&self, neg_one:T,零:T,一:T) -> 结果<矩阵<T>, Box<dyn Error>>
线性回归
fn 线性回归(&self, 变量: &矩阵<T>, neg_one:T,零:T,一:T) -> 结果<矩阵<T>, Box<dyn Error>>
余子式
fn 余子式(&self, neg_one:T) -> 结果<矩阵<T>, Box<dyn Error>>
乘法
fn mul(self, b: Self) -> Result<Matrix<T>, Box<dyn Error>>
fn mul(self, b: T) -> Matrix<T>
减法
fn sub(self, b: Self) -> 结果<矩阵<T>, Box<dyn Error>>
迹
A = [-1 2 7 0] Tr(A) = (-1 + 5 + 7 + 0) = 11
[ 3 5 -8 4]
[ 1 2 7 -3]
[ 4 -2 1 0]
fn trace(&self) -> 结果<T,Box<dyn Error>>
转置
fn transpose(&self) -> 结果<矩阵<T>, Box<dyn Error>>
A = [2 0] A' = [2 1 4]
[1 1] [0 1 3]
[4 3]
许可
MIT 许可证
版权所有 Stelar Labs
在此特此授予任何人获得本软件及其相关文档副本(“软件”)的自由,不受限制地处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许将软件提供给其他人,使其有权进行此类操作,但受以下条件约束
上述版权声明和本许可声明应包含在软件的所有副本或实质部分中。
免责声明
本软件按“现状”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、针对特定目的的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论此类责任是基于合同、侵权或其他方式,源于、因之或与此软件的使用或其他交易有关。