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
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提供了实数和复数、整数或实数函数阶的函数。它包括标准贝塞尔函数、球面贝塞尔函数和里卡提-贝塞尔函数。
所有函数都已实现
- 基本贝塞尔函数:J、Y、I、K
- 球面贝塞尔函数:j、y
- 汉克尔函数(及其球面对应物):H1、H2、h1、h2
- 里卡提-贝塞尔函数:S、C、Xi、Zeta
// 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);