⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmpxpoly.cpp

📁 Digital filter designer s handbook C++ code source
💻 CPP
字号:
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//
//  File = cmpxpoly.cpp
//
//  class that implements a polynomial with
//  complex-valued coefficients
//

#include <math.h>
#include "cmpxpoly.h"

//======================================================
//  default constructor

CmplxPolynomial::CmplxPolynomial( )
{
 Degree = 0;
 Coefficient = (double_complex*) new double[2];
 Coefficient[0] = double_complex( 0.0, 0.0);
 return;
};



//===================================================================
//  copy constructor

CmplxPolynomial::CmplxPolynomial( const CmplxPolynomial& original )
{
 Degree = original.Degree;
 Coefficient = (double_complex*) new double[2*(Degree+1)];
 
 for( int i=0; i<=Degree; i++)
   {
    Coefficient[i] = original.Coefficient[i];
   }
 return;
};



//===================================================================
//  constructor for initializing a binomial

CmplxPolynomial::CmplxPolynomial( const double_complex coeff_1,
                                  const double_complex coeff_0 )
{
 Degree = 1;
 Coefficient = (double_complex*) new double[4];
 
 Coefficient[0] = coeff_0;
 Coefficient[1] = coeff_1;
 
 return;
}


//=================================================================
//  assignment operator

CmplxPolynomial& CmplxPolynomial::operator= (const CmplxPolynomial& right)
{
 if (Coefficient != right.Coefficient)
   {
    //-------------------------------------------------------------
    // Get rid of old coefficient array to make way for a new one
    // of the correct length for the new polynomial being assigned 
    
    delete [] Coefficient;
    
    Degree = right.Degree;
    Coefficient = (double_complex*) new double[2*(Degree+1)];
    
    for( int i=0; i<=Degree; i++)
      {
       Coefficient[i] = right.Coefficient[i];
      }
   }
 return *this;
}


//===================================================================
// multiply assign operator        

CmplxPolynomial& CmplxPolynomial::operator*= (const CmplxPolynomial &right)
{
 //-----------------------------------------------------
 // save pointer to original coefficient array so that 
 // this array can be deleted once no longer needed
 
 double_complex *orig_coeff = Coefficient;
 int orig_degree = Degree;
 
 //-------------------------------------------------------
 //  create new longer array to hold the new coefficients 
 
 Degree += right.Degree;
 Coefficient = (double_complex*) new double[2*(Degree+1)];
 
 for( int i=0; i<=Degree; i++)
    Coefficient[i] = double_complex(0.0, 0.0);
    
 //---------------------------------
 //  perform multiplication
 
 for( int rgt_indx=0; rgt_indx<= right.Degree; rgt_indx++)
   {
    for( int orig_indx=0; orig_indx <= orig_degree; orig_indx++)
      {
       Coefficient[orig_indx+rgt_indx] +=
              (orig_coeff[orig_indx] * right.Coefficient[rgt_indx]);
      }
   }

 return *this;
}    


//=========================================================
//  dump polynomial to an output stream

void CmplxPolynomial::DumpToStream( ofstream* output_stream)
{
 (*output_stream) << "Degree = " << Degree << endl;
 
 for(int i=Degree; i>=0; i--)
   {
    (*output_stream) << "Coeff[" << i << "] = " 
                     << Coefficient[i] << endl;
   }
 return;
}  


//====================================================
//

int CmplxPolynomial::GetDegree(void)
{
return(Degree);
}

//==================================================
//

double_complex CmplxPolynomial::GetCoefficient(int k)
{
return Coefficient[k];
}

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -