Class PolynomialRootsJenkinsTraubORIG

java.lang.Object
com.polytechnik.utils.PolynomialRootsJenkinsTraubORIG
All Implemented Interfaces:
PolynomialRootsFinder

public class PolynomialRootsJenkinsTraubORIG extends Object implements PolynomialRootsFinder
Fortran polynomial roots finder http://www.netlib.org/toms/493 translated to java with few fixes: 1. scaling is broken in original version, new function pscale, adopted from http://www.netlib.org/toms/419 is used. 2. some conditions are replaced to avoid infinite loops with NaNs.
  • Nested Class Summary

    Nested classes/interfaces inherited from interface com.polytechnik.utils.PolynomialRootsFinder

    PolynomialRootsFinder.PRoots
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private static final int
     
    private double
     
    private double
     
    private double
     
    private double
     
    private double
     
    private static final double
     
    private double
     
    private static final double
     
    private double
     
    private static final double
     
    private double
     
    private static final double
     
    private static final double
     
    private static final double
     
    private double
     
    private static final double
     
    private double
     
    private double
     
    private double
     
    private static final double
     
    private static final double
     
    private final double[]
     
    private static final double
     
    private static final double
     
    private double
     
    private double
     
    private final int
     
    private static final double
     
    private double
     
    private double
     
    private final double[]
     
    private final double[]
     
    private final double[]
     
    private final double[]
     
    (package private) double
    DIVIDES P BY THE QUADRATIC 1,U,V PLACING THE QUOTIENT IN Q AND THE REMAINDER IN quadsd_A,quadsd_B
    (package private) double
    DIVIDES P BY THE QUADRATIC 1,U,V PLACING THE QUOTIENT IN Q AND THE REMAINDER IN quadsd_A,quadsd_B
    private int
     
    private double
     
    private double
     
    private static final double
     
    private static final double
     
    private static final double
     
    private double
     
    private final double[]
     
    private double
     
    private double
     
    private final double[]
     
    private double
     
    private double
     
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    (package private) int
    _findRoots(int degree, double[] op, double[] zeror, double[] zeroi)
    FINDS THE ZEROS OF A REAL POLYNOMIAL OP - DOUBLE PRECISION VECTOR OF COEFFICIENTS IN ORDER OF INCREASING POWERS.
    private int
    calcsc(int N)
    THIS ROUTINE CALCULATES SCALAR QUANTITIES USED TO COMPUTE THE NEXT K POLYNOMIAL AND NEW ESTIMATES OF THE QUADRATIC COEFFICIENTS.
    private void
     
    findRoots(double[] polynomial_coefs)
     
    private int
    fxshfr(int N, int NN, int l2)
    COMPUTES UP TO L2 FIXED SHIFT K-POLYNOMIALS, TESTING FOR CONVERGENCE IN THE LINEAR OR QUADRATIC CASE.
    static void
    main(String[] args)
    Unit Test.
    private void
    newest(int N, int NN, int type)
    COMPUTE NEW ESTIMATES OF THE QUADRATIC COEFFICIENTS USING THE SCALARS COMPUTED IN CALCSC.
    private void
    nextk(int N, int type)
    COMPUTES THE NEXT K POLYNOMIALS USING SCALARS COMPUTED IN CALCSC.
    private static double
    pscale(int NN, double[] P)
    Taken originally from http://www.netlib.org/toms/419 and adopted to fix broken scaling.
    private void
    quad(double a, double b1, double c)
    CALCULATE THE ZEROS OF THE QUADRATIC A*Z**2+B1*Z+C.
    private int
    quadit(int N, int NN, double uu, double vv)
    VARIABLE-SHIFT K-POLYNOMIAL ITERATION FOR A QUADRATIC FACTOR CONVERGES ONLY IF THE ZEROS ARE EQUIMODULAR OR NEARLY SO.
    private void
    quadsd(int NN, double u, double v, double[] p, double[] q)
     
    private int
    realit(int N, int NN, double sss)
    VARIABLE-SHIFT H POLYNOMIAL ITERATION FOR A REAL ZERO.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • DBL_EPSILON

      private static final double DBL_EPSILON
    • DBL_MIN

      private static final double DBL_MIN
      See Also:
    • DBL_MAX

      private static final double DBL_MAX
      See Also:
    • COSR

      private static final double COSR
    • SINR

      private static final double SINR
    • SQRT2D2

      private static final double SQRT2D2
    • BASE

      private static final double BASE
      See Also:
    • LOG_BASE

      private static final double LOG_BASE
    • ETA

      private static final double ETA
    • INFIN

      private static final double INFIN
      See Also:
    • SMALNO

      private static final double SMALNO
      See Also:
    • ARE

      private static final double ARE
    • MRE

      private static final double MRE
    • HI

      private static final double HI
    • LO

      private static final double LO
    • _TRACE

      private static final int _TRACE
      See Also:
    • MAXDEGREE

      private final int MAXDEGREE
    • P

      private final double[] P
    • QP

      private final double[] QP
    • K

      private final double[] K
    • QK

      private final double[] QK
    • SVK

      private final double[] SVK
    • PT

      private final double[] PT
    • TEMP

      private final double[] TEMP
    • SR

      private double SR
    • SI

      private double SI
    • U

      private double U
    • V

      private double V
    • A

      private double A
    • B

      private double B
    • C

      private double C
    • D

      private double D
    • A1

      private double A1
    • A2

      private double A2
    • A3

      private double A3
    • A7

      private double A7
    • E

      private double E
    • F

      private double F
    • G

      private double G
    • H

      private double H
    • SZR

      private double SZR
    • SZI

      private double SZI
    • LZR

      private double LZR
    • LZI

      private double LZI
    • realit_iflag

      private int realit_iflag
    • realit_sss

      private double realit_sss
    • newest_uu

      private double newest_uu
    • newest_vv

      private double newest_vv
    • quadsd_A

      double quadsd_A
      DIVIDES P BY THE QUADRATIC 1,U,V PLACING THE QUOTIENT IN Q AND THE REMAINDER IN quadsd_A,quadsd_B
    • quadsd_B

      double quadsd_B
      DIVIDES P BY THE QUADRATIC 1,U,V PLACING THE QUOTIENT IN Q AND THE REMAINDER IN quadsd_A,quadsd_B
  • Constructor Details

    • PolynomialRootsJenkinsTraubORIG

      public PolynomialRootsJenkinsTraubORIG()
  • Method Details

    • findRoots

      public PolynomialRootsFinder.PRoots findRoots(double[] polynomial_coefs)
      Specified by:
      findRoots in interface PolynomialRootsFinder
    • _findRoots

      int _findRoots(int degree, double[] op, double[] zeror, double[] zeroi)
      FINDS THE ZEROS OF A REAL POLYNOMIAL OP - DOUBLE PRECISION VECTOR OF COEFFICIENTS IN ORDER OF INCREASING POWERS. DEGREE - INTEGER DEGREE OF POLYNOMIAL. ZEROR, ZEROI - OUTPUT DOUBLE PRECISION VECTORS OF REAL AND IMAGINARY PARTS OF THE ZEROS.
    • fxshfr

      private int fxshfr(int N, int NN, int l2)
      COMPUTES UP TO L2 FIXED SHIFT K-POLYNOMIALS, TESTING FOR CONVERGENCE IN THE LINEAR OR QUADRATIC CASE. INITIATES ONE OF THE VARIABLE SHIFT ITERATIONS AND RETURNS WITH THE NUMBER OF ZEROS FOUND. L2 - LIMIT OF FIXED SHIFT STEPS
      Returns:
      nz - number of zeros found
    • quadit

      private int quadit(int N, int NN, double uu, double vv)
      VARIABLE-SHIFT K-POLYNOMIAL ITERATION FOR A QUADRATIC FACTOR CONVERGES ONLY IF THE ZEROS ARE EQUIMODULAR OR NEARLY SO. UU,VV - COEFFICIENTS OF STARTING QUADRATIC NZ - NUMBER OF ZERO FOUND
    • realit

      private int realit(int N, int NN, double sss)
      VARIABLE-SHIFT H POLYNOMIAL ITERATION FOR A REAL ZERO. SSS - STARTING ITERATE realit_iflag - FLAG TO INDICATE A PAIR OF ZEROS NEAR REAL AXIS.
      Returns:
      NUMBER OF ZERO FOUND
    • calcsc

      private int calcsc(int N)
      THIS ROUTINE CALCULATES SCALAR QUANTITIES USED TO COMPUTE THE NEXT K POLYNOMIAL AND NEW ESTIMATES OF THE QUADRATIC COEFFICIENTS.
      Returns:
      TYPE - INTEGER VARIABLE SET HERE INDICATING HOW THE CALCULATIONS ARE NORMALIZED TO AVOID OVERFLOW.
    • nextk

      private void nextk(int N, int type)
      COMPUTES THE NEXT K POLYNOMIALS USING SCALARS COMPUTED IN CALCSC.
    • newest

      private void newest(int N, int NN, int type)
      COMPUTE NEW ESTIMATES OF THE QUADRATIC COEFFICIENTS USING THE SCALARS COMPUTED IN CALCSC.
    • quadsd

      private void quadsd(int NN, double u, double v, double[] p, double[] q)
    • quad

      private void quad(double a, double b1, double c)
      CALCULATE THE ZEROS OF THE QUADRATIC A*Z**2+B1*Z+C. THE QUADRATIC FORMULA, MODIFIED TO AVOID OVERFLOW, IS USED TO FIND THE LARGER ZERO IF THE ZEROS ARE REAL AND BOTH ZEROS ARE COMPLEX. THE SMALLER REAL ZERO IS FOUND DIRECTLY FROM THE PRODUCT OF THE ZEROS C/A.
    • pscale

      private static double pscale(int NN, double[] P)
      Taken originally from http://www.netlib.org/toms/419 and adopted to fix broken scaling. RETURNS A SCALE FACTOR TO MULTIPLY THE COEFFICIENTS OF THE POLYNOMIAL. THE SCALING IS DONE TO AVOID OVERFLOW AND TO AVOID UNDETECTED UNDERFLOW INTERFERING WITH THE CONVERGENCE CRITERION. THE FACTOR IS A POWER OF THE BASE. PT - MODULUS OF COEFFICIENTS OF P ETA,INFIN,SMALNO,BASE - CONSTANTS DESCRIBING THE FLOATING POINT ARITHMETIC.
    • dumpc

      private void dumpc(String s)
    • main

      public static void main(String[] args)
      Unit Test.