FreeFem 3.5.x
Public Member Functions | Protected Attributes | Friends | List of all members
fem::Complex Class Reference

Public Member Functions

 Complex (float r, float i=0.F)
 
float & real ()
 
float real () const
 
float & imag ()
 
float imag () const
 
Complex conjug ()
 
Complexoperator= (const Complex &a)
 
Complexoperator*= (const Complex &a)
 
Complexoperator/= (const Complex &a)
 
Complexoperator+= (const Complex &a)
 
Complexoperator-= (const Complex &a)
 
Complexoperator*= (const float a)
 
Complexoperator/= (const float a)
 
Complexoperator+= (const float a)
 
Complexoperator-= (const float a)
 
Complexoperator- ()
 
float modul2 () const
 
float arg () const
 

Protected Attributes

float re
 
float im
 

Friends

Complex operator* (const Complex a, const Complex b)
 
Complex operator* (const Complex a, const float b)
 
Complex operator* (const float b, const Complex a)
 
Complex operator/ (const Complex a, const float b)
 
Complex operator/ (const float b, const Complex a)
 
Complex operator/ (const Complex a, const Complex b)
 
Complex operator+ (const Complex a, const Complex b)
 
Complex operator+ (const Complex a, const float b)
 
Complex operator+ (const float b, const Complex a)
 
Complex operator- (const Complex a, const Complex b)
 
Complex operator- (const Complex a, const float b)
 
Complex operator- (const float b, const Complex a)
 
float norm2 (const Complex &a)
 
float realpart (const Complex &a)
 
float imagpart (const Complex &a)
 
std::ostream & operator<< (std::ostream &os, const Complex &a)
 
std::istream & operator>> (std::istream &os, Complex &a)
 
Complex id (const Complex &x)
 
Complex pow (const Complex &, const float &)
 
float cos (const Complex &)
 
float sin (const Complex &)
 

Constructor & Destructor Documentation

◆ Complex() [1/2]

fem::Complex::Complex ( )
inline
92{ re = 0.F; im =0.F; } // default constructor

◆ Complex() [2/2]

fem::Complex::Complex ( float  r,
float  i = 0.F 
)
inline
93{re =r; im =i;} // copy constructor

Member Function Documentation

◆ arg()

float fem::Complex::arg ( ) const
inline
148 {
149 if (modul2() > 1e-8)
150 if (im > 0)
151 return acos(re/sqrt(modul2()));
152 else
153 return 8*atan(1.) - acos(re/sqrt(modul2()));
154 else
155 return 0.;
156
157 }

◆ conjug()

Complex fem::Complex::conjug ( )
inline
100{return Complex(re,-im);}

◆ imag() [1/2]

float & fem::Complex::imag ( )
inline
97{ return im;};

◆ imag() [2/2]

float fem::Complex::imag ( ) const
inline
98{ return im;}

◆ modul2()

float fem::Complex::modul2 ( ) const
inline
116{return ssqr(re)+ssqr(im);}

◆ operator*=() [1/2]

Complex & fem::Complex::operator*= ( const Complex a)
inline
104{ re =a.re*re - a.im*im;im= a.re*im + a.im*re; return *this; }

◆ operator*=() [2/2]

Complex & fem::Complex::operator*= ( const float  a)
inline
111{ re *= a;im *= a; return *this; }

◆ operator+=() [1/2]

Complex & fem::Complex::operator+= ( const Complex a)
inline
109{ re +=a.re; im += a.im; return *this; }

◆ operator+=() [2/2]

Complex & fem::Complex::operator+= ( const float  a)
inline
113{ re +=a; return *this; }

◆ operator-()

Complex & fem::Complex::operator- ( )
inline
115{ re =-re; im =-im; return *this; }

◆ operator-=() [1/2]

Complex & fem::Complex::operator-= ( const Complex a)
inline
110{ re -=a.re; im -= a.im; return *this; }

◆ operator-=() [2/2]

Complex & fem::Complex::operator-= ( const float  a)
inline
114{ re -=a; return *this; }

◆ operator/=() [1/2]

Complex & fem::Complex::operator/= ( const Complex a)
inline
105 {
106 float xl=ssqr(a.re) + ssqr(a.im); re =(a.re*re+a.im*im)/xl; im =(a.re*im-a.im*re)/xl;
107 return *this;
108 }

◆ operator/=() [2/2]

Complex & fem::Complex::operator/= ( const float  a)
inline
112{ re /= a;im /= a; return *this; }

◆ operator=()

Complex & fem::Complex::operator= ( const Complex a)
inline
102{ re =a.re; im = a.im; return *this; }

◆ real() [1/2]

float & fem::Complex::real ( )
inline
95{ return re;};

◆ real() [2/2]

float fem::Complex::real ( ) const
inline
96{ return re;}

Friends And Related Symbol Documentation

◆ cos

float cos ( const Complex c)
friend
166 {
167 return std::cos(c.real())*std::cosh(c.imag()) + std::sin(c.real())*std::sinh(c.imag());\
168 }

◆ id

Complex id ( const Complex x)
friend
100{
101 Complex c (0.F);
102 if ((x.im != 0.F)||(x.re != 0.F))
103 c.re = 1.F;
104 return c;
105}

◆ imagpart

float imagpart ( const Complex a)
friend
136{ return a.im; }

◆ norm2

float norm2 ( const Complex a)
friend
134{ return a.modul2(); }

◆ operator* [1/3]

Complex operator* ( const Complex  a,
const Complex  b 
)
friend
119{return Complex(a.re*b.re - a.im*b.im, a.re*b.im + a.im*b.re);}

◆ operator* [2/3]

Complex operator* ( const Complex  a,
const float  b 
)
friend
120{ return Complex(a.re*b, a.im*b); }

◆ operator* [3/3]

Complex operator* ( const float  b,
const Complex  a 
)
friend
121{ return Complex(a.re*b, a.im*b); }

◆ operator+ [1/3]

Complex operator+ ( const Complex  a,
const Complex  b 
)
friend
128{return Complex(a.re+b.re, a.im+b.im);}

◆ operator+ [2/3]

Complex operator+ ( const Complex  a,
const float  b 
)
friend
129{ return Complex(a.re+b, a.im); }

◆ operator+ [3/3]

Complex operator+ ( const float  b,
const Complex  a 
)
friend
130{ return Complex(a.re+b, a.im); }

◆ operator- [1/3]

Complex operator- ( const Complex  a,
const Complex  b 
)
friend
131{return Complex(a.re-b.re, a.im-b.im);}

◆ operator- [2/3]

Complex operator- ( const Complex  a,
const float  b 
)
friend
132{ return Complex(a.re-b, a.im); }

◆ operator- [3/3]

Complex operator- ( const float  b,
const Complex  a 
)
friend
133{ return Complex(b-a.re, -a.im); }

◆ operator/ [1/3]

Complex operator/ ( const Complex  a,
const Complex  b 
)
friend
124 {
125 Complex c; float xl=ssqr(b.re) + ssqr(b.im); c.re =(a.re*b.re+a.im*b.im)/xl; c.im =(b.re*a.im-b.im*a.re)/xl;
126 return c;
127 }

◆ operator/ [2/3]

Complex operator/ ( const Complex  a,
const float  b 
)
friend
122{ return Complex(a.re/b, a.im/b); }

◆ operator/ [3/3]

Complex operator/ ( const float  b,
const Complex  a 
)
friend
123{ return Complex(b,0.F)/a; }

◆ operator<<

std::ostream & operator<< ( std::ostream &  os,
const Complex a 
)
friend
74{
75 os << a.re << " " << a.im << " ";
76 return os;
77}

◆ operator>>

std::istream & operator>> ( std::istream &  os,
Complex a 
)
friend
79{
80 os >> a.re >> a.im;
81 return os;
82}

◆ pow

Complex pow ( const Complex c,
const float &  f 
)
friend
160 {
161 Complex z(std::cos(f*c.arg()), std::sin(f*c.arg()));
162 return std::pow(std::sqrt(c.modul2()),f)*z;
163 }

◆ realpart

float realpart ( const Complex a)
friend
135{ return a.re; }

◆ sin

float sin ( const Complex c)
friend
171 {
172 return std::sin(c.real())*std::cosh(c.imag()) - std::cos(c.real())*std::sinh(c.imag());
173 }

The documentation for this class was generated from the following file:

This is the FreeFEM reference manual
Provided by The KFEM project