17个版本 (1个稳定版)

1.0.0 2023年9月13日
0.7.1 2023年7月15日
0.7.0 2023年2月21日
0.5.0 2022年6月2日
0.3.0 2021年10月15日

#107 in 数学


用于 ebirsu

GPL-3.0 许可证

2.5MB
2K SLoC


概述

该crate旨在帮助Rust社区中的任何数学或科学过程。它编译了许多在许多科学领域中关键的实用概念和项目。该crate的目标是在纯Rust中提供这些函数,以避免任何依赖。


内容

常数

已添加了许多有用的常数,包括许多不同的领域,从天体物理学到量子力学,但还包括数学、热力学、电磁学等。它们列在constant模块中。请注意,所有常数都提供了到源代码的链接。

use scilib::constant;

println!("{}", constant::SUN_RADIUS);   // Solar radius
println!("{}", constant::H_BAR);        // H bar
println!("{}", constant::K_B);          // Boltzmann constant
println!("{}", constant::BOHR_MAG);     // Bohr magneton
// And many more...

有用的数学函数

Rust库不提供一些在科学过程中相当常见的函数,该crate试图尽可能提供。欧拉伽玛函数和贝塔函数、牛顿二项式、阶乘、误差函数(erf、erfc、erfi)...

// These functions can be found in the math crate
use scilib::math::basic::*;

let g = gamma(3.2);
let b = beta(-1.2, 2.5);

// The erf function can compute Complex numbers (erfc, erfi as well)
let c = Complex64::new(-0.1, 0.7);
let e = erf(c);

贝塞尔函数

贝塞尔函数在许多数学和物理领域中至关重要,是贝塞尔微分方程的解。该crate提供了实数和复数、整数或实数函数阶的函数。它包括标准贝塞尔函数、球面贝塞尔函数和里卡提-贝塞尔函数。

所有函数都已实现

  • 基本贝塞尔函数:JYIK
  • 球面贝塞尔函数:jy
  • 汉克尔函数(及其球面对应物):H1H2h1h2
  • 里卡提-贝塞尔函数:SCXiZeta
// Found in the math crate
use scilib::math::bessel;

// All functions support complex numbers, and real orders
let res_j = bessel::jf(-1.2, -2.3);             // J function; works for any input and order
let res_y = bessel::y(3.5, 1);                  // Y function; computes the limit for integer order
let res_i = bessel::i(7.2, 2.25);               // I function; similar to J
let res_k = bessel::k(-1.1, 0.5);               // K function; computes the limit for integer order
let res_1 = bessel::hankel_first(2, -2);        // Hankel first kind
let res_2 = bessel::hankel_second(1, -1.32);    // Hankel first kind
// And so forth...

典型多项式

在模块math::polynomial中实现了针对多项式的专用方法,称为Poly。还实现了许多有用的多项式。

  • 勒让德:广义的 L(n,l),其中 n 是正整数,l 是正整数或负整数,且满足 -n <= l <= n
  • 拉格朗日:广义的 L(n,l),其中 n 是正整数,l 是实数
  • 伯努利B(n),其中 n 是正整数
  • 欧拉E(n),其中 n 是正整数
  • 贝塞尔y(n),其中 n 是正整数
  • 厄米H(n),其中 n 是正整数
  • 升阶乘:与升阶乘函数关联的多项式,其中 n 是正整数
  • 降阶乘:与降阶乘函数关联的多项式,其中 n 是正整数
// They are found in the polynomial crate
use scilib::math::polynomial::Poly;

let mut p = Poly::from([(2, 1.0), (1, 2.0), (0, -1.0)]);    // x² + 2x - 1
p.derive(1);                                                // Derivative

let leg = Poly::gen_legendre(2, -1);                        // n=2, l=-1
let mut lag = Poly::laguerre(3, 2.78);                      // n=3, l=2.78
leg.integrate(1, &[3.2]);                                   // Integration
let res = p * lag;                                          // Standard operations

坐标系

该包提供坐标系的功能,如笛卡尔坐标系和球坐标系,包括许多标准操作和转换。

// They are found in the coordinate crate
use scilib::coordinate::*;

let car = cartesian::Cartesian::from(2.0, 1, 0.25);
let sph = spherical::Spherical::from_degree(1.2, 30, 60.2);
let cyl = spherical::Cylindrical::from_degree(1.2, 30, -2.55);

信号函数

支持进行快速傅里叶变换(FFT)和逆快速傅里叶变换(IFFT)。计算使用 Bluestein 算法 进行。也可以进行卷积,适用于任意两个向量的大小。

// Found in the fourier crate
use scilib::signal::*

// Computing values of the sinus
let r = range::linear(0.0, 10.0, 15);
let s: Vec<Complex64> = r.iter().map(|val| val.sin()).collect();

let res = fft(&s);
let res2 = ifft(&res);
let res3 = convolve(&r, &s);

天文学和天体物理学

我们提供了适用于天文学和天体物理学应用的实际函数,从赤道坐标系统到平衡温度计算和光度计算器。

// Found in the astronomy crate
use scilib::astronomy::*;
use scilib::constant as cst;

// Creating a Radec system
let coord: Radec = Radec::from_degree(32, 21.22534);

// And other practical function
let mag = apparent_mag(cst::SUN_L, cst::LY);            // Apparent mag of the Sun at 1 ly
let hill = hill_radius(mass, mass_star, distance, e);   // Hill radius
let b = impact_parameter(a, r_star, i, e, w);           // Transit impact parameter

量子力学

已将径向波函数 Rnl(r) 和球谐函数 Ylm(theta, phi) 添加到量子部分。Ylm 也适用于声学。

// Found in the quantum crate
use scilib::quantum::*;

// Computing Ylm for l=3, m=1, theta = 0.2 and phi = -0.3
let sph = spherical_harmonics(3, 1, 0.2, -0.3);

// Computing the Rnl for n=4, l=2
let rad = radial_wavefunction(4, 2, 1.3e-12);

依赖项