001 /*
002 * $Id: Polynomial.java 1801 2008-05-19 20:50:39Z kredel $
003 */
004
005 package edu.jas.poly;
006
007
008 import java.util.Map;
009 import java.util.Iterator;
010
011
012 import edu.jas.structure.RingElem;
013 import edu.jas.structure.RingFactory;
014
015
016 /**
017 * Polynomial interface.
018 * Adds methods specific to polynomials.
019 * @param <C> ring element type
020 * @author Heinz Kredel
021 */
022
023 public interface Polynomial<C extends RingElem<C>>
024 extends RingElem< Polynomial<C> > {
025
026 /**
027 * Leading monomial.
028 * @return first map entry.
029 */
030 public Map.Entry<ExpVector,C> leadingMonomial();
031
032
033 /**
034 * Leading exponent vector.
035 * @return first exponent.
036 */
037 public ExpVector leadingExpVector();
038
039
040 /**
041 * Leading base coefficient.
042 * @return first coefficient.
043 */
044 public C leadingBaseCoefficient();
045
046
047 /**
048 * Trailing base coefficient.
049 * @return coefficient of constant term.
050 */
051 public C trailingBaseCoefficient();
052
053
054 /**
055 * Reductum.
056 * @return this - leading monomial.
057 */
058 public Polynomial<C> reductum();
059
060
061 /**
062 * Extend variables. Used e.g. in module embedding.
063 * Extend all ExpVectors by i elements and multiply by x_j^k.
064 * @param pfac extended polynomial ring factory (by i variables).
065 * @param j index of variable to be used for multiplication.
066 * @param k exponent for x_j.
067 * @return extended polynomial.
068 */
069 public Polynomial<C> extend(PolynomialRing<C> pfac, int j, long k);
070
071
072 /**
073 * Contract variables. Used e.g. in module embedding.
074 * remove i elements of each ExpVector.
075 * @param pfac contracted polynomial ring factory (by i variables).
076 * @return Map of exponents and contracted polynomials.
077 * <b>Note:</b> could return SortedMap
078 */
079 public Map<ExpVector,Polynomial<C>> contract(PolynomialRing<C> pfac);
080
081
082 /**
083 * Reverse variables. Used e.g. in opposite rings.
084 * @return polynomial with reversed variables.
085 */
086 public Polynomial<C> reverse(PolynomialRing<C> oring);
087
088
089 /**
090 * Iterator over coefficients.
091 * @return val.values().iterator().
092 */
093 public Iterator<C> coefficientIterator();
094
095
096 /**
097 * Iterator over exponents.
098 * @return val.keySet().iterator().
099 */
100 public Iterator<ExpVector> exponentIterator();
101
102
103 /**
104 * Iterator over monomials.
105 * @return a PolyIterator.
106 */
107 public Iterator<Monomial<C>> monomialIterator();
108
109
110 }