Bertini 2
silviana amethyst
2025
I am the lead coder for Bertini 2, the re-development of Bertini 1 from C into C++ with Python. The project is going along nicely, and was graciously supported by the NSF.
Bertini is a program for solving polynomial systems, involving many functions in many variables. Categorically, it is a tool in Numerical Algebraic Geometry, although scientists and engineers from outside this area of applied mathematics successfully use it for solving a variety of problems, including stationary points of differential equations, kinematic mechanism design, solving PDE’s, and others.
An old adage of mathematics is,
when you can’t solve a problem, solve a different problem.
In this case, you want to solve a polynomial system \(f(x)\) . But it’s hard. Too hard. Impossible. So instead, you solve \(g\), a different but related system. You can spend anywhere from almost no time, to a long time, finding and solving \(g\). This is the start system.
Then, you deform from \(g\) to \(f\) through some path variable or time variable, \(t\). You track the homotopy path, using predictor-corrector methods, using an endgame near the target \(t\) value. In Bertini, we track from \(t = 1\) to \(t = 0\).

Bertini2 is hosted on Github, and is under the GPL V3 license for FOSS. Do you want to help? Send me an email! Fork the repo! File an issue or submit a pull request!
Currently the program can:
- parse arbitrary systems into our new hybrid double and multiple-precision evaluation tree set of classes,
- evaluate in double or multiple-precision at any number of digits
- differentiate, to produce a single evaluation tree for the Jacobian of a system
- evaluate the Jacobian in any precision,
- form the Total Degree start system for an arbitrary polynomial system, and generate its solutions without pre-storage
- form the MultiHomogeneous start system
- couple a path variable between any two systems, to form a final homotopy for evaluation during tracking.
- do path tracking in double, fixed, and adaptive multiple precision
- run the fractional power series and cauchy endgames
- solve generic systems of polynomials
- do all of the above in Python via the provided bindings in PyBertini
The program uses these excellent libraries, among others:
- Boost.Multiprecision – and hence MPFR and GMP
- Boost.Spirit.Qi and Karma
- Eigen 3