001/* 002 * $Id: PolynomialRing.java 1801 2008-05-19 20:50:39Z kredel $ 003 */ 004 005package edu.jas.poly; 006 007 008import java.util.List; 009import java.util.Random; 010 011 012import edu.jas.structure.RingElem; 013import edu.jas.structure.RingFactory; 014 015 016/** 017 * Polynomial factory interface. 018 * Defines polynomial specific factory methods. 019 * @author Heinz Kredel 020 */ 021 022public interface PolynomialRing<C extends RingElem<C>> 023 extends RingFactory< Polynomial<C> > { 024 025 026 /** 027 * Number of variables. 028 * @return the number of variables. 029 */ 030 public int numberOfVariables(); 031 032 033 /** Get the variable names. 034 * @return vars. 035 */ 036 public String[] getVars(); 037 038 039 /** 040 * Generate a random polynomial. 041 * @param k bitsize of random coefficients. 042 * @param l number of terms. 043 * @param d maximal degree in each variable. 044 * @param q density of nozero exponents. 045 * @return a random polynomial. 046 */ 047 public Polynomial<C> random(int k, int l, int d, float q); 048 049 050 /** 051 * Generate a random polynomial. 052 * @param k bitsize of random coefficients. 053 * @param l number of terms. 054 * @param d maximal degree in each variable. 055 * @param q density of nozero exponents. 056 * @param rnd is a source for random bits. 057 * @return a random polynomial. 058 */ 059 public Polynomial<C> random(int k, int l, int d, float q, Random rnd); 060 061 062 /** 063 * Generate univariate polynomial in a given variable. 064 * @param i the index of the variable. 065 * @return X_i as univariate polynomial. 066 */ 067 public Polynomial<C> univariate(int i); 068 069 070 /** 071 * Generate univariate polynomial in a given variable with given exponent. 072 * @param i the index of the variable. 073 * @param e the exponent of the variable. 074 * @return X_i^e as univariate polynomial. 075 */ 076 public Polynomial<C> univariate(int i, long e); 077 078 079 /** 080 * Generate list of univariate polynomials in all variables. 081 * @return List(X_1,...,X_n) a list of univariate polynomials. 082 */ 083 public List<? extends Polynomial<C>> univariateList(); 084 085 086 /** 087 * Extend variables. Used e.g. in module embedding. 088 * Extend number of variables by i. 089 * @param i number of variables to extend. 090 * @return extended polynomial ring factory. 091 */ 092 public PolynomialRing<C> extend(int i); 093 094 095 /** 096 * Contract variables. Used e.g. in module embedding. 097 * Contract number of variables by i. 098 * @param i number of variables to remove. 099 * @return contracted polynomial ring factory. 100 */ 101 public PolynomialRing<C> contract(int i); 102 103 104 /** 105 * Reverse variables. Used e.g. in opposite rings. 106 * @return polynomial ring factory with reversed variables. 107 */ 108 public PolynomialRing<C> reverse(); 109 110 111}