mathr — Pure-Rust Math Library & CLI
A pure-Rust mathematics library and command-line tool for symbolic and numerical computation — built from scratch with zero external math dependencies.
Features
- Symbolic algebra — differentiation (product, quotient, chain rules) and symbolic integration (polynomial, exponential, trigonometric, and inverse-trigonometric primitives) with automatic simplification
- Numerical calculus — high-order finite-difference derivatives, trapezoidal / Simpson's / adaptive quadrature, Romberg with Richardson extrapolation, partial derivatives and gradients
- FFT — Cooley–Tukey radix-2 from scratch: forward, inverse, 2D, real-input, magnitude / power spectra, convolution, cross-correlation, window functions (Hann, Hamming, Blackman, Rectangular)
- Equation solving — bisection, Newton–Raphson, secant, Durand–Kerner polynomial root finding, and Newton's method for nonlinear systems
- Matrix operations — arithmetic, determinant, inverse, linear-system solver, trace, transpose, rank estimation, LU decomposition with partial pivoting, Cholesky decomposition
A = L·Lᵀfor SPD matrices, SVDA = U · Σ · Vᵀ, dominant eigenvalue/eigenvector via power iteration - Statistics — mean, median, variance, standard deviation, quartiles, IQR, correlation, linear regression
- Number theory — GCD, LCM, primality (trial + Miller–Rabin), factorization, sieve of Eratosthenes, binomial coefficients, factorial, Fibonacci, Euler's totient, Chinese Remainder Theorem, modular exponentiation, Jacobi symbol, continued fractions, linear Diophantine solver, discrete logarithm (baby-step giant-step)
- ODE solvers — Euler, RK4, RK4 systems, adaptive RKF45
- Taylor series — symbolic expansion around any point
- Interpolation — Lagrange, Newton divided-difference, linear, natural / clamped cubic spline, Chebyshev polynomials and series approximation, Legendre polynomials and associated, Gauss–Legendre quadrature
- Special functions — Gamma, log-Gamma, Beta, erf, erfc, sinc, incomplete gamma P, Bessel functions
J_0,J_1,J_n - Complex numbers — generic
Complex<T>with arithmetic, polar conversion, powers - Plotting — PNG output via
plotters(line, multi-series, scatter) - LaTeX / TeX input — parse
\frac,\sqrt,\sin,\pi,\left(\right),^{...},\Gamma,\log_2, and more; supports$...$,$$...$$,\[...\],\(...\)delimiters - Interactive REPL — rustyline-powered with history, bracket matching, variable/function bindings
- Expression parser — recursive-descent, implicit multiplication, scientific notation, 30+ built-in functions
Quick Start
Or build from source:
CLI Usage
Just pass a string — mathr figures out what to do:
# Matrix operations (rows separated by `|`)
# Interpolation
# Number theory
# Special functions
# Plot to PNG
|
LaTeX / TeX Input
mathr accepts LaTeX math formulas — with or without Markdown delimiters:
Supported delimiters: $...$, $$...$$, \[...\], \(...\), or raw TeX with no delimiters.
Supported TeX commands: \frac, \sqrt, \pi, \tau, \infty, \cdot, \times, \left(, \right), ^{...}, \sin, \cos, \tan, \arcsin, \arccos, \arctan, \sinh, \cosh, \tanh, \exp, \ln, \log, \log_2, \log_{10}, \Gamma, \operatorname{...}, \text{...}.
REPL
mathr> sin(pi/4)
0.7071067812
mathr> let x = 3
mathr> x^2 + 1
10
mathr> fn f(x) = x^2 + 2*x + 1
mathr> f(5)
36
mathr> diff sin(x^2)
2*x*cos(x^2)
mathr> integrate sin(x)
-cos(x)
mathr> taylor exp(x) 0 5
1 + x + 0.5*x^2 + 0.1666666667*x^3 + 0.0416666667*x^4
mathr> romberg sin(x) 0 3.14159
2
mathr> svd 1 2 | 3 4 | 5 6
σ = [9.525518, 0.514301]
mathr> quit
Crate API
use *;
// Evaluate an expression
let val = eval_str?;
// Symbolic differentiation and integration
let expr = parse?;
let deriv = differentiate?;
let integr = integrate?; // x³/3
// FFT magnitude spectrum
let samples = vec!;
let mags = magnitude_spectrum?;
// Matrix operations
let m = from_rows?;
let det = m.determinant?;
let inv = m.inverse?;
let lu = m.lu?;
let chol = m.cholesky?;
let svd = m.svd?; // A = U Σ Vᵀ
let eigen = m.power_iteration?;
// Descriptive statistics
let data = vec!;
let s = summary?;
// Number theory
let primes = sieve_primes;
let fib50 = fibonacci;
let is_prime = is_prime_miller_rabin;
let cf = continued_fraction?; // [3; 7]
let j = jacobi_symbol; // -1
let = diophantine?; // (14, -7)
let dl = discrete_log; // Some(7)
// ODE: solve y' = y, y(0) = 1, on [0, 1]
let y = rk4?;
// Taylor series expansion
let series = taylor_series_str?;
// Interpolation
let pts = vec!;
let y = lagrange_interp?;
let sp = new?;
let v = sp.eval;
// Chebyshev series
let coeffs = chebyshev_coefficients;
let y_eval = chebyshev_eval;
// Gauss–Legendre quadrature
let = gauss_legendre;
// Special functions
let g = gamma;
let j0 = bessel_j0;
let j5 = bessel_jn;
// Numerical integration
let integral = integrate_romberg?;
// Newton's method for nonlinear systems
let system = ;
let sol = newton_system?;
Modules
| Module | Description |
|---|---|
expr |
Expression AST (Expr) with canonicalization and equality |
parser |
Recursive-descent parser with LaTeX/TeX support |
eval |
Tree-walking evaluator with Context (variables, functions) |
simplify |
Constant folding and algebraic identity simplification |
symbolic |
Symbolic differentiation and integration |
calculus |
Numerical derivatives, quadrature, gradients, Romberg |
solver |
Bisection, Newton, secant, polynomial roots, Newton for systems |
fft |
Cooley–Tukey FFT, convolution, cross-correlation, windows |
complex |
Generic complex number type |
matrix |
Matrix arithmetic, determinant, inverse, solve, LU, Cholesky, SVD, power iteration, rank |
stats |
Descriptive statistics, correlation, regression |
numtheory |
GCD, LCM, primality, factorization, sieve, CRT, totient, Jacobi, Diophantine, continued fractions, discrete log |
ode |
Euler, RK4, RK4 systems, adaptive RKF45 |
taylor |
Symbolic Taylor series expansion |
interpolate |
Lagrange, Newton, linear, cubic spline, Chebyshev, Legendre, Gauss–Legendre |
special |
Gamma, Beta, erf, erfc, sinc, incomplete gamma, Bessel J_0/J_1/J_n |
plot |
PNG plotting via plotters |
Dependencies
| Crate | Purpose |
|---|---|
clap |
CLI argument parsing |
anyhow |
Error handling in binary |
thiserror |
Error types in library |
rustyline |
REPL line editing with history |
plotters |
PNG plot rendering |
num-traits |
Numeric trait bounds |
approx (dev) |
Float comparison in tests |
License
Apache-2.0