Fast and robust root-finding library using the Modified Anderson-Bjork method
Project description
A fast and robust root-finding library for Python, using the Modified Anderson-Bjork method (Ganchovski & Traykov, 2023), written in C.
It finds the root of a single nonlinear equation f(x) = 0 within the specified interval [x1, x2].
Installation
pip install pymodab
Usage
import math
from pymodab import find_root, get_evaluation_count
# Find the root of cos(x) - x = 0 in [0, 1]
root = find_root(lambda x: math.cos(x) - x, 0, 1, 1e-3, 1e-3, 10)
print(f"Root: {root}") # 0.7390851332086904
# Get the number of function evaluations
print(f"Evaluations: {get_evaluation_count()}")
print(f"Error: {math.cos(root) - root}")
# Using default tolerances
root = find_root(lambda x: x**2 - 2, 1, 2)
print(f"sqrt(2) = {root}") # 1.414213562373095
# Get the number of function evaluations
print(f"Evaluations: {get_evaluation_count()}")
print(f"Error: {root**2 - 2}")
API
find_root(f, x1, x2, atol=1e-14, rtol=1e-14, max_iter=200)
Find the root of f(x) = 0 within the interval [x1, x2].
Parameters:
f: A continuous function of one variablex1,x2: Bracket interval endpoints (must satisfyf(x1) * f(x2) < 0)atol: Absolute tolerance (default: 1e-14)rtol: Relative tolerance (default: 1e-14)max_iter: Maximum iterations (default: 200)
Returns: The root, or NaN if not found.
get_evaluation_count()
Returns the number of function evaluations from the last root-finding call.
Algorithm
Modified Anderson-Björck's method is a new robust and efficient bracketing root-finding algorithm. It combines bisection with Anderson-Björk's method to achieve both fast performance and worst-case optimality.
References:
Ganchovski N.; Traykov A. Modified Anderson-Björck's method for solving non-linear equations in structural mechanics. IOP Conference Series: Materials Science and Engineering 2023, 1276 (1) 012010, IOP Publishing.
https://iopscience.iop.org/article/10.1088/1757-899X/1276/1/012010/pdf
Ganchovski, N.; Smith, O.; Rackauckas, C.; Tomov, L.; Traykov, A. Improvements of the Modified Anderson-Björck (modAB) Root-Finding Algorithm. Preprints 2026, 2026032190.
https://www.preprints.org/manuscript/202603.2190
License
MIT License
Benchmark results
The modAB algorithm is benchmarked against the available algorithms in Python/SciPy in respect to number of evaluations and execution times:
bisect- Bisection methodbrentq- Brent’s method (van Wijngaarden–Dekker–Brent, 1973)brenth- Brent–Dekker variant (hyperbolic extrapolation variant, 1975)ridder- Ridder’s method (1979)toms748- Alefeld–Potra–Shi method (1995 - TOMS Algorithm 748)chandr- Chandrupatla's method (1997) -scipy.optimize.elementwise.find_rootmodAB- Modified Anderson Bjork's method (Ganchovski & Traykov, 2023)
Function evaluations
| Func | bisect | brentq | brenth | ridder | chandr | modAB |
|---|---|---|---|---|---|---|
| SUM | 4411 | 2548 | 2512 | 3158 | 1873 | 1758 |
| AVG | 48 | 28 | 27 | 34 | 20 | 19 |
| MEDIAN | 49 | 12 | 12 | 16 | 12 | 12 |
| MIN | 3 | 4 | 4 | 4 | 3 | 3 |
| MAX | 53 | 102 | 102 | 202 | 58 | 56 |
| FACTOR | 2.509x | 1.449x | 1.429x | 1.796x | 1.065x | 1.000x |
Execution times (ms per problem, 100 iterations)
| Func | bisect | brentq | brenth | ridder | chandr | modAB |
|---|---|---|---|---|---|---|
| SUM | 1266.30 | 797.21 | 800.98 | 921.14 | 48639.60 | 145.55 |
| AVG | 13.7641 | 8.6654 | 8.7063 | 10.0124 | 528.6913 | 1.5820 |
| MEDIAN | 13.8022 | 4.5878 | 4.3595 | 5.6256 | 306.4098 | 1.2803 |
| MIN | 1.4287 | 1.7302 | 1.6219 | 1.3884 | 72.9172 | 0.6143 |
| MAX | 21.8886 | 36.7684 | 50.2981 | 54.4431 | 1542.8365 | 4.3991 |
| FACTOR | 8.700x | 5.477x | 5.503x | 6.329x | 334.189x | 1.000x |
Notes:
Last Run on: 02.04.2026
Intel(R) Core(TM) i7-1065G7 CPU @ 1.30GHz (1.50 GHz) with 16.0 GB RAM
Windows 11 Home
numpy Version: 2.4.4
scipy Version: 1.17.1
pymodab Version: 1.0.1
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pymodab-1.0.1.tar.gz.
File metadata
- Download URL: pymodab-1.0.1.tar.gz
- Upload date:
- Size: 98.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6917d172a5b6a0d9c3de208f804c40db3b283082c72df296886a20c1f3ab78a9
|
|
| MD5 |
a94540751e31bdc45792d7a1cf2acbfb
|
|
| BLAKE2b-256 |
c40a264dc1d88c1f5581f2655ea9751c21eacd53733b53e94937a596fb54db36
|
File details
Details for the file pymodab-1.0.1-py3-none-any.whl.
File metadata
- Download URL: pymodab-1.0.1-py3-none-any.whl
- Upload date:
- Size: 99.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3b87ddc548c7a123da08c2b75e39d44cb9f39a141f79f3a3fe430a5186e21485
|
|
| MD5 |
f92f8fcb0c6884d5e6111a0ef97ef4a6
|
|
| BLAKE2b-256 |
e9e020e2251116e4e824e6eb7a6ea85bcf558f6141f775728506329b77d79ff0
|