Math 5385 --- Final Project
due Monday, December 20 at high noon

You should complete a project dealing with computational algebraic geometry theory or its applications. This handout contains a few suggestions but its main purpose it to give you an idea of the possibilities. Also the text has further suggestions for projects in Appendix D. It would be even better if you make up you own project. If you have an idea and want to check it out first, just stop by my office.

Projects typically divided into three basic types: papers about math, papers about applications and computer programs. For math projects, you need to go beyond the math of the course and getting into the details of your topic. For papers on applications, you should to look at several references; then analyze and perhaps criticize what you find; illustrate the points with your own examples. For computer projects, you should write the program for a specific purpose and then really use it for that purpose. It should be flexible enough to allow you to handle several examples.

Mathematical Theory.

A project in this area might by based on one of the chapters of the book which we will not cover (see below for specific topics). Your paper could give an overview of the topic with some proofs that you have worked out, perhaps based on problems from the book. Or you could combine a theoretical exposition with some examples you have worked out using the computer.

1. Solving Polynomial Systems. Suppose a system of equations in n-variables x1, ..., x_n has finitely many solutions (the variety consists of finitely many points). How can we find the coordinates of these points. The standard approach uses elimination theory to find a polynomial involving only one variable, say p(x_n). The the x_n coordinates of the points are roots of this polynomial. We saw that one way to do this was to find a lexicographic Groebner basis with x_n being the lowest-weighted variable. But in practice, it can be difficult to find such a Groebner basis. It turns out that there are ways to find p(x_n) without computing the whole Groebner basis. For two methods see

2. Factorization. Find out how computer algebra systems are able to factor single-variable and multi-variable polynomials. The basic approach is Berlekamp's algorithm although there was an older method generally called Kronecker's algorithm.

3. Fundamental Theorem of Algebra. Algebraic geometry is mostly about solving systems of polynomial equations with several variables, but to make progress, we need to be able to solve polynomials in one variable. That means working over the field of complex numbers. What is it about complex numbers that makes complex equations solveable ? Find out by looking into the proof of the fundamental theorem of algebra. The reference below gives several different proof. Is there a completely algebraic proof or do all of them use geometry and analysis in an essential way ?

4. Invariant Theory. This is about polynomials which have certain symmetries. For example, a symmetric polynomial p(x,y) = p(y,x) can be rewritten as a polynomial expression q(s1,s2) where s1= x+y and s2= xy are the ``elementary symmetric functions''. Groebner bases can be used to find q. But what if the polynomial has a more complicated symmetry such as invariance under rotations by 90 degrees ? There are algorithms for these cases too. Start with chapter 7 of our book and check out some of the references contained there.

 


Applications.

Write a survey paper describing an application of computational algebra. Start with one of the sources mentioned below. Explain how the Groebner basis theory can be used to attack the problem. Try out some examples of your own. Try to see whether the method really works in practice, or only in principle. Start with the references below and find others, perhaps on the internet.

5. Robotics. The positions of the joints of a robotic arm satisfy polynomial constraints because the lengths of the segments connecting them are constant. Finding out how to set the joint angles to achieve a certain position for the ``hand'' at the end of the arm amounts to solving a system of polynomial equations. Groebner bases can be used for this. See Chapter 6, sections 1-3 and references contained therein.


6. Geometric Theorem Proving. Both the hypotheses and conclusion of many theorems of Euclidean geometry can be expressed as relations among the distances between points in the plane. These are polynomial equations in Cartesian coordinates. So the theorems can be proved by showing that the polynomial equation representing the conclusion follows from the polynomial equations representing the hypotheses. This is a job for Groebner but other more efficient methods have also been used. An introduction is contained in Chapter 6, sections 4 and 5. See also


7. Integer Programming. This is about trying to solve optimization problems where the variables are integers (how can you make change for $10.00 using exactly 50 coins and using as few dimes as possible ?). There is a neat trick for coding this as a Groebner basis problem where the integer variables become exponents of monomials.


8. Implicitization and Parametrization in Computer Graphics. Given a parametric curve or surface, one can try to eliminate parameters to obtain implicit equations satisfied by the Cartesian coordinates of points on the curve. Conversely, given an implicit curve or surface, one can try to find parametrizations of all or part of the curve or surface. Both kinds of representations have their uses, for example in computer graphics. What are the advantages of each ? What methods can be used to convert between the two ? Unfortunately, I don't know of any good references for this one. Try some modern books on "geometric modeling" or try the references in Appendix D, project 13.


Programming.

Using Mathematica or some other computer algebra system, write some code to explore either the theory or some application of computational algebra. After writing your code, do something with it, i.e., use it to attack a substantial example.

9. Write some Mathematica code for finding the different caustics of a curve in the plane when illuminated by parallel rays from different directions. You could specify the direction by giving an integer or rational vector (to keep the computations exact). Make a movie showing how the caustics change as the direction of illumination does. Try an ellipse. See if you can do it for more general curves.


10. Sturm's algorithm. This is a method for counting the exact number of real roots of a real polynomial p(x) in a given interval. Find out how it works and then write some Mathematica code implementing the algorithm. Test it out.

11. Resultants. There is an algorithm for computing the of two one-variable polynomials f(z), g(z) which is much more efficient than evaluating the Sylvester determinant. It is described in Section 3.5 of our text, exercises 16 and 17. Work out the theory behing this and implement the algorithm in Mathematica. Implement the Sylevester determinant approach also and compare the performance using the Timing[] command. If you feel ambitious figure out how to do an ``extended resultant'' algorithm which also computes the polynomial A(z), B(z) such that Res(f,g) = A(z)f(z)+B(z)g(z).


12. Write your own Groebner basis program using Mathematica to do the basic algebraic steps on the polynomials. Make the program give some feedback about the intermediate steps (S polynomials) in computing the basis. You will need to figure out how to how to get at the monomials of a polynomial, how to read off exponent vectors and how to determine the leading term of a polynomial with respect to a given ordering. After that it shouldn't be too hard, Incorporate some of the improvements in section 2.9 of our text or ones you find elsewhere. Try out some of the worst-case scenarios from the problems section there.