001    /*
002     * $Id: ComplexRoots.java 3364 2010-10-24 12:56:06Z kredel $
003     */
004    
005    package edu.jas.root;
006    
007    
008    import java.util.List;
009    
010    import edu.jas.arith.Rational;
011    import edu.jas.arith.BigRational;
012    import edu.jas.poly.Complex;
013    import edu.jas.poly.GenPolynomial;
014    import edu.jas.structure.RingElem;
015    
016    
017    /**
018     * Complex roots interface.
019     * @param <C> coefficient type.
020     * @author Heinz Kredel
021     */
022    public interface ComplexRoots<C extends RingElem<C> & Rational> {
023    
024    
025        /**
026         * Root bound. With f(-M + i M) * f(-M - i M) * f(M - i M) * f(M + i M) != 0.
027         * @param f univariate polynomial.
028         * @return M such that root(f) is contained in the rectangle spanned by M.
029         */
030        public Complex<C> rootBound(GenPolynomial<Complex<C>> f);
031    
032    
033        /**
034         * Complex root count of complex polynomial on rectangle.
035         * @param rect rectangle.
036         * @param a univariate complex polynomial.
037         * @return root count of a in rectangle.
038         */
039        public long complexRootCount(Rectangle<C> rect, GenPolynomial<Complex<C>> a)
040                throws InvalidBoundaryException;
041    
042    
043        /**
044         * List of complex roots of complex polynomial a on rectangle.
045         * @param rect rectangle.
046         * @param a univariate squarefree complex polynomial.
047         * @return list of complex roots.
048         */
049        public List<Rectangle<C>> complexRoots(Rectangle<C> rect, GenPolynomial<Complex<C>> a)
050                throws InvalidBoundaryException;
051    
052    
053        /**
054         * List of complex roots of complex polynomial.
055         * @param a univariate complex polynomial.
056         * @return list of complex roots.
057         */
058        public List<Rectangle<C>> complexRoots(GenPolynomial<Complex<C>> a);
059    
060    
061        /**
062         * Complex root refinement of complex polynomial a on rectangle.
063         * @param rect rectangle containing exactly one complex root.
064         * @param a univariate squarefree complex polynomial.
065         * @param len rational length for refinement.
066         * @return refined complex root.
067         */
068        public Rectangle<C> complexRootRefinement(Rectangle<C> rect, GenPolynomial<Complex<C>> a, BigRational len)
069                throws InvalidBoundaryException;
070    
071    }