/* Cmplx.h header file for complex number class */ class Cmplx { public: double real; double imag; // private members by default public: Cmplx(double InitR, double InitI); // a constructor for the class Cmplx(){real=0.0;imag=0.0;} //default constructor, overloaded Cmplx(double r){real=r;imag=0.0;}// real number constructor Cmplx operator+(Cmplx); // four overloaded operators Cmplx operator*(Cmplx); // for +,-,*,/ Cmplx operator-(Cmplx); Cmplx operator/(Cmplx); double Re(){return real;} // an inlined method double Im(){return imag;} double Modulus(); double Phase(); }; double Cmplx::Modulus() { return(sqrt(real*real+imag*imag)); } double Cmplx::Phase() { return(atan2(imag,real)); } Cmplx::Cmplx(double InitR, double InitI) { real=InitR; imag=InitI; } Cmplx Cmplx::operator+(Cmplx z_add) { Cmplx temp(0,0); temp.real=real+z_add.real; temp.imag=imag+z_add.imag; return temp; } Cmplx Cmplx::operator-(Cmplx z_add) { Cmplx temp(0,0); temp.real=real-z_add.real; temp.imag=imag-z_add.imag; return temp; } Cmplx Cmplx::operator*(Cmplx z_add) { Cmplx temp(0,0); temp.real=real*z_add.real-imag*z_add.imag; temp.imag=imag*z_add.real+real*z_add.imag; return temp; } Cmplx Cmplx::operator/(Cmplx z_add) { Cmplx temp(0,0); double factor=z_add.Modulus(); double denom=factor*factor; temp.real=(real*z_add.real+imag*z_add.imag)/denom; temp.imag=(imag*z_add.real-real*z_add.imag)/denom; return temp; } Cmplx Csin(Cmplx a) { Cmplx z(0,0); z.real=sin(a.real)*cosh(a.imag); z.imag=cos(a.real)*sinh(a.imag); return z; } Cmplx Ccos(Cmplx a) { Cmplx z(0,0); z.real=cos(a.real)*cosh(a.imag); z.imag=-sin(a.real)*sinh(a.imag); return z; } Cmplx Cexp(Cmplx a) { Cmplx z(0,0); double factor =exp(a.real); z.real=factor*cos(a.imag); z.imag=factor*sin(a.imag); return z; } Cmplx Clog(Cmplx a) { Cmplx z(0,0); z.real=0.5*log(a.Modulus()); z.imag=atan2(a.imag, a.real); return z; } // Here we overload the insertion operator to output Cmplx ostream& operator<<(ostream& str, Cmplx& z) { str<