001 /*
002 * $Id: RealRoots.java 3579 2011-03-26 10:32:37Z 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.GenPolynomial;
013 import edu.jas.structure.RingElem;
014
015
016 /**
017 * Real roots interface.
018 * @param <C> coefficient type.
019 * @author Heinz Kredel
020 */
021 public interface RealRoots<C extends RingElem<C> & Rational> {
022
023
024 /**
025 * Real root bound. With f(M) * f(-M) != 0.
026 * @param f univariate polynomial.
027 * @return M such that -M < root(f) > M.
028 */
029 public C realRootBound(GenPolynomial<C> f);
030
031
032 /**
033 * Isolating intervals for the real roots.
034 * @param f univariate polynomial.
035 * @return a list of isolating intervalls for the real roots of f.
036 */
037 public List<Interval<C>> realRoots(GenPolynomial<C> f);
038
039
040 /**
041 * Isolating intervals for the real roots.
042 * @param f univariate polynomial.
043 * @param eps requested intervals length.
044 * @return a list of isolating intervals v such that |v| < eps.
045 */
046 public List<Interval<C>> realRoots(GenPolynomial<C> f, C eps);
047
048
049 /**
050 * Isolating intervals for the real roots.
051 * @param f univariate polynomial.
052 * @param eps requested intervals length.
053 * @return a list of isolating intervals v such that |v| < eps.
054 */
055 public List<Interval<C>> realRoots(GenPolynomial<C> f, BigRational eps);
056
057
058 /**
059 * Sign changes on interval bounds.
060 * @param iv root isolating interval with f(left) * f(right) != 0.
061 * @param f univariate polynomial.
062 * @return true if f(left) * f(right) < 0, else false
063 */
064 public boolean signChange(Interval<C> iv, GenPolynomial<C> f);
065
066
067 /**
068 * Number of real roots in interval.
069 * @param iv interval with f(left) * f(right) != 0.
070 * @param f univariate polynomial.
071 * @return number of real roots of f in I.
072 */
073 public long realRootCount(Interval<C> iv, GenPolynomial<C> f);
074
075
076 /**
077 * Refine interval.
078 * @param iv root isolating interval with f(left) * f(right) < 0.
079 * @param f univariate polynomial, non-zero.
080 * @param eps requested interval length.
081 * @return a new interval v such that |v| < eps.
082 */
083 public Interval<C> refineInterval(Interval<C> iv, GenPolynomial<C> f, C eps);
084
085
086 /**
087 * Refine intervals.
088 * @param V list of isolating intervals with f(left) * f(right) < 0.
089 * @param f univariate polynomial, non-zero.
090 * @param eps requested intervals length.
091 * @return a list of new intervals v such that |v| < eps.
092 */
093 public List<Interval<C>> refineIntervals(List<Interval<C>> V, GenPolynomial<C> f, C eps);
094
095
096 /**
097 * Real algebraic number sign.
098 * @param iv root isolating interval for f, with f(left) * f(right) < 0.
099 * @param f univariate polynomial, non-zero.
100 * @param g univariate polynomial, gcd(f,g) == 1.
101 * @return sign(g(v)), with v a new interval contained in iv such that g(v) !=
102 * 0.
103 */
104 public int realSign(Interval<C> iv, GenPolynomial<C> f, GenPolynomial<C> g);
105
106
107 /**
108 * Real algebraic number magnitude.
109 * @param iv root isolating interval for f, with f(left) * f(right) < 0.
110 * @param f univariate polynomial, non-zero.
111 * @param g univariate polynomial, gcd(f,g) == 1.
112 * @param eps length limit for interval length.
113 * @return g(iv).
114 */
115 public C realMagnitude(Interval<C> iv, GenPolynomial<C> f, GenPolynomial<C> g, C eps);
116
117 }