AngouriMath

Navigation

GroebnerSystemSolver


← Back to list of classes

Description

Summary

Solves a system of polynomial equations over Q by triangularising it, for the
systems where that can be done and answered exactly.

Remarks

The solver this sits in front of eliminates one variable at a time by calling
SolveEquation(AngouriMath.Entity.Variable), which applies the closed-form radical
formulas. With numeric coefficients those are cheap; with symbolic ones they are not,
and since each elimination turns the next one's coefficients into nested radicals the
size compounds. Four coupled variables did not finish in three hundred seconds, while
four uncoupled ones with 256 solutions took seventeen milliseconds — the cost was
never the size of the system, it was eliminating in radicals.
A Gröbner basis eliminates without them: the lexicographic basis is triangular and
leaves the last variable a univariate polynomial with rational coefficients, which
the existing polynomial solver already handles. The basis is computed under
degree-reverse-lexicographic, which is the order that can actually be computed, and
converted by Fglm.
It answers only where it can check its own answer. Every candidate goes back
into the original equations and is kept only if they reduce to exactly zero. That
covers rational and radical solutions — x^2 - 2, y - x comes back as
(sqrt(2), sqrt(2)) and (-sqrt(2), -sqrt(2)) — because one structural
pass is enough to prove a radical identity. Where a root is a decimal the check cannot
be made at all, and rather than accept a tuple on a tolerance, which is how a root
that is merely close becomes a reported solution, the whole system goes back to the
existing solver. So this takes what it can prove and declines the rest without
changing what those did before.

Members

























Angouri © 2019-2023 · Project's repo · Site's repo · Octicons · Transparency · 1953 pages online