Complex
Works with complex numbers where each component is of some specified type
Key Facts
Gyroscopic Couple: The rate of change of angular momentum () = (In the limit).- = Moment of Inertia.
- = Angular velocity
- = Angular velocity of precession.
Blaise Pascal (1623-1662) was a French mathematician, physicist, inventor, writer and Catholic philosopher.
Leonhard Euler (1707-1783) was a pioneering Swiss mathematician and physicist.
Definition
The complex template class is defined in the standard header <complex>, and in the nonstandard backward-compatibility header <complex.h>.namespace std { template <class T> class complex; }The template parameter
T
is used as the scalar type of both the real and the imaginary parts of the complex number.Description
The template classstd::complex
operates on complex numbers.
A complex number is a number which can be put in the form a + bi
, where a
and b
are real numbers and i
is called the imaginary unit, where Complex Numbers Operations
Create, Copy, and Assign OperationsOperation | Effect |
---|---|
complex c | Creates a complex number with 0 as the real part and 0 as the imaginary part |
complex c(1.1) | Creates a complex number with 1.1 as the real part and 0 as the imaginary part |
complex c(1.1,2.2) | Creates a complex number with 1.1 as the real part and 1.2 as the imaginary part |
complex c1(c2) | Creates c1 as a copy of c2 |
polar (2. 2) | Creates a temporary complex number from polar coordinates (2.2 as magnitude rho and 0 as phase angle theta) |
polar (2. 2, 0.77) | Creates a temporary complex number from polar coordinates (2.2 as magnitude rho and 0.77 as phase angle theta) |
conj (c) | Creates a temporary complex number that is the conjugated complex number of c |
c1 = c2 | Assigns the values of c2 to c1 |
c1 += c2 | Adds the value of c2 to c1 |
c1 -= c2 | Subtracts the value of c2 from c1 |
c1 *= c2 | Multiplies the value of c2 by c1 |
c1 /= c2 | Divides the value of c2 into c1 |
Operation | Effect |
---|---|
c.real() | Returns the value of the real part (member function) |
real(c) | Returns the value of the real part (global function) |
c.imag() | Returns the value of the imaginary part (member function) |
imag(c) | Returns the value of the imaginary part (global function) |
abs(c) | Returns the absolute value of c |
norm(c) | Returns the squared absolute value of c(c.real()^2 + c.imag()^2) |
arg(c) | Returns the angle of the polar representation of c |
Operation | Effect |
---|---|
c1 == c2 | Returns if c1 is equal to c2 |
c1 != c2 | Returns if c1 differs from c2 |
Operation | Effect |
---|---|
c1 + c2 | Returns the sum of c1 and c2 |
c1 - c2 | Returns the difference between c1 and c2 |
c1 * c2 | Returns the product of c1 and c2 |
c1 / c2 | Returns the quotient of c1 and c2 |
-c | Returns the negated value of c |
+ c | Returns c |
c1 += c2 | Same with c1 = c1 + c2 |
c1 -= c2 | Same with c1 = c1 - c2 |
c1 *= c2 | Same with c1 = c1 * c2 |
c1 /= c2 | Same with c1 = c1 / c2 |
Operation | Effect |
---|---|
strm << c | Writes the complex number c to the ostream strm |
strm >> c | Reads the complex number c from the istream strm |
Operation | Effect |
---|---|
pow(c1, c2) | Complex power c1^c2 |
exp(c) | Base e exponential of c (e^c) |
sqrt(c) | Square root of c |
log(c) | Complex natural logarithm of c with base e (ln c ) |
log10(c) | Complex common logarithm of c with base 10 (lg c ) |
sin(c) | Sine of c |
cos(c) | Cosine of c |
tan(c) | Tangent of c |
sinh(c) | Hyperbolic sine of c |
cosh(c) | Hyperbolic cosine of c |
tanh(c) | Hyperbolic tangent of c |
References:
- Nicolai M. Josuttis: "The C++ Standard Library"
Example:
Example - Complex numbers
Problem
The following program performs some common operations on complex numbers.
Workings
#include <iostream> #include <complex> using namespace std; int main() { /*complex number with real and imaginary parts *-real part: 4.0 *-imaginary part: 3.0 */ complex<double> c1(4.0,3.0); /*create complex number from polar coordinates *-magnitude:5.0 *-phase angle:0.75 */ complex<float> c2(polar(5.0,0.75)); // print complex numbers with real and imaginary parts cout << "c1: " << c1 << endl; cout << "c2: " << c2 << endl; //print complex numbers as polar coordinates cout << "c1: magnitude: " << abs (c1) << " (squared magnitude: " << norm(c1) << ") " << " phase angle: " << arg(c1) << endl; cout << "c2: magnitude: " << abs(c2) << " (squared magnitude: " << norm (c2) << ") " << " phase angle: " << arg(c2) << endl; //print complex conjugates cout << "c1 conjugated: " << conj(c1) << endl; cout << "c2 conjugated: " << conj(c2) << endl; //print result of a computation cout << "4.4 + c1 * 1.8: " << 4.4 + c1 * 1.8 << endl; /*print sum of c1 and c2: *-note: different types */ cout << "c1 + c2: " << c1 + complex<double>(c2.real(),c2.imag()) << endl; // add square root of c1 to c1 and print the result cout << "c1 += sqrt(c1): " << (c1 += sqrt(c1)) << endl; return 0; }
Solution
Output:
c1: (4,3)
c2: (3.65844,3.40819)
c1: magnitude: 5 (squared magnitude: 25) phase angle: 0.643501
c2: magnitude: 5 (squared magnitude: 25) phase angle: 0.75
c1 conjugated: (4,-3)
c2 conjugated: (3.65844,-3.40819)
4.4 + c1 * 1.8: (11.6,5.4)
c1 + c2: (7.65844,6.40819)
c1 += sqrt(c1): (6.12132,3.70711)
c2: (3.65844,3.40819)
c1: magnitude: 5 (squared magnitude: 25) phase angle: 0.643501
c2: magnitude: 5 (squared magnitude: 25) phase angle: 0.75
c1 conjugated: (4,-3)
c2 conjugated: (3.65844,-3.40819)
4.4 + c1 * 1.8: (11.6,5.4)
c1 + c2: (7.65844,6.40819)
c1 += sqrt(c1): (6.12132,3.70711)
References
- Nicolai M. Josuttis: "The C++ Standard Library"