Files
Include/ENkPolynomial.h
Dario Sassi a902b4ceb7 Include :
- aggiornamento e aggiunta prototipi.
2014-11-18 16:19:42 +00:00

109 lines
4.0 KiB
C++

//----------------------------------------------------------------------------
// 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) ;