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 }