Skip to main content

scivex_optim/
lib.rs

1//! `scivex-optim` — Optimization, root finding, numerical integration, and ODE solvers.
2//!
3//! Built on top of [`scivex_core`] with zero external dependencies for the
4//! math itself. All functions are generic over [`Float`](scivex_core::Float).
5//!
6//! # Modules
7//!
8//! - [`roots`] — Scalar root-finding (bisection, Newton, Brent)
9//! - [`minimize_1d`] — 1-D minimization (golden section, Brent)
10//! - [`minimize`] — Multi-dimensional unconstrained optimization (gradient descent, BFGS)
11//! - [`integrate`] — Numerical integration (trapezoid, Simpson, adaptive Gauss-Kronrod)
12//! - [`interpolate`] — Interpolation (linear, cubic spline, B-spline, bilinear, bicubic)
13//! - [`ode`] — ODE initial value problem solvers (Euler, RK45, BDF-2)
14
15/// Curve fitting via non-linear least squares (Levenberg-Marquardt).
16pub mod curve_fit;
17/// Optimization error types.
18pub mod error;
19/// Numerical integration (trapezoid, Simpson, Gauss-Kronrod).
20pub mod integrate;
21/// Interpolation (linear, cubic spline, B-spline, bilinear, bicubic).
22pub mod interpolate;
23/// Linear programming (revised simplex method).
24pub mod linprog;
25/// Multi-dimensional optimization (gradient descent, BFGS, Nelder-Mead, L-BFGS-B).
26pub mod minimize;
27/// 1-D minimization (golden section, Brent).
28pub mod minimize_1d;
29/// ODE initial value problem solvers (Euler, RK45, BDF-2).
30pub mod ode;
31/// Partial differential equation solvers (finite difference methods).
32pub mod pde;
33/// Quadratic programming (active set method).
34pub mod quadprog;
35/// Scalar root-finding (bisection, Newton, Brent).
36pub mod roots;
37/// Sparse linear system solvers (CG, BiCGSTAB, preconditioned CG).
38pub mod sparse_solve;
39
40pub use curve_fit::{LeastSquaresResult, curve_fit, levenberg_marquardt};
41pub use error::{OptimError, Result};
42pub use integrate::{QuadOptions, QuadResult, quad, simpson, trapezoid};
43pub use interpolate::{
44    BSpline, Bicubic2d, Bilinear2d, CubicSpline, Extrapolate, Interp1dMethod, Interp2dMethod,
45    Linear1d, SplineBoundary, interp1d, interp2d,
46};
47pub use linprog::{LinProgResult, linprog};
48pub use minimize::{
49    Bounds, MinimizeOptions, MinimizeResult, bfgs, gradient_descent, lbfgsb, nelder_mead,
50    numerical_gradient,
51};
52pub use minimize_1d::{Minimize1dResult, brent_min, golden_section};
53pub use ode::{OdeMethod, OdeOptions, OdeResult, bdf2, euler, rk45, solve_ivp};
54pub use pde::{BoundaryCondition, PdeResult, heat_equation_1d, laplace_2d, wave_equation_1d};
55pub use quadprog::{QpResult, quadprog};
56pub use roots::{RootOptions, RootResult, bisection, brent_root, newton};
57pub use sparse_solve::{
58    JacobiPreconditioner, SparseSolveResult, bicgstab, conjugate_gradient, preconditioned_cg,
59};
60
61/// Items intended for glob-import: `use scivex_optim::prelude::*;`
62pub mod prelude {
63    pub use crate::curve_fit::{LeastSquaresResult, curve_fit, levenberg_marquardt};
64    pub use crate::error::{OptimError, Result};
65    pub use crate::integrate::{QuadOptions, QuadResult, quad, simpson, trapezoid};
66    pub use crate::interpolate::{
67        BSpline, Bicubic2d, Bilinear2d, CubicSpline, Extrapolate, Interp1dMethod, Interp2dMethod,
68        Linear1d, SplineBoundary, interp1d, interp2d,
69    };
70    pub use crate::linprog::{LinProgResult, linprog};
71    pub use crate::minimize::{
72        Bounds, MinimizeOptions, MinimizeResult, bfgs, gradient_descent, lbfgsb, nelder_mead,
73        numerical_gradient,
74    };
75    pub use crate::minimize_1d::{Minimize1dResult, brent_min, golden_section};
76    pub use crate::ode::{OdeMethod, OdeOptions, OdeResult, bdf2, euler, rk45, solve_ivp};
77    pub use crate::pde::{
78        BoundaryCondition, PdeResult, heat_equation_1d, laplace_2d, wave_equation_1d,
79    };
80    pub use crate::quadprog::{QpResult, quadprog};
81    pub use crate::roots::{RootOptions, RootResult, bisection, brent_root, newton};
82    pub use crate::sparse_solve::{
83        JacobiPreconditioner, SparseSolveResult, bicgstab, conjugate_gradient, preconditioned_cg,
84    };
85}