Yroots locates all real roots of smooth multivariate systems inside a compact search interval — no initial guess, no missed solutions, just the box and the functions. The same algorithm ships three ways: two Python editions and jroots, the Julia port.
Yroots isolates the real roots of a smooth system on a bounded interval [a, b]. Markers show the zero crossings it returns.
Rootfinders for this problem tend to fall into one of three families: homotopy continuation methods that track paths from a related system with known solutions, eigenvalue methods built on Möller–Stetter matrices, and resultant-based methods that eliminate variables one pair at a time. Yroots takes a fourth route — it builds a Chebyshev interpolant of each function, then repeatedly subdivides and shrinks the search box using properties specific to the Chebyshev basis. Near a simple zero, the interval is proven to shrink quadratically.
| Method class | Representative solver | Approach |
|---|---|---|
| Homotopy continuation | Bertini | Track paths from a related system with known roots |
| Eigenvalue-based | Möller–Stetter | Recast rootfinding as an eigenvalue problem |
| Resultant-based | Chebfun2 | Eliminate variables one pair at a time |
| Chebyshev subdivision | yroots / jroots | Subdivide and shrink the box using Chebyshev basis properties |
Every solver runs on the same three families of systems. Dense systems are randomly generated with every coefficient populated up to a given degree, across dimensions 2–5. Sparse systems keep only a small, fixed number of nonzero terms per polynomial — that sparsity is what makes dimensions up to 8 tractable at all. Chebfun isn't randomly generated — it's a fixed set of hand-picked, harder bivariate systems (curves with cusps, near-tangencies, clustered roots), run specifically to compare against Chebfun2, which only handles two dimensions. Data pulled live from tylerjarvis/rootfinding_testing.
All three solve the same problem — zeros of n smooth functions in n variables over a compact box. The two Python editions differ only in whether the subdivision runs across threads; jroots is the Julia port. The benchmark above is where yroots and jroots are run side by side against solvers like Bertini, Chebfun and NSolve.
Uses Chebyshev polynomial approximation to subdivide the search box and isolate roots to machine precision. Guaranteed to find every root as long as the system is smooth, continuous, and has finitely many simple zeros in the interval. Subdivided regions are handed to a worker pool, which is why it wants the free-threaded build.
The same subdivision solver with the parallel driver taken out: one thread, stock CPython. It is the reference the parallel fork is checked against, and the edition to reach for where a free-threaded interpreter isn't available. Same import, same call — without the two parallel arguments.
A Julia port of the same Chebyshev subdivision algorithm, developed as Julia-Rootfinding. It's an active, in-progress translation of the Python codebase — internally the module is still named YRoots — with a separate FastSolve path for a more optimized solve.
Yroots and its variants are built and maintained by Tyler Jarvis' YRoots group at Brigham Young University. The underlying algorithm is described, and its properties proved, in the paper E. Parkinson, K. Wall, J. Slagle, D. Treuhaft, X. de la Bruere, S. Goldrup, T. Keith, P. Call, and T.J. Jarvis, Chebyshev subdivision and reduction methods for solving multivariable systems of equations, J. of Symbolic Computation 128 (2025) 102392. Some of the underlying ideas and design choices were influenced by our analysis of rootfinding algorithms in S. Parkinson, H. Ringer, K. Wall, E. Parkinson, L. Erekson, D. Christensen, and T.J. Jarvis, Analysis of normal-form algorithms for solving systems of polynomial equations, J. of Computational and Applied Mathematics 411 (September 2022), 114235.
Peter Call· Xander de la Bruere· Lukas Erekson· Samuel Goldrup· Alex Hermosilla· Tyler J. Jarvis· David Kartchner· Timothy Keith· Catherine Kellar· Natalie Larsen· Hyun Lee· Nathan Longhurst· Jeremy Magland· Derek Miller· Tyler Moncur· Erik Parkinson· Hayden Ringer· Jane Slagle· Suzanna Stephenson· Zachary Taylor· Daniel Treuhaft· Kate Wall· Rowan Williams
Thanks also to Simon Telen and Alex Townsend for helpful feedback and suggestions.
This work has been supported in part by the College of Computing, Math, and Science at Brigham Young University; by two Mentoring Environment Grants from Brigham Young University; and by the National Science Foundation under grant DMS-1564502.
The algorithm behind yroots is described and proven in Parkinson, Wall, Slagle, Treuhaft, de la Bruere, Goldrup, Keith, Call & Jarvis, Chebyshev Subdivision and Reduction Methods for Solving Multivariable Systems of Equations, Journal of Symbolic Computation (2024).