/////////////////////////////////////////////////////////// // cmplx.h, 2D complex basic math by stephen c. ferguson /////////////////////////////////////////////////////////// #include "math.h" #define zerotol 1e-24 class cmplx { public: double x,y; cmplx( double xx , double yy); //create cmplx(); //create inline cmplx& operator+(cmplx& v) {return cmplx(x+v.x, y+v.y);} // add inline cmplx& operator-(cmplx& v) {return cmplx(x-v.x, y-v.y);} // subtract inline cmplx& operator*(cmplx& v) {return cmplx(v.x*x-v.y*y, v.x*y+v.y*x);} // multiply inline cmplx& operator/(cmplx& v) { return cmplx((v.x*x+v.y*y)/(v.x*v.x+v.y*v.y), (v.x*y-v.y*x)/(v.x*v.x+v.y*v.y)); // divide } inline cmplx& operator-() { return cmplx( -x, -y); } inline double sqrs() { return x*x+y*y; } inline double magnitude() { return sqrt (x*x+y*y) ; } inline friend cmplx &operator*(cmplx &num,double real) {return cmplx(num.x*real,num.y*real);} inline friend cmplx &operator*(double real,cmplx &num) {return cmplx(num.x*real,num.y*real);} inline friend cmplx &operator+(cmplx &num,double real) {return cmplx(num.x+real,num.y);} inline friend cmplx &operator+(double real, cmplx &num) {return cmplx(num.x+real,num.y);} inline friend cmplx &operator/(cmplx &num, double real) {return cmplx(num.x/real,num.y/real);} inline friend cmplx &operator-(cmplx &num,double real) {return cmplx(num.x-real,num.y);} inline friend cmplx &operator-(double real,cmplx &num) {return cmplx(real-num.x,-num.y);} inline cmplx &operator^(double expon) { return ((*this).clog( ) * expon).cexp(); } inline cmplx &operator^(cmplx &expon) { return ((*this).clog( ) * expon).cexp(); } inline friend cmplx &operator^(double base, cmplx &expon); inline cmplx &cexp() { return cmplx(exp(x)*cos(y),exp(x)*sin(y)); } inline cmplx &clog() { return cmplx(log(fabs((*this).magnitude())),atan2(y,x)); } cmplx csin(); cmplx ccos(); /* inline cmplx &csin() { return cmplx(.5*(exp(y)+1./exp(y))*sin(x),cos(x)*.5*(exp(y)-1./exp(y))); } inline cmplx &ccos() { return cmplx(.5*(exp(y)+1./exp(y))*cos(x),-sin(x)*.5*(exp(y)-1./exp(y))); } */ }; cmplx tangent (cmplx x); cmplx sinh (cmplx& x); cmplx asin (cmplx& x); cmplx acos (cmplx& x); cmplx arctan (cmplx& x);