123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- \documentstyle[fullpage]{article}
- \pagestyle{empty}
- \setlength{\parindent}{0in}
- \setlength{\parskip}{0.1in}
- \begin{document}
- \title{An Implementation of the Wu Algorithm}
- \author{Russell Bradford \\
- School of Mathematical Sciences,\\
- University of Bath,\\
- Claverton Down,\\
- Bath, BA2 7AY \\
- \tt rjb@maths.bath.ac.uk}
- \date{}
- \maketitle\thispagestyle{empty}
- This is a simple implementation of the Wu algorithm implemented in Reduce
- 3.3, working directly from
- ``A Zero Structure Theorem for Polynomial-Equations-Solving,''
- Wu Wen-tsun, Institute of Systems Science, Academia Sinica, Beijing.
- Its purpose was to aid my understanding of the algorithm, so the code is
- simple, and has a lot of tracing included. This is a working implementation,
- but there is magnificent scope for improvement and optimisation. Things
- like using intelligent sorts on polynomial lists, and avoiding the
- re-computation of various data spring easily to mind. Also, an attempt
- at factorization of the input polynomials at each pass might have beneficial
- results. Of course, exploitation of the natural parallel structure is a must!
- All bug fixes and improvements are welcomed.
- The interface:
- \begin{verbatim}
- wu( {x^2+y^2+z^2-r^2, x*y+z^2-1, x*y*z-x^2-y^2-z+1}, {x,y,z});
- \end{verbatim}
- calls {\tt wu} with the named polynomials, and with the variable ordering
- ${\tt x} > {\tt y} > {\tt z}$. In this example, {\tt r} is a parameter.
- The result is
- \begin{verbatim}
- 2 3 2
- {{{r + z - z - 1,
- 2 2 2 2 4 2 2 2
- r *y + r *z + r - y - y *z + z - z - 2,
- 2
- x*y + z - 1},
- y},
- 6 4 6 2 6 4 7 4 6 4 5 4 4
- {{r *z - 2*r *z + r + 3*r *z - 3*r *z - 6*r *z + 3*r *z + 3*
- 4 3 4 2 4 2 10 2 9 2 8 2 7
- r *z + 3*r *z - 3*r + 3*r *z - 6*r *z - 3*r *z + 6*r *z +
- 2 6 2 5 2 4 2 3 2 13 12 11
- 3*r *z + 6*r *z - 6*r *z - 6*r *z + 3*r + z - 3*z + z
- 10 9 8 7 6 4 3 2
- + 2*z + z + 2*z - 6*z - z + 2*z + 3*z - z - 1,
- 2 2 3 2
- y *(r + z - z - 1),
- 2
- x*y + z - 1},
- 2 3 2
- y*(r + z - z - 1)}}
- \end{verbatim}
- namely, a list of pairs of characteristic sets and initials for the
- characteristic sets.
- Thus, the first pair above has the characteristic set
- $$ r^2 + z^3 - z^2 - 1,
- r^2 y^2 + r^2 z + r^2 - y^4 - y^2 z^2 + z^2 - z - 2,
- x y + z^2 - 1$$
- and initial $y$.
- According to Wu's theorem, the set of roots of the original polynomials
- is the union of the sets of roots of the characteristic sets,
- with the additional constraints that the
- corresponding initial is non-zero. Thus, for the first pair above, we find the
- roots of $\{ r^2 + z^3 - z^2 - 1, \ldots~\}$ under the constraint that
- $y \neq 0$. These roots, together with the roots of the other
- characteristic set (under the constraint of $y(r^2+z^3-z^2-1) \neq 0$),
- comprise all the roots of the original set.
- Additional information about the working of the algorithm can be gained by
- \begin{verbatim}
- on trwu;
- \end{verbatim}
- This prints out details of the choice of basic sets, and the computation
- of characteristic sets.
- The second argument (the list of variables) may be omitted, when all the
- variables in the input polynomials are implied with some random ordering.
- \end{document}
|