Multivariate resultants

The resultant is a tool to projection onto a coefficient space. We consider a system of $n + 1$ generic polynomials:

\[ \left\{ \begin{array}{l} f_0 (\mathbf{x}, \mathbf{c}) = \sum_{j = 0}^{k_0} c_{0, j} \psi_{0, j} (\mathbf{x})\\ \vdots\\ f_n (\mathbf{x}, \mathbf{c}) = \sum_{j = 0}^{k_n} c_{n, j} \psi_{n, j} (\mathbf{x}) \end{array} \right. \]

where

The problem consists to find conditions on $\mathbf{c}$, such that this system has a root in $X$. In the case, we are considering, there exists a polynomial $\tmop{res}_X (\mathbf{f})$ in the parameters {{c}}, such that

\[ \tmop{res}_X (\mathbf{f}) = 0 \]

iff the previous system has a solution in $X$. This polynomial is called the resultant of $\mathbf{f}$ on $X$. Different constructions of resultants are presented hereafter.

Tools for constructing matrices from polynomials

Several tools are available to construct matrices of coefficients of lists of polynomials:

template<class R,class L,class LM> 
     R matrix_of(const L& l, char t='N');
template<class R,class L,class LM> 
     R matrix_of(const L& l, const LM & lm, char t='N');

The use of such functions is done by specifying the output of matrices:

MAT m = matrix_of<MAT>(l);
MAT m = matrix_of<MAT>(l,'T');
where l is a list of multivariate polynomials, MAT the type of output matrix that we want to compute, and 'T' specifies if the transposed matrix is computed.

See synaps/mpol/matrixof.h

Projective resultant

Here $X =\mathbbm{P}^n $ and $f_i$ is a generic polynomial of degree $d_i$, $i = 0, \ldots, n$. The construction used is the one described by F.S. Macaulay.
MAT m  = macaulay<MAT>(l);
MAT mt = macaulay<MAT>(l,'T');
where l is a list of $n + 1$ multivariate polynomials in $n$ variables, MAT the type of output matrix that we want to compute, and 'T' specifies if the transposed matrix is computed or not.

See synaps/mpol/macaulay.h

Toric resultant

Here $X =\mathcal{T}^n $ is the toric variety associated to the Minkowsky sum of polytopes $A_i \subset \mathbbm{Z}^n$ and $f_i$ is a generic polynomial of support in $A_i$, $i = 0, \ldots, n$. The construction used is the one described in [CaEm93].

See also:
synaps/mpol/Toric.h

Bezoutian

The bezoutian yields a multiple of any resultants [ElMo99]. It is defined from $n + 1$ (affine) polynomials $f_0, f_1, \ldots, f_n$ in the variables $x_1, \ldots, x_n$.

See also:
synaps/mpol/bezoutian.h

Example

#include <synaps/mpol.h>
#include <synaps/mpol/macaulay.h>
#include <synaps/mpol/bezoutian.h>
#include <synaps/mpol/Toric.h>
typedef  MatrDse<double> matr_t;
typedef  MPol<double>  mpol_t;
using std::cout; using std::endl;
int main ()
{
  mpol_t p0("t+x+2*y"), p1("x^2+y^2-1"), p2("y^2+x*y-1");
  vector<mpol_t> l; l.push_back(p0); l.push_back(p1); l.push_back(p2);

  cout<< macaulay<matr_t>(l)<<endl;
[...]
  cout<< m_bezout<matr_t>(l)<<endl;
[...]
  cout<< toric<matr_t>(l)<<endl;
[...]
}

SYNAPS DOCUMENTATION
logo