Files
numethods/README.md
2025-09-15 16:47:16 +03:00

84 lines
2.3 KiB
Markdown

# numethods
A lightweight, from-scratch, object-oriented Python package implementing classic numerical methods.
**No NumPy / SciPy solvers used**, algorithms are implemented transparently for learning and research.
## Why this might be useful
- Great for teaching/learning numerical methods step by step.
- Good reference for people writing their own solvers in C/Fortran/Julia.
- Lightweight, no dependencies.
- Consistent object-oriented API (.solve() etc).
---
## Features
### Linear system solvers
- **LU decomposition** (with partial pivoting): `LUDecomposition`
- **Gauss-Jordan** elimination: `GaussJordan`
- **Jacobi** iterative method: `Jacobi`
- **Gauss-Seidel** iterative method: `GaussSeidel`
- **Cholesky** factorization (SPD): `Cholesky`
### Root-finding
- **Bisection**: `Bisection`
- **Fixed-Point Iteration**: `FixedPoint`
- **Secant**: `Secant`
- **Newton's method** (for roots): `NewtonRoot`
### Interpolation
- **Newton** (divided differences): `NewtonInterpolation`
- **Lagrange** polynomials: `LagrangeInterpolation`
### Orthogonalization, QR, and Least Squares
- **Classical Gram-Schmidt**: `QRGramSchmidt`
- **Modified Gram-Schmidt**: `QRModifiedGramSchmidt`
- **Householder QR** (numerically stable): `QRHouseholder`
- **QR-based linear solver** (square systems): `QRSolver`
- **Least Squares** for overdetermined systems (via QR): `LeastSquaresSolver`
### Numerical Differentiation
- **Forward difference**: `ForwardDiff`
- **Backward difference**: `BackwardDiff`
- **Central difference (2nd order)**: `CentralDiff`
- **Central difference (4th order)**: `CentralDiff4th`
- **Second derivative**: `SecondDerivative`
- **Richardson extrapolation**: `RichardsonExtrap`
### Matrix & Vector utilities
- Minimal `Matrix` / `Vector` classes
- `@` operator for **matrix multiplication**
- `*` for **scalar**-matrix multiplication
- `.T` for transpose
- Forward / backward substitution helpers
- Norms, dot products, row/column access
---
## Install (editable)
```bash
pip install -e /numethods
```
or just add `/numethods` to `PYTHONPATH`.
## Examples
```bash
python /numethods/examples/demo.py
```
## Notes
- All algorithms are implemented without relying on external linear algebra solvers.
- Uses plain Python floats and list-of-lists for matrices/vectors.
- Tolerances use a relative criterion `|Δ| ≤ tol (1 + |value|)`.