mathr — Rust Math Library, CLI Calculator & Web Notebook
mathr is a pure-Rust mathematics library and command-line calculator for symbolic and numerical computation — built from scratch with zero external math dependencies. It includes a Jupyter-like web notebook with KaTeX math rendering, step-by-step solving, and exact fraction arithmetic.
Table of Contents
- Features
- Quick Start
- CLI Usage
- LaTeX / TeX Input
- REPL
- Web Notebook
- Crate API
- Modules
- Dependencies
- License
Features
Symbolic Computation
- Symbolic differentiation — product, quotient, chain rules; partial derivatives and gradients
- Symbolic integration — polynomial, exponential, trigonometric, and inverse-trigonometric primitives
- Algebraic simplification — constant folding and algebraic identity simplification
- Taylor series — symbolic expansion around any point
- Laurent series — expansion around poles with negative powers
- Exact rational arithmetic —
Rationaltype with GCD reduction; expressions with integer fractions evaluate exactly (e.g.\frac{1}{2} + \frac{3}{4}→5/4)
Numerical Computation
- Numerical calculus — high-order finite-difference derivatives, trapezoidal / Simpson's / adaptive quadrature, Romberg with Richardson extrapolation
- FFT — Cooley–Tukey radix-2: 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 roots, Newton's method for nonlinear systems, VAS root isolation
- ODE solvers — Euler, RK4, RK4 systems, adaptive RKF45
- Monte Carlo integration — 1-D and N-D with reproducible LCG and standard error
- Fourier series — numerical coefficient computation via Simpson's rule
Linear Algebra
- Matrix operations — arithmetic, determinant, inverse, linear-system solver, trace, transpose, rank
- LU decomposition with partial pivoting
- Cholesky decomposition
A = L·Lᵀfor SPD matrices - SVD
A = U · Σ · Vᵀvia one-sided Jacobi rotations - Eigenvalue solvers — power iteration, symmetric QR algorithm (Householder + Wilkinson shift)
- Hessenberg and real Schur decomposition
- Tikhonov regularisation for ill-conditioned and rectangular systems
Number Theory
- GCD, LCM, primality (trial + Miller–Rabin), factorization, sieve of Eratosthenes
- Binomial coefficients, factorial, Fibonacci (fast doubling), Euler's totient
- Chinese Remainder Theorem, modular exponentiation, modular inverse
- Jacobi symbol, continued fractions, linear Diophantine solver, discrete logarithm (baby-step giant-step)
Interpolation & Special Functions
- Interpolation — Lagrange, Newton, linear, cubic spline, Chebyshev polynomials and series, Legendre polynomials, Gauss–Legendre quadrature
- Special functions — Gamma, log-Gamma, Beta, erf, erfc, sinc, incomplete gamma P, Bessel functions
J_0,J_1,J_n
Input & Output
- LaTeX / TeX input — parse
\frac,\sqrt,\sin,\pi,\left(\right),^{...},\Gamma,\log_2, and more; supports$...$,$$...$$,\[...\],\(...\)delimiters - Interactive REPL — rustyline-powered with history, variable/function bindings
- Expression parser — recursive-descent, implicit multiplication, scientific notation, 30+ built-in functions
- PNG plotting — line, multi-series, scatter via
plotters - Web notebook — Jupyter-like UI with KaTeX math rendering, step-by-step solving, exact fraction arithmetic,
.mnbfile format, cell-based evaluation
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
|
# Web notebook (Jupyter-like UI)
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
The interactive REPL supports variable bindings, function definitions, and all commands:
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> det 1 2 | 3 4
det = -2
mathr> quit
Web Notebook
Launch a Jupyter-like web notebook with KaTeX math rendering:
Example Notebooks
| File | Topics |
|---|---|
examples/notebooks/demo.mnb |
General overview |
examples/notebooks/calculus.mnb |
Differentiation, integration, Taylor series, gradients |
examples/notebooks/fractions.mnb |
Exact fraction arithmetic with \frac and rat |
examples/notebooks/solving.mnb |
Root finding, polynomial roots, simplification |
examples/notebooks/linear_algebra.mnb |
LU, Cholesky, SVD, eigenvalues, FFT, stats |
examples/notebooks/number_theory.mnb |
GCD, primality, factorization, Diophantine, discrete log |
examples/notebooks/special_functions.mnb |
Gamma, erf, Bessel, sinc |
examples/notebooks/latex_demo.mnb |
LaTeX/TeX input with \sin, \frac, \Gamma |
examples/notebooks/series_interp.mnb |
Taylor/Laurent series, splines, Chebyshev, Legendre |
Notebook Features
- KaTeX math rendering — input expressions and output results rendered as math notation
- Step-by-step solving — shows intermediate steps for
diff,solve,taylor,integrate,simplify,rat,laurent - Exact fraction arithmetic —
\frac{1}{2} + \frac{3}{4}evaluates to5/4, not1.25 - Live input preview — each cell shows a rendered math preview as you type
- Save / load —
.mnbJSON file format with cells of TeX/math input and evaluated output - Keyboard shortcut — Shift/Cmd/Ctrl+Enter to run a cell
.mnb File Format
REST API
| Method | Path | Description |
|---|---|---|
GET |
/ |
Serve web UI HTML |
POST |
/api/eval |
Evaluate expression; returns {input, output, steps} |
GET |
/api/notebook |
Get current notebook as JSON |
POST |
/api/notebook |
Replace notebook state (auto-saves to file) |
POST |
/api/save |
Save notebook to file |
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, Monte Carlo, Fourier series |
solver |
Bisection, Newton, secant, polynomial roots, Newton for systems, VAS root isolation |
fft |
Cooley–Tukey FFT, convolution, cross-correlation, windows |
complex |
Generic complex number type |
matrix |
Matrix arithmetic, determinant, inverse, solve, LU, Cholesky, SVD, eigenvalues, rank |
stats |
Descriptive statistics, correlation, regression, stochastic primitives |
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 |
laurent |
Laurent series expansion around poles |
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 |
rational |
Exact rational arithmetic (Rational type), eval_rational for exact AST evaluation |
notebook |
.mnb notebook format, JSON cells with TeX/math input + output |
server |
Minimal HTTP server for web notebook UI (KaTeX rendering, step-by-step solving) |
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