Files
EgtNumKernel/JenkinsTraub.h
T
DarioS eeab41af4e EgtNumKernel 2.3g1 :
- versione x64 compilata con Clang-cl/LLVM
- modifiche varie per eliminare warning più gravi di questo compilatore.
2021-07-20 18:13:21 +02:00

91 lines
3.5 KiB
C++

//----------------------------------------------------------------------------
// 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] ;
} ;