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 中使用

MIT 许可证

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

在此特此授予任何人获得本软件及其相关文档副本(“软件”)的自由,不受限制地处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许将软件提供给其他人,使其有权进行此类操作,但受以下条件约束

上述版权声明和本许可声明应包含在软件的所有副本或实质部分中。

免责声明

本软件按“现状”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、针对特定目的的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论此类责任是基于合同、侵权或其他方式,源于、因之或与此软件的使用或其他交易有关。

无运行时依赖