Package edu.jas.ps

Class UnivPowerSeries<C extends RingElem<C>>

java.lang.Object
edu.jas.ps.UnivPowerSeries<C>
Type Parameters:
C - ring element type
All Implemented Interfaces:
AbelianGroupElem<UnivPowerSeries<C>>, Element<UnivPowerSeries<C>>, MonoidElem<UnivPowerSeries<C>>, RingElem<UnivPowerSeries<C>>, Serializable, Comparable<UnivPowerSeries<C>>

public class UnivPowerSeries<C extends RingElem<C>> extends Object implements RingElem<UnivPowerSeries<C>>
Univariate power series implementation. Uses inner classes and lazy evaluated generating function for coefficients. All ring element methods use lazy evaluation except where noted otherwise. Eager evaluated methods are toString(), compareTo(), equals(), evaluate(), or they use the order() method, like signum(), abs(), divide(), remainder() and gcd().
See Also:
  • Field Details

    • ring

      public final UnivPowerSeriesRing<C extends RingElem<C>> ring
      Power series ring factory.
    • lazyCoeffs

      Coefficients<C extends RingElem<C>> lazyCoeffs
      Data structure / generating function for coefficients. Cannot be final because of fixPoint, must be accessible in factory.
    • truncate

      private int truncate
      Truncation of computations.
    • order

      private int order
      Order of power series.
  • Constructor Details

    • UnivPowerSeries

      private UnivPowerSeries()
      Private constructor.
    • UnivPowerSeries

      UnivPowerSeries(UnivPowerSeriesRing<C> ring)
      Package constructor. Use in fixPoint only, must be accessible in factory.
      Parameters:
      ring - power series ring.
    • UnivPowerSeries

      public UnivPowerSeries(UnivPowerSeriesRing<C> ring, Coefficients<C> lazyCoeffs)
      Constructor.
      Parameters:
      ring - power series ring.
      lazyCoeffs - generating function for coefficients.
  • Method Details

    • factory

      public UnivPowerSeriesRing<C> factory()
      Get the corresponding element factory.
      Specified by:
      factory in interface Element<C extends RingElem<C>>
      Returns:
      factory for this Element.
      See Also:
    • copy

      public UnivPowerSeries<C> copy()
      Clone this power series.
      Specified by:
      copy in interface Element<C extends RingElem<C>>
      Returns:
      Creates and returns a copy of this Element.
      See Also:
    • toString

      public String toString()
      String representation of power series.
      Overrides:
      toString in class Object
      See Also:
    • toString

      public String toString(int truncate)
      To String with given truncate.
      Returns:
      string representation of this to given truncate.
    • toScript

      public String toScript()
      Get a scripting compatible string representation.
      Specified by:
      toScript in interface Element<C extends RingElem<C>>
      Returns:
      script compatible representation for this Element.
      See Also:
    • toScriptFactory

      public String toScriptFactory()
      Get a scripting compatible string representation of the factory.
      Specified by:
      toScriptFactory in interface Element<C extends RingElem<C>>
      Returns:
      script compatible representation for this ElemFactory.
      See Also:
    • coefficient

      public C coefficient(int index)
      Get coefficient.
      Parameters:
      index - number of requested coefficient.
      Returns:
      coefficient at index.
    • asPolynomial

      public GenPolynomial<C> asPolynomial()
      Get a GenPolynomial<C> from this.
      Returns:
      a GenPolynomial<C> from this up to truncate parts.
    • asVector

      public GenVector<C> asVector()
      Get a GenVector<C> from this.
      Returns:
      a GenVector<C> from this up to truncate parts.
    • leadingCoefficient

      public C leadingCoefficient()
      Leading base coefficient.
      Returns:
      first coefficient.
    • reductum

      public UnivPowerSeries<C> reductum()
      Reductum.
      Returns:
      this - leading monomial.
    • prepend

      public UnivPowerSeries<C> prepend(C h)
      Prepend a new leading coefficient.
      Parameters:
      h - new coefficient.
      Returns:
      new power series.
    • shift

      public UnivPowerSeries<C> shift(int k)
      Shift coefficients.
      Parameters:
      k - shift index.
      Returns:
      new power series with coefficient(i) = old.coefficient(i-k).
    • select

      public UnivPowerSeries<C> select(Selector<? super C> sel)
      Select coefficients.
      Parameters:
      sel - selector functor.
      Returns:
      new power series with selected coefficients.
    • shiftSelect

      public UnivPowerSeries<C> shiftSelect(Selector<? super C> sel)
      Shift select coefficients. Not selected coefficients are removed from the result series.
      Parameters:
      sel - selector functor.
      Returns:
      new power series with shifted selected coefficients.
    • map

      public UnivPowerSeries<C> map(UnaryFunctor<? super C,C> f)
      Map a unary function to this power series.
      Parameters:
      f - evaluation functor.
      Returns:
      new power series with coefficients f(this(i)).
    • zip

      public <C2 extends RingElem<C2>> UnivPowerSeries<C> zip(BinaryFunctor<? super C,? super C2,C> f, UnivPowerSeries<C2> ps)
      Map a binary function to this and another power series.
      Parameters:
      f - evaluation functor with coefficients f(this(i),other(i)).
      ps - other power series.
      Returns:
      new power series.
    • sum

      public UnivPowerSeries<C> sum(UnivPowerSeries<C> ps)
      Sum of two power series.
      Specified by:
      sum in interface AbelianGroupElem<C extends RingElem<C>>
      Parameters:
      ps - other power series.
      Returns:
      this + ps.
    • subtract

      public UnivPowerSeries<C> subtract(UnivPowerSeries<C> ps)
      Subtraction of two power series.
      Specified by:
      subtract in interface AbelianGroupElem<C extends RingElem<C>>
      Parameters:
      ps - other power series.
      Returns:
      this - ps.
    • multiply

      public UnivPowerSeries<C> multiply(C c)
      Multiply by coefficient.
      Parameters:
      c - coefficient.
      Returns:
      this * c.
    • monic

      public UnivPowerSeries<C> monic()
      Monic.
      Returns:
      1/orderCoeff() * this.
    • negate

      public UnivPowerSeries<C> negate()
      Negate.
      Specified by:
      negate in interface AbelianGroupElem<C extends RingElem<C>>
      Returns:
      - this.
    • abs

      public UnivPowerSeries<C> abs()
      Absolute value.
      Specified by:
      abs in interface AbelianGroupElem<C extends RingElem<C>>
      Returns:
      abs(this).
    • evaluate

      public C evaluate(C e)
      Evaluate at given point.
      Returns:
      ps(c).
    • order

      public int order()
      Order.
      Returns:
      index of first non zero coefficient.
    • truncate

      public int truncate()
      Truncate.
      Returns:
      truncate index of power series.
    • setTruncate

      public int setTruncate(int t)
      Set truncate.
      Parameters:
      t - new truncate index.
      Returns:
      old truncate index of power series.
    • signum

      public int signum()
      Signum.
      Specified by:
      signum in interface AbelianGroupElem<C extends RingElem<C>>
      Returns:
      sign of first non zero coefficient.
    • compareTo

      public int compareTo(UnivPowerSeries<C> ps)
      Compare to. Note: compare only up to truncate.
      Specified by:
      compareTo in interface Comparable<C extends RingElem<C>>
      Specified by:
      compareTo in interface Element<C extends RingElem<C>>
      Parameters:
      ps -
      Returns:
      sign of first non zero coefficient of this-ps.
    • isZERO

      public boolean isZERO()
      Is power series zero. Note: compare only up to truncate.
      Specified by:
      isZERO in interface AbelianGroupElem<C extends RingElem<C>>
      Returns:
      If this is 0 then true is returned, else false.
      See Also:
    • isONE

      public boolean isONE()
      Is power series one. Note: compare only up to truncate.
      Specified by:
      isONE in interface MonoidElem<C extends RingElem<C>>
      Returns:
      If this is 1 then true is returned, else false.
      See Also:
    • equals

      public boolean equals(Object B)
      Comparison with any other object. Note: compare only up to truncate.
      Specified by:
      equals in interface Element<C extends RingElem<C>>
      Overrides:
      equals in class Object
      Parameters:
      B -
      Returns:
      true if this is equal to b, else false.
      See Also:
    • hashCode

      public int hashCode()
      Hash code for this polynomial. Note: only up to truncate.
      Specified by:
      hashCode in interface Element<C extends RingElem<C>>
      Overrides:
      hashCode in class Object
      Returns:
      the hashCode.
      See Also:
    • isUnit

      public boolean isUnit()
      Is unit.
      Specified by:
      isUnit in interface MonoidElem<C extends RingElem<C>>
      Returns:
      true, if this power series is invertible, else false.
    • multiply

      public UnivPowerSeries<C> multiply(UnivPowerSeries<C> ps)
      Multiply by another power series.
      Specified by:
      multiply in interface MonoidElem<C extends RingElem<C>>
      Parameters:
      ps -
      Returns:
      this * ps.
    • inverse

      public UnivPowerSeries<C> inverse()
      Inverse power series.
      Specified by:
      inverse in interface MonoidElem<C extends RingElem<C>>
      Returns:
      ps with this * ps = 1.
    • divide

      public UnivPowerSeries<C> divide(UnivPowerSeries<C> ps)
      Divide by another power series.
      Specified by:
      divide in interface MonoidElem<C extends RingElem<C>>
      Parameters:
      ps -
      Returns:
      this / ps.
    • remainder

      public UnivPowerSeries<C> remainder(UnivPowerSeries<C> ps)
      Power series remainder.
      Specified by:
      remainder in interface MonoidElem<C extends RingElem<C>>
      Parameters:
      ps - nonzero power series with invertible leading coefficient.
      Returns:
      remainder with this = quotient * ps + remainder.
    • quotientRemainder

      public UnivPowerSeries<C>[] quotientRemainder(UnivPowerSeries<C> S)
      Quotient and remainder by division of this by S.
      Specified by:
      quotientRemainder in interface MonoidElem<C extends RingElem<C>>
      Parameters:
      S - a UnivPowerSeries
      Returns:
      [this/S, this - (this/S)*S].
    • differentiate

      public UnivPowerSeries<C> differentiate()
      Differentiate.
      Returns:
      differentiate(this).
    • integrate

      public UnivPowerSeries<C> integrate(C c)
      Integrate with given constant.
      Parameters:
      c - integration constant.
      Returns:
      integrate(this).
    • gcd

      public UnivPowerSeries<C> gcd(UnivPowerSeries<C> ps)
      Power series greatest common divisor.
      Specified by:
      gcd in interface RingElem<C extends RingElem<C>>
      Parameters:
      ps - power series.
      Returns:
      gcd(this,ps).
    • egcd

      public UnivPowerSeries<C>[] egcd(UnivPowerSeries<C> S)
      Power series extended greatest common divisor. Note: not implemented.
      Specified by:
      egcd in interface RingElem<C extends RingElem<C>>
      Parameters:
      S - power series.
      Returns:
      [ gcd(this,S), a, b ] with a*this + b*S = gcd(this,S).