//---------------------------------------------------------------------------- // EgalTech 2013-2014 //---------------------------------------------------------------------------- // File : JenkinsTraub.h Data : 08.01.14 Versione : 1.5a1 // Contenuto : Dichiarazione classi per il calcolo degli zeri di polinomi. // // // // Modifiche : 08.01.14 DS Creazione modulo. // // //---------------------------------------------------------------------------- #pragma once //---------------------------------------------------------------------------- const int POLY_MAXDEG = 32 ; //--------------------------- Class Rpoly ------------------------------------ class Rpoly { public : // methods int Calculate( const double* op, int degree, double* zeror, double* zeroi) ; private : // methods void quad( double a, double b1, double c, double* sr, double* si, double* lr, double* li) ; void fxshfr( int l2, int* nz) ; void quadit( double* uu, double* vv, int* nz) ; void realit( double sss, int* nz, bool* pIflag) ; void calcsc( int* type) ; void nextk( int* type) ; void newest( int type, double* uu, double* vv) ; void quadsd( int n, double* u, double* v, double* p, double* q, double* a, double* b) ; public : // members int itercnt ; private : // members int n ; double sr, si, u, v, a, b, c, d, a1, a3, a7 ; double e, f, g, h, szr, szi, lzr, lzi ; double eta, are, mre ; double p[POLY_MAXDEG+1] ; double qp[POLY_MAXDEG+1] ; double k[POLY_MAXDEG+1] ; double qk[POLY_MAXDEG+1] ; } ; //--------------------------- Class Cpoly ------------------------------------ class Cpoly { public : // methods int Calculate( const double* opr, const double* opi, int degree, double* zeror, double* zeroi) ; private : // methods void noshft( const int l1) ; void fxshft( const int l2, double* zr, double* zi, bool* pbConv) ; void vrshft( const int l3, double* zr, double* zi, bool* pbConv) ; void calct( bool* pbBol) ; void nexth( bool bBol) ; void polyev( const int nn, const double sr, const double si, const double pr[], const double pi[], double qr[], double qi[], double *pvr, double *pvi) ; double errev( const int nn, const double qr[], const double qi[], const double ms, const double mp, const double are, const double mre) ; void cauchy( const int nn, double pt[], double q[], double *fn_val) ; double scale( const int nn, const double pt[], const double eta, const double infin, const double smalno, const double base) ; void cdivid( const double ar, const double ai, const double br, const double bi, double *cr, double *ci) ; double cmod( const double r, const double i) ; void mcon( double *eta, double *infiny, double *smalno, double *base) ; public : // members int itercnt ; private : // members int nn ; double sr, si, tr, ti, pvr, pvi, are, mre, eta, infin ; double pr[POLY_MAXDEG+1] ; double pi[POLY_MAXDEG+1] ; double hr[POLY_MAXDEG+1] ; double hi[POLY_MAXDEG+1] ; double qpr[POLY_MAXDEG+1] ; double qpi[POLY_MAXDEG+1] ; double qhr[POLY_MAXDEG+1] ; double qhi[POLY_MAXDEG+1] ; double shr[POLY_MAXDEG+1] ; double shi[POLY_MAXDEG+1] ; } ;