Macaulay2 » Documentation
Packages » Msolve :: msolveRUR
next | previous | forward | backward | up | index | toc

msolveRUR -- compute the rational univariate representation using symbolic methods

Synopsis

Description

This functions uses the msolve package to compute the rational univariate representation (RUR) of a zero dimensional polynomial ideal with either integer or rational coefficients.

The RUR gives a parametrization for all complex solutions to the input system. For a complete definition of the RUR see the paper: Rouillier, Fabrice (1999). "Solving Zero-Dimensional Systems Through the Rational Univariate Representation". Appl. Algebra Eng. Commun. Comput. 9 (9): 433–461.

If I is a zero dimensional ideal in QQ[x_1..x_n] then the RUR is given by:

(x_1,..,x_n)={ (-v_1(T)/w'(T), .. , -v_n(T)/w'(T)) | w(T)=0}

The output is a hash table with 6 keys.

The key "degree" is the number of solutions to I, counted with multiplicity.

The key "findRootsUniPoly" gives the polynomial w(T) above.

The key "denominator" gives the polynomial w'(T), which is the derivative of w(T) and is the denominator of each coordinate above.

The key "numerator" gives a list {v_1(T), .. , v_n(T)} of length n above, with n the number of variables, where the polynomial v_i(T) gives the numerator of the ith coordinate.

The key "var" gives the variable name in the univariate polynomial ring; by default this is: "T".

The key "T" gives the linear relation between the variables of the ring of I and the single variable, which is denoted T above.

A simple example, where the input ideal is zero dimensional and radical.

i1 : R = QQ[x_1..x_3]

o1 = R

o1 : PolynomialRing
i2 : f = (x_1-1)

o2 = x  - 1
      1

o2 : R
i3 : g = (x_2-2)

o3 = x  - 2
      2

o3 : R
i4 : h = (x_3^2-9)

      2
o4 = x  - 9
      3

o4 : R
i5 : I = ideal (f,g,h)

                             2
o5 = ideal (x  - 1, x  - 2, x  - 9)
             1       2       3

o5 : Ideal of R
i6 : decompose I

o6 = {ideal (x  - 3, x  - 2, x  - 1), ideal (x  + 3, x  - 2, x  - 1)}
              3       2       1               3       2       1

o6 : List
i7 : rur=msolveRUR(I)

o7 = HashTable{"degree" => 2                  }
               "denominator" => 2T
                                      2
               "findRootsUniPoly" => T  - 9
                                            2
               "numerator" => {-2T, -4T, -2T }
               "T" => x
                       3
               "var" => T

o7 : HashTable
i8 : factor rur#"findRootsUniPoly"

o8 = (T - 3)(T + 3)

o8 : Expression of class Product
i9 : sols=-1*(rur#"numerator")

                2
o9 = {2T, 4T, 2T }

o9 : List
i10 : denom= rur#"denominator"

o10 = 2T

o10 : QQ[T]
i11 : (for s in sols list sub(s,T=>3))/sub(denom,T=>3)

o11 = {1, 2, 3}

o11 : List
i12 : (for s in sols list sub(s,T=>-3))/sub(denom,T=>-3)

o12 = {1, 2, -3}

o12 : List

In cases where the input ideal has dimension greater than zero an error will be returned.

Ways to use msolveRUR:

For the programmer

The object msolveRUR is a method function with options.