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\).

an illustration of homotopy continuation, tracking from 1 to 0
an illustration of homotopy continuation, tracking from 1 to 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:

The program uses these excellent libraries, among others: