edu.jas.root
Class ComplexRootsSturm<C extends RingElem<C> & Rational>

java.lang.Object
  extended by edu.jas.root.ComplexRootsAbstract<C>
      extended by edu.jas.root.ComplexRootsSturm<C>
Type Parameters:
C - coefficient type.
All Implemented Interfaces:
ComplexRoots<C>

public class ComplexRootsSturm<C extends RingElem<C> & Rational>
extends ComplexRootsAbstract<C>

Complex roots implemented by Sturm sequences. Algorithms use exact method derived from Wilf's numeric Routh-Hurwitz method.

Author:
Heinz Kredel

Field Summary
 
Fields inherited from class edu.jas.root.ComplexRootsAbstract
engine
 
Constructor Summary
ComplexRootsSturm(RingFactory<Complex<C>> cf)
          Constructor.
 
Method Summary
 long complexRootCount(Rectangle<C> rect, GenPolynomial<Complex<C>> a)
          Complex root count of complex polynomial on rectangle.
 java.util.List<Rectangle<C>> complexRoots(Rectangle<C> rect, GenPolynomial<Complex<C>> a)
          List of complex roots of complex polynomial a on rectangle.
 long indexOfCauchy(C a, C b, GenPolynomial<C> f, GenPolynomial<C> g)
          Cauchy index of rational function f/g on interval.
 long[] indexOfRouth(C a, C b, GenPolynomial<C> f, GenPolynomial<C> g)
          Routh index of complex function f + i g on interval.
 Rectangle<C> invariantRectangle(Rectangle<C> rect, GenPolynomial<Complex<C>> f, GenPolynomial<Complex<C>> g)
          Invariant rectangle for algebraic number.
 java.util.List<GenPolynomial<C>> sturmSequence(GenPolynomial<C> f, GenPolynomial<C> g)
          Sturm sequence.
 long windingNumber(Rectangle<C> rect, GenPolynomial<Complex<C>> A)
          Winding number of complex function A on rectangle.
 
Methods inherited from class edu.jas.root.ComplexRootsAbstract
approximateRoot, approximateRoots, complexMagnitude, complexRectangleMagnitude, complexRootRefinement, complexRoots, complexRoots, copyOfComplex, invariantMagnitudeRectangle, magnitudeBound, rootBound, toDecimal
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ComplexRootsSturm

public ComplexRootsSturm(RingFactory<Complex<C>> cf)
Constructor.

Parameters:
cf - coefficient factory.
Method Detail

indexOfCauchy

public long indexOfCauchy(C a,
                          C b,
                          GenPolynomial<C> f,
                          GenPolynomial<C> g)
Cauchy index of rational function f/g on interval.

Parameters:
a - interval bound for I = [a,b].
b - interval bound for I = [a,b].
f - univariate polynomial.
g - univariate polynomial.
Returns:
winding number of f/g in I.

indexOfRouth

public long[] indexOfRouth(C a,
                           C b,
                           GenPolynomial<C> f,
                           GenPolynomial<C> g)
Routh index of complex function f + i g on interval.

Parameters:
a - interval bound for I = [a,b].
b - interval bound for I = [a,b].
f - univariate polynomial.
g - univariate polynomial != 0.
Returns:
index number of f + i g.

sturmSequence

public java.util.List<GenPolynomial<C>> sturmSequence(GenPolynomial<C> f,
                                                      GenPolynomial<C> g)
Sturm sequence.

Parameters:
f - univariate polynomial.
g - univariate polynomial.
Returns:
a Sturm sequence for f and g.

complexRootCount

public long complexRootCount(Rectangle<C> rect,
                             GenPolynomial<Complex<C>> a)
                      throws InvalidBoundaryException
Complex root count of complex polynomial on rectangle.

Specified by:
complexRootCount in interface ComplexRoots<C extends RingElem<C> & Rational>
Specified by:
complexRootCount in class ComplexRootsAbstract<C extends RingElem<C> & Rational>
Parameters:
rect - rectangle.
a - univariate complex polynomial.
Returns:
root count of a in rectangle.
Throws:
InvalidBoundaryException

windingNumber

public long windingNumber(Rectangle<C> rect,
                          GenPolynomial<Complex<C>> A)
                   throws InvalidBoundaryException
Winding number of complex function A on rectangle.

Parameters:
rect - rectangle.
A - univariate complex polynomial.
Returns:
winding number of A arround rect.
Throws:
InvalidBoundaryException

complexRoots

public java.util.List<Rectangle<C>> complexRoots(Rectangle<C> rect,
                                                 GenPolynomial<Complex<C>> a)
                                                                        throws InvalidBoundaryException
List of complex roots of complex polynomial a on rectangle.

Specified by:
complexRoots in interface ComplexRoots<C extends RingElem<C> & Rational>
Specified by:
complexRoots in class ComplexRootsAbstract<C extends RingElem<C> & Rational>
Parameters:
rect - rectangle.
a - univariate squarefree complex polynomial.
Returns:
list of complex roots.
Throws:
InvalidBoundaryException

invariantRectangle

public Rectangle<C> invariantRectangle(Rectangle<C> rect,
                                       GenPolynomial<Complex<C>> f,
                                       GenPolynomial<Complex<C>> g)
                                                              throws InvalidBoundaryException
Invariant rectangle for algebraic number.

Specified by:
invariantRectangle in class ComplexRootsAbstract<C extends RingElem<C> & Rational>
Parameters:
rect - root isolating rectangle for f which contains exactly one root.
f - univariate polynomial, non-zero.
g - univariate polynomial, gcd(f,g) == 1.
Returns:
v a new rectangle contained in rect such that g(w) != 0 for w in v.
Throws:
InvalidBoundaryException