/*************************************************************************** complex-temp.hpp - description ------------------- begin : Fri Jan 17 19:41:58 CST 2003 copyright : (C) 2003 by Daniel Eric Smith email : ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include template class complex { X real,imag; public: complex() {real=0; imag=0;} complex(X x) {real=x; imag=0;} complex(X r, X i) {real=r; imag=i;} //parameterized construtor void set(X r, X i); //initializes z void show() {cout < operator~(); //complex conjugate operator ~(a+bi)=>a-bi friend complex operator+(complex z, complex w); //complex addition z+w // friend complex operator+(complex z, X r); // friend complex operator+(X r, complex z); // friend complex operator-(complex z, complex w); //complex subtraction z-w // friend complex operator-(complex z, X r); // friend complex operator-(X r, complex z); // friend complex operator*(complex z, complex w); //complex multiplication // friend complex operator*(complex z, X r); // friend complex operator*(X r, complex z); // friend complex operator/(complex z, complex w); //complex division // friend complex operator/(complex z, X r); // friend complex operator/(X r, complex z); // complex operator=(complex w); //complex equality /* OUTPUT */ // friend istream& operator>>(istream& s, complex& z); // friend ostream& operator<<(ostream& s, complex z); /* EXPONENTIAL */ // friend complex exp(complex z); /* TRIG */ // friend complex sin(complex z); // friend complex cos(complex z); // friend complex tan(complex z); // friend complex cot(complex z); // friend complex sec(complex z); // friend complex csc(complex z); // friend complex asin(complex z); // friend complex acos(complex z); // friend complex atan(complex z); /* HYPERBOLIC TRIG */ // friend complex sinh(complex z); // friend complex cosh(complex z); // friend complex tanh(complex z); // friend complex coth(complex z); // friend complex sech(complex z); // friend complex csch(complex z); // friend complex asinh(complex z); // friend complex acosh(complex z); // friend complex atanh(complex z); /* LOG */ // friend complex log(complex z); /* EXPONENT */ // friend complex pow(complex z, complex w); // friend complex pow(complex z, X x); // friend complex pow(X x, complex w); }; /***************************** * * * I defines imagaginary unit * * * *****************************/ //const complex I(0,1); template void complex::set(X r, X i) { real=r; imag=i; } template X complex::Re() { return real; } template X complex::Im() { return imag; } template X complex::mod() { return sqrt(pow(real,2)+pow(imag,2)); } template X complex::arg() { return atan2(imag,real); } /************************** * CONJUGATE AND ARITMETIC * **************************/ /**************** * * * ~z CONJUGATE * * * ****************/ template complex complex::operator~() { complex temp; temp=*this; temp.imag=(-1)*imag; return temp; } /**************** * * * z+w ADDITION * * * ****************/ template complex operator+(complex z, complex w) { complex zsum; zsum.real=z.real+w.real; zsum.imag=z.imag+w.imag; return zsum; } /*complex operator+(complex z, X r) { complex zsum,t(r); zsum.real=z.real+t.real; zsum.imag=z.imag+t.imag; return zsum; } complex operator+(X r, complex z) { return z+r; }*/ /****************** * * * z-w SUBTRACTION * * * ******************/ /*template complex operator-(complex z, complex w) { complex zdiff; zdiff.real=z.real-w.real; zdiff.imag=z.imag-w.imag; return zdiff; } template complex operator-(complex z, X r) { complex zdiff,t(r); zdiff.real=z.real-t.real; zdiff.imag=z.imag-t.imag; return zdiff; } template complex operator-(X r, complex z) { complex zdiff,t(r); zdiff.real=t.real-z.real; zdiff.imag=t.imag-z.imag; return zdiff; }*/ /********************* * * * z*w MULTIPLICATION * * * *********************/ /*template complex operator*(complex z, complex w) { complex zprod; zprod.real=z.real*w.real-z.imag*w.imag; zprod.imag=z.real*w.imag+z.imag*w.real; return zprod; } template complex operator*(complex z, X r) { complex zprod; zprod.real=z.real*r; zprod.imag=z.imag*r; return zprod; } template complex operator*(X r, complex z) { return z*r; }*/ /*************** * * * z/w DIVISION * * * ***************/ /*template complex operator/(complex z, complex w) { complex zquot,num,denom,wc; wc=~w; num = z * wc; denom = w * wc; zquot.real=num.real/denom.real; zquot.imag=num.imag/denom.real; return zquot; } template complex operator/(complex z, X r) { complex zquot; zquot.real=z.real/r; zquot.imag=z.imag/r; return zquot; } template complex operator/(X r, complex z) { complex zquot, zc, denom,num; zc=~z; num=r*zc; denom=z*zc; zquot.real=num.real/denom.real; zquot.imag=num.imag/denom.real; return zquot; }*/ /*************** * * * z=w EQUALITY * * * ***************/ /*template complex complex::operator=(complex w) { real=w.real; imag=w.imag; return *this; }*/ /*************** * INPUT/OUTPUT * ***************/ /*istream& operator>>(istream& s, complex& z) { s>>z.real>>z.imag; return s; } ostream& operator<<(ostream& s, complex z) { X imag2; if(z.imag>=0) { s< complex exp(complex z) { complex e; e.real=exp(z.real)*cos(z.imag); e.imag=exp(z.real)*sin(z.imag); return e; }*/ /************************* * TRIGONMETRIC FUNCTIONS * *************************/ /********* * * * sin(x) * * * *********/ /*template complex sin(complex z) { return ((exp(z*I)-exp((-1)*z*I))/(2*I)); }*/ /********* * * * cos(x) * * * *********/ /*template complex cos(complex z) { return ((exp(z*I)+exp((-1)*z*I))/2); }*/ /********* * * * tan(x) * * * *********/ /*template complex tan(complex z) { return sin(z)/cos(z); }*/ /********* * * * cot(x) * * * *********/ /*template complex cot(complex z) { return cos(z)/sin(z); }*/ /********* * * * sec(x) * * * *********/ /*template complex sec(complex z) { return 1/cos(z); }*/ /********* * * * csc(x) * * * *********/ /*template complex csc(complex z) { return 1/sin(z); }*/ /********** * * * asin(x) * * * **********/ /*template complex asin(complex z) { complex t; return (-1)*I*log(I*z+pow(1-z*z,.5)); }*/ /********** * * * acos(x) * * * **********/ /*template complex acos(complex z) { return (-1)*I*log(z+I*pow(1-z*z,.5)); }*/ /********** * * * atan(x) * * * **********/ /*template complex atan(complex z) { return I/2*log((I+z)/(I-z)); }*/ /************************************ * HYPERBOLIC TRIGONMETRIC FUNCTIONS * ************************************/ /********** * * * sinh(x) * * * **********/ /*template complex sinh(complex z) { return ((exp(z)-exp((-1)*z))/2); }*/ /********** * * * cosh(x) * * * **********/ /*template complex cosh(complex z) { return ((exp(z)+exp((-1)*z))/2); }*/ /********** * * * tanh(x) * * * **********/ /*template complex tanh(complex z) { return sinh(z)/cosh(z); }*/ /********** * * * coth(x) * * * **********/ /*template complex coth(complex z) { return cosh(z)/sinh(z); }*/ /********** * * * sech(x) * * * **********/ /*template complex sech(complex z) { return 1/cosh(z); }*/ /********** * * * csch(x) * * * **********/ /*template complex csch(complex z) { return 1/sinh(z); }*/ /********** * * * asinh(x) * * * **********/ /*template complex asinh(complex z) { return log(z+pow(z*z+1,.5)); }*/ /********** * * * acosh(x) * * * **********/ /*template complex acosh(complex z) { return log(z+pow(z*z-1,.5)); }*/ /********** * * * atanh(x) * * * **********/ /*template complex atanh(complex z) { return .5*log((1+z)/(1-z)); }*/ /*********************** * * * LOGARITHMIC FUNCTION * * * ***********************/ /*template complex log(complex z) { X m,a; complex l; m=z.mod(); a=z.arg(); l.real=log(m); l.imag=a; return l; }*/ /*********** * * * EXPONENT * * * ***********/ /*template complex pow(complex z, complex w) { return exp(w*log(z)); } complex pow(complex z, X x) { return exp(x*log(z)); } complex pow(X x, complex w) { return exp(w*log(x)); }*/