#### wu.tex3.3 KB Permalink History Raw

 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}