a902b4ceb7
- aggiornamento e aggiunta prototipi.
109 lines
4.0 KiB
C++
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) ;
|