//---------------------------------------------------------------------------- // EgalTech 2013-2014 //---------------------------------------------------------------------------- // File : ENkPolynomial.h Data : 12.01.14 Versione : 1.5a2 // Contenuto : Funzioni per polinomi. // // // // Modifiche : 12.01.14 DS Creazione modulo. // // //---------------------------------------------------------------------------- #pragma once //----------------------- Macro per import/export ---------------------------- #undef ENK_EXPORT #if defined( I_AM_ENK) // da definirsi solo nella DLL #define ENK_EXPORT __declspec( dllexport) #else #define ENK_EXPORT __declspec( dllimport) #endif //---------------------------Include------------------------------------------ #include "/EgtDev/Include/ENkCplxCollection.h" //---------------------------------------------------------------------------- class Polynomial { public : ENK_EXPORT Polynomial( void) : m_nDegree( -1) {} ENK_EXPORT Polynomial( const Polynomial& polS) { SetDegree( polS.m_nDegree) ; for ( int i = 0 ; i <= m_nDegree ; ++ i) m_Coeff[i] = polS.m_Coeff[i] ; } ENK_EXPORT bool SetDegree( int nDegree) ; ENK_EXPORT bool SetCoeff( int nPower, double dC) ; ENK_EXPORT bool Set( int nDegree, const DBLVECTOR& vC) ; ENK_EXPORT bool SetToConstant( double dC) ; ENK_EXPORT Polynomial& operator =( const Polynomial& polS) { if ( &polS != this) { SetDegree( polS.m_nDegree) ; for ( int i = 0 ; i <= m_nDegree ; ++ i) m_Coeff[i] = polS.m_Coeff[i] ;} return *this ; } public : ENK_EXPORT int GetDegree( void) const { return m_nDegree ; } ENK_EXPORT double GetCoeff( int nPower) const { if ( nPower < 0 || nPower > m_nDegree) return 0 ; return m_Coeff[nPower] ; } ENK_EXPORT Polynomial& operator +=( const Polynomial& polP) ; ENK_EXPORT Polynomial& operator -=( const Polynomial& polP) ; ENK_EXPORT Polynomial& operator *=( const Polynomial& polP) ; ENK_EXPORT void Derive( void) ; ENK_EXPORT void Derive( const Polynomial& polP) ; ENK_EXPORT void AdjustDegree( void) ; ENK_EXPORT double Evaluate( double dVal) ; ENK_EXPORT int FindRoots( DBLVECTOR& vdRoot) ; private : bool EnsureDegree( int nDegree) ; private : int m_nDegree ; DBLVECTOR m_Coeff ; } ; //---------------------------------------------------------------------------- // Somma //---------------------------------------------------------------------------- inline Polynomial operator+( const Polynomial& polP1, const Polynomial& polP2) { Polynomial polSumm = polP1 ; polSumm += polP2 ; return polSumm ; } //---------------------------------------------------------------------------- // Differenza //---------------------------------------------------------------------------- inline Polynomial operator-( const Polynomial& polP1, const Polynomial& polP2) { Polynomial polDiff = polP1 ; polDiff -= polP2 ; return polDiff ; } //---------------------------------------------------------------------------- // Moltiplicazione //---------------------------------------------------------------------------- inline Polynomial operator*( const Polynomial& polP1, const Polynomial& polP2) { Polynomial polMul = polP1 ; polMul *= polP2 ; return polMul ; } //---------------------------------------------------------------------------- // Filtro sulle radici //---------------------------------------------------------------------------- ENK_EXPORT int FilterMultipleAndOutOfRangeRoots( DBLVECTOR& vRoots, double dMin, double dMax, double dEps) ;